| | | **signal** — which trades we take and on which side (selection, ranking, direction) |
| | | **freshness** — whether the information is still actionable when the order fills |
| | | **exit** — closing a position correctly and on time |
| | | **cost** — money or attention spent to run the system (LLM/API spend, churn, pages) |
| | | **risk** — exposure control: duplicate, opposed or unbounded positions, and hangs |
| Aug-21 | #253 | owner | 1b shadow arms journal L1 signal, arms A/B and regime labels each close pass — expect: cost, shadow_sessions.elapsed_ms <1000, zero new pages |
| Aug-18 | #242 | owner | S4 winners fighting the session move ≥0.5% skip at close, journaled to s4_alignment_skips — expect: signal, counter-move S4 entries → 0 |
| Aug-18 | #241 | owner | dedup + rate-limit the ⚠️/🆘 page channel (5/10min, 10/hr) — expect: cost, ⚠️ pages on an outage day (7,520 on 08-17) → <30 |
| Aug-14 | #228 | coach | unverdictable queued fills defer + retry to open+90m, not one-shot cancel — expect: freshness, "stale at fill" cancels ↓ (10 on 08-13 → ~0/wk) |
| Aug-13 | #226 | coach | S1-S3 skip a REPRICING entry already ≥1.5% in its own direction — expect: freshness, in-direction 1.5-2.0 entries (~2/session, -$60/3d) → 0 |
| Aug-08 | #222 | coach | the quiet [1.0, 2.0) verdict band is REPRICING, not PRICED — expect: signal, sub-2.0 "verdict PRICED" skips → 0 |
| Aug-06 | #216 | coach | dead quote leg pages after 30m; stale quotes go UNKNOWN, not prior-session prices — expect: freshness, next total stall pages (08-06: 0 in 4h53m) |
| Aug-06 | #212 | owner | weekly gauges add a news_age ledger, S1-S3 + S4's own window — expect: signal, S4 age-skip damage 0 → a graded weekly counterfactual |
| Aug-06 | #211 | owner | exits landing after the coach gathers carry into the next report — expect: signal, closed trades absent from every daily report → 0 |
| Aug-06 | #209 | owner | ER title dedup suppresses only against a still-classifiable prior, matching Alpaca — expect: signal, classify-eligible ER duplicates ~+1/day |
| Aug-06 | #207 | owner | LLM report retries wait 10 real minutes after a failure, not the next bucket — expect: cost, ladders burning a full attempt budget in <25 min → 0 |
| Aug-05 | #206 | coach | fill re-verdicts cancel PRICED only at |since| ≥ 2.0, not the 1-2% fallthrough band — expect: freshness, sub-2.0 stale-at-fill cancels ~3/day → 0 |
| Aug-05 | #203 | owner | weekly shadow reviewer runs even when the official arm gives up — expect: cost, Mondays ending with zero weekly reviews of either arm → 0 |
| Aug-05 | #202 | owner | weekly article_funnel splits counts + latency by provider — expect: freshness, weekly grades #177 per-provider, never off the blend |
| Aug-05 | #198 | owner | per-role model+reasoning+provider pins; journal the served provider — expect: cost, coach/shadow/weekly/audit rows with a NULL reasoning → 0 |
| Aug-05 | #193 | coach | post-close S4 enters skip at decision time; pending S4 bounded to its own session — expect: risk, S4 post-close failed/orphaned enters → 0 |
| Aug-04 | #188 | owner | coach gets materiality×age bands, freshness regime, newly-live PRs — expect: signal, coach recommendations citing a named aggregate row ↑ (was 0) |
| Aug-03 | #185 | coach | prev_close from daily_bars, not Yahoo 1d (lags till open) — expect: signal, pre-open prev_close != prior close → 0; stale-at-fill cancels → 0/wk |
| Aug-03 | #179 | owner | all 4 strategies skip a candidate whose news is already >4h old at decision — expect: freshness, trades entered on news >4h old → 0 |
| Aug-03 | #177 | owner | Alpaca news leg (tier-2, 30s wake) — expect: freshness, alpaca median publish→detect ≥5x lower than ER, per-provider never blended |
| Aug-01 | #172 | owner | 4-wide concurrent classify + a same-tick fast pass for priority-tier articles — expect: freshness, opening-tick drain ~21m → under 6m |
| Aug-01 | #168 | owner | coach gathers + coach_hold key exits off ET day, closing #148's UTC divergence — expect: cost, zero deltas on 422 historical closed trades |
| Aug-01 | #166 | owner | priority+newest-first classify dispatch, 4h starvation ceiling — expect: freshness, alerting-article classify wait p50 29.0m → under 10m |
| Jul-31 | #153 | owner | shadow coach report also sent to Telegram (👥), unblinding the human A/B — expect: cost, restart-day duplicate shadow sends stay 0 |
| Jul-31 | #155 | owner | staged Monday weekly reviewer + three edge-bps gauges — expect: cost, +1 LLM call/wk (2 with shadow), daily spend unchanged |
| Jul-31 | #151 | owner | auditor trigger keys off ET exit day (coach gathers / app.coach_hold stay UTC, #152) — expect: cost, late exits flip audit fire/no-fire (0/414) |
| Jul-31 | #147 | owner | classifier escape hardened (bracket swap, control + slice-tail openers) + report tripwire — expect: risk, live tags reaching a prompt → 0 |
| Jul-31 | #146 | owner | retro reflections neutralize the decision rationale in a delimited block — expect: risk, hostile rationale text inert; benign ones unchanged |
| Jul-31 | #143 | coach | S2/S3 entries require materiality ≥ 75 — expect: signal, S2/S3 entries ↓, combined S2/S3 P&L/wk from ≈ −$108 toward ≥ −$30 |
| Jul-30 | #140 | owner | coach deadline 240→480s + heartbeat beaten before each long LLM call — expect: cost, shadow coach 240s timeouts → 0, watchdog kills unchanged |
| Jul-30 | #139 | owner | malformed OpenRouter envelopes (#135) raise a named, bounded error — expect: cost, opaque KeyError('choices') failures name the model + reason |
| Jul-30 | #138 | owner | evening bad-day auditor, market/selection/timing split — expect: cost, fires <=1 per 10 sessions (measured 1 of 11), no LLM call otherwise |
| Jul-30 | #137 | owner | freshness journaled off publisher stamp (dateTimePub), guarded fallback — expect: freshness, median publish->alert ~6.6m->~11m (honest baseline) |
| Jul-30 | #134 | owner | malformed HTTP-200 classifier envelope no longer raises — expect: cost, envelope raise→page-storm eliminated; now per-attempt /logs WARNING(s) |
| Jul-30 | #131 | owner | coach prompt restructured into XML sections, ask restated at end — expect: cost, reports citing scaffolding as journal fact 6/11→0 |
| Jul-30 | #130 | owner | classifier prompt escape hardened (open tag + summary boundary) — expect: signal, structural delimiter breakout closed (not semantic injection); clean articles unchanged |
| Jul-30 | #128 | owner | reasoning knob + mandatory-400 self-heal — expect: cost, mandatory-reasoning 400s→self-heal, no page-storm; qwen cost/latency unchanged |
| Jul-30 | #126 | coach | 14-day aggregates added, rows compact-encoded — expect: cost, coach prompt_chars 460k→~310k with no report-quality drop |
| Jul-30 | #121 | owner | coach runs on its own 240s deadline (was retro's 120s); shadow retries bounded — expect: cost, coach timeout pages ↓, shadow rows 0→1/day |
| Jul-30 | #120 | coach | S1 joins the S2/S3 tape gate at 1.0% — counter-tape primary entries skip — expect: risk, worst-day S1 loss ↓ with net gated P&L ≈ 0 |
| Jul-29 | #117 | owner | poller pages capped ticks to their tail (≤5×100) on a close-safe classify budget; ceiling 1500 — expect: signal, capped-tick tail drops 22%→~0 |
| Jul-28 | #108 | coach | equal-mat opposite signals conflict-hold — only strictly higher flips S1-S3 — expect: risk, same-day S1-S3 flips per ticker ↓ |
| Jul-28 | #105 | owner | daily_bars self-heals — gap check widens post-close fetch to 2y — expect: cost, daily_bars holes closed with no manual backfill |
| Jul-27 | #104 | coach | S4's overnight winner re-verdicts at close-fill — stale signals cancel — expect: freshness, S4 entries filling already-PRICED → 0 |
| Jul-27 | #101 | owner | optional shadow coach model journals a second daily report for a blind A/B — expect: cost, +1 coach call/day now to price a cheaper coach later |
| Jul-27 | #100 | owner | coach prompt condensed — repeated skips roll up with counts, floats at 2dp — expect: cost, coach prompt chars ↓ from 445,863; $/day ↓ from $2.61 |
| Jul-27 | #98 | owner | retro prompt carries decision-time price context, so timing is answerable — expect: signal, retros naming a timing cause ↑ |
| Jul-27 | #96 | owner | retros diagnose signal/timing/exit; coach recommendation must be falsifiable — expect: signal, coach recs with a gradeable effect ↑ to 100% |
| Jul-25 | #88 | owner | outbound HTTP calls under a conditional elapsed-time deadline, not per-op timeout — expect: risk, loop stalls past the deadline → 0 |
| Jul-25 | #82 | owner | /ticker pages + journaled daily_bars — post-close Yahoo upsert, fail-soft — expect: cost, one bars fetch/day, zero external calls per page view |
| Jul-24 | #75 | coach | cross-strategy S1-S3 netting — one book per ticker, materiality-resolved — expect: risk, opposed same-ticker S1-S3 positions → 0 |
| Jul-23 | #63 | coach | queued entries re-verdict at fill time — PRICED/UNKNOWN/stale-quote cancels — expect: freshness, queued fills entering already-PRICED → 0 |
| Jul-23 | #59 | owner | qualifyContracts bounded 30s — stale Gateway fails, no loop hang — expect: risk, loop hangs on a half-open Gateway → 0 (was one 2.5h hang) |
| Jul-23 | #54 | owner | post-close S1-S3 signals skip with rationale — no doomed after-hours order — expect: exit, entries with no reachable same-day close → 0 |
| Jul-22 | #50 | coach | S4 overnight slot resolves at close — highest-materiality signal wins — expect: signal, first-signal-wins S4 entries → 0 |
| Jul-22 | #42 | owner | exit-side order-outcome verification — closes the double-exit race — expect: exit, duplicate exits from a fill/cancel race → 0 |
| Jul-22 | #41 | owner | stop retrying after 5 failed exits — status=stuck, pages 🆘 once — expect: exit, unbounded exit retries → 0; one page per stuck trade |
| Jul-21 | #37 | coach | S1-S3 get per-(ticker,exit_due) first-signal-wins position control — expect: risk, duplicate same-ticker S1-S3 positions ↓ |
| Jul-21 | #31 | owner | trades.error journals why an entry failed — shown in Failed tab, fed to coach — expect: risk, failed entries with no recorded cause → 0 |
| Jul-21 | #30 | owner | exit robustness — 09:30 journal-vs-IB reconcile + 10-min exit_missed retries — expect: exit, trades left open past exit_due ↓ |
| Jul-21 | #29 | coach | pre-open S1-S3 entries journal as queued, filled at the 09:30 open pass — expect: signal, pre-open S1-S3 signals traded, not dropped ↑ |
| Jul-21 | #24 | owner | per-article timestamps — each article stamped at its own turn, not per batch — expect: freshness, detected_at skew within a batch → 0 |
| Jul-20 | #15 | owner | classified_gate journals why a classified article produced no alert — expect: signal, classified articles with no recorded gate → 0 |
| Jul-20 | #10 | owner | Telegram quiet mode — errors + digests only; per-entry + news lines gone — expect: cost, Telegram messages/day ↓ to exceptions + digests |
| Jul-17 | #8 | coach | S4 verdict gate — overnight entries only on FRESH/REPRICING; else a skip — expect: freshness, S4 entries on a PRICED alert → 0 |
| Jul-17 | #6 | owner | coach reads classification journal — aggregates + capped tails for calibration — expect: signal, coach recs grounded in classifier calibration ↑ |
| Jul-17 | #4 | owner | story-level news dedup — two-pool rehash context + per-article journal — expect: cost, duplicate-story classifier calls ↓ |
| Jul-16 | #2 | coach | S4 position control — one open position per ticker+exit_due — expect: risk, duplicate S4 positions per ticker → 0 |