This commit is contained in:
@@ -0,0 +1 @@
|
||||
{"body": "[Claude #2] Stage 2: \uc2dc\ubbac \uae30\ubc18 \uacc4\ud68d \uc218\ub9bd Round #2 (\uc2e4\ud589-2)\n\nRewind fix: Round #1 violated strict-test rule (u1/u2 tests:[]). Round #2 pairs fixtures D\u2192u1, E\u2192u2, F\u2192u3 \u2014 every unit ships impl + acceptance test together.\n\n=== IMPLEMENTATION_UNITS ===\n- id: u1\n summary: pipeline JS layer + Fixture D. Add TABLE_SCROLL_TOL_PX near L134; build clippedWrapperMap Map<Element,int> in L2154\u2013L2183 clipped scan keyed by DOM node ref (NOT className); add table_events forEach on querySelectorAll('table') with closest()-ancestor walk \u2192 wrapper_clipped_index (Map.get \u2192 int|null); extend execute_script return. New test file w/ chromedriver guard mirroring image_check L37\u2013L92 + Fixture D = standalone <table> overflow (no clipped wrapper) \u2192 asserts wrapper_clipped_index=null AND fail emitted.\n files: [src/phase_z2_pipeline.py, tests/phase_z2/test_phase_z2_step14_table_check.py]\n tests: [tests/phase_z2/test_phase_z2_step14_table_check.py::test_fixture_d_standalone_table_overflow]\n estimate_lines: 50\n- id: u2\n summary: pipeline Py aggregation + Fixture E. Iterate result.get('table_events', []) and append fail_reason 'table_self_overflow' only when (excess_x>TOL OR excess_y>TOL) AND wrapper_clipped_index is None; mirrors image_events aggregation L2302\u2013L2319. Fixture E = <table> inside clipped wrapper \u2192 asserts dedup honored (wrapper_clipped_index set; no table_self_overflow fail; only wrapper's clipped_inner fail remains).\n files: [src/phase_z2_pipeline.py, tests/phase_z2/test_phase_z2_step14_table_check.py]\n tests: [tests/phase_z2/test_phase_z2_step14_table_check.py::test_fixture_e_table_in_clipped_wrapper_dedup]\n estimate_lines: 30\n- id: u3\n summary: Fixture F (F1 binding). Two wrappers W1/W2 share identical className; W1 has overflowing child (\u2192clipped_inner); W2 has only self-overflow <table>, W2 itself NOT clipped. Asserts W1 emits clipped_inner AND W2.table emits table_self_overflow independently \u2014 proves Map<Element,int> distinguishes despite identical className (class-string keying would resolve W2.table\u2192W1 and suppress).\n files: [tests/phase_z2/test_phase_z2_step14_table_check.py]\n tests: [tests/phase_z2/test_phase_z2_step14_table_check.py::test_fixture_f_two_same_class_wrappers_element_identity]\n estimate_lines: 25\n\n=== UNIT RATIONALE ===\n- u1: JS greenfield. Element-ref Map = F1 root fix. Fixture D = null-wrapper happy path.\n- u2: Decision layer on u1's shape. Fixture E validates wrapper-clipped path (L2295\u2013L2300) handles dedup without double-fail.\n- u3: F binding \u2014 class-string keying suppresses W2.table; element-identity does not.\n\n=== OUT-OF-SCOPE ===\nimage_events / clipped_inner (#45); classifier flip (\u2192\uc2e4\ud589-3); debug.json (\u2192\uc2e4\ud589-4); no MDX hardcoding. L2155 class selector retained for clipped_inner reporting; only dedup-side becomes element-identity.\n\n=== ROLLBACK ===\n`git revert <stage-3 sha>` restores L134/L2080\u2013L2323 + deletes new test. No coupling.\n\n=== EVIDENCE ===\n- Read src/phase_z2_pipeline.py L130\u2013L143, L2080\u2013L2323 (constants, Selenium, clipped scan, image_events, Py aggregation).\n- Read tests/phase_z2/test_phase_z2_step14_image_check.py L1\u2013L100 (chromedriver guard L37\u2013L92 mirror).\n- Codex grep (Round #1): table_events / clippedWrapperMap / TABLE_SCROLL_TOL_PX absent.\n- Round #1 Codex review (46_stage_simulation-plan_codex_r1.md L4, L42): rejected for tests:[] on u1/u2; Round #2 every unit has non-empty tests target.\n\nFINAL_CONSENSUS: YES\n"}
|
||||
Reference in New Issue
Block a user