1 line
8.8 KiB
JSON
1 line
8.8 KiB
JSON
{"body": "[Claude #55] Stage 3 code-edit \u2014 IMP-04b u22 TrackB VP contract-first F30 industry_current_status_three_col (continue_same from Codex #54)\n\nExecuting unit: u22\n\n\u25a0 unit_executed\n- u22 (industry_current_status_three_col TrackB VP catalog entry \u2014 F30 / 1171281211 table-3col 3 \uc0b0\uc5c5 (\uc81c\uc870\uc5c5/\uac74\ucd95/\ud1a0\ubaa9) \u00d7 N \uad00\uc810 \ud589 \ub2e4\uba74 \ube44\uad50; 11th of 12 TrackB contract-first units per Stage 2 plan)\n\n\u25a0 files_changed\n- templates/phase_z2/catalog/frame_contracts.yaml (+65 lines incl. 2 leading blank lines + 1 trailing newline; single contract block appended at EOF after `policy_achievement_five_goals:` (u21 anchor at line 1610); CAT-only per Stage 2 plan; 1 commit = 1 unit boundary preserved)\n\n\u25a0 diff_summary\n- New top-level contract key `industry_current_status_three_col:` appended after `policy_achievement_five_goals:` (u21 anchor at line 1610) starting at line 1679. CAT-only \u2014 no WIP/test/builder/mapper edits. Single-file diff confined to `templates/phase_z2/catalog/frame_contracts.yaml`. Catalog top-level keys: 30 \u2192 31 (1 TrackB VP unit remains to reach 32/32 + WIP==0 at u24 gate).\n- Contract surface (axis-by-axis, all four Stage-1 pre-flight axes honored):\n - axis 1 (`src/phase_z2_mapper.py:97-104` split_source enum) \u2192 `source_shape: top_bullets` (allow-list member)\n - axis 2 (`figma_to_html_agent/blocks/1171281211/{analysis.md, texts.md}`) \u2192 analysis.md + texts.md present, `index.html` absent \u2192 TrackB confirmed (`Test-Path` INDEX_ABSENT). analysis.md.pre_milestone2.bak present as ontology-sync backup (not a runtime artifact, ignored).\n - axis 3 (`src/phase_z2_mapper.py:262-265` ITEM_PARSERS) \u2192 `compare_row_3col_item` placeholder (new mapper wire = separate IMP, NOT in u22 scope per Stage 1 guardrail \"no calculate_fit migration / no AI per-frame call / no production refactor for tests\"). Peer parity with `compare_row_2col_item` precedent in bim_dx_comparison_table.\n - axis 4 (`scripts/smoke_frame_render.py:499-543` argparse) \u2192 no smoke render in checklist-shortened review (peer parity with u9..u21; visual_pending = render harness target absent \u2014 family partial \ubbf8\uc791\uc131)\n- Contract fields (all values traced to analysis.md / texts.md / V4 evidence; no hand-authored values):\n - `template_id: industry_current_status_three_col` / `frame_id: 1171281211` / `family: table` (analysis.md L25 `**family**: table`) / `visual_pending: true`\n - `cardinality.strict: 3` + `overflow_policy: abort_or_review` \u2014 analysis.md L29 `cardinality: ideal 3 / min 3 / max 3` \u2192 strict 3 = 3 column data axis (\uc81c\uc870\uc5c5/\uac74\ucd95/\ud1a0\ubaa9, \uac00\ubcc0 \ud56d\ubaa9 \uc5c6\uc74c). Peer parity with `bim_dx_comparison_table` strict:2 = 2 column convention \u2014 strict = column count NOT row count (\ud655\uc7a5 2-col \u2192 3-col). data row count \ub294 `sub_zones.rows.cardinality` {min:1, max:12} \ubcc4 axis.\n - `role_order: [col_a, col_b, col_c]` \u2014 3 \uc0b0\uc5c5 column axis per analysis.md slots (excludes title header + rows[] data axis per peer convention bim_dx_comparison_table: header / data \ubd84\ub9ac, role_order = column axis only).\n - `visual_hints.min_height_px: 350` \u2014 peer parity with bim_dx_comparison_table (350 = N rows \u00d7 ~40 + header/title/padding/buffer). Phase Z compact (title 30 + header 30 + 5 data rows \u00d7 50 + padding 30 + buffer 10) = 350 baseline; visual-pending \ubbf8\ub80c\ub354 estimate (smoke \uac80\uc99d \ubcc4 IMP).\n - `accepted_content_types: [text_block]` \u2014 peer parity with all table/cards/composite contracts u9..u21.\n - `sub_zones` (5 entries: title + col_a/col_b/col_c_header + rows[]):\n - `title` (header strict 1) \u2014 analysis.md `slots (5\uac1c, required 5\uac1c): title, col_a_label, col_b_label, col_c_label, rows` \uccab slot\n - `col_a_header` / `col_b_header` / `col_c_header` (header strict 1 each) \u2014 analysis.md `col_a_label / col_b_label / col_c_label` 3 column singleton header (\uc81c\uc870\uc5c5 / \uac74\ucd95 / \ud1a0\ubaa9)\n - `rows` (data, min 1 max 12) \u2014 analysis.md `rows` slot, variable N category rows axis (source 5 rows = \uac1c\uc694 / \ud575\uc2ec Keyword / S/W \uc0ac\uc6a9 / \ubc1c\uc804\ubc29\ud5a5 / S/W\ubcc4 \uc2dc\uc7a5\uaddc\ubaa8; max 12 peer parity with bim_dx_comparison_table)\n - `partial_target_path` = `.f30b__title` / `.f30b__header > .f30b__header-cell:nth-child(2..4)` / `.f30b__rows` \u2014 peer parity naming with bim_dx_comparison_table `.f18b__*` convention (visual-pending family partial \ubbf8\uc791\uc131; CSS class is contract-first declaration, not authored CSS).\n - `payload`:\n - `title: { source: section.title }` \u2014 peer parity with all contracts u9..u21 (MDX section.title source)\n - `builder: compare_table_3col` \u2014 NEW builder placeholder, visual-pending; new mapper wire \ubcc4 IMP. Peer parity with bim_dx_comparison_table `compare_table_2col`.\n - `builder_options.item_parser: compare_row_3col_item` \u2014 NEW parser placeholder, top_bullet \u2192 {label, col_a, col_b, col_c}. Peer parity with `compare_row_2col_item`.\n - `builder_options.col_a_label_default: \"\uc81c\uc870\uc5c5\"` / `col_b_label_default: \"\uac74\ucd95\"` / `col_c_label_default: \"\ud1a0\ubaa9\"` \u2014 analysis.md `three_industries` anchor set (\uc81c\uc870\uc5c5, \uac74\ucd95, \ud1a0\ubaa9). Peer parity with bim_dx_comparison_table `col_a_label_default: \"BIM\"` / `col_b_label_default: \"DX\"` explicit default convention.\n - `builder_options.max_rows: 12` \u2014 typical 4-6, overflow \ubcf4\ud638. Peer parity with bim_dx_comparison_table `max_rows: 12`.\n- Reason trace (V4 evidence, all 10 sections scanned, all `label: reject`):\n - main `01-2 rank 7, 0.5763` (base 0.5763, penalty 0.0, cardinality 0.5)\n - main `02-2.2 rank 16, 0.3497` (base 0.5497, penalty 0.2, cardinality 1.0)\n - main `03-1 rank 6, 0.6048` (base 0.6048, penalty 0.0, cardinality 1.0) \u2014 best non-holdout by rank AND by confidence\n - main `03-2 rank 6, 0.5324` (base 0.5324, penalty 0.0, cardinality 0.5)\n - holdout `01-1 rank 13, 0.5407 reject` (cardinality 1.0) \u2014 best holdout by rank AND by confidence\n - holdout `02-1 rank 13, 0.5253 reject` (cardinality 1.0)\n - holdout `02-2.1 rank 27, 0.0211 reject`, `04-1 rank 31, 0.0 reject`, `04-2.1 rank 32, 0.0 reject`, `04-2.2 rank 32, 0.0 reject`\n - Main four cardinality axis: `0.5 / 1.0 / 1.0 / 0.5` \u2014 frame table-3col (3 column \uc81c\uc870\uc5c5/\uac74\ucd95/\ud1a0\ubaa9 \u00d7 N category row) mismatches MDX answer-section item counts (answer_map 01-2 \u2192 F18, 02-2.2 \u2192 F14, 03-1 \u2192 F13, 03-2 \u2192 F29; F30 not an answer-section target).\n- Visual-pending justification: `figma_to_html_agent/blocks/1171281211/index.html` absent (TrackB INDEX_ABSENT) + `templates/phase_z2/families/industry_current_status_three_col.html` absent (FAMILY ABSENT) \u2192 both source-side index.html AND runtime family partial \ubbf8\uc791\uc131 \u2192 `visual_pending: true` justified per Stage 2 TrackB contract-first convention.\n- Guardrail self-checks:\n - axis_1 split_source: `top_bullets` \u2208 allow-list (src/phase_z2_mapper.py:97-104) \u2713\n - axis_2 source artifacts: analysis.md + texts.md present, index.html absent (TrackB) \u2713\n - axis_3 item_parser: placeholder declared, not wired (separate IMP) \u2713\n - axis_4 smoke argparse: not invoked (visual-pending family partial \ubbf8\uc791\uc131) \u2713\n - No `calculate_fit` migration \u2713\n - No AI / Kei API call \u2713\n - No 1-2 sample hardcoding (peer parity with 30 existing entries) \u2713\n - No production refactor for tests \u2713\n - 1 commit = 1 unit boundary preserved (CAT-only single-file diff) \u2713\n- BT focused: `pytest -q tests/test_family_contract_baseline.py` \u2192 `3 passed in 0.39s` (no regression).\n- YAML lint: `python -c \"import yaml; d=yaml.safe_load(open('templates/phase_z2/catalog/frame_contracts.yaml',encoding='utf-8')); print('keys:', len(d))\"` \u2192 `keys: 31` (was 30 before u22, +1 confirmed).\n\n\u25a0 remaining_units\n- u23: industry_characteristics_three_col TrackB VP catalog entry \u2014 F31 / 1171281212 table-3col compressed view (12th and final TrackB contract-first unit, peer of u22 family/structure)\n- u24: 32/32 + WIP==0 gate \u2014 BT verify all 32 V4 template_ids present in CAT + `_WIP_FILES.md` WIP list empty (F23 / F9 already absorbed at u3 / u4)\n\n\u25a0 follow_up_issue_candidates\n- (none new) \u2014 Stage 1 out-of-scope axes (Track C architectural, V4 re-run, smoke argparse refactor, 1171281171 non-target dir, mdx_normalizer integration, calculate_fit migration, AI / Kei per-frame calls, VP family HTML authoring) remain deferred per Stage 1 scope_lock + Stage 2 plan. No new out-of-scope axis surfaced during u22 review.\n\nSTOP. DO NOT commit or push. Gitea comment IS the deliverable.\n"} |