artifact_schema: version: 1 # LOOP-RUN-005 Planner — domain-state complexity (observe Confirmed vs Live) layers: - id: confirmed_engine role: historical structure facts (range/phases/events) — thresholds UNCHANGED - id: live_engine role: FORMING candidates + confidence — independent of Confirmed writes - id: lifecycle role: UNKNOWN → FORMING → CONFIRMED → COMPLETED per cycle - id: api_contract role: analyze payload cycles[].confirmed / cycles[].live / top-level live mirror - id: summary_ui role: Confirmed vs Live partitioned Summary (observation only) delivery_constraints: required: - commit_exists_in_traceability_or_test_report - bd_status_format_approved - test_report_with_commands_result_date - code_review_handoff - out_of_scope_declared - execution_source_confirmed_only gate: ecr: ECR-007 command: ess-gate-check --ecr ECR-007 out_of_scope: - execution signal automation / auto trading - strategy / maker / decide_quotes / strategies/** - lowering Confirmed Spring/SOS thresholds - using Live candidate as Confirmed event or execution input - Subagents / Adapter v0.2 / auto-retry - chan algorithm (笔/线段/中枢) changes scope: files: - chanlun/analysis/wyckoff/live.py - chanlun/analysis/wyckoff/engine.py - chanlun/analysis/wyckoff/__init__.py - chanlun/analysis/wyckoff/events.py - chanlun/analysis/wyckoff/range.py - tests/test_wyckoff.py - web/api/analyze.py - web/static/js/app/ui.js - web/templates/index.html - web/tests/test_analyze_contract.py - tests/fixtures/analyze_contract_keys.json - docs/notes/WYCKOFF-LIVE-STRUCTURE-001.md - docs/ECR/ECR-007-wyckoff-live-structure.md - docs/BACKEND_DESIGN/BD-2026-007-wyckoff-live-structure.md - docs/ENGINEERING_SPEC/ECR-007-wyckoff-live-structure.md - docs/HANDOFF/ECR-007-architect-to-engineer.md - docs/HANDOFF/ECR-007-code-review.md - docs/HANDOFF/ECR-007-engineer-to-reviewer.md - docs/TEST_REPORT/ECR-007.md - docs/STATE/ECR-007.md - docs/TRACEABILITY.md - docs/CHANGELOG/CHANGELOG.md boundary: forbidden: - strategies/ - decide_quotes / maker - Live → execution_signal - ESS / Loop v1.1 / Adapter v0.1 acceptance: - lifecycle + confirmed/live separation in analyze_wyckoff output - event_candidates confirmed=false; not in top-level events unless Confirmed - execution_signal_from_wyckoff source==confirmed; live-only → None - Summary shows Confirmed vs Live partition - pytest test_wyckoff + analyze_contract green - ess-gate-check ECR-007 risks: | Primary Guardian risk: Live candidate mistaken for execution signal. Code Review: state machine boundary, confidence explainability, backward compat of phases/events. notes: | Planner must name Confirmed / Live / Lifecycle / Event Candidate explicitly. delivery_constraints include execution_source_confirmed_only.