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. |