# AI_ICT Doctrine Kernel Time / Session Kernel D5 2026-05-22 v1 ## Scope D5 rebuilds time and session from loose labels into measurable session-quality gates. This slice follows `docs/ICT交易全书_出版终校版.md` and keeps the hard mainline chain: `Range / Draw / Location -> Liquidity / Sweep / Inducement / Path -> Displacement / MSS / FVG / Retest / Session -> backtest evidence -> pre-market plan -> intraday unique focus or no-trade reason -> journal / study-notes feedback`. ## Product Rule Asia, London, NY AM, NY PM, killzone, Judas/manipulation window, opening range, weekly profile, and news/no-trade time are not buy/sell signals. They can only qualify or block a setup after the system can state: - the exact session code and whether the candidate occurred inside a verifiable session window, - whether the active Trading Plan allows that session, - the killzone name and state, - whether Judas/manipulation is still in a wait-only phase, - whether the opening range reference is resolved, - the weekly/day profile, - whether a news or low-liquidity no-trade window is active, - the session-specific invalidation. If those items are missing, Strategy Backtest and Trader Cockpit must keep the setup as `study_only` or `wait`. ## Implemented Kernel Code anchor: `src/services/ict_mainline/doctrine.py` New phase: - `DOCTRINE_SESSION_PHASE = D5_TIME_SESSION_KERNEL` New registry/API: - `GET /trading/time-session-kernel` - `build_time_session_kernel_registry` - `list_time_session_rules` New backtest surface fields: - `time_session_backtest_features` - `time_session_kernel_status` - `time_session_kernel_summary` - `time_session_kernel_status_counts` - `time_session_kernel_reason_counts` - `by_time_session_code` ## D5 Rules 1. `session_window_verifiable` Session names are context windows. A setup must prove it occurred inside the allowed session window. 2. `killzone_reaction_window` Killzone is a timing filter only. It cannot create direction or override missing Range / Draw / Location. 3. `judas_manipulation_sequence` Judas/manipulation is wait-only until post-manipulation confirmation exists. 4. `opening_range_delivery_state` Opening range defines early reference and delivery state. Early motion is not enough. 5. `weekly_profile_alignment` Weekly/day profile must be declared before an intraday setup can be promoted. 6. `news_time_no_trade_guard` High-impact news and thin-liquidity windows are explicit no-trade guards. ## Promotion Gate The D2 playbook now requires D5 Time / Session fields before promotion: - `session_code` - `session_window_state` - `allowed_sessions` - `killzone_name` - `killzone_state` - `judas_window_state` - `opening_range_state` - `weekly_profile` - `news_window_state` - `session_invalidation` The Doctrine Backtest Cohort now blocks promotion unless: - D2 playbook schema is complete, - D3 Liquidity Kernel passes, - D4 PD Array / Reaction Kernel passes, - D5 Time / Session Kernel passes, - Strategy Backtest quality gate passes, - active Trading Plan gate passes. ## Read-Only Boundary D5 does not add order submission, does not change `execution_allowed`, does not change `decision_support_ready`, does not change `real_live_ready`, and does not loosen risk governor / trust bucket / operator confirmation protocol. ## Next Slice D6 should rebuild the Model Playbook Kernel: convert the book-derived models into full setup playbooks with required Range / Draw / Liquidity / PD Array / Session / Confirmation / Invalidation / Target fields and batch-backtest cohorts.