{
  "shard_id": "FV-PROPFLOOR-SHARD-B17-1",
  "spec_anchor": "FV-PBT-FLOOR-BUILD-SPEC.md §2/§3/§4",
  "population_definition": "all kernels in shard FV-PROPFLOOR-SHARD-B17-1, enumerated below by kernel id and spec digest",
  "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 against the kernel's own existing golden fixtures before any property was trusted, and (2) run-proptests.mjs green (process exit 0, verified in the full 318/318-file tree run, no regression in prior shards). ULP-boundary forcing was mandatory and present for the 4 float-sensitive rows named explicitly in the WU (art-79, art-83, art-84, art-85). AUTHORING-TIME CORRECTIONS found by direct kernel-source inspection, per the WU's mandatory carry-forward instruction: (a) art-79-settlement-fail-predictor's WU-assigned float-sensitivity does not match a raw-float-division/tolerance-comparison pattern — its score is a sum of fixed decimal-literal weights (0.45, 0.65, 0.15, 0.30, 0.20, 0.50, -0.05) selected by categorical lookup and clamped/rounded; the mandatory ULP-forcing block was retargeted at IEEE-754 binary-summation drift of those literals near each probability-band threshold and a batch-rate division boundary, and this is documented in the file header. (b) art-85-pqc-timeline-fit-diagnostic's WU-assigned float-sensitivity does not hold at all on inspection — every dimension score and the total_score are small fixed INTEGER constants summed with no division and no user-supplied float anywhere in the score path; the mandatory ULP-forcing block was retargeted at the exact-integer grade-threshold boundaries (85/70/55/40) as the discrete analogue, plus defensive non-finite/unrecognized-enum cases, and this finding is documented in the file header and repeated here. (c) art-87-iso20022-pqc-readiness-checker (one of the 6 WU-assigned float:no kernels) does contain one genuine float division (bloat_factor = new_sig_bytes/current_sig_bytes, toFixed(1)) that never feeds a downstream branch decision (report-only ratio); the WU's explicit float:no/categorical assignment was still followed since the decision surface (readiness_score, size_breach, compliance flags) is fixed-integer/categorical, but the forced categorical-boundary array additionally exercises the division's own edge cases (signature-scheme fallback divisor, identical-scheme zero-delta boundary) so that surface is not left untested. (d) art-88-fido-pqc-conformance-checker's ctap_version comparison (ctap_version >= CTAP_23_REQUIRED) is a lexicographic STRING comparison, not a semver parse — a forced boundary case documents the resulting quirk (e.g. '2.10' and '10.0' compare as LESS than '2.3' despite being numerically greater) as an as-built kernel behavior, not a defect this floor changes. No row beyond the two mechanical checks above and the four documented corrections 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-79-settlement-fail-predictor",
      "class": "B",
      "float_sensitive": true,
      "ulp_forcing_present": true,
      "ulp_forcing_note": "WU-mandatory float:yes kernel. Authoring-time correction: the kernel performs no raw float division/multiplication feeding a tolerance comparison — score is a sum of fixed decimal-literal weights (0.45/0.65/0.15/0.30/0.20/0.50/-0.05) selected by categorical lookup, clamped to [0,1] and toFixed(3)'d. ULP forcing was retargeted at IEEE-754 binary-summation drift of those literals landing at/near each of the four band thresholds (0.70/0.50/0.30/0.10), the clamp boundary at exactly 1, and a single-trade batch-rate division. Documented in the file header.",
      "kernel_digest": "sha256:660bc62de036808e6dcb648dd7ef377f3d403d9f3b2771459507ff4c7702ea0c",
      "proptest_file_digest": "sha256:5c0248ac4225b7aa00046dbbbd10578ace9bd79cc72112ec363c144c67530fa4",
      "proptest_file": "chaingraph/kernels/__proptests__/art-79-settlement-fail-predictor.proptest.mjs",
      "properties_tested": ["P1_score_clamped_0_1_matches_reference_weighted_sum", "P2_band_bounded_and_matches_fixed_thresholds_on_raw_score", "P3_worsening_ssi_and_deadline_never_decreases_score", "ULP_boundary_forcing"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-80-ssi-conformance-checker",
      "class": "B",
      "float_sensitive": false,
      "ulp_forcing_present": false,
      "ulp_forcing_note": "stated float:no exception per the WU row — the only arithmetic is an integer-count percentage display value (clean/total*100).toFixed(1); all decision logic (staleness threshold, completeness, BIC format regex, golden-source string match) is categorical. Forced CATEGORICAL boundary cases used instead of ULP forcing (staleness age exactly at/one-past the threshold, BIC at the 8/11-char boundary, explicit bic_valid override, source case-sensitivity).",
      "kernel_digest": "sha256:659829e3ae373c2b2984bd7be749ccc18790106ac4bbfca7a0fc0884047ad958",
      "proptest_file_digest": "sha256:9f7a85ea2ce293901b98bdc397d4d2dfc935b2e43bcc8c7ab97386e9b8a06fca",
      "proptest_file": "chaingraph/kernels/__proptests__/art-80-ssi-conformance-checker.proptest.mjs",
      "properties_tested": ["P1_clean_plus_flagged_equals_total_records_exact", "P2_match_rate_bounded_0_100_and_exact_when_zero_flags", "P3_compliance_flags_exact_membership_from_counts"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-81-allocation-affirmation-conformance",
      "class": "B",
      "float_sensitive": false,
      "ulp_forcing_present": false,
      "ulp_forcing_note": "stated float:no exception per the WU row — arithmetic is integer minute-of-day parsing (toMinutes) plus an integer-count percentage display value; all decision logic (same-day check, cutoff comparison, format mandate) is categorical/string comparison. Forced CATEGORICAL boundary cases used instead of ULP forcing (event time exactly at the 23:00 cutoff vs one minute past, trade_date absent, non-T timestamp format, format-string case sensitivity).",
      "kernel_digest": "sha256:bfd9eea1801c12c0b1358e111e33f08fcc221f3e847edd481053c5e90f81cd12",
      "proptest_file_digest": "sha256:fcce6ee30c020b61bf03c3a92483e17af2f659102e2dda6a993c95cc33509115",
      "proptest_file": "chaingraph/kernels/__proptests__/art-81-allocation-affirmation-conformance.proptest.mjs",
      "properties_tested": ["P1_on_time_plus_late_flagged_equals_total_events", "P2_on_time_rate_bounded_0_100_and_exact_when_empty", "P3_late_rule_exactly_partitioned_by_event_type"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-82-securities-settlement-message-linter",
      "class": "B",
      "float_sensitive": false,
      "ulp_forcing_present": false,
      "ulp_forcing_note": "stated float:no exception per the WU row — the only arithmetic is an integer-count percentage display value (pass_count/total*100); all decision logic is regex/string field linting (ISIN ISO 6166, BIC ISO 9362, date-string comparison, out-of-scope message-type scope guard). Forced CATEGORICAL boundary cases used instead of ULP forcing (out-of-scope message type always REJECTED, SttlmDt exactly equal to TradDt boundary, ISIN check-digit boundary, Qty exactly zero not treated as missing).",
      "kernel_digest": "sha256:2ad79af4b3bfd8d91a04886d9edfee8f37018b827cc9fb189caa66583cfebcc3",
      "proptest_file_digest": "sha256:e6bd3b1f59b8e0fe974ed69f2108bdec7fe8f74a6a5949dd6d68145d6f3a4076",
      "proptest_file": "chaingraph/kernels/__proptests__/art-82-securities-settlement-message-linter.proptest.mjs",
      "properties_tested": ["P1_pass_fail_warn_rejected_partition_exactly_equals_total", "P2_out_of_scope_message_types_always_rejected", "P3_fail_status_exact_biconditional_with_error_severity_issue"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-83-buy-in-exposure-modeler",
      "class": "B",
      "float_sensitive": true,
      "ulp_forcing_present": true,
      "kernel_digest": "sha256:712b7d6c95243d64d2a14195636f2436a56610776c59001a266d2dcf1691ef04",
      "proptest_file_digest": "sha256:86b5d3e0530bcd49b5168b9a963dc2324ba53386445fb724a76d77de06a3fe20",
      "proptest_file": "chaingraph/kernels/__proptests__/art-83-buy-in-exposure-modeler.proptest.mjs",
      "properties_tested": ["P1_costs_exact_formula_and_null_when_ineligible", "P2_totals_nonneg_and_sum_of_eligible_fail_costs", "P3_eligibility_flips_exactly_at_extension_days_threshold", "ULP_boundary_forcing"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-84-settlement-efficiency-kpi",
      "class": "B",
      "float_sensitive": true,
      "ulp_forcing_present": true,
      "kernel_digest": "sha256:6689dbe2c2f23a87ca2ee46102cd5d983d628b2edebd17f51773a2749d6aa9e6",
      "proptest_file_digest": "sha256:5f6f318e83b21db93ef74b44b979c395eda0f8e04d2fa15762a6a6c0affe4e77",
      "proptest_file": "chaingraph/kernels/__proptests__/art-84-settlement-efficiency-kpi.proptest.mjs",
      "properties_tested": ["P1_settlement_rate_plus_fail_rate_exactly_100", "P2_all_pcts_bounded_and_grade_matches_fixed_thresholds", "P3_total_penalty_cost_exact_rounded_sum", "ULP_boundary_forcing"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-85-pqc-timeline-fit-diagnostic",
      "class": "B",
      "float_sensitive": true,
      "ulp_forcing_present": true,
      "ulp_forcing_note": "WU-mandatory float:yes kernel. Authoring-time correction: direct kernel-source inspection found NO float arithmetic at all — the four dimension scores and total_score are small fixed INTEGER constants (0/12/13/25 etc.) summed with no division and no user-supplied float input anywhere in the score path. Per the WU's explicit mandatory-4 assignment, the ULP-forcing block was retained but retargeted at the exact-integer grade-threshold boundaries (85/70/55/40, the discrete analogue of a ±1-ULP boundary) plus defensive unrecognized-enum/empty-input cases. Documented in the file header and repeated here.",
      "kernel_digest": "sha256:84c05753ffb3bd7d71bd9af2b7dece0ba0c23b3e3aae66ac296f39975d339f23",
      "proptest_file_digest": "sha256:040d2f61d98cefe6f2ca6b79528cbd20e5ac1644454a61dbfbcab8d111cf27e2",
      "proptest_file": "chaingraph/kernels/__proptests__/art-85-pqc-timeline-fit-diagnostic.proptest.mjs",
      "properties_tested": ["P1_total_score_exact_sum_of_dim_scores_matches_reference", "P2_total_score_bounded_grade_and_milestone_fit_match_fixed_thresholds", "P3_fully_improved_inputs_never_score_below_fully_worsened_inputs", "ULP_boundary_forcing (integer-threshold analogue)"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-86-tls-pki-migration-planner",
      "class": "B",
      "float_sensitive": false,
      "ulp_forcing_present": false,
      "ulp_forcing_note": "stated float:no exception per the WU row — effort_weeks and payload_impact_bytes are integer branch selections on fixed integer thresholds; the only fractional constant (2.1x overhead multiplier) appears solely in a note string, never computed on. Forced CATEGORICAL boundary cases used instead of ULP forcing (root_cas/intermediate_count/leaf_population exactly at each tier boundary, migration_strategy enum fallback, tls_versions legacy-string variants).",
      "kernel_digest": "sha256:e85d6bf7a77f232f5abd1634ba2c1b56fdf0bb46db01403dc6bf55e317bfe718",
      "proptest_file_digest": "sha256:0e2cf9922c8d96a4ebad55dd0a61eb5cbfa353128a5f1b02e88628d1e75876a0",
      "proptest_file": "chaingraph/kernels/__proptests__/art-86-tls-pki-migration-planner.proptest.mjs",
      "properties_tested": ["P1_estimated_total_weeks_exact_sum_of_phase_efforts", "P2_phase_effort_tiers_match_fixed_thresholds", "P3_payload_impact_bytes_exact_by_strategy_enum"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-87-iso20022-pqc-readiness-checker",
      "class": "B",
      "float_sensitive": false,
      "ulp_forcing_present": false,
      "ulp_forcing_note": "stated float:no exception per the WU row. Authoring-time note: this kernel DOES contain one genuine float division (bloat_factor = new_sig_bytes/current_sig_bytes, toFixed(1)) unlike the other float:no kernels in this shard, but it never feeds a downstream branch decision (report-only ratio) — the actual decision surface (readiness_score deductions, size_breach, compliance flags) is fixed-integer/categorical. The WU's explicit float:no assignment was followed; the forced categorical-boundary array additionally exercises the division's own edge cases (signature-scheme fallback divisor, identical-scheme zero-delta message-size boundary) so that surface is not left untested.",
      "kernel_digest": "sha256:6e468a348055e83bb98d072b1f2879af2e98a5d8fcca76f119320f136edc0955",
      "proptest_file_digest": "sha256:97bb7b8cec190e07becbbe22d7fe813adbca799ce654cb0b43b40a7183df02f5",
      "proptest_file": "chaingraph/kernels/__proptests__/art-87-iso20022-pqc-readiness-checker.proptest.mjs",
      "properties_tested": ["P1_sig_bytes_exact_enum_lookup_with_fallback", "P2_readiness_score_bounded_and_matches_fixed_deduction_formula", "P3_size_breach_exact_comparison_and_matches_compliance_flag"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    },
    {
      "kernel_id": "art-88-fido-pqc-conformance-checker",
      "class": "B",
      "float_sensitive": false,
      "ulp_forcing_present": false,
      "ulp_forcing_note": "stated float:no exception per the WU row — every computation is integer COSE-algorithm-ID table lookup/membership testing, no float arithmetic anywhere. Forced CATEGORICAL boundary cases used instead of ULP forcing, including a documented quirk: ctap_version comparison (ctap_version >= CTAP_23_REQUIRED) is a lexicographic STRING comparison, not semver-parsed, so e.g. '2.10' and '10.0' compare as LESS than '2.3' despite being numerically greater — the floor asserts this as-built behavior, not a kernel defect.",
      "kernel_digest": "sha256:92b325e20fa5a4e60b6cc1b0080285af19bf639951c96ec6a0b76d69a57b823b",
      "proptest_file_digest": "sha256:e8f066ba02053d32b03b2d61cf4f876bfe6b9c11267180a4696feacc97b6f20f",
      "proptest_file": "chaingraph/kernels/__proptests__/art-88-fido-pqc-conformance-checker.proptest.mjs",
      "properties_tested": ["P1_conformant_exact_and_of_target_supported_and_ctap_ready", "P2_hybrid_status_exact_3way_partition", "P3_no_pqc_and_pre_ctap23_flags_exact_negation_of_condition"],
      "fixture_oracle_result": "PASS (1/1 vectors)",
      "run_proptests_result": "PASS"
    }
  ],
  "ulp_forcing_summary": "4 of 10 kernels required ULP-boundary forcing (art-79, art-83, art-84, art-85, exactly as named in the WU's mandatory-4 list) and carry it, checked in each item above. Two of those four (art-79, art-85) needed the forcing RETARGETED after authoring-time inspection found the WU's float-sensitivity label did not match the kernel's actual arithmetic (art-79: decimal-literal summation, not raw multiplication/division; art-85: pure integer arithmetic, no float surface at all) — both corrections are documented per-item above and in per_item_basis_of_review. The other 6 (art-80, art-81, art-82, art-86, art-87, art-88) are the WU's stated float:no exceptions and carry forced categorical boundary cases instead; one of those six (art-87) was found to contain a genuine but decision-irrelevant float division and its categorical array was extended to cover that division's edge cases too.",
  "run_proptests_aggregate": "10/10 shard files passed (node scripts/run-proptests.mjs — 318/318 across the full tree, no regression in prior shards)",
  "fv_floor_coverage": "all 10 shard kernels confirmed absent from check-fv-floor-coverage.mjs's unfloored list (grepped by exact art-id); coverage gate reports 288/582 live kernels floored, 294 unfloored, clean ratchet (≤ baseline)"
}
