SniperGold_ML/docs/P3_S9_ROOT_CAUSE_MATRIX.md

234 lines
10 KiB
Markdown

# P3-S.9 ROOT-CAUSE MATRIX — SNIPERGOLD_ML CROSS-PRIMITIVE CONSOLIDATION
```text
Date : 2026-08-22
Session : P3-S.9 — Cross-Primitive Consolidated Repair & Architecture Review
Purpose : Identify SHARED root causes across P3-S.2..P3-S.8 findings so the
future repair phase patches ONE architecture, not N files.
Evidence : docs/SMC_*_SPEC_v1.md (P3-S.2..S.8), docs/P3_S*_CONFORMANCE.md,
docs/SESSION_HANDOVER_2026-08-22_P3_S*_*.md, FEATURE_CONTRACT.md,
AF_Engine1/2/3 sources, legacy v4.3/v4.4/v4.5 (all reconciled).
Rule : Every mark below cites at least one audited finding. No AUC/PF/
profit-based inference. Human verification = CANCELLED.
```
---
## 1. SHARED ROOT-CAUSE PATTERNS (from §7 of the brief)
### A. EVENT/STATE CONFUSION
```text
Definition : a detector that is semantically an EVENT (onset + validity) is
consumed as a persistent STATE (never expires), or vice versa.
Evidence :
- Liquidity Sweep: f7 EVENT with 40-bar lifecycle (P3-S.0 fix, CONFORMING)
vs per-TF stateless state in Engine 2 (AF_DetectSweep, no expiry) and vs
g_swpDir persistent state consumed by f9/f18 WITHOUT age bound
(BUG-P3S2-001; P3-S.2 E-10 NON-CONFORMING).
- CHoCH/MSS: f8 = persistent STATE per contract (99.89% active bars,
median run 318 bars; P3-S.3 audit_choch_state) vs f9/f18 consuming it as
a fresh EVENT (BUG-P3S3-001, 34.7% / 58.0% stale) vs Engine-2
AF_DetectChoch per-bar state with no expiry (P3-S.8 D-12).
- Candidate Setup: E-rule consumes choch as a same-bar state, so a CHoCH
500 bars old still "confirms" (P3-S.8 CS-T14).
Affected : Sweep, CHoCH/MSS, Candidate Setup.
```
### B. ZONE/MITIGATION CONSUMER ERROR
```text
Definition : a ZONE producer applies mitigation in display/legacy, but the
decision-path consumer reads the zone WITHOUT mitigation.
Evidence :
- FVG: Engine-2 AF_FindFVG (AF_Engine2_Agents.mqh:329-350) has NO
mitigation filter; C/E agents consume the newest-ANY zone
(BUG-P3S4-001; P3-S.4 E-9 NON-CONFORMING). Display AF_CollectFVG applies
MIT, legacy FindEntryFVG requires unmitigated.
- OB: Engine-2 AF_FindOrderBlock (293-322) has NO mitigation and NO age
bound; C/E consume newest-ANY (BUG-P3S5-001; P3-S.5 E-9 NON-CONFORMING).
Display AF_CollectOBs applies close-through MIT + 0.5 ATR dedupe.
Affected : FVG, OB, Candidate Setup (zone leg inherits the error).
```
### C. DUPLICATE EVENT EMISSION
```text
Definition : a per-bar state detector emits the "event" on every bar the
state holds, with no onset suppression.
Evidence :
- f7 pre-fix: a single sweep onset yielded TRUE for hundreds of bars
(P3-S.0; max per-onset lifetime ~996 -> 41 after fix).
- f8: state run median 318 bars, returns to 0 NEVER after first event
(P3-S.3 audit_choch_state.json).
- P3.1c candidate strata: median gap between candidate bars = 1 bar
(candidate_setup_audit.json event_frequency) — no dedup by construction.
- Engine-2 E-rule: fires every bar while zone+conf hold (P3-S.8 CS-T13).
Affected : Sweep, CHoCH/MSS, Candidate Setup.
```
### D. STALE STATE CONSUMPTION
```text
Definition : a consumer reads a detector's persistent state without checking
the event validity window.
Evidence :
- f9/f18 sweep leg: uses raw g_swpDir/g_swpBar without age bound
(BUG-P3S2-001; EA AlgoForge_Backtest_Baseline.mq5:470-471, 510-516).
- f9/f18 CHoCH leg: same pattern (BUG-P3S3-001; f9 34.7% stale,
f18 +15 leg 58.0% stale).
- Engine-2 C/E zone consumers: no age bound on OB/FVG (BUG-P3S4-001/-002,
BUG-P3S5-001).
Affected : Sweep, CHoCH/MSS, FVG, OB, Candidate Setup.
```
### E. MULTIPLE INCOMPATIBLE DEFINITIONS
```text
Definition : the same concept has 2+ definitions/TF-models in the repo with
no canonical rule.
Evidence :
- MTF models: FEATURE_CONTRACT D1/H4/H1+M15 vs Engine 2 H4/M30/M15/M3 vs
legacy v4.5 D1/H4/H1+M15 (P3-S.7 D-5/D-6; X-1..X-5).
- OB: current "opposite bar before strong move (1.5x avg)" vs legacy
"opposite candle before structure break" (P3-S.5 A-2, BUG-P3S5-002).
- CHoCH: f8/f9 (5/5+gate, M15) vs Engine 2 (2/2, no gate) vs display
struct lines (P3-S.3 A-2; P3-S.7 X-2).
- Sweep: f7 internal pivot (M15) vs Engine-2 swing-pivot per-TF vs
legacy D1/H4/H1 per-TF (P3-S.2 A-2; P3-S.7 X-1).
- FVG: min-gap none vs 0.02 ATR vs 0.25 ATR; timestamp C2 vs C3
(P3-S.4 A-1/A-5).
- Displacement: 1.6x avg body vs OB strong-move 1.5x (BUG-P3S6-001).
- Candidate Setup: Definition A (E-rule) vs Definition B (legacy gate
chain) (P3-S.8 D-8).
Affected : ALL primitives (Sweep, CHoCH, FVG, OB, Displacement, MTF,
Candidate Setup).
```
### F. FLAT SCORE USED AS SETUP SUBSTITUTE
```text
Definition : the aggregator's weighted score/signal is treated as (or
displayed as) a Candidate Setup.
Evidence :
- Aggregator outputs direction+score only; any single TF can produce
BUY/SELL with zero setup contribution (P3-S.7 MTF-T19/T20/T22;
P3-S.8 CS-T05/T11/T21; unit test T6 "N buy kuat saja -> BUY").
- Dashboard "TRADE SETUP" panel renders the aggregated signal
(AF_Engine3_Render.mqh:272-278; P3-S.8 D-9).
Affected : Candidate Setup, MTF (aggregation).
```
### G. TIMEFRAME ROLE DRIFT
```text
Definition : roles are assigned by AGENT LABEL, not by structural
cross-TF dependency; the same detector runs per-TF.
Evidence :
- 4 agents each read exactly ONE slot; same detector suite per-TF; NO
cross-TF structural references (P3-S.7 S-R, D-7; MTF ROLE DIVERGENCE).
- "H4 Narrative -> M30 Context -> M15 Entry -> M3 Price Action" is an
ANALYSIS order; the DECISION is a flat vote (P3-S.7 S-H, D-1).
Affected : MTF, Candidate Setup.
```
### H. TRAINING/RUNTIME SEMANTIC DRIFT
```text
Definition : training features and the agent runtime implement different
semantics for the same concept.
Evidence :
- MTF model mismatch: contract/training D1/H4/H1+M15 vs agent path
H4/M30/M15/M3; agent path has NO Python counterpart (P3-S.7 D-5,
S-PR "N/A by absence"; FEATURE_CONTRACT MTF MISMATCH).
- CHoCH pivots: train_model.build_structure STRICT vs EA/parity feed
equal-allowed: 0.26% choch_dir / 2.40% choch_bar divergence
(BUG-P3S3-002; P3-S.3 E-13).
- FVG/OB/Displacement: absent from contract (PARITY = N/A by absence).
Affected : CHoCH/MSS, MTF.
```
### I. MISSING SETUP IDENTITY
```text
Definition : no setup_id / formation timestamp / originating event / zone
linkage exists; downstream receives direction+score only.
Evidence :
- No setup struct/array anywhere in Engine 2; E-rule is a fuzzy weight
contribution; no dedup (P3-S.8 D-10, CS-T13/T16/T20; SETUP-IDENTITY
GAP).
Affected : Candidate Setup.
```
### J. MISSING EXPLICIT LIFECYCLE
```text
Definition : no onset/completion/expiry/invalidation states for setups or
for Engine-2 events/zones.
Evidence :
- Engine 2 has no SeqWindow constant (AF_Defines.mqh); E-rule has no age
bound; CHoCH/sweep states never expire in Engine 2 (P3-S.8 D-12,
CS-T14).
- FVG/OB invalidation NOT modeled anywhere (P3-S.4 E-10, P3-S.5 E-10
CONFORMING by absence).
- Setup onset/completion/lifecycle: SPECIFICATION AMBIGUOUS (P3-S.8
A-5/A-6/A-7).
Affected : Sweep, CHoCH/MSS, Candidate Setup (zones have implicit
mitigation-based lifecycle only).
```
---
## 2. ROOT-CAUSE × PRIMITIVE MATRIX
| Root Cause | Sweep | CHoCH/MSS | FVG | OB | Displacement | MTF | Candidate Setup |
|------------------------|-------|-----------|-----|----|--------------|-----|-----------------|
| A. Event/state confusion | ✓ (P3S2 E-9/E-10) | ✓ (P3S3 E-11) | — | — | — | — | ✓ (P3S8 D-12/CS-T14) |
| B. Zone/mitigation consumer error | — | — | ✓ (P3S4 E-9) | ✓ (P3S5 E-9) | — | — | ✓ (inherits zone leg) |
| C. Duplicate event emission | ✓ (P3S0) | ✓ (P3S3 audit) | — | — | — | — | ✓ (P3S8 CS-T13) |
| D. Stale state consumption | ✓ (P3S2 BUG-001) | ✓ (P3S3 BUG-001) | ✓ (P3S4 BUG-001) | ✓ (P3S5 BUG-001) | — | — | ✓ (P3S8 D-12) |
| E. Multiple incompatible definitions | ✓ (P3S2 A-2) | ✓ (P3S3 A-2) | ✓ (P3S4 A-1/A-5) | ✓ (P3S5 A-2) | ✓ (P3S6 BUG-001) | ✓ (P3S7 D-5/D-6) | ✓ (P3S8 D-8) |
| F. Flat score as setup substitute | — | — | — | — | — | ✓ (P3S7 D-1) | ✓ (P3S8 D-9) |
| G. Timeframe role drift | — | — | — | — | — | ✓ (P3S7 D-7/S-R) | ✓ (P3S8 CS-17) |
| H. Training/runtime semantic drift | — | ✓ (P3S3 BUG-002) | — | — | — | ✓ (P3S7 D-5) | — |
| I. Missing setup identity | — | — | — | — | — | — | ✓ (P3S8 D-10) |
| J. Missing explicit lifecycle | ✓ (P3S2 E-9) | ✓ (P3S3 E-11) | — | — | — | — | ✓ (P3S8 A-5..A-7) |
Legend: "—" = no audited finding; "✓" = at least one audited finding; the
citation column gives the primary evidence.
---
## 3. CONSISTENCY ACROSS THE CHAIN (detector -> consumer)
```text
Detectors (mostly CONFORMING): sweep trigger, CHoCH trigger, FVG geometry,
OB formation, displacement candle attribute — all validated P3-S.2..S.6.
Consumers (mostly NON-/PARTIALLY CONFORMING): f9/f18 (stale sweep+choch),
Engine-2 C/E zones (no mitigation/age), aggregator (flat score), display
(mitigation exists but decision path ignores it), training (strict pivots).
-> The dominant failure class is CONSUMER-SIDE, not detector-side.
-> A single consumer-contract layer (event/zone/state/attribute contracts)
addresses root causes A, B, C, D, I, J simultaneously.
```
---
## 4. EVIDENCE REFERENCES
```text
P3-S.2 : docs/SMC_LIQUIDITY_SWEEP_SPEC_v1.md, P3_S2_LIQUIDITY_SWEEP_CONFORMANCE.md
P3-S.3 : docs/SMC_CHOCH_MSS_SPEC_v1.md, P3_S3_CHOCH_MSS_CONFORMANCE.md,
ml/p3/smc_semantic/output/audit_choch_state.json
P3-S.4 : docs/SMC_FVG_SPEC_v1.md, P3_S4_FVG_CONFORMANCE.md
P3-S.5 : docs/SMC_ORDER_BLOCK_SPEC_v1.md, P3_S5_ORDER_BLOCK_CONFORMANCE.md
P3-S.6 : docs/SMC_DISPLACEMENT_SPEC_v1.md, P3_S6_DISPLACEMENT_CONFORMANCE.md
P3-S.7 : docs/SMC_MTF_ALIGNMENT_SPEC_v1.md, P3_S7_MTF_ALIGNMENT_CONFORMANCE.md
P3-S.8 : docs/SMC_CANDIDATE_SETUP_SPEC_v1.md, P3_S8_CANDIDATE_SETUP_CONFORMANCE.md,
ml/p3/smc_semantic/output/spec_tests_candidate_setup_report.json
Historical : P3_S_F7_EVENT_LIFECYCLE_FORENSIC.md, P3_2_LABEL_FORENSIC.md,
P3_FEATURE_LABEL_FORENSIC.md, ml/p3/output/candidate_setup_audit.json
```
*Human verification remains CANCELLED. No production file was modified by
this session (this document is analysis only).*