# P3-S.8 CANDIDATE SETUP — FORMAL SPECIFICATION & CODE-CONFORMANCE REPORT ```text Date : 2026-08-22 Session : P3-S.8 — Candidate Setup semantic validation Principle : SPECIFICATION FIRST, CODE AUDIT SECOND Scope : SEMANTIC/ARCHITECTURAL conformance ONLY. No AUC/PF/backtest, no ML, no optimization, no production code changes, no human verification (CANCELLED). Question : What exact combination of market conditions should constitute ONE Candidate Setup in SniperGold, and does the current implementation actually create Candidate Setups according to that definition? Artifacts : docs/SMC_CANDIDATE_SETUP_SPEC_v1.md (specification) ml/p3/smc_semantic/spec_tests_candidate_setup.py (+ .json) ml/p3/smc_semantic/output/spec_tests_candidate_setup_report.json docs/SESSION_HANDOVER_2026-08-22_P3_S8_CANDIDATE_SETUP.md ``` --- ## 0. CHECKPOINT & PROVENANCE (session-start verification) ```text Forge HEAD : 533c8c6647a552d01a1a290cb2d0505f94887666 (P3-S.6) VERIFIED (remote https://forge.mql5.io/chiki2bum2/SniperGold_ML.git) Branch / remote : main == origin/main (533c8c6) VERIFIED Working tree : no modified tracked files; only the 6 P3-S.7 artifacts untracked (as left by P3-S.7 handover) VERIFIED P3-S.7 artifacts : spec/conformance/tests/report/handover INTACT (timestamps 2026-08-22 20:21-20:25) VERIFIED Live vs repo code : AF_Engine1_MTFData / AF_Engine2_Agents / AF_Engine2_Aggregator / AF_Engine2_Display / AF_Engine3_Render / AF_Defines : byte-IDENTICAL between the terminal Include and the Forge repo VERIFIED HUMAN VERIFICATION : CANCELLED VERIFIED No production change after P3-S.7 : VERIFIED (clean tree, single commit) ``` --- ## A. SOURCE MATERIAL (Phase A — inventory & reconciliation) | # | Source | Function / role | TF(s) | Input conditions | Output | State | Consumer | |---|--------|-----------------|-------|------------------|--------|-------|----------| | 1 | DESIGN.md §9 | E-agent "ZONE + CONFIRMATION = setup" (intent) | M15 | zone + confirmation | setup rule (concept) | none | Engine 2 | | 2 | DESIGN.md §14 | Dashboard "trade setup" | display | AFAggOut | signal + levels | none | Engine 3 | | 3 | AF_Defines.mqh:47-50 | agent TF macros | H4/M30/M15/M3 | — | macros | — | all consumers | | 4 | AF_Engine2_Agents.mqh:583-663 | AFAgentEntry::Compute (E) — the ONLY "setup" code | M15 | sweep/choch/disp/OB/FVG/ATR | AFSignalOut (fuzzy) | none | Aggregator | | 5 | AF_Engine2_Agents.mqh:430-745 | N/C/P agents | H4/M30/M3 | per-slot | AFSignalOut | none | Aggregator | | 6 | AF_Engine2_Aggregator.mqh:77-170 | AFAggregator::Compute (flat vote) | — | 4 votes | AFAggOut (dir/buy/sell/score/levels) | none | Engine 3 / consumers | | 7 | AF_Engine2_Display.mqh:308-395 | AF_BuildDisplayData | M15+ | e1 + votes | AFDisplayData | none | Engine 3 | | 8 | AF_Engine3_Render.mqh:272-278 | "TRADE SETUP" panel | M15 | AFAggOut | rendered signal | none | chart | | 9 | AF_Engine3_Display.mq5 | indicator driver | chart | e1 slots | objects | g_lastDispBar | chart | | 10 | AlgoForge_Backtest_Baseline.mq5 | ML runtime (19 features, NO Engine 2) | M15+D1/H4/H1 | closed bars | probs | persistent structure | MLP | | 11 | FEATURE_CONTRACT.md | f7-f18 per-bar features | M15+D1/H4/H1 | closed bars | 19 features | — | ML path | | 12 | v4.3/v4.4/v4.5 legacy | SETUP SEQUENCE gate chain (Definition B) | M15+D1/H4/H1 | HTF-align, sweep, CHoCH, OB/FVG tap | signal + notes | g_swpDir/g_chochDir etc. | legacy signal | | 13 | P3-S.0 f7 lifecycle doc | SeqWindow=40 = f7 expiry | M15 | sweep onset | f7 0/dir | — | ML path | | 14 | P3.1c candidate_setup_audit.py | diagnostic setup strata (f9&f7 etc.) | M15 | features | AUC strata | — | research only | | 15 | P3_2_LABEL_FORENSIC.md | setup unit vs event unit analysis | M15 | events | findings | — | research | **Layer separation:** ```text INTENDED SETUP SEMANTICS : DESIGN.md §9 "ZONE + CONFIRMATION = setup" (E-agent); P3-S.7 S-E "candidate setup = OB/FVG zone membership (ZONE)". LEGACY SETUP SEMANTICS : v4.x hard-gated chain (HTF-align -> sweep -> CHoCH -> OB/FVG tap -> not-premium -> score). CURRENT IMPLEMENTATION : E-agent fuzzy setup rule (min(zone,conf) * 0.30 weight) + flat-vote aggregator; NO setup entity. TRAINING SEMANTICS : per-bar features f7-f9/f18; diagnostic strata only; NO setup unit. DISPLAY/SCORING SEMANTICS: "TRADE SETUP" panel = aggregated signal. ``` --- ## B. FORMAL SPECIFICATION (Phase B) Full document: **docs/SMC_CANDIDATE_SETUP_SPEC_v1.md** (PROJECT SEMANTIC SPECIFICATION — not universal SMC truth). Spec decision summary (CS-1..CS-32): ```text CS-1 Setup (A) = E-agent M15 rule: ZONE(OB/FVG membership) AND CONFIRMATION(max(sweep,choch)) at the same closed bar -> fuzzy vote contribution (wSetup=0.30 normalized). NO entity, NO identity. CS-2 Setup (B, legacy) = hard-gated chain (HTF-align -> sweep -> CHoCH -> OB/FVG tap -> not-premium -> score>=threshold), SeqWindow=40. CS-3 Canonical for this audit = Definition A (current Engine 2). CS-4 Causal order (A): SAME-BAR only; no cross-bar order defined/enforced. CS-5 Causal order (B): ordered chain within SeqWindow=40. CS-7 Onset (A): NOT DEFINED (SPECIFICATION AMBIGUOUS). CS-8 Onset (B): entry-tap bar (defined). CS-9 Completion (A): NOT DEFINED (SPECIFICATION AMBIGUOUS). CS-10 Completion (B): gates pass + score>=threshold -> signal. CS-11 Direction (A): E-rule side = setup side; final = flat vote; arithmetic conflict resolution (no policy; S-X). CS-12 Direction (B): chain side; HTF-align gate; conflict -> no signal. CS-13..16 MTF roles: H4/M30/M3 alone -> NO setup (A and B); M15 alone -> setup YES in A (E-rule), NO in B (needs HTF gate). CS-17 Hierarchy: A = no cross-TF requirement; B = HTF gate required. CS-18 Alternative paths (A): {sweep|choch} x {OB|FVG}, same bar (P1..P4). CS-19 Alternative paths (B): one chain; zone leg OR-ed. CS-20 Hard requirements (A): zone>0 AND conf>0 (same bar); nothing else. CS-21 Hard requirements (B): HTF-align, sweep, CHoCH, OB/FVG tap, not-premium. CS-22 Score != setup: aggregator has no setup object (SETUP-CONSTRUCTION DRIFT, D-9). CS-23 Dedup: NONE in A; no setup_id (SETUP-IDENTITY GAP, D-10). CS-26 Lifecycle (A): NONE (SPECIFICATION AMBIGUOUS). CS-27 Lifecycle (B): freshness window only. CS-28 SeqWindow=40 scope: f7 expiry (ML path) + legacy gates; NOT Engine 2. CS-30 Causality: closed-bar lock; as-of <= t; future mutation cannot change past decisions. CS-31 Setup vs trade: execution semantics excluded from setup validity. CS-32 State vs setup: only the E-rule conjunction constitutes a setup; states/events/zones alone do not. ``` --- ## C. CURRENT CODE BEHAVIOR (Phase C — code audit) ```mql5 // AF_Engine2_Agents.mqh:583-663 — the ONLY "setup" in the current runtime // E-agent rule (Definition A): // confBull = max(sweepBull, chochBull); confBear = max(sweepBear, chochBear) // fz.Rule(true, MathMin(mZoneBull, confBull), wSetup); // wSetup=0.30 // fz.Rule(false, MathMin(mZoneBear, confBear), wSetup); // weights normalized with wSweep=0.25, wChoch=0.30, wDisp=0.20, wZone=0.15, // wSetup=0.30 (wDisp *= 1.3 when displacement != 0). // AF_Engine2_Aggregator.mqh:77-170 — flat 2-pass weighted vote: // baseW = [0.30, 0.30, 0.25, 0.15]; pass1 majority; pass2 1.5x boost; // final dir = +1 iff bias>=0.20 && buy>=0.50 (mirror for -1); else WAIT. // Entry/SL/TP on the M15 slot only. // legacy v4.x (Definition B) — ComputeSignal gate chain: // buyGate = buyCtx && (!InpRequireSweep||sweepBull) // && (!InpRequireCHoCH||chochBull) // && (!InpEntryOnFVGorOB||buyEntry) && !inPremium // with sweepBull/chochBull freshness <= InpSeqWindow=40 and // buyCtx = (g_bias>0) && alignBull (3-HTF stack D1/H4/H1). ``` Observations (verified in source): ```text 1. NO setup entity exists in Engine 2: no struct, no array of setups, no setup_id, no formation timestamp, no event linkage. The word "setup" in the current code appears only in: the E-agent comment/rule (AF_Engine2_Agents.mqh:584, 647-651) and the renderer's "TRADE SETUP" panel label (AF_Engine3_Render.mqh:272-278) which renders the final aggregated signal + levels. 2. The E-rule is a fuzzy weight contribution: min(zone,conf) * (0.30/total). It does not gate anything; it does not emit anything; it cannot be observed outside the E-agent's AFSignalOut. 3. E-vote saturation (D-11): when all fired E-rule legs agree, the fuzzy evaluator normalizes by fired-rule weights, so the E bias saturates at +/-1.0 even when the setup leg is absent (zone missing, CS-T04) — the presence/absence of the setup is NOT visible in the E vote. 4. The aggregator can produce BUY/SELL from any single TF (T6 unit test asserts N-only -> BUY; MTF-T19/T20/T22). High score has no setup dependency (CS-T05/CS-T21). 5. SeqWindow=40 exists ONLY in the ML path (f7 expiry; EA AlgoForge_Backtest_Baseline.mq5) and in the legacy v4.x gates. No SeqWindow constant exists in AF_Defines.mqh for Engine 2. 6. The legacy v4.x gate chain (Definition B) is the only code in the repository that implements a hard-gated causal setup sequence with a state machine ("waiting for sweep" -> "waiting for CHoCH" -> "confirmed - wait pullback"). It is NOT part of the current Engine-2 runtime. 7. Training has no setup unit: FEATURE_CONTRACT has 19 per-bar features; P3.1c "candidate setup" strata are diagnostic masks (f9==1&f7>0 etc.) with median gap 1 bar (no dedup by construction). ``` --- ## D. CONFORMANCE MATRIX (Phase C) | Requirement | Specification | Code Location | Actual Behavior | Verdict | |---|---|---|---|---| | Setup definition | E-agent M15 rule ZONE + CONFIRMATION (CS-1); legacy B chain recorded (CS-2) | AF_Engine2_Agents.mqh:647-651; legacy v4.x ComputeSignal | Rule exists as fuzzy weight contribution; NO setup entity anywhere | **SPECIFICATION AMBIGUOUS** (two definitions: A fuzzy-rule vs B hard-gate; A canonical per P3-S.7) | | Required components | zone>0 AND conf>0 same-bar (A); HTF-align/sweep/CHoCH/OB-FVG/not-premium (B) (CS-20/21) | E-rule min(zone,conf); legacy gates | A: no hard gates, OR legs; B: hard gates in legacy only | **PARTIALLY CONFORMING** (to A; legacy B not in current runtime) | | Causal sequence | same-bar only (A); ordered chain (B) (CS-4/5) | E-rule same-bar; legacy ordered | No cross-bar order in Engine 2; order only in legacy | **PARTIALLY CONFORMING** (A conforms; B absent from runtime) | | H4 role | context + vote 0.30; no gate (CS-13, S-N) | AFAgentNarrative (H4) | H4 vote; can produce BUY alone (no setup) | **CONFORMING** (to A) | | M30 role | context + vote 0.30; no filter (CS-14, S-C) | AFAgentContext (M30) | M30 vote; no setup coupling | **CONFORMING** (to A) | | M15 role | the setup layer (E-rule); can create setup alone in A (CS-15) | AFAgentEntry (M15) | E-rule same-bar; E alone -> BUY (CS-T12) | **CONFORMING** (to A) | | M3 role | confirmation + vote 0.15; NOT required (CS-16, S-P) | AFAgentPriceAction (M3) | M3 vote; no setup requirement (CS-T06) | **CONFORMING** (to A) | | Hard requirements | zone>0 AND conf>0 (A); nothing else | E-rule | Only the same-bar conjunction; no other hard requirement | **CONFORMING** (to A) | | Score/confluence | score != setup (CS-22) | AFAggregator::Compute | high score without setup possible (CS-T05/T21) -> SETUP-CONSTRUCTION DRIFT | **NON-CONFORMING** (D-9: score is treated as the signal; "setup" label on dashboard = signal) | | Setup onset | NOT DEFINED (CS-7) | no onset code | no onset timestamp/object | **SPECIFICATION AMBIGUOUS** | | Setup completion | NOT DEFINED (CS-9) | no completion code | no FORMING/CANDIDATE/CONFIRMED states | **SPECIFICATION AMBIGUOUS** | | Deduplication | NONE in A (CS-23) | no dedup code | rule fires every bar while conditions hold (CS-T13) | **NON-CONFORMING** (D-10 SETUP-IDENTITY GAP; repeated emission, no identity) | | Lifecycle | NONE in A (CS-26) | no lifecycle code | no expiry/invalidation/reactivation/consume (CS-T14/T15) | **SPECIFICATION AMBIGUOUS** (absent by design; ambiguous vs B) | | Expiration | SeqWindow=40 = f7 expiry + legacy gates (CS-28) | EA f7 fix; v4.x gates; NOT Engine 2 | Engine 2 rule has no expiry (CS-T14); f7 expires at 41 (CS-T18/T19) | **PARTIALLY CONFORMING** (f7 conforms; Engine 2 setup has no window) | | Closed-bar causality | as-of <= t (CS-30) | AFEngine1MTF closed-bar lock | all inputs closed bars; future mutation cannot change past (CS-T17) | **CONFORMING** | | Consumer behavior | aggregator consumes votes; display shows signal (CS-22) | AFAggregator; AFR_DrawAll | consumers receive direction+score+confidence+levels; NO setup identity | **PARTIALLY CONFORMING** (D-10: SETUP-IDENTITY GAP) | | Runtime/training | setup exists in neither runtime (as entity) nor training (CS-23) | EA/ML path; FEATURE_CONTRACT | parity N/A BY ABSENCE for setup; f7/f9 strata are per-bar masks | **CONFORMING** (N/A by absence; no conflicting setup layer) | --- ## E. CONFIRMED FINDINGS (Phase D — DOCUMENT ONLY, no code changes) ```text D-8 SETUP-SEMANTIC DIVERGENCE [HIGH] Source : DESIGN.md §9 / P3-S.7 S-E (Definition A) vs legacy v4.3/v4.4/v4.5 ComputeSignal (Definition B) The repository contains two materially different Candidate Setup definitions: (A) the E-agent fuzzy rule "ZONE + CONFIRMATION" (soft, same-bar, OR legs, no gates) and (B) the legacy hard-gated chain (HTF-align -> sweep -> CHoCH -> OB/FVG tap -> not-premium -> score>=threshold, SeqWindow=40). P3-S.7 established (A) as the current project model; (B) is reference. Not resolved in this session. D-9 SETUP-CONSTRUCTION DRIFT [HIGH] Source : AFAggregator::Compute; AF_Engine3_Render.mqh:272-278 Function: aggregator + "TRADE SETUP" dashboard panel The runtime can emit BUY/SELL with NO setup contribution at all (any single TF, verified by unit test T6 and CS-T05/T11/T21). The dashboard labels the aggregated signal "TRADE SETUP" even when no E-rule setup fired. High score is NOT equivalent to a valid Candidate Setup. Impact: consumers (display/backtest/ML path) cannot distinguish "signal with setup" from "signal without setup". Proposed repair (NOT applied): separate a discrete setup layer (identity + lifecycle) from the vote signal, or relabel the dashboard. D-10 SETUP-IDENTITY GAP [HIGH] Source : AF_Engine2_Agents.mqh (E), AF_Engine2_Aggregator.mqh, Engine 3 No setup_id / formation timestamp / originating liquidity event / originating zone / M15 entry event / M3 confirmation event exists. The same setup conditions can fire on consecutive bars (CS-T13) with no dedup; downstream consumers receive direction+score+confidence only. Impact: repeated emissions; no dedup; no lifecycle; no per-setup outcome measurement possible. Proposed repair (NOT applied): define a setup identity layer if the project semantics require it (deferred to P3-S.9). D-11 E-VOTE SATURATION MASKS SETUP ABSENCE [MEDIUM] Source : AFFuzzyEval::Finalize + AFAgentEntry::Compute Because the fuzzy evaluator normalizes by FIRED-rule weights, the E vote saturates at bias +/-1.0 whenever all fired rules agree — including when the setup leg is absent (zone missing, CS-T04). The setup presence/absence is invisible in the E vote and therefore in the final signal. Impact: the E-rule's contribution cannot be observed downstream; the "setup" is semantically opaque. Proposed repair (NOT applied): expose the setup predicate as a separate output field. D-12 SEQUENCE FRESHNESS ABSENT IN ENGINE 2 [MEDIUM] Source : AF_Defines.mqh (no SeqWindow for Engine 2); E-rule The legacy chain enforces sweep->CHoCH->entry freshness (SeqWindow=40); Engine 2 has no age bound, no cross-bar ordering, no expiry. A CHoCH state 500 bars old still confirms the E-rule (CS-T14 class). Impact: Definition-A setups have no freshness semantics; the f7 40-bar expiry applies only to the ML path. Proposed repair (NOT applied): decide whether Engine 2 needs a setup freshness window. D-13 CONFLICT POLICY ABSENT AT SETUP LEVEL [MEDIUM] Source : aggregator (carried from P3-S.7 D-2 / S-X) Contradictory H4/M30 or M15/M3 directions resolve arithmetically (CS-T09/T10); there is no BLOCK/WAIT/OVERRIDE policy and no "setup blocked by conflict" concept. In legacy B, conflict fails the gate (buyCtx requires alignment). Impact: two different conflict semantics coexist (A: arithmetic, B: gate-fail). Proposed repair (NOT applied): adjudicate in P3-S.9. D-14 LEGACY GATE CHAIN NOT PORTED TO ENGINE 2 [INFORMATIONAL] Source : v4.3:975-982, v4.4:1066-1073, v4.5:1010-1011 vs Engine 2 The hard-gated setup sequence (RequireSweep/RequireCHoCH/ EntryOnFVGorOB/RequireHTFAlign/SeqWindow) exists only in the legacy indicators. Engine 2 replaced it with the flat vote + E-rule. The design decision that led to this replacement is not documented in DESIGN.md beyond "4 independent agents + aggregator". Impact: the current runtime cannot express the legacy institutional gate even as an option. Proposed repair (NOT applied): document or port in P3-S.9 if intended. ``` --- ## F. SEMANTIC AMBIGUITIES ```text A-5 Setup onset (CS-7) : Definition A defines no onset. A-6 Setup completion (CS-9) : Definition A defines no completion. A-7 Setup lifecycle (CS-26) : Definition A defines no lifecycle. A-8 Cross-bar causal order (CS-4): Definition A defines none. A-9 Canonical definition : A (Engine 2, per P3-S.7) vs B (legacy); not adjudicated. A-10 Setup identity (CS-23) : whether a setup_id is needed not decided. ``` --- ## G. VERDICT (Phase E) ```text OVERALL: SPECIFICATION AMBIGUOUS (with NON-CONFORMING components) Setup definition : SPECIFICATION AMBIGUOUS (A fuzzy-rule vs B hard-gate; A canonical per P3-S.7; D-8) Required components : PARTIALLY CONFORMING (A: zone+conf conjunction; B legacy gates not in runtime) Causal sequence : PARTIALLY CONFORMING (same-bar only in A; ordered chain only in legacy) MTF hierarchy : PARTIALLY CONFORMING (roles labeled correctly; decision = flat vote; D-1 carried) Hard requirements : CONFORMING to A (zone>0 AND conf>0 same bar); no other hard requirements exist Scoring : NON-CONFORMING (score treated as signal; "TRADE SETUP" label on dashboard = signal; D-9 SETUP-CONSTRUCTION DRIFT) Setup identity : NON-CONFORMING (none exists; D-10 SETUP-IDENTITY GAP) Lifecycle : SPECIFICATION AMBIGUOUS (none in A; freshness only in B) Deduplication : NON-CONFORMING (none; per-bar repeated emission; CS-T13) Expiration : PARTIALLY CONFORMING (f7 40-bar expiry conforms; Engine 2 setup has no expiry) Consumer behavior : PARTIALLY CONFORMING (consumers receive direction+score+confidence, no setup identity) Runtime/training parity : CONFORMING (N/A BY ABSENCE — no setup layer in either; f7/f9 strata are per-bar masks) Cross-primitive consistency: NON-CONFORMING (X-6..X-10; two setup definitions, three zone roles, two conflict semantics) ``` Interpretation: ```text The ONLY question this session must answer is: "When should SniperGold be allowed to say 'this is one Candidate Setup', and does the current implementation actually do that according to the project's formal specification?" Answer: The project has TWO formal candidates — the E-agent fuzzy rule (Definition A: ZONE + CONFIRMATION, same bar, OR legs) and the legacy hard-gated chain (Definition B). Under the canonical Definition A (per P3-S.7), "this is one Candidate Setup" is TRUE exactly when the E-rule conjunction fires at a bar — but the implementation does NOT materialize it as ONE setup: it has no identity, no onset, no completion, no lifecycle, no dedup, no freshness window, and its contribution is invisible downstream (E-vote saturation). The implementation therefore does NOT actually "create Candidate Setups" as distinct entities — it creates per-bar vote states that can exceed thresholds, and the dashboard calls that "TRADE SETUP". STATE/EVENT/ZONE/CONFIRMATION/SETUP/ENTRY/TRADE are kept distinct in this specification (CS-1..CS-32, R-1..R-5): the current implementation collapses SETUP into a vote contribution and collapses the SIGNAL label into the "setup" name, which is the central non-conformance. ``` --- ## H. CROSS-PRIMITIVE CONSISTENCY MATRIX (brief §33) | Concept | Role in Candidate Setup (A) | Required? (A) | Produces Event? | Produces Zone? | Confirmation? | |---|---|---|---|---|---| | Liquidity Sweep | confirmation leg (OR) | no (with CHoCH alt.) | YES (per-bar; f7 onset+40 in ML) | NO | YES (one leg) | | CHoCH/MSS | confirmation leg (OR) | no (with sweep alt.) | YES (per-bar; f8 persistent) | NO | YES (one leg) | | FVG | zone leg (OR) | no (with OB alt.) | YES (formation) | YES | NO | | OB | zone leg (OR) | no (with FVG alt.) | YES (formation) | YES | NO | | Displacement | confirmation boost | no | YES (per-bar candle attr) | NO | PARTIAL (boost only) | | H4 | context + vote 0.30 | no | (structure events per-TF) | NO | NO (vote) | | M30 | context + vote 0.30 | no | (zones per-TF) | YES (context) | NO (vote) | | M15 | the setup layer (E-rule) | YES (zone+conf) | YES | YES (OB/FVG) | YES (the rule) | | M3 | confirmation + vote 0.15 | no | (candle patterns) | NO | NO (vote only) | Flagged contradictions (recorded, NOT resolved): ```text X-6 Liquidity Sweep: ML contract = M15 EVENT with 40-bar expiry vs Engine 2 = per-TF stateless STATE detector (no expiry). Two event semantics. X-7 CHoCH: legacy B REQUIRES sweep-before-CHoCH; Definition A treats them as same-bar OR alternatives. X-8 OB/FVG: legacy B REQUIRES a zone tap; Definition A makes the zone one leg of a same-bar conjunction; the ML path has NO zone requirement. X-9 Displacement: Engine 2 = confirmation weight boost; P3-S.6 = E-agent confirmation input. Label conflict. X-10 M3: no project document makes M3 a setup requirement; legacy v4.x does not use M3 at all. ``` --- ## I. PREVIOUS BUG-CLASS CHECK (brief §31 pattern) ```text detector correct -> consumer wrong : CONFIRMED at the SETUP level (the E-rule detector exists but no consumer can observe a setup; D-9/D-10). correct state -> wrong as-of timestamp : NOT FOUND (closed-bar lock; CS-T17). correct TF -> wrong cache slot : NOT FOUND in production consumers (single macro source; latent by-convention risk carried from P3-S.7 D-3). correct setup semantics -> flat vote : CONFIRMED (D-1 carried; D-9). setup identity missing : CONFIRMED (D-10). ``` --- ## J. BUG REGISTER (documented only — NOT fixed) | BUG-ID | Severity | Source | Function | Spec requirement | Actual behavior | Impact | Proposed repair | |--------|----------|--------|----------|------------------|-----------------|--------|-----------------| | BUG-P3S8-001 | HIGH | AF_Engine2_Aggregator.mqh + Engine 3 | aggregator / dashboard | CS-22: score != setup; a setup must be distinguishable from a bare vote signal | BUY/SELL can fire with no setup; dashboard labels signal "TRADE SETUP" | consumers cannot tell setup-signals from vote-signals | expose setup predicate/identity separately; relabel dashboard | | BUG-P3S8-002 | HIGH | AF_Engine2_Agents.mqh | AFAgentEntry / AFFuzzyEval | CS-1: setup = zone AND confirmation; should be observable | E vote saturates at +/-1.0 with or without the setup leg | setup presence invisible downstream | output the setup predicate as a field | | BUG-P3S8-003 | MEDIUM | Engine 2 (whole) | E-rule / aggregator | CS-23: dedup/identity required for "one setup" semantics | no setup_id; per-bar repeated emission | no dedup, no lifecycle, no per-setup outcome | define setup identity layer (P3-S.9) | | BUG-P3S8-004 | MEDIUM | AF_Defines.mqh / E-rule | none | CS-28: freshness window semantics | no SeqWindow equivalent in Engine 2; CHoCH state never expires | Definition-A setups have no freshness | adjudicate window policy (P3-S.9) | --- ## K. NEXT GATE ```text After the Candidate Setup verdict: STOP the semantic audit chain. P3-S.9 = CROSS-PRIMITIVE CONSOLIDATED REPAIR / ARCHITECTURE REVIEW (only after reviewing the full P3-S.2..P3-S.8 evidence). DO NOT repair code now; DO NOT return to ML; DO NOT retrain. ``` --- ## L. CHECKPOINT & PROVENANCE (P3-S.8) ```text Forge HEAD (session start) : 533c8c6647a552d01a1a290cb2d0505f94887666 (P3-S.6) Branch / remote : main == origin/main (SniperGold_ML.git) Working tree : P3-S.7 artifacts untracked (intact); nothing else P3-S.7 artifacts : intact FEATURE_CONTRACT : NOT modified No production change : AF_Engine1_MTFData / AF_Engine2_Agents / AF_Engine2_Aggregator / AF_Engine2_Display / AF_Engine3_Render / f7-f18 / FVG / OB / CHoCH / Displacement / ML / legacy v4.x : NOT touched Human verification : CANCELLED ```