Extends frame_contracts.yaml from 11 to 32 contracts to match V4 evidence (tests/matching/v4_full32_result.yaml unique template_ids), closing the IMP-04b gap surfaced in IMP-04 (#4) Track A milestone. Scope (Stage 2 24-unit plan): - u3/u4: WIP partial absorb — app_sw_package_vs_solution (F23), pre_construction_model_info_stacked (F9). Both promoted from _WIP_FILES.md to frame_contracts.yaml. WIP allowlist now empty. - u5~u11: Track A 7 frames (index.html present, contract missing). - u12~u23: Track B 12 frames (visual_pending: true; family partial authoring deferred — contract-first per Stage 2 plan). - u24: BT closure gate. Adds test_imp04b_closure_gate_v4_coverage_and_wip_empty (catalog ↔ V4 set-equal + WIP==0) and test_vp_exempt_keys_are_contracted_and_disk_absent (vp ∩ disk == ∅). Relaxes test_contracts_set_equals_disk_families_minus_wip to (disk - wip) ∪ vp. 32 derived from V4 evidence YAML (no hardcoding). Closure facts (locked): contracts = 32, v4_unique = 32, missing = [], extra = [], wip_count = 0, vp_count = 19, vp ∩ disk = []. Guardrails honored: - No calculate_fit migration. - No AI/Kei API call in per-frame work. - No 1-2 sample hardcoding (Codex #7 generalization guardrail). - No production refactor for tests (IMP-32 owns helper extract). - figma_to_html / V4 / Phase Z 3-layer separation preserved. - 1 commit = 1 IMP-04b decision unit (bundled u1~u24 per Stage 2 plan; CAT+WIP atomicity for u3/u4 preserved). Tests: tests/test_family_contract_baseline.py 4/4 PASS. Cross-ref: IMP-04 (#4), IMP-29 (#38), IMP-30 (#39), IMP-31 (#40), IMP-32 (#41), IMP-33 (#61), IMP-47A (#75). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.4 KiB
Phase Z Families — WIP Marker
Status: intentionally untracked, uncontracted, out-of-scope for runtime matcher.
Closes audit follow-up: INTEGRATION-AUDIT-01-REPORT.md §10.2 F-2 (option c).
Gate for promote/remove: Gitea issue #42 (IMP-04b Catalog extension to 32 frames).
Baseline lock (2026-05-19)
| Surface | Count | Notes |
|---|---|---|
git ls-files templates/phase_z2/families/*.html |
11 | tracked family templates |
templates/phase_z2/catalog/frame_contracts.yaml top-level keys |
11 | 1:1 with tracked basenames |
Get-ChildItem templates/phase_z2/families/*.html |
13 | tracked 11 + WIP 2 (below) |
Active contracted family count = 11. Tracked basenames ↔ frame_contracts.yaml top-level keys are set-equal. Drift between disk (13) and contracted (11) is fully explained by the 2 WIP files below.
WIP family templates (uncontracted)
| File | Figma frame | Status |
|---|
#42 IMP-04b u3 (2026-05-21) — frame 23 (
1171281203) partial absorbed →frame_contracts.yaml::app_sw_package_vs_solution. Counts in## Baseline lock (2026-05-19)are historical (post-u3: 11 tracked + 1 WIP / 12 contract). #42 IMP-04b u4 (2026-05-21) — frame 9 (1171281180) partial absorbed →frame_contracts.yaml::pre_construction_model_info_stacked. WIP family table now empty (post-u4: 13 tracked / 13 contract).
These files are partials authored during Phase Z-2 MVP-1.5b exploration. They are not part of the contracted Phase Z runtime catalog and must not be enumerated by frame selection, matcher, or any Stage 3 pipeline surface.
Rules
- Adding a file to
templates/phase_z2/families/*.htmlwithout a matchingframe_contracts.yamlentry is only permitted if it is named here as WIP. tests/test_family_contract_baseline.pyenforces this invariant: tracked families ↔frame_contracts.yamlkeys must be set-equal, modulo the WIP allowlist parsed from this file.- Promoting a WIP file (add
frame_contracts.yamlentry + register with matcher) or removing it must happen under issue #42 or a follow-up issue, not silently.
References
docs/architecture/INTEGRATION-AUDIT-01-REPORT.md§10.2 F-2 (audit finding closed by issue #52, option c)docs/architecture/IMP-18-SVG-GAP-REPORT.mdL28, L51 (count basis corrected to11 contracted + 2 WIP)- Gitea issue #52 (this reconciliation)
- Gitea issue #42 (pre-flight gate for promote/remove)