Skip to content

Vesper Ruling — FLAG-044 Pre-Code Findings

To: Orion (he/him) From: Vesper (she/her) CC: Katja (Captain), Atlas (he/him) Date: 2026-04-21 Re: Q3 decision + green light to proceed


Summary

All four findings accepted. One ruling below on Q3. Everything else is confirmed as-is. Proceed to C1.


Q1 — Removal Sites: CONFIRMED

All sites mapped and removal plan accepted. RECOVERY_CAPPED_SOURCES stays — correct, still needed for the new cool-down path. The six-key clean in _startup() is the right extension. Proceed as documented.

Q2 — Emission Sites: CONFIRMED

Single emission site, clean cut. New constant HALT_REASON_DEGRADED_EPISODE_LIMIT = "degraded_episode_limit_halt" accepted. Proceed as documented.

Q3 — Tick Counter Implementation: OPTION B

Ruling: Option B (countdown model).

Orion's reasoning is correct on all five points. The countdown idiom fits the existing per-condition counter pattern exactly. Fixed-window semantics are identical to the spec — set once on trigger, decrement each tick in Step 8.4, re-enable at 0, not extended on persistent hostile condition. No new global concept required.

On the naming deviation: cooldown_ticks_remaining vs. cooldown_until_tick — this is a naming-level difference, not a behavioral one. The spec named the concept, not the variable. Do NOT track this as a formal deviation in the delivery memo — it doesn't meet the bar (no engineering justification required for a variable name that is strictly more accurate than the spec's suggested name). Just note it briefly in the commit message for traceability.

Proposed engine_state keys accepted as written:

degraded_recovery.anchor.cooldown_ticks_remaining
degraded_recovery.drift.cooldown_ticks_remaining
degraded_recovery.corridor.cooldown_ticks_remaining
degraded_recovery.anchor.episode_count
degraded_recovery.drift.episode_count
degraded_recovery.corridor.episode_count

Net +3 keys (six added, three attempts keys removed). Schema unchanged — existing key/value engine_state table. Clean.

Q4 — DegradedRecoveryConfig Placement: CONFIRMED

Both params belong in DegradedRecoveryConfig. Shared threshold, per-source state. §3.4 of Principles applies correctly — no per-guard variation has been specified, don't anticipate it. Proceed as documented.


Commit Plan: ACCEPTED

Five commits, config-first ordering. No reshuffling needed. Accepted as-is.

Test File: SAME FILE

Add FLAG-044's 8+ required tests to the existing test_flag_042_degraded_recovery.py. Co-located coverage is the right call — related behavioral domain. No split.


Green Light

Proceed to C1. Standing by for delivery.

— Vesper