|
|
4da22adb43
|
feat(#90): IMP-56 u1-u19 catch-up before final close (post-u20 push fix)
Multi-MDX Regression (IMP-91) / multi-mdx-regression (push) Failing after 20s
u1: text_overrides axis in user_overrides_io
u2: structure_overrides axis in user_overrides_io
u3: vite allowlist for new endpoints
u4: text_override_resolver
u5: Step 12 text_overrides apply in phase_z2_pipeline
u6: structure_override_resolver
u7: text_path_stamper
u8: SlideCanvas text-edit capture
u9: SlideCanvas structure-edit overlay
u10: userOverridesApi service extension
u11: designAgent types extension
u12: slidePlanUtils restore
u13: user_overrides endpoint tests
u14: user_overrides restore tests
u15: pipeline fallback tests
u16: edit-mode state + gating tests
u17: slide_base print mode CSS
u18: /api/connect endpoint (vite)
u19: /api/export endpoint (vite)
Recovery scope: 29 files (12 modified + 17 new). u20 already pushed in
9439575; this commit lands u1-u19 that were authored but not committed
before #90 was externally closed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-26 06:12:13 +09:00 |
|
|
|
f3ef4d917c
|
feat(#64): IMP-35 details_popup_escalation u1~u10 + Stage 3 R7 anchor re-pin
Land the production + test surface for the Step 17 cascade POPUP terminal
(DETERMINISTIC -> POPUP -> AI_REPAIR -> USER_OVERRIDE) per Stage 2 plan R2.
u11 (baseline-red invariance gate) was already landed in 7c93031 ahead of
this commit; this commit completes u1~u10 plus the Stage 3 R7 follow-up
anchor re-pin for test_imp17_comment_anchor.py.
Implementation units (Stage 2 R2 contract):
u1 frame_reselect_insufficient failure_type + post-frame remeasure (q4)
- src/phase_z2_failure_router.py, src/phase_z2_pipeline.py
u2 NEXT_ACTION_BY_FAILURE row + impl_status flip
- src/phase_z2_failure_router.py
u3 Router details_popup_escalation MISSING->IMPLEMENTED + executor stub
- src/phase_z2_router.py
u4 step17.py AI split-decision contract (POPUP cascade_stage +
route_for_label + skip_reason); API gated
- src/phase_z2_ai_fallback/step17.py
u5 Step 17 POPUP gate executor; popup_escalation_plan + has_popup marker
- src/phase_z2_pipeline.py, src/phase_z2_ai_fallback/step17.py
u6 Composition popup binding -- yaml strategy -> zone payload
- src/phase_z2_composition.py
u7 Pipeline composer -> render_slide wiring
(popup_html / preview_text / has_popup)
- src/phase_z2_pipeline.py
u8 slide_base.html <details>/<summary> popup wrapper
- templates/phase_z2/slide_base.html
u9 display_strategies.yaml inline_preview + popup metadata
- templates/phase_z2/regions/display_strategies.yaml
u10 MDX preservation invariant: popup=full source / body=summary or subset
(asserted by tests/phase_z2/test_popup_mdx_preservation.py)
u11 (already in 7c93031) -- baseline-red invariance gate
Stage 3 R7 follow-up (anchor re-pin, test-only):
- tests/orchestrator_unit/test_imp17_comment_anchor.py
Pre-anchor additions in src/phase_z2_pipeline.py (u1 / u5 / u7) shifted
the restructure/reject route-hint comments 578/579 -> 586/587. Re-pinned
the two guard tests (and docstring re-pin lineage 564 -> 570 -> 578 ->
586). Production code untouched.
Verification (Stage 4 R1):
pytest -q tests/orchestrator_unit/test_imp17_comment_anchor.py
-> 2 passed / 0.02s
pytest -q <10 IMP-35 unit files in tests/phase_z2 + tests/phase_z2_ai_fallback>
-> 136 passed / 15.94s
Baseline-red invariance gate
(tests/test_imp47b_step12_ai_wiring.py +
tests/test_phase_z2_ai_fallback_config.py)
-> 4 failed / 6 passed; FAILED set === IMP35_BASELINE_RED_NODE_IDS
(frozen registry from 7c93031). Contract holds.
Codex Stage 4 R1 = YES (independent verify).
Guardrails honored:
- MDX content preservation: popup carries full source, body holds
summary or subset only (CLAUDE.md 자세히보기 원칙;
feedback_phase_z_spacing_direction -- capacity expanded, no margin shrink).
- AI isolation contract: Step 17 POPUP gate is deterministic; AI hook
surface is split-decision contract only, API call gated.
- No hardcoding: escalation thresholds derived from existing overflow
detector outputs; preview_chars deterministic from container px.
- 1 commit = 1 decision unit: u1~u10 land together as the planned
production surface; u11 was deliberately split into 7c93031 as Stage 3
R7 carve-out, and the R7 anchor re-pin rides with this commit because
it is the direct shift consequence of the u1/u5/u7 pre-anchor additions.
- Scope-locked: .claude/settings.json explicitly excluded
(Stage 4 exit report contract).
Out of scope (per Stage 1 + Stage 2):
- AI_REPAIR API activation (post IMP-35 axis).
- IMP-34 zone resize, IMP-36 responsive fit (chain partners,
separate issues).
- Print-time auto-expand JavaScript for <details>.
- Popup escalation in stages other than Step 17.
- Baseline-red body repair (4 frozen failures) -- separate follow-up
issue; u11 only guards the count.
- frame_reselect algorithm changes (entry point only).
- templates/phase_z2/slide_base.html path rename.
source_comment_ids:
Stage 1: claude_stage1_problem_review_imp35, codex_stage1_verification_imp35_yes
Stage 2: Claude #4 R2 plan, Codex #5 R2 YES
Stage 3: Claude #86 (R7 anchor re-pin), Codex #87 YES
Stage 4: Claude #88 R1, Codex #89 R1 YES
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-23 07:36:57 +09:00 |
|
|
|
1efbf672bd
|
feat(#39): IMP-30 first-render invariant + abort bypass (2 paths)
Restore first-render invariant: final.html + Step 20 slide_status MUST be
written for every input where Step 0~5 succeed. Two abort paths replaced
with provisional/empty-shell synthesis; MDX content preserved, AI-free.
- u1 V4Match.provisional + lookup_v4_match_with_fallback(allow_provisional)
chain_exhausted -> synthesize rank-1 provisional (opt-in, default-off)
- u2 CompositionUnit.provisional propagation (single / parent_merged /
parent_merged_inferred constructors)
- u3 select_composition_units(allow_provisional_fill=True) last-resort
fill + _candidate_state="selected_provisional"
- u4 pipeline.py path-(a) abort guard replaced with provisional retry +
terminal __empty__ shell (no sys.exit(1))
- u5 zones_data.provisional -> slide_base.html zone--provisional class +
data-provisional + needs-adaptation badge (template-only)
- u6 compute_slide_status additive provisional_first_render_count/_units
(overall enum unchanged per IMP-05 Codex #10 D4)
- u7 regression: tests/test_phase_z2_imp30_first_render.py (28 tests) +
tests/test_phase_z2_v4_fallback.py (+5 cases)
Guardrails verified: MVP1_ALLOWED_STATUSES unchanged, no calculate_fit,
no LLM in fallback path, no MDX 03/04/05 hardcoding.
Anchor sync (Rule 13): tests/orchestrator_unit/test_imp17_comment_anchor.py
re-pinned 564/565 -> 570/571 to track V4Match.provisional shift at
src/phase_z2_pipeline.py:179-184.
Cross-ref: IMP-05 (#5) §5 defer + Codex #2 first-render invariant.
|
2026-05-21 00:40:58 +09:00 |
|
|
|
7a52cebfaa
|
feat(IMP-14): A-4 — slide_base embedded vs standalone mode contract
Step 13 owns iframe-vs-standalone CSS contract in slide_base.html via
3-valued embedded_mode enum (auto / embedded / standalone). Removes
SlideCanvas.tsx runtime CSS injection workaround; frontend now passes
?embedded=1 query so auto-mode script attaches html.embedded class and
scopes the standalone body centering/min-height/padding reset.
- templates/phase_z2/slide_base.html: conditional html.embedded class +
CSP-safe auto-mode <script> + additive html.embedded body/.slide rules
- src/phase_z2_pipeline.py: render_slide gains keyword-only embedded_mode
("auto" default) + ValueError guard; 3 existing call sites unchanged
- Front/client/src/components/SlideCanvas.tsx: derive embeddedSrc with
?embedded=1 (query-preserving), drop reset CSS injection block
- tests/phase_z2/test_slide_base_embedded_mode.py: 6 cases — auto script,
CSS rules, embedded/standalone explicit modes, byte-determinism,
invalid-mode guard
|
2026-05-18 07:21:31 +09:00 |
|
|
|
f66497cf8d
|
phase z slide_base + token CSS + families 갱신 (5-layer + F29 fix)
- templates/phase_z2/slide_base.html — geometry 재정상화:
divider top 58 / height 2 / #cbd5e1
body top 76 / height 585 / left 50 / width calc(100%-100px)
footer left 50 / bottom 8 / height 41 / width calc(100%-100px)
(사용자 lock 2026-05-07 — front 정합)
- templates/styles/tokens/{spacing,typography}.css — 5-layer 위계 lock 반영:
spacing : --slide-divider-top 58 / --slide-body-top 76 / --slide-body-height 585 /
--slide-footer-bottom 8 (slide_base.html 와 1:1)
typography : --font-zone-title 16px (대) / --font-sub-title 12px (소) /
--font-body 10px (콘텐츠) — 5-layer (대/중/소/부소/콘텐츠)
- templates/phase_z2/families/three_parallel_requirements.html — F13 partial:
cleanup-1 (2026-05-08) stale 주석 정정 (Legacy templates/blocks/structures/
prerequisites-3col.html reference 제거 — 해당 legacy 폴더 삭제 후 broken).
- templates/phase_z2/families/process_product_two_way.html — F29 partial:
visual fidelity bug fix (2026-05-08).
missing SVG asset 3 개 (header_left_bg, header_right_bg, body_bg) 참조 제거 →
figma origin (figma_to_html_agent/blocks/1171281210/index.html) 의 R8 룰
("순수 CSS 우선") 따라 linear-gradient + border-radius pill 로 재현.
PROMOTED 줄도 갱신 (banner-left/right bg gradient + body bg 2-half gradient).
regression 0 (MDX03 fresh run 검증 — final.html PASS, missing image 0).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-08 09:41:40 +09:00 |
|
|
|
4144dc4c21
|
Add Phase Z runtime templates
- add slide base template for Phase Z rendering
- add family partials for F13, F29, and F16 frames
|
2026-05-04 09:34:27 +09:00 |
|