|
|
896f273ffa
|
feat(#92): IMP-92 u1~u5 AI fallback config validation (model ping + operational error classification)
Replaces #84 UI-noise removal plan with positive operational-alert contract.
Five-axis stack lands together: (1) default model literal moved to current
Opus-family ID, (2) Anthropic SDK error classifier mapping exceptions to
quota/billing/auth/other, (3) api_error_kind plumbed through ai_repair_status
summary + per-record retention, (4) Step 0 preflight ping gated under
ai_fallback_enabled (default OFF preserved) with fail-fast on invalid
model/key, (5) frontend formatter rewritten to surface only operational
quota/billing/auth toasts (non-operational paths return null per
feedback_auto_pipeline_first silent-pipeline policy).
u1 - default model literal claude-opus-4-6-20250415 -> claude-opus-4-7
(src/config.py + tests/test_phase_z2_ai_fallback_config.py lock mirror)
u2 - classify_operational_error type+status_code dispatch + Step 12
api_error_kind stamp on except path (src/phase_z2_ai_fallback/client.py
+ src/phase_z2_ai_fallback/step12.py + tests/phase_z2_ai_fallback/test_step12.py)
u3 - _summarize_ai_repair_status aggregates api_error_kinds {quota,billing,
auth,other}; error_records[i].api_error_kind retained per-record
(src/phase_z2_pipeline.py + tests/test_imp47b_failure_surface.py)
u4 - _run_step0_ai_preflight + Step0PreflightError; preflight only fires
when ai_fallback_enabled=true; one-token ping; invalid key/model =>
setup failure before Step 1 (src/phase_z2_pipeline.py +
tests/phase_z2/test_pipeline_step0_preflight.py NEW)
u5 - AiRepairStatus.api_error_kinds? interface + formatAiRepairHumanReview
Message rewritten: operational quota/billing/auth -> Korean copy
verbatim from issue body (tie-break quota -> billing -> auth);
validation/coverage_violated/unsupported_kind/generic-other/legacy
payload -> null (Front/client/src/services/designAgentApi.ts +
Front/client/tests/imp47b_human_review_toast.test.tsx)
Guardrails respected:
- feedback_demo_env_toggle_policy: default OFF preserved; preflight skipped
when ai_fallback_enabled=false (test_preflight_skipped_when_disabled
asserts anthropic.Anthropic() not called).
- feedback_auto_pipeline_first: non-operational AI failures stay silent;
only quota/billing/auth reach user toast.
- feedback_ai_isolation_contract: AI remains fallback-only; no normal-path
migration; MDX preserved.
- project_imp46_carveout_caveat: cache_key/fingerprints fields untouched on
every record; no overlap with #62 cache region.
- feedback_no_hardcoding: zero MDX-sample-specific literals; classifier
dispatch by SDK type, not by string parsing.
- feedback_artifact_status_naming: operational toast scoped to alert axis,
not overall PASS signal.
Tests:
- Targeted u1+u2+u3+u4: 63 passed
- u5 vitest (Front/): 10/10 passed
- tests/phase_z2_ai_fallback dir regression: 240 passed
- tests/phase_z2 dir regression: 323 passed
- IMP-92-adjacent (-k "imp47b or ai_fallback or preflight or step12 or step0"): 299 passed (808 deselected)
- u1 baseline lock (test_client_mock.py): 8 passed
Zero failures, zero regressions outside scope.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-23 22:07:25 +09:00 |
|
|
|
c53722ad0b
|
feat(#86): IMP-86 u1~u5 placeholder zones_data + invariant guard
Mapper FitError handler now appends a __empty__ placeholder to zones_data
and a matching debug_zone so the surviving cardinality stays in sync with
the active layout preset's grid rows. A pre-build_layout_css invariant
guard fails fast with preset/positions/count diagnostics if drift recurs.
Per-record telemetry (adapter_needed, mapper_fit_error, provisional) is
exposed on both placeholder records; authoritative slide_status.adapter_
needed_units schema is unchanged.
Closes mdx03 reject override regression: Step 12 AI router now reachable
without heights_px ValueError; default-path behavior unaffected.
u1 — FitError placeholder zones_data + debug_zone (src/phase_z2_pipeline.py)
u2 — pre-build_layout_css invariant guard (src/phase_z2_pipeline.py)
u3 — horizontal-2 normal+placeholder helper unit (test_compute_per_zone_geometry.py)
u4 — mdx03 reject override → Step 12 integration + default regression
u5 — placeholder telemetry surface (adapter_needed/mapper_fit_error/provisional)
Tests:
- u3 helper: 7 passed (0.06s)
- u4+u5 integration: 2 passed (7.87s)
- Phase Z2 + AI fallback regression: 544 passed (66.28s)
- Broader sweep (excl. matching/pipeline heavy): 1066 passed (96.12s)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-23 18:25:14 +09:00 |
|
|
|
d9d338416a
|
feat(#62): IMP-46 cache fingerprint forwarding u1~u4 (router kwarg + step12 forward + 8 scenarios)
|
2026-05-23 08:53:22 +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 |
|
|
|
1186ad8ae2
|
feat(#76): IMP-47B reject-as-AI-adaptation activation (u1~u13 backend + tests)
- u1~u9: AI fallback infrastructure (router/prompts/schema/validator) + Step 12 hook
- u10: e2e reject chain (writes final.html with AI-repaired slot, full coverage)
- u11: frontend wiring deferred to follow-up commit (split from IMP-41 hunks)
- u12: coverage_invariant guard
- u13: cache save gate (visual_check PASS + user_approved/auto_cache) — Codex #22 verified
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-05-22 00:19:10 +09:00 |
|
|
|
c864fe0479
|
feat(#61): IMP-33 AI fallback scaffolding (u1~u11, flag default OFF)
Frame-aware AI fallback module scaffolded under src/phase_z2_ai_fallback/
with master flag ai_fallback_enabled=False; normal-path AI call count
remains 0. AI output constrained to builder_options_patch /
partial_overrides / slot_mapping_proposal; MDX / frame_id / raw HTML /
raw CSS mutations rejected at schema layer. IMP-46 cache gate (cache.py)
raises AiFallbackCacheGateError unless visual_check_passed AND
user_approved. Step 12 wires AI repair after IMP-30 provisional payload
only; Step 17 stays blocked behind IMP-34 / IMP-35 prerequisites.
AST isolation guard forbids fallback package from importing Phase Q /
Kei / pipeline runtime symbols. Docs IMP-17 / IMP-31 bound to runtime
module surface via 11-row structural test pin (test_docs_sync.py) so
drift fails CI.
Tests: 116 fallback / 161 phase_z2 regression / 526 scoped full sweep
all passing. Existing pre-IMP-33 fixture issue in scripts/test_phase_t_*
remains untouched (out of scope).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2026-05-21 12:46:49 +09:00 |
|