Skip to content

feat(regime): executor drawdown-leg posture override (PR 4, gated default-off)#193

Merged
cipher813 merged 1 commit into
mainfrom
feat/drawdown-regime-posture
May 19, 2026
Merged

feat(regime): executor drawdown-leg posture override (PR 4, gated default-off)#193
cipher813 merged 1 commit into
mainfrom
feat/drawdown-regime-posture

Conversation

@cipher813
Copy link
Copy Markdown
Owner

What

PR 4 of the drawdown-regime arc — the executor consumer. Mirrors the Stage-F forced-bear posture override. Gated drawdown_regime_enabled (risk.yaml, default false) → zero behavior change on merge. Reads the regime/drawdown/latest.json artifact predictor PR #177 already produces (no dependency on the predictor-veto PR #178). Plan: regime-drawdown-hysteresis-260518.md; ROADMAP alpha-engine-config #230 (P1).

Changes

  • executor/signal_reader.pyread_drawdown_substrate (mirror of read_fast_signal, canonical regime/drawdown prefix) + extract_drawdown_effective_regime (handles the nested compose_effective_regime dict and a bare string; None/malformed → None ⇒ no override).
  • executor/main.py planner — new 2b''' block after the forced-bear block. Ungated read every cycle (parallel-observe), gated behavior. The override is most-protective (rank bull<neutral<caution<bear): drawdown bear forces bear; caution raises neutral/bull → caution but never lowers an already-bear posture (e.g. one a forced_bear override just set) — strictly no downgrade. Flag off ⇒ counterfactual logged, no behavior change. Same try/except resilience as the forced-bear block.
  • config/risk.yaml.exampledrawdown_regime_enabled: false + doc, sibling to regime_forced_bear_enabled (observe→promote gate, plan §5).
  • tests — new tests/test_regime_drawdown_executor.py (+17): extract-shape matrix, canonical-prefix read, None-artifact composes to None ⇒ no override (mirrors test_regime_fast_signal_executor.py).

Tests

17 targeted + 146 (-k "regime or signal_reader or forced_bear or drawdown") + 78 (-k "main or planner or risk_guard or posture") pass, zero failures; main.py/signal_reader.py byte-compile clean.

Arc status

#176 ✅ · #177 ✅ · #178 ✅ (predictor-veto) · #this (executor posture) · remaining: research brief + macro prompt · dashboard observe panel · config EXPERIMENTS gate + SYSTEM_STATE/ROADMAP.

🤖 Generated with Claude Code

…ault-off)

PR 4 of the drawdown-regime arc — executor consumer. Mirrors the
Stage-F forced-bear posture override. Gated drawdown_regime_enabled
(risk.yaml, default false) → zero behavior change on merge. Plan:
regime-drawdown-hysteresis-260518.md; ROADMAP config #230.

- signal_reader.py: read_drawdown_substrate (regime/drawdown/latest.json,
  mirror of read_fast_signal) + extract_drawdown_effective_regime
  (handles the nested compose_effective_regime dict + a bare string;
  None/malformed → None ⇒ no override).
- main.py planner: new "2b'''" block after the forced-bear block.
  UNGATED read every cycle (parallel-observe), GATED behavior. Override
  is MOST-PROTECTIVE (rank bull<neutral<caution<bear): drawdown "bear"
  forces bear, "caution" raises neutral/bull → caution but never lowers
  an already-bear posture (e.g. one forced_bear just set) — no
  downgrade. Flag off ⇒ counterfactual logged, no behavior change.
  Same try/except resilience as the forced-bear block.
- risk.yaml.example: drawdown_regime_enabled: false + doc, sibling to
  regime_forced_bear_enabled (observe→promote gate, plan §5).
- tests/test_regime_drawdown_executor.py: +17 — extract shape matrix
  (nested/bare/None/non-dict/missing/empty/non-string), canonical
  prefix read, None-artifact composes to None (⇒ no override).

17 targeted + 146 regime/signal_reader + 78 planner/risk_guard tests
pass, zero failures; main.py compiles.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@cipher813 cipher813 merged commit b80dba1 into main May 19, 2026
1 check passed
@cipher813 cipher813 deleted the feat/drawdown-regime-posture branch May 19, 2026 02:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant