forked from chiki2bum2/SniperGold_ML
512 lines
20 KiB
Markdown
512 lines
20 KiB
Markdown
# SNIPERGOLD CANONICAL SETUP CONTRACT v1
| |||
| |||
```text
| |||
Status : PROPOSED AUTHORITATIVE DESIGN CONTRACT (FROZEN at design level)
| |||
Session : P3-S.10 — Owner Adjudication & Canonical Setup Contract Freeze
| |||
Date : 2026-08-22
| |||
Scope : The single canonical definition of ONE Candidate Setup and the
| |||
H4/M30/M15/M3 participation contract for the SniperGold_ML /
| |||
Algo Forge project. This document is the DESIGN contract only.
| |||
NOT implemented. No production file modified.
| |||
Decisions: OD-1..OD-5 resolved in docs/P3_S10_OWNER_ADJUDICATION.md
| |||
(this contract implements those decisions).
| |||
Supersedes: SMC_CANDIDATE_SETUP_SPEC_v1.md §CS-1..CS-3 (Definition A as
| |||
the setup definition) for the SETUP LAYER ONLY — see §J.
| |||
All historical docs remain immutable; the supersession is
| |||
recorded, not rewritten.
| |||
Provenance: Forge HEAD 533c8c6647a552d01a1a290cb2d0505f94887666 (P3-S.6);
| |||
P3-S.7/P3-S.8/P3-S.9 artifacts intact. Human verification CANCELLED.
| |||
```
| |||
| |||
---
| |||
| |||
## A. OBJECTIVE
| |||
| |||
```text
| |||
A Candidate Setup is a DISCRETE, CAUSALLY-ORDERED ENTITY created on the M15
| |||
entry layer when a COMPLETE sequence completes within its validity windows:
| |||
| |||
H4 context gate (direction-compatible)
| |||
AND M30 context gate (direction-compatible)
| |||
AND fresh Liquidity EVENT
| |||
AND CHoCH/MSS EVENT after the sweep (fresh, same direction)
| |||
AND price inside an UNMITIGATED OB or FVG ZONE (direction-compatible)
| |||
AND M15 entry condition
| |||
-> CANDIDATE_SETUP (direction = chain direction)
| |||
[M3 micro-confirmation: OPTIONAL -> M3_CONFIRMED; absence does not
| |||
invalidate the Candidate Setup.]
| |||
| |||
It is an ENTITY (one setup = one identity = one lifecycle), NOT a per-bar
| |||
fuzzy weight, NOT a score, NOT a vote, and NOT a signal.
| |||
| |||
What it is NOT (explicit, kept from P3-S.8 R-1..R-5 and P3-S.9 D.1):
| |||
market state : H4/M30 context states are INPUTS to the chain, not the setup.
| |||
event : sweep/CHoCH are STAGES of the setup, not the setup.
| |||
zone : OB/FVG membership is the ZONE stage, not the setup.
| |||
confirmation : CHoCH/M15 confirmation is a STAGE, not the setup.
| |||
score : confluence/score may RANK setups but never creates one.
| |||
signal : a directional signal may exist WITHOUT a setup; an ENTRY
| |||
SIGNAL may only be emitted for a valid setup.
| |||
trade : execution (lot/SL/TP/result) is outside setup validity.
| |||
```
| |||
| |||
---
| |||
| |||
## B. CANONICAL MTF MODEL (OD-2)
| |||
| |||
```text
| |||
CANONICAL RUNTIME/SETUP MODEL (frozen):
| |||
| |||
H4 = NARRATIVE / higher-TF CONTEXT STATE (gate)
| |||
M30 = CONTEXT STATE (gate)
| |||
M15 = ENTRY / CHAIN CARRIER (setup layer)
| |||
M3 = PRICE ACTION / OPTIONAL MICRO CONFIRMATION
| |||
| |||
Role definitions:
| |||
H4 Narrative : "Which way is the market?" (trend/structure state)
| |||
M30 Context : "Which zone is price in?" (zone/S-R state)
| |||
M15 Entry : "Is there entry confirmation?" (the setup chain lives here)
| |||
M3 Price Act. : "When to open?" (optional micro confirmation)
| |||
| |||
TRAINING SEMANTICS (unchanged this session, recorded for alignment):
| |||
D1/H4/H1 + M15 = legacy/current training semantics (FEATURE_CONTRACT f0-f18).
| |||
H4/M30/M15/M3 = canonical setup/runtime semantics.
| |||
-> The ML pipeline is NOT modified. A FUTURE alignment requirement (F4)
| |||
must reconcile training to the canonical model or document the
| |||
divergence as intentional. D1/H4/H1 is deprecated to REFERENCE status
| |||
for the agent/setup path (P3-S.7 D-6).
| |||
```
| |||
| |||
---
| |||
| |||
## C. PRIMITIVE ROLES (frozen)
| |||
| |||
| Primitive | Role (canonical) | Required? | Produces | Window |
| |||
|---|---|---|---|---|
| |||
| H4 | CONTEXT STATE (Narrative) | REQUIRED — direction-compatible gate | STATE | as-of closed bar |
| |||
| M30 | CONTEXT STATE (Context) | REQUIRED — direction-compatible gate | STATE | as-of closed bar |
| |||
| Liquidity Sweep | EVENT (stage 1 of chain) | REQUIRED | EVENT | W_sweep = 40 M15 bars |
| |||
| CHoCH/MSS | STRUCTURAL EVENT (stage 2, after sweep) | REQUIRED | EVENT | W_choch = 40 M15 bars |
| |||
| OB | ZONE (stage 3 — OB OR FVG) | ALTERNATIVE | ZONE | unmitigated; no age expiry |
| |||
| FVG | ZONE (stage 3 — OB OR FVG) | ALTERNATIVE | ZONE | unmitigated; no age expiry |
| |||
| Displacement | ATTRIBUTE / OPTIONAL CONFIRMATION | OPTIONAL | ATTRIBUTE | per-bar only |
| |||
| M15 | ENTRY CONDITION / CHAIN CARRIER | REQUIRED | CONDITION | per closed M15 bar |
| |||
| M3 | OPTIONAL MICRO CONFIRMATION | OPTIONAL | CONDITION/EVENT | optional (W_m3 open) |
| |||
| |||
Rules:
| |||
```text
| |||
- No primitive holds two conflicting roles; the table is the single role map.
| |||
- H4/M30 are GATES for the setup layer (OD-1), overriding P3-S.7 S-N/S-C
| |||
permissiveness FOR THE SETUP LAYER ONLY. The flat vote remains a
| |||
signal-scoring layer on top of valid setups.
| |||
- FILTER: premium/discount position is a FILTER on the M15 entry condition
| |||
(not in premium for buy / not in discount for sell), carried from legacy
| |||
Definition B.
| |||
- SCORE: confluence may RANK setups (post-creation); it never creates one.
| |||
```
| |||
| |||
---
| |||
| |||
## D. REQUIRED CANDIDATE SETUP CHAIN (frozen)
| |||
| |||
```text
| |||
H4 context gate (direction-compatible)
| |||
|
| |||
v
| |||
M30 context gate (direction-compatible)
| |||
|
| |||
v
| |||
fresh Liquidity EVENT (M15, W_sweep)
| |||
|
| |||
v
| |||
CHoCH/MSS EVENT after the sweep (M15, W_choch, same direction)
| |||
|
| |||
v
| |||
unmitigated OB OR FVG ZONE (M15, direction-compatible, mitigation-aware)
| |||
|
| |||
v
| |||
M15 entry condition (zone membership + confirmation conjunction;
| |||
premium/discount filter; displacement may boost)
| |||
|
| |||
v
| |||
CANDIDATE_SETUP
| |||
|
| |||
v
| |||
[optional M3 confirmation -> M3_CONFIRMED]
| |||
```
| |||
| |||
Chain invariants:
| |||
```text
| |||
- Strict stage order; no skipping.
| |||
- CHoCH onset >= sweep onset (causal order, legacy B semantics).
| |||
- Every stage must complete within its own validity window; a lapsed stage
| |||
prevents CANDIDATE_SETUP (the forming setup is discarded).
| |||
- The zone must be UNMITIGATED at every decision bar; mitigation mid-chain
| |||
invalidates the setup.
| |||
- Direction = chain direction; every stage must be direction-compatible.
| |||
```
| |||
| |||
---
| |||
| |||
## E. SETUP IDENTITY (frozen)
| |||
| |||
```text
| |||
setup_id : monotonic integer, assigned at CANDIDATE_SETUP
| |||
direction : +1 bullish / -1 bearish (chain direction)
| |||
originating liquidity : {sweep onset timestamp, sweep direction,
| |||
sweep validity window}
| |||
structure event : {choch onset timestamp, choch direction}
| |||
zone : {zone type (OB|FVG), zone formation timestamp,
| |||
boundaries, mitigation state at creation}
| |||
entry timeframe : M15 (fixed by construction)
| |||
creation timestamp : M15 bar timestamp when the chain completed
| |||
confirmation timestamp : M3 bar timestamp when M3_CONFIRMED (nullable)
| |||
expiry/invalidation : enumerated (EXPIRED|INVALIDATED|CONSUMED|NONE)
| |||
| |||
UNIQUENESS: two setups differ iff (direction, sweep onset, choch onset,
| |||
zone formation timestamp, creation timestamp) differ.
| |||
The identity is CAUSAL — every component is a dated event/zone/state from
| |||
the chain. No arbitrary/random id.
| |||
```
| |||
| |||
---
| |||
| |||
## F. SETUP LIFECYCLE (frozen)
| |||
| |||
```text
| |||
NONE
| |||
|
| |||
v
| |||
CONTEXT_VALID (H4 + M30 direction-compatible states; as-of <= t)
| |||
|
| |||
v
| |||
LIQUIDITY_TRIGGERED (sweep EVENT fresh; window W_sweep)
| |||
|
| |||
v
| |||
STRUCTURE_CONFIRMED (CHoCH EVENT after sweep, fresh; window W_choch)
| |||
|
| |||
v
| |||
ZONE_READY (price inside an UNMITIGATED OB|FVG zone;
| |||
zone mitigation terminates -> INVALIDATED)
| |||
|
| |||
v
| |||
ENTRY_ARMED (M15 entry condition holds; displacement may boost)
| |||
|
| |||
v
| |||
CANDIDATE_SETUP (COMPLETE — the chain is whole; direction fixed)
| |||
|--(optional M3 alignment)--> M3_CONFIRMED (micro-confirmed)
| |||
|--(setup validity window exceeded)-------> EXPIRED
| |||
|--(zone mitigated / contrary CHoCH / context break) -> INVALIDATED
| |||
|--(entry signal emitted from this setup)--> CONSUMED
| |||
```
| |||
| |||
Transition rules:
| |||
```text
| |||
- Every stage requires the previous stage ACTIVE (no skipping).
| |||
- Sweep and CHoCH are EVENTS: they set the stage at onset; the stage expires
| |||
when its validity window lapses.
| |||
- A stage expiry BEFORE CANDIDATE_SETUP discards the forming setup (it never
| |||
becomes a Candidate Setup; recorded EXPIRED/INVALIDATED for diagnostics).
| |||
- ZONE_READY requires an UNMITIGATED zone at every decision bar.
| |||
- ENTRY_ARMED is re-evaluated per closed M15 bar (price may leave the zone;
| |||
the setup is NOT destroyed by exit; it waits for re-entry within its
| |||
validity window).
| |||
- CANDIDATE_SETUP is the terminal FORMATION state; EXPIRED/INVALIDATED/
| |||
CONSUMED are terminal, NON-REVERSIBLE (no reactivation).
| |||
- AT MOST ONE entry signal per setup (CONSUMED); a new setup requires a new
| |||
chain (dedup by identity).
| |||
- M3_CONFIRMED is optional: absence does not invalidate; a contrary M3
| |||
reduces only the micro-score (OD-4).
| |||
```
| |||
| |||
---
| |||
| |||
## G. ONE-SETUP-ONE-IDENTITY RULE (frozen)
| |||
| |||
```text
| |||
ONE CAUSAL SETUP = ONE SETUP IDENTITY.
| |||
| |||
A Candidate Setup must NOT be recreated every bar. The identity (§E) is
| |||
derived from dated chain components; while the chain's stages remain active,
| |||
the same identity persists across bars. Deduplication is BY CONSTRUCTION:
| |||
a new setup exists only when a NEW chain completes (new sweep onset /
| |||
new CHoCH / new zone reference), producing a distinct identity.
| |||
```
| |||
| |||
---
| |||
| |||
## H. ONE-ENTRY RULE (frozen)
| |||
| |||
```text
| |||
MAXIMUM ONE ENTRY SIGNAL PER SETUP.
| |||
| |||
A setup that has emitted its entry signal is CONSUMED and cannot re-emit.
| |||
Multiple entries require multiple setups (multiple chains). This is the
| |||
project default and is ADOPTED (no evidence in project intent for
| |||
multiple entries per setup; legacy B fires one signal per gate pass).
| |||
```
| |||
| |||
---
| |||
| |||
## I. SCORE SEPARATION (frozen)
| |||
| |||
```text
| |||
SCORE != SETUP EXISTENCE.
| |||
| |||
- The flat aggregator (weighted vote) becomes a SCORING/RANKING function over
| |||
VALID setups (P3-S.9 §M.1, resolves D-9/D-1 partially).
| |||
- A score cannot create a setup; a setup can exist with any score.
| |||
- Scoring may rank setups (e.g., confluence, weight, confidence) but never
| |||
substitutes for the chain.
| |||
- The aggregated vote may still produce a DIRECTIONAL SIGNAL without a setup
| |||
(§J) — that is a bias, not an entry recommendation.
| |||
```
| |||
| |||
---
| |||
| |||
## J. SIGNAL SEPARATION (frozen)
| |||
| |||
```text
| |||
SIGNAL != CANDIDATE SETUP.
| |||
| |||
Two signal concepts are distinguished:
| |||
1. DIRECTIONAL SIGNAL (informational): the aggregated vote / any single-TF
| |||
bias. MAY exist without a Candidate Setup (H4-only, M30-only, M15-only
| |||
signals remain possible). This is NOT an entry instruction.
| |||
2. ENTRY SIGNAL (actionable): BUY/SELL with entry/SL/TP. MAY ONLY be emitted
| |||
when bound to a VALID CANDIDATE_SETUP (or M3_CONFIRMED) entity.
| |||
Resolves P3-S.8 D-9 and P3-S.9 §M.1.
| |||
| |||
Consequence (P3-S.7 S-N/S-C overridden AT THE SETUP LAYER only):
| |||
- H4-only BUY may exist as a DIRECTIONAL SIGNAL.
| |||
- H4-only BUY may NOT create a Candidate Setup (context gate alone is a
| |||
STATE, not a setup).
| |||
```
| |||
| |||
---
| |||
| |||
## K. EVENT / ZONE / STATE / ATTRIBUTE / CONDITION CONTRACT (frozen)
| |||
| |||
```text
| |||
EVENT (sweep, choch, m3):
| |||
{ timestamp : onset bar open time
| |||
direction : +1 / -1 / 0
| |||
valid_until : timestamp + validity window (unit: bars of its TF)
| |||
superseded : bool — a newer onset of the same type replaced it
| |||
source : detector/feature id (e.g., f7, AF_DetectSweep) }
| |||
Consumers may read ONLY within [onset, valid_until] and only if NOT
| |||
superseded. (Fixes root causes A, C, D.)
| |||
| |||
ZONE (OB, FVG):
| |||
{ timestamp : formation timestamp (OB = open of candle B; FVG = open of C3)
| |||
direction : +1 / -1
| |||
upper_bound : zone top
| |||
lower_bound : zone bottom
| |||
mitigation_state : UNMITIGATED | MITIGATED
| |||
invalidated : bool (setup-level terminal flag) }
| |||
Consumers may read ONLY unmitigated, non-invalidated zones.
| |||
Mitigation: OB = close-through full fill (P3-S.5 S-9);
| |||
FVG = wick full-fill (P3-S.4 S-9 legacy canonical).
| |||
(Fixes root causes B, D.)
| |||
| |||
STATE (H4 narrative, M30 context):
| |||
{ value : +1 / -1 / 0
| |||
as_of : closed bar timestamp
| |||
timeframe : H4 | M30 }
| |||
Consumers may read the NEWEST closed value only. (Fixes root cause A.)
| |||
| |||
ATTRIBUTE (displacement):
| |||
{ value : +1 / -1 / 0
| |||
bar_timestamp : the closed bar it was evaluated on
| |||
timeframe : M15 (canonical consumer) }
| |||
No persistence, no expiry (already conforming, P3-S.6).
| |||
| |||
CONDITION (M15 entry, M3 micro):
| |||
{ boolean : true / false
| |||
as_of : closed bar timestamp
| |||
timeframe : M15 | M3
| |||
reason : human-readable stage reference }
| |||
The E-rule output, re-evaluated each closed bar. (Fixes D-11.)
| |||
| |||
CONSUMER CONTRACT (the rule that prevents the f7/f9/f18 bug class):
| |||
- A consumer of an EVENT must apply its validity window.
| |||
- A consumer of a ZONE must apply mitigation/invalidation.
| |||
- A consumer of a STATE must use the as-of closed value.
| |||
- A consumer of a SETUP must use identity + lifecycle, never raw detector
| |||
states.
| |||
```
| |||
| |||
---
| |||
| |||
## L. MTF AS-OF CONTRACT (frozen)
| |||
| |||
```text
| |||
For a decision at M15 timestamp t (decision bar = newest CLOSED M15 bar):
| |||
| |||
H4_asof(t) : newest CLOSED H4 bar with close_time <= t
| |||
M30_asof(t) : newest CLOSED M30 bar with close_time <= t
| |||
M15_asof(t) : newest CLOSED M15 bar with close_time <= t (= decision bar)
| |||
M3_asof(t) : newest CLOSED M3 bar with close_time <= t
| |||
| |||
Invariants (must hold for EVERY decision):
| |||
H4_close_time <= t
| |||
M30_close_time <= t
| |||
M15_close_time <= t
| |||
M3_close_time <= t
| |||
| |||
Rules:
| |||
- latest CLOSED bar only; no future bar; no partial HTF candle.
| |||
- Mechanism: Engine 1 closed-bar lock (P3-S.7 S-T) — cache holds ONLY
| |||
closed bars; the forming bar is dropped at Build.
| |||
- Deterministic HTF-close visibility: a new H4 bar closed at 04:00 becomes
| |||
visible at the first decision time t >= 04:00 (P3-S.7 S-T).
| |||
```
| |||
| |||
---
| |||
| |||
## M. VALIDITY-WINDOW CONTRACT (OD-3)
| |||
| |||
Each primitive has its OWN validity semantics. A single global SeqWindow is
| |||
NOT reused everywhere.
| |||
| |||
| Window | Primitive | Unit | Start | End condition | Numeric |
| |||
|---|---|---|---|---|---|
| |||
| W_sweep | Liquidity EVENT | M15 bars | sweep onset bar b | b + W_sweep | **40** (justified: InpSeqWindow=40, P3-S.0/P3-S.2 R-H) |
| |||
| W_choch | CHoCH/MSS EVENT | M15 bars | CHoCH onset bar b' | b' + W_choch | **40** (justified: legacy gate freshness, P3-S.3 S-9/S-10) |
| |||
| W_zone_age | OB/FVG ZONE | M15 bars | zone formation | no age expiry (mitigation/invalidation only) | **NONE by semantics** (P3-S.4 S-8, P3-S.5 S-8); an explicit cap = OPEN NUMERIC PARAMETER |
| |||
| W_m3 | M3 micro-confirmation | M3 bars | setup formation | setup validity end | OPEN NUMERIC PARAMETER (optional; absence does not invalidate) |
| |||
| W_setup | Candidate Setup | M15 bars | creation timestamp | creation + W_setup | OPEN NUMERIC PARAMETER (no project semantics justify a value; must NOT be selected from performance) |
| |||
| |||
Chain-ordering bound (causal, not a window):
| |||
```text
| |||
sweep onset <= CHoCH onset (CHoCH after the sweep)
| |||
CHoCH onset <= sweep onset + W_sweep (sweep still fresh when CHoCH occurs)
| |||
decision t <= CHoCH onset + W_choch (CHoCH still fresh at decision)
| |||
zone leg : unmitigated at every decision bar
| |||
```
| |||
| |||
Terminal semantics per primitive:
| |||
```text
| |||
- EVENT : expiration = EXPIRED after window; supersession = newer onset;
| |||
consumption = read-only (consumers read; the SETUP consumes stages).
| |||
- ZONE : expiration = NONE (persistent); invalidation = mitigation is the
| |||
terminal usable-state; setup-level INVALIDATED marks the zone
| |||
reference dead inside that setup.
| |||
- STATE : no lifecycle (recomputed per closed bar).
| |||
- ATTRIBUTE : no lifecycle (per-bar).
| |||
- SETUP : EXPIRED / INVALIDATED / CONSUMED (terminal, non-reversible).
| |||
```
| |||
| |||
OPEN NUMERIC PARAMETERS (recorded, NOT selected from performance):
| |||
```text
| |||
W_setup : post-formation Candidate Setup validity (M15 bars).
| |||
W_m3 : M3 confirmation lookback after setup formation (M3 bars).
| |||
W_zone_age : optional cap on zone age (default: none — project semantics).
| |||
FVG min-gap / OB min-size / zone-consumer scope : F2/F6 scope (P3-S.4 A-1,
| |||
P3-S.5 A-1/A-3/A-5).
| |||
```
| |||
| |||
---
| |||
| |||
## N. MTF CONFLICT POLICY (OD-4)
| |||
| |||
```text
| |||
For the SETUP LAYER (frozen):
| |||
| |||
H4 <-> M30 conflict (opposite signs):
| |||
Candidate Setup = BLOCKED (context gate fails).
| |||
| |||
H4/M30 compatible, M15 chain conflicts with H4 or M30:
| |||
Candidate Setup = BLOCKED (gate fails). NOT arithmetic.
| |||
| |||
M3 conflict (contrary micro-confirmation):
| |||
M3_CONFIRMED = FALSE.
| |||
The Candidate Setup MAY remain valid (M3 is optional).
| |||
A contrary M3 reduces ONLY the micro-score.
| |||
| |||
CANONICAL AUTHORITY:
| |||
H4/M30 = directional context GATES
| |||
M15 = setup authority (the chain carrier)
| |||
M3 = optional micro confirmation (no veto, no arithmetic role)
| |||
| |||
No arithmetic voting resolves setup-layer conflicts. The flat aggregator
| |||
may continue to exist LATER as a scoring/signal layer, but it is NOT the
| |||
canonical definition of Candidate Setup.
| |||
```
| |||
| |||
---
| |||
| |||
## O. CANONICAL ORDER BLOCK SEMANTICS (OD-5)
| |||
| |||
```text
| |||
CANONICAL OB (frozen):
| |||
Formation : opposite-color closed candle B immediately before a strong-move
| |||
closed candle M; |body(M)| >= 1.5 x avg body (20-bar mean).
| |||
Zone : full range of B: [Low(B), High(B)].
| |||
Direction : +1 bullish (bearish B + bullish M); -1 bearish; 0 none.
| |||
Structural precondition : NONE (BOS/CHoCH/displacement/liquidity NOT
| |||
required for OB detection — P3-S.5 S-5).
| |||
Mitigation: close-through full fill (P3-S.5 S-9).
| |||
Invalidation: not modeled at zone level; setup-level flag per §K.
| |||
| |||
ADJUDICATION (explicit answers to the A/B/C/D/E question):
| |||
A. YES — the OB "strong move" (1.5x avg body) is INTENTIONALLY a simpler
| |||
proxy for Displacement (1.6x avg body): same concept family, lower
| |||
threshold, ZONE-FORMATION gate (P3-S.6 §7 answer B, adopted).
| |||
B. NO — OB does NOT require canonical Displacement as an input.
| |||
Displacement remains an independent OPTIONAL confirmation attribute
| |||
(P3-S.6 S-5/S-7/S-13). The 1.5 vs 1.6 constants are KEPT SEPARATE and
| |||
documented (BUG-P3S6-001 -> DOCUMENT ONLY, F6) — unifying would modify
| |||
a validated CONFORMING detector and conflate two distinct roles
| |||
(zone-formation gate vs confirmation attribute).
| |||
C. NO — OB does NOT require BOS/CHoCH. The legacy structure-break
| |||
definition (P3-S.5 A-2) is historical and non-canonical. In the
| |||
canonical Candidate Setup chain the CHoCH stage ALREADY supplies the
| |||
structural confirmation; a separate OB structural-break requirement is
| |||
REDUNDANT (it would re-require a structure event the chain already
| |||
demands and would create an inconsistency with the FVG alternative,
| |||
which has no structural requirement).
| |||
D. The canonical OB = (opposite-color candle B) + (strong move M,
| |||
1.5x avg) + (zone = full range of B) + (unmitigated until close-through
| |||
full fill). No additional combination.
| |||
E. RESOLVED — not left open.
| |||
| |||
SUPERSEDED BY OD-5: any reading of SMC_ORDER_BLOCK_SPEC_v1.md §5 that
| |||
treats the legacy structure-break definition as canonical for the setup
| |||
layer. The spec's CANONICAL current definition (S-1..S-9) is CONFIRMED
| |||
unchanged.
| |||
```
| |||
| |||
---
| |||
| |||
## P. SOURCE OF THE CONTRACT (evidence anchors)
| |||
| |||
```text
| |||
- Chain shape : the project's own legacy v4.x institutional gate
| |||
(P3-S.8 Definition B), the only real setup state machine.
| |||
- Causal order : the brief's causal order (Liquidity -> Structure Change ->
| |||
Zone -> Return -> Confirmation) + DESIGN.md top-down order.
| |||
- M3 optional : P3-S.7 S-P evidence ("M3 is NOT mandatory; can only reduce
| |||
support arithmetically").
| |||
- M15 entry : the E-rule (Definition A) retained ONLY as the M15
| |||
entry-condition predicate inside the chain (P3-S.9 D.1).
| |||
- Windows : W_sweep/W_choch = 40 from InpSeqWindow origin
| |||
(P3-S.0/P3-S.2/P3-S.3), NOT from performance.
| |||
- Identity/lifecycle/contracts : P3-S.9 §G/§H/§I design contracts, frozen.
| |||
- As-of : P3-S.7 S-T closed-bar lock.
| |||
```
| |||
| |||
---
| |||
| |||
## Q. NON-GOALS OF THIS CONTRACT
| |||
| |||
```text
| |||
- NO ML pipeline change (D1/H4/H1 training semantics untouched this session).
| |||
- NO FEATURE_CONTRACT.md modification.
| |||
- NO production code change (no .mq5/.mqh/.py modified).
| |||
- NO numeric selection from AUC/PF/profit/backtest.
| |||
- NO human verification restart.
| |||
- NO legacy v4.x code restoration (semantics extracted only).
| |||
```
| |||
| |||
*End of SNIPERGOLD_CANONICAL_SETUP_CONTRACT_v1.*
|