# selftest_review.py — targeted negative tests (reviewer-requested gates)
{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {
    "bom_matches_model_1e-3": 1.0,
    "bom_matches_reference": 1.0,
    "flags_and_schedule_truthful": 1.0,
    "report_table_numeric_match": 1.0,
    "report_change_counts_structural": 1.0
  },
  "final": 1.0
}
1.0

[reference] score = 1.0 (expect 1.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": false,
    "step_arity_complete": false,
    "no_wallstandardcase": false,
    "walls_predefinedtype_solidwall": false,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": false,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": false,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": false,
    "report_format_declared": false
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[naive_output_a] score = 0.0 (expect 0.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": false,
    "header_declares_ifc4": false,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": false,
    "walls_predefinedtype_solidwall": false,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": false,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": false,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": false,
    "report_format_declared": false
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[naive_output_b] score = 0.0 (expect 0.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": false,
    "bom_levels_truthful": false,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N1 duplicated BOM rows] score = 0.0 (expect 0.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": false,
    "step_arity_complete": false,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": false,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N2 wall dropped] score = 0.0 (expect 0.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": false,
    "pset_reference_nonempty": false,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N3 empty Pset Reference] score = 0.0 (expect 0.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": false,
    "length_unit_explicit_metre": false,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N4 length unit MILLI, values unscaled] score = 0.0 (expect 0.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": false,
    "step_arity_complete": false,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": false,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N5 wall in shorter IFC2x3 attribute form] score = 0.0 (expect 0.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": false,
    "bom_rows_unique_expected": false,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N6 BOM header not byte-exact] score = 0.0 (expect 0.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": false,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": false,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N7 wall GlobalId replaced] score = 0.0 (expect 0.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": false,
    "pset_reference_nonempty": false,
    "pset_value_types_valid": false,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N8 pset split across two half-sets (union complete)] score = 0.0 (expect 0.0 — no individually complete set on that wall)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": false,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N9 explicit length unit removed] score = 0.0 (expect 0.0 — absence is not metres)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": false,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N10 storey renamed (count preserved, BOM updated to match)] score = 0.0 (expect 0.0 — storey GlobalId+Name set differs from source)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": false,
    "schema_ifc4": false,
    "header_declares_ifc4": false,
    "schema_validate_clean": false,
    "step_arity_complete": false,
    "no_wallstandardcase": false,
    "walls_predefinedtype_solidwall": false,
    "source_globalids_preserved": false,
    "spaces_unique_expected": false,
    "storeys_match_source": false,
    "space_geometry_preserved": false,
    "length_unit_explicit_metre": false,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": false,
    "wall_psets_complete": false,
    "pset_reference_nonempty": false,
    "pset_value_types_valid": false,
    "report_format_declared": true
  },
  "scores": {},
  "error": "IFC parse failed: Unable to parse IFC SPF header",
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N11 model replaced by plain text] score = 0.0 (expect 0.0 — ifc_parses)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": false,
    "header_declares_ifc4": false,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": false,
    "walls_predefinedtype_solidwall": false,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": false,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": false,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N12 byte-frozen IFC2X3 source delivered] score = 0.0 (expect 0.0 — schema/header are not IFC4)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": false,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N13 one IfcWall renamed IfcWallStandardCase] score = 0.0 (expect 0.0 — deprecated class reintroduced + arity)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": false,
    "storeys_match_source": true,
    "space_geometry_preserved": false,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": false,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N14 one IfcSpace renamed] score = 0.0 (expect 0.0 — spaces_unique_expected)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": false,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N15 BOM level flipped to another real storey] score = 0.0 (expect 0.0 — isolated bom_levels_truthful)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": false,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N16 IsExternal re-typed to label strings] score = 0.0 (expect 0.0 — pset_value_types_valid)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {
    "bom_matches_model_1e-3": 1.0,
    "bom_matches_reference": 1.0,
    "flags_and_schedule_truthful": 1.0,
    "report_table_numeric_match": 1.0,
    "report_change_counts_structural": 0.0
  },
  "final": 0.85
}
0.85

[N17 report change-count 57 -> 56] score = 0.85 (expect exactly 0.85 — only report_change_counts_structural lost)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {
    "bom_matches_model_1e-3": 1.0,
    "bom_matches_reference": 1.0,
    "flags_and_schedule_truthful": 0.9524,
    "report_table_numeric_match": 1.0,
    "report_change_counts_structural": 1.0
  },
  "final": 0.9952
}
0.9952

[N18 corrected flag flipped consistently] score = 0.9952 (expect exactly 0.9952 — only flags component loses 1/21)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": false
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N19 report emptied] score = 0.0 (expect 0.0 — the declared report format is gate-enforced)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": false,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N20 PredefinedType $ on every wall] score = 0.0 (expect 0.0 — walls_predefinedtype_solidwall)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": false,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N21 PredefinedType MOVABLE on every wall] score = 0.0 (expect 0.0 — schema-legal enum, wrong for solid walls)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": false,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N22 space body rescaled, BOM+report self-consistent] score = 0.0 (expect 0.0 — space_geometry_preserved catches what every number cross-check cannot)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": false
  },
  "scores": {},
  "final": 0.0,
  "reason": "hard gate failed"
}
0.0

[N23 report row with a fifth field] score = 0.0 (expect 0.0 — rows are exactly the four declared fields)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {
    "bom_matches_model_1e-3": 1.0,
    "bom_matches_reference": 1.0,
    "flags_and_schedule_truthful": 1.0,
    "report_table_numeric_match": 1.0,
    "report_change_counts_structural": 1.0
  },
  "final": 1.0
}
1.0

[T1 CRLF bom_corrected.csv] score = 1.0 (tolerated: 1.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {
    "bom_matches_model_1e-3": 1.0,
    "bom_matches_reference": 1.0,
    "flags_and_schedule_truthful": 1.0,
    "report_table_numeric_match": 1.0,
    "report_change_counts_structural": 1.0
  },
  "final": 1.0
}
1.0

[T2 report rows indented two spaces] score = 1.0 (tolerated: 1.0)

{
  "gates": {
    "ifc_exists": true,
    "bom_exists": true,
    "report_exists": true,
    "ifc_parses": true,
    "schema_ifc4": true,
    "header_declares_ifc4": true,
    "schema_validate_clean": true,
    "step_arity_complete": true,
    "no_wallstandardcase": true,
    "walls_predefinedtype_solidwall": true,
    "source_globalids_preserved": true,
    "spaces_unique_expected": true,
    "storeys_match_source": true,
    "space_geometry_preserved": true,
    "length_unit_explicit_metre": true,
    "bom_header_exact": true,
    "bom_rows_unique_expected": true,
    "bom_levels_truthful": true,
    "wall_psets_complete": true,
    "pset_reference_nonempty": true,
    "pset_value_types_valid": true,
    "report_format_declared": true
  },
  "scores": {
    "bom_matches_model_1e-3": 1.0,
    "bom_matches_reference": 1.0,
    "flags_and_schedule_truthful": 1.0,
    "report_table_numeric_match": 1.0,
    "report_change_counts_structural": 1.0
  },
  "final": 1.0
}
1.0

[T3 corrected flags YES uppercase] score = 1.0 (tolerated: 1.0)

ALL targeted negatives rejected at 0.0; partials: N17=0.85 (change-counts component only), N18=0.9952 (flags component only); tolerances T1-T3 stay at 1.0; every run rc=0
