{
  "shard_id": "FV-PROPFLOOR-SHARD-B18-1",
  "spec_anchor": "FV-PBT-FLOOR-BUILD-SPEC.md §2/§3/§4",
  "population_definition": "all kernels in shard FV-PROPFLOOR-SHARD-B18-1, enumerated below by kernel id and spec digest",
  "scope_correction": "The WU row named 10 kernels (art-89, art-90, art-94, art-97, art-98, art-235, art-237, art-238, art-239, art-241). Direct inspection during authoring found that 5 of the 10 (art-235-test-hpml-escrow, art-237-validate-agent-audit-trail, art-238-classify-annex3-decisioning-obligations, art-239-test-bifsg-bias-thresholds, art-241-cbpr-structured-address-linter) were already floored by FV-PROPFLOOR-SHARD-B8-1 (commit ec54d31f, PR #1112) — the row's own cutplan source (research/FV-PHASE2-CUTPLAN-WAVE5-2026-08-10.md) double-counted them. This shard's proptest files for those 5 kernels were drafted, ran green against their own fixtures, then reverted (`git checkout HEAD --`) rather than overwriting the already-landed B8-1 files, per Standing Order #0 (no drift/deletion of existing work). This manifest and shard therefore floor only the 5 kernels genuinely new to this population: art-89, art-90, art-94, art-97, art-98. The ORCH should adjust the wave's remaining count / next cutplan batch to account for the 5-kernel overlap found here.",
  "human_sign_off": {
    "status": "PENDING",
    "name": null,
    "date": null
  },
  "independence_sentence": "Each item listed was reviewed and attested independently; the single signature is a mechanical convenience over the enumerated digests, not a bulk review.",
  "per_item_basis_of_review": "Every row ran the same two mechanical checks unconditionally: (1) the fixture-oracle gate — compute() output diffed via JSON.stringify against the kernel's own existing golden fixtures before any property was trusted, and (2) run-proptests.mjs green (process exit 0, confirmed as part of the full 313/313 suite run for this shard, which includes these 5 new files plus all pre-existing floor files unchanged). ULP-boundary forcing was mandatory and present for the 1 float-sensitive row named in the WU that is genuinely new to this population (art-90-sanctions-screening-fit-diagnostic). The other 4 rows are the row's stated float:no exceptions and instead carry forced CATEGORICAL boundary cases (ML-DSA short-circuit, keyword decision-tree matches, enum-boundary strings, empty/malformed-object inputs) in place of ULP forcing. art-90 needed a documented shape correction after direct measurement against the kernel: its arithmetic has zero continuous user-supplied numeric input (every score derives from categorical enum/array selections through fixed integer weights), so its ULP-forcing was applied as forced exact-integer grade-threshold cases (raw_total = 85/82) plus forced half-integer Math.round rounding cases (12.5->13, 18.75->19, 6.25->6) — the discrete-domain analogue of the spec's literal denormal/negative-zero cases, which do not apply to a kernel with no continuous float input; this is stated explicitly in that file's own header comment. No row beyond these mechanical checks received a separate in-depth human review in this pass — that is exactly the gap human_sign_off.status=PENDING names.",
  "items": [
    {
      "kernel_id": "art-89-blockchain-quantum-risk-classifier",
      "class": "B",
      "float_sensitive": false,
      "ulp_forcing_present": false,
      "ulp_forcing_note": "stated float:no exception per the WU row — exposed_pubkey_pct/address_reuse_pct are compared with plain >=/> against fixed integer thresholds, no arithmetic performed; forced CATEGORICAL boundary cases used instead (ML-DSA short-circuit, exact tier-threshold integers 25/24/10/9/30/31, empty policy_parameters)",
      "kernel_digest": "sha256:f075b3e27027e3b2ac21bd47aab935f60e01cef5e8892de2fcac74de6def21ea",
      "proptest_file_digest": "sha256:1895d5404d26d63da4e9d1c9c06b48aa2f4b4164f64e0cb72249564b2f594bd2",
      "proptest_file": "chaingraph/kernels/__proptests__/art-89-blockchain-quantum-risk-classifier.proptest.mjs",
      "properties_tested": ["mldsa_scheme_always_none_tier_complete_readiness", "quantum_risk_tier_matches_threshold_formula", "reuse_risk_matches_address_reuse_pct_thresholds"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-90-sanctions-screening-fit-diagnostic",
      "class": "B",
      "float_sensitive": true,
      "ulp_forcing_present": true,
      "ulp_forcing_note": "kernel has zero continuous float user input — every score derives from categorical/array selections through fixed integer weights. ULP-forcing applied as forced exact-integer grade-threshold cases (raw_total=85/82) and forced half-integer Math.round boundary cases (covered=1/2/3 => 6.25->6, 12.5->13, 18.75->19), the discrete-domain analogue of threshold-ULP/denormal forcing for a kernel with no continuous float surface. See file header for full rationale.",
      "kernel_digest": "sha256:38748fbbd98786a5c965a54c809622a7dd0d1f193507e321aa3ad9fa9f06c178",
      "proptest_file_digest": "sha256:2d7cf7b2bc4a5d5e2d84524ecfa72a3ec7fcbb5a5aab0cf27875b9d88b0709ac",
      "proptest_file": "chaingraph/kernels/__proptests__/art-90-sanctions-screening-fit-diagnostic.proptest.mjs",
      "properties_tested": ["raw_score_bounded_and_equals_dim_sum", "program_grade_monotonic_in_raw_score", "list_score_exact_rounding_formula", "ULP_boundary_forcing_discrete_analogue"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-94-eccn-dual-use-classifier",
      "class": "B",
      "float_sensitive": false,
      "ulp_forcing_present": false,
      "ulp_forcing_note": "stated float:no exception per the WU row — pure keyword-match decision tree, zero arithmetic; forced CATEGORICAL boundary cases used instead (nuclear/military/red-flag keyword matches, heightened-country substring match, empty product/policy_parameters, case-insensitivity)",
      "kernel_digest": "sha256:be06d9a1450ca87a837b96284af6b98dbae8ddc68d252ca54240734fc8e1d778",
      "proptest_file_digest": "sha256:6f7f11fc2b8b9d2411be13e15637c9c60244054592eeee8c936af66fa120eda3",
      "proptest_file": "chaingraph/kernels/__proptests__/art-94-eccn-dual-use-classifier.proptest.mjs",
      "properties_tested": ["no_keyword_match_defaults_to_ear99", "licence_required_true_when_any_red_flag_present", "classification_case_insensitive_to_attribute_casing"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-97-sanctions-screening-quality-scorer",
      "class": "B",
      "float_sensitive": false,
      "ulp_forcing_present": false,
      "ulp_forcing_note": "stated float:no exception per the WU row — GRADE_NUM/alert/escal/valid maps are all fixed multiples of 10, and the weighted composite (component*weight/100, weights sum to 100) is always an exact double for these discrete inputs; forced CATEGORICAL boundary cases used instead (all-best/all-worst inputs, lowercase and unrecognised grade letters, empty inputs)",
      "kernel_digest": "sha256:2e0ba6416081ea51d9652a6c147199662063a9ba489b68691dc07d76f0701983",
      "proptest_file_digest": "sha256:235035d7a485471fc26a301b204e0b2e78818e1ff56cab9565cf200e8856bc2a",
      "proptest_file": "chaingraph/kernels/__proptests__/art-97-sanctions-screening-quality-scorer.proptest.mjs",
      "properties_tested": ["composite_pct_bounded_and_grade_matches_thresholds", "grade_to_num_mapping_exact", "improvement_priorities_filter_below_75_exact"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-98-mica-casp-fit-diagnostic",
      "class": "B",
      "float_sensitive": false,
      "ulp_forcing_present": false,
      "ulp_forcing_note": "stated float:no exception per the WU row — every component score is a multiple of 10 from a fixed categorical map, so composite=sum/5 is always an exact multiple of 2 in double precision; forced CATEGORICAL boundary cases used instead (all-best/all-worst inputs, transitional-status gov-bonus clamp, empty inputs/pp fallback)",
      "kernel_digest": "sha256:f3a4a041f414fd77b5a45a8fa5814804ca22ab1df00e883c54a47a0d3d676035",
      "proptest_file_digest": "sha256:4ccdf64d539eca4f1bc21bc8087720c9d0b470344bf3ef091d6996c6e6214b51",
      "proptest_file": "chaingraph/kernels/__proptests__/art-98-mica-casp-fit-diagnostic.proptest.mjs",
      "properties_tested": ["readiness_grade_matches_composite_thresholds", "gaps_count_matches_dimensions_below_75", "whitepaper_score_exact_binary_map"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    }
  ]
}
