hyf

Context-aware query service for Radroots
git clone https://radroots.dev/git/hyf.git
Log | Files | Refs | README | LICENSE

CATALOG.md (15167B)


      1 # Acceptance case catalog
      2 
      3 Status: every case is PLANNED. The package validates definitions only. Paths are relative to the archive root. Exact scenario data and assertions are in each listed JSON file.
      4 
      5 | Case | Boundary / operation | Required from | Purpose |
      6 |---|---|---|---|
      7 | DM001_exact_quantity | domain / `quantity.compare` | S019 | Exact equality must satisfy an otherwise supported quantity requirement. |
      8 | DM002_unknown_not_zero | domain / `field.decode` | S018 | Unknown is not a zero value. |
      9 | DM003_mass_conversion | domain / `quantity.normalize` | S020 | Use exact fixture conversion and declared decimal scale. |
     10 | DM004_approximation_retained | domain / `quantity.normalize` | S022 | Unit precision must not manufacture source certainty. |
     11 | DM005_missing_pack_weight | domain / `pack.normalize` | S021 | Twenty boxes has no invented mass. |
     12 | DM006_wrong_product_pack | domain / `pack.normalize` | S021 | A carrot pack rule does not normalize a tomato box. |
     13 | DM007_dimension_mismatch | domain / `quantity.normalize` | S020 | Mass and volume require justified conversion evidence. |
     14 | DM008_money_unknown | domain / `price.decode` | S023 | Unstated price is not free produce. |
     15 | DM009_currency_mismatch | domain / `price.compare` | S087 | No implied foreign-exchange conversion. |
     16 | DM010_relative_date_replay | domain / `date.resolve` | S025 | Replay uses source context rather than a new present date. |
     17 | DM011_missing_zone | domain / `date.resolve` | S025 | A local expression without a zone cannot become an unambiguous instant. |
     18 | DM012_ambiguous_local_time | domain / `date.resolve` | S026 | An ambiguous local time stays unresolved under the explicit test policy. |
     19 | DM013_record_not_harvest | domain / `freshness.project` | S027 | A recently edited record does not establish a recent harvest. |
     20 | DM014_unicode_evidence | domain / `evidence.validate` | S017 | Unicode offsets must select the intended original bytes/text. |
     21 | DM015_wrong_revision_evidence | domain / `evidence.validate` | S017 | Even identical text does not erase an evidence revision mismatch. |
     22 | DM016_numeric_overflow | domain / `quantity.decode` | S019 | Overflow fails explicitly instead of wrapping. |
     23 | FU001_multiple_crops | application / `farm_update.interpret` | S067 | Separate crop claims, not one global availability state. |
     24 | FU002_forecast | application / `farm_update.interpret` | S067 | Tentative future supply is not current stock. |
     25 | FU003_negation | application / `farm_update.interpret` | S067 | Negation reverses the apparent product mention. |
     26 | FU004_quantity_association | application / `farm_update.interpret` | S068 | Do not swap product-specific amounts. |
     27 | FU005_addition | application / `farm_update.interpret` | S069 | Another is an addition claim, not a new total. |
     28 | FU006_remaining | application / `farm_update.interpret` | S069 | Left is a remaining-balance report, not an increment. |
     29 | FU007_total | application / `farm_update.interpret` | S069 | Total is a replacement/balance assertion under reviewed operation binding. |
     30 | FU008_unknown_product | application / `farm_update.interpret` | S067 | Unsupported synthetic crop is not forced into tomatoes. |
     31 | FU009_optional_price | application / `farm_update.interpret` | S072 | No price does not block a draft or permit publication. |
     32 | FU010_unreserved_unknown | application / `farm_update.interpret` | S068 | Harvested total does not prove available stock. |
     33 | FU011_ambiguous_withdrawal | application / `farm_update.interpret` | S070 | Ambiguous withdrawal target does not remove every basil lot. |
     34 | FU012_linked_clarification | application / `farm_update.interpret` | S073 | Explicit follow-up refines a field without overwriting original source. |
     35 | FU013_stale_clarification | application / `farm_update.interpret` | S073 | Stale clarification needs reconciliation. |
     36 | FU014_provider_timeout | application / `farm_update.interpret` | S074 | Failed inference cannot silently confirm heuristic stock. |
     37 | FU015_invalid_answer | application / `farm_update.interpret` | S074 | Failed inference cannot silently confirm heuristic stock. |
     38 | BR001_multiple_lines | application / `buyer_request.interpret` | S075 | Preserve the stated buyer semantics and make unresolved information visible. |
     39 | BR002_fulfillment_negation | application / `buyer_request.interpret` | S076 | Preserve the stated buyer semantics and make unresolved information visible. |
     40 | BR003_delivery_preference | application / `buyer_request.interpret` | S076 | Preserve the stated buyer semantics and make unresolved information visible. |
     41 | BR004_seconds_permitted | application / `buyer_request.interpret` | S076 | Preserve the stated buyer semantics and make unresolved information visible. |
     42 | BR005_substitution_not_stated | application / `buyer_request.interpret` | S076 | Preserve the stated buyer semantics and make unresolved information visible. |
     43 | BR006_conflicting_conditions | application / `buyer_request.interpret` | S078 | Preserve the stated buyer semantics and make unresolved information visible. |
     44 | BR007_missing_quantity | application / `buyer_request.interpret` | S079 | Preserve the stated buyer semantics and make unresolved information visible. |
     45 | BR008_no_reparse | application / `buyer_request.match` | S081 | Matching must use typed intent rather than legacy rewritten text. |
     46 | BR009_provider_failure | application / `buyer_request.interpret` | S080 | Inference outage is not unavailable supply. |
     47 | MT001_shortage | application / `buyer_request.match` | S089 | 50 kg required versus 30 kg cannot become eligible through semantic scoring. |
     48 | MT002_unknown_quantity | application / `buyer_request.match` | S088 | Unknown unreserved quantity is conditional, not zero or sufficient. |
     49 | MT003_exact_available | application / `buyer_request.match` | S088 | Exact required available quantity passes on fully supplied test premises. |
     50 | MT004_wrong_product_high_score | domain / `eligibility.compose` | S083 | Wrong product cannot be rescued by maximum semantic preference. |
     51 | MT005_fail_dominates_unknown | domain / `eligibility.compose` | S035 | Any mandatory failure dominates unresolved checks. |
     52 | MT006_unknown_dominates_pass | domain / `eligibility.compose` | S035 | Unknown mandatory condition prevents eligible status. |
     53 | MT007_optional_missing | domain / `eligibility.compose` | S035 | Missing optional preference is not a mandatory blocker. |
     54 | MT008_delivery_mismatch | application / `buyer_request.match` | S085 | Delivery requirement cannot be a mere ranking penalty. |
     55 | MT009_unknown_area | application / `buyer_request.match` | S085 | Delivery mention alone does not verify service area. |
     56 | MT010_nonoverlap | application / `buyer_request.match` | S086 | Weekend similarity does not satisfy a specific Friday window. |
     57 | MT011_certification_unverified | application / `buyer_request.match` | S084 | Marketing text and high confidence cannot verify certification. |
     58 | MT012_two_compatible_lots | application / `buyer_request.match` | S091 | Compatible same-supplier lots jointly meet the need. |
     59 | MT013_duplicate_lot | application / `buyer_request.match` | S082 | Duplicated 30 kg records do not make 60 kg. |
     60 | MT014_conflicting_revisions | application / `buyer_request.match` | S082 | Two revisions are not two independent lots. |
     61 | MT015_shared_lot_two_lines | application / `buyer_request.match` | S092 | One 50 kg lot cannot satisfy two 30 kg lines. |
     62 | MT016_partial_allowed | application / `buyer_request.match` | S093 | Explicitly allowed partial outcome discloses the deficit. |
     63 | MT017_multi_supplier_unsupported | application / `buyer_request.match` | S094 | Unsupported coordination is not proof of absent produce. |
     64 | MT018_truncated_retrieval | application / `buyer_request.match` | S094 | No candidates in a truncated input is not global absence. |
     65 | MT019_alternative_plans | domain / `plan.project` | S094 | Reused stock across alternatives is not simultaneous allocation. |
     66 | MT020_unknown_not_midpoint | application / `buyer_request.match` | S095 | Missing evidence is not level one of a score. |
     67 | MT021_score_normalization | domain / `score.normalize` | S097 | Normalize a three-level maximum by two, not assume raw value already normalized. |
     68 | MT022_stable_ties | domain / `ranking.compose` | S098 | Stable test tie policy must not follow incidental input ordering. |
     69 | MT023_ranking_outage | application / `buyer_request.match` | S100 | Outage labels advisory degradation without rewriting feasibility. |
     70 | PV001_valid_all_types | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     71 | PV002_missing_answer | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     72 | PV003_extra_answer | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     73 | PV004_wrong_type | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     74 | PV005_unknown_choice | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     75 | PV006_bad_distribution_sum | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     76 | PV007_score_out_of_range | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     77 | PV008_wrong_legend | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     78 | PV009_model_mismatch | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     79 | PV010_noul_out_of_range | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     80 | PV011_missing_level | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     81 | PV012_confidence_out_of_range | provider / `provider.decode` | S047 | Validate the provider contract independently from model accuracy. |
     82 | PV013_auth_no_retry | transport / `provider.execute` | S062 | Retry only the declared transient category within the supplied test budget. |
     83 | PV014_validation_no_retry | transport / `provider.execute` | S062 | Retry only the declared transient category within the supplied test budget. |
     84 | PV015_capacity_retry | transport / `provider.execute` | S062 | Retry only the declared transient category within the supplied test budget. |
     85 | PV016_overload_retry | transport / `provider.execute` | S062 | Retry only the declared transient category within the supplied test budget. |
     86 | PV017_no_remaining_budget | transport / `provider.execute` | S062 | A nominal retryable status cannot create fresh time budget. |
     87 | PV018_unexpected_call | harness / `harness.script` | S058 | Wrong protocol never falls through to live inference. |
     88 | PV019_missing_call | harness / `harness.script` | S058 | Unconsumed expected calls fail the test. |
     89 | PV020_wrong_request_state | harness / `harness.script` | S058 | Returning a canned answer without validating outbound state is forbidden. |
     90 | PV021_invalid_json_bytes | provider / `provider.decode` | S047 | Invalid body reaches the actual provider decoder, not just fixture parsing. |
     91 | PV022_nan_bytes | provider / `provider.decode` | S047 | Non-JSON/nonfinite number is rejected at the real boundary. |
     92 | PR001_persistent | process / `stdio.session` | S102 | Persistent operation does not require one process per request. |
     93 | PR002_valid_invalid_valid | process / `stdio.session` | S103 | Recover when framing is still known. |
     94 | PR003_fragmented | process / `stdio.session` | S101 | Partial reads do not split semantic frames. |
     95 | PR004_coalesced | process / `stdio.session` | S101 | One read can contain multiple requests. |
     96 | PR005_escaped_newline | process / `stdio.session` | S101 | String content is not a framing delimiter. |
     97 | PR006_size_limit | process / `stdio.session` | S103 | Oversized input has bounded failure, not unbounded draining. |
     98 | PR007_partial_eof | process / `stdio.session` | S101 | Final EOF behavior is explicit, not a guessed payload assumption. |
     99 | PR008_stderr_separation | process / `stdio.session` | S102 | Diagnostics cannot corrupt RPC framing. |
    100 | PR009_shutdown_cleanup | process / `stdio.session` | S110 | Persistent lifecycle failures clean up owned resources. |
    101 | PR010_one_inflight | process / `stdio.session` | S102 | Single-inflight contract remains explicit. |
    102 | SC001_cross_tenant | security / `security.boundary` | S114 | Cross-tenant records are not authorized by their presence in input. |
    103 | SC002_consumer_not_auth | security / `security.boundary` | S114 | A descriptive consumer string is not authentication. |
    104 | SC003_instruction_in_source | security / `security.boundary` | S115 | Source instructions remain data. |
    105 | SC004_state_minimization | security / `security.boundary` | S050 | Only relevant authorized state is sent. |
    106 | SC005_secret_redaction | security / `security.boundary` | S116 | Failures do not disclose configuration secrets. |
    107 | SC006_external_plaintext | security / `security.boundary` | S061 | External plaintext must not be allowed by the loopback test exception. |
    108 | SC007_wrong_tls_host | security / `security.boundary` | S061 | Actual transport verifies hostnames. |
    109 | SC008_untrusted_tls_ca | security / `security.boundary` | S061 | Unknown issuer is not accepted. |
    110 | SC009_redirect_secret | security / `security.boundary` | S061 | Redirect policy cannot leak bearer credentials. |
    111 | SC010_request_endpoint_override | security / `security.boundary` | S054 | Untrusted input cannot choose infrastructure. |
    112 | SC011_offline_secret_env | security / `security.boundary` | S122 | Default tests isolate developer configuration. |
    113 | SC012_provider_disabled | security / `security.boundary` | S108 | Configured provider does not override assistance permission. |
    114 | JR001_farm_review_handoff | journey / `farm_update.interpret` | S111 | Complete farm journey keeps confirmation and mutation outside Hyf. |
    115 | JR002_buyer_match_revalidate | journey / `buyer_request.match` | S112 | Typed intent survives interpretation through an explicitly non-reserving match. |
    116 | JR003_duplicate_acceptance | journey / `authority.simulation` | S113 | Simulation defines duplicate handling; real-service evidence remains a separate gate. |
    117 | JR004_stale_acceptance | journey / `authority.simulation` | S113 | Expected-version write fails when authority state changed. |
    118 | JR005_stock_race | journey / `authority.simulation` | S113 | A match is not a lock on stock. |
    119 | RT001_shared_budget | application / `budget.execute` | S055 | Stages share the original budget; no stage gets a fresh deadline. |
    120 | RT002_circuit_liveness | application / `runtime.health` | S057 | Local liveness is not external readiness. |
    121 | RT003_resource_soak | process / `process.soak` | S125 | Resource checks are separate from live latency claims. |
    122 | RT004_no_cache_or_isolated_cache | security / `cache.policy` | S117 | No cache is valid; any actual cache must satisfy isolation. |