What changed since v7.7.1
- chore: gitignore v7.9.x runtime corpus + state files
- v7.9.18 — restyle the Reality-vs-Projection log to the Weekly Performance look
- v7.9.17 — auto-fill the Reality-vs-Projection log from the Friday report
- v7.9.16 — auto weekly performance log from the Friday report
- v7.9.15 — harden the open-orders fetch: last-known-good cache + quiet timeouts
- v7.9.14 — register breakout signals for the corpus soak (§A.7 + drift-whitelist + climate join)
- v7.9.13 — breakout-screening chips (deepvue gap-fill): 5 row chips + market-env tile
- v7.9.12 — index-trend market-environment gate (deepvue breakout gap-fill §3)
- v7.9.11 — breakout-screening signals (deepvue gap-fill): 5 descriptive-only price-action primitives
- v7.9.10 — widen the scanner net (russell1000 + TER/CRWD) + fix regime-gate dedup TZ bug
- v7.9.8 — fix: regime-gate dedup now survives /admin/restart
- v7.9.7 — Regime-adapted gate (READ-ONLY): 🔓 RELAX chip + corpus
- v7.8.371 — Pre/post-market movers panels (Morning-Mode add-on)
- v7.9.6 — auto-clear a broker-confirmed-gone position (#184)
- v7.9.5 — guard stopOut against double-counting broker-executed exits (#183)
- v7.9.4 — debounce the 7% drawdown trigger (settlement-lag phantom guard)
- v7.9.3 — surface StorageManager read-side integrity/parse failures
- v7.9.2 — Infinity-in-JSON guard (dashboard-breaking, caught LIVE)
- v7.9.1 — cash-override freshness-key fix (v7.8.314 was dead since written)
- v7.9.0 — ADR% (Average Daily Range) metric · Qullamaggie gap-close
- v7.8.370 — 🌅 MORNING MODE: execution-window filter for the first 75 min
- v7.8.369 — Split closed_overnight from closed_after_hours
- v7.8.368 — Watchlist row noise cleanup (3 small fixes)
- v7.8.367 — H2 absorption_pattern wiring + corpus persistence
- v7.8.366 — M6 BROKER_ORDERS_LOG_PATH isolation closure (+ 860-row scrub)
- v7.8.365 — M4 tz-pin + M5 dead preview_id guard removal
- v7.8.364 — H1 gap_cont reader fix: read from swing_ops, not top-level
- v7.8.363 — MED triple from 2026-06-02 live audit (M2 + M7 + M4)
- v7.8.363 — Lower-stop pipeline + corpus + dashboard ⬇ button
- v7.8.362 — Trap coach AVOID-bucket recalibration
- v7.8.361 — classify_intraday_session: relax threshold to catch 3-0 unanimous
- v7.8.360 — Pattern atlas: SVG candlestick charts + /chart endpoint
- v7.8.359a — pattern_library endpoints: parse query directly via urlparse
- v7.8.359 — Pattern Library Phase 1: curated atlas + IBM absorption seed
- v7.8.358 — H1 _vote_volume_pace: time-of-day denominator fix
- v7.8.357 — absorption_pattern primitive: opening-bar institutional read
- v7.8.356 — H2 corpus wiring: gap_continuation + gamma_squeeze_watch states persist to firehose
- v7.8.355 — Stop-locked Open Risk hero + heatmap
- v7.8.351→354 — Four-chip synthesis arc (PILLAR · STOPS · READINESS · BRIEF)
- v7.8.350 — STOP → FRAMEWORK SL on the OTHER audit card template
- v7.8.349 — Three fixes for audit-card vs portfolio-row discrepancies
- v7.8.348 — volume_pace hotfix: indicators key is
vol_avg - v7.8.347 — Phase 1 accumulation/distribution day classifier
- v7.8.346 — Audit-card label clarity: Volat vs Volume
- v7.8.345 — guard_defend_bounds — preflight accepts defend-mode tightens
- v7.8.344 — Defend chip → raiseStopModal (one-click to broker modify)
- v7.8.343 — Defend Phase 1: multi-signal stop-tighten suggestion chip
- v7.8.342 — ORB Phase 1: 15-min intraday + opening_range_break wiring
- v7.8.341 — Document + pin v7.8.338 STOP cancel-and-replace fix
- v7.8.340 — polygon_data AH fetcher uses MOST RECENT AH window
- v7.8.339 — Signal cell reflects non-HOLD bias on held rows
- v7.8.337 — Two false-positive guards on _recentlyClosedFor
- v7.8.336 — Phases A+B+C of "exit-on-accumulated-vetoes" question
- v7.8.335 — PM + AH chips inline on portfolio tracker row
- v7.8.334 — 🛡 STOP CTX + 🚫 VETOES chips extend to candidates + modal
- v7.8.333 — AH last-print persists overnight + weekend
- v7.8.332 — 🚫 VETOES N chip on held portfolio rows
- v7.8.331 — Stop Placement Context chip (🛡 STOP CTX) on portfolio rows
- v7.8.325→330 — EOD bug-sweep #2: 14 real fixes across 6 batches
- v7.8.324 — verify-tracker per-stream freshness check
- v7.8.323 — surface v7.8.319/.320 broker events as dashboard toasts
- v7.8.322 — Open Risk defensive whitelist + LOW cleanup
- v7.8.321 — medium-priority audit cleanup bundle
- v7.8.320 — reconciler robustness: suspicious-drift ceiling + shared cooldown
- v7.8.319 — broker_state_delta_detector + cash_activity journaling
- v7.8.318 — silent-failure guard on broker place + PLACE_STOP verify wiring
- v7.8.317 — Open Risk hero excludes is_cash rows
- v7.8.316 — first-poll race fix on the v7.8.315 hero NAV
- v7.8.315 — hero NAV reads broker truth (netAccountValue), not Σ positions × Polygon
- v7.8.314 — /portfolio/positions/sync defers to broker truth on cash
- v7.8.313 — auto-reconcile local cash to broker truth + resolve current drift
- v7.8.312 — Phase 0 ceiling + sl noise rejection
- v7.8.312 — grade-boundary hysteresis + entry-recency dampener
- v7.8.311 — first-poll false-NAKED fix
- v7.8.310 — gap_continuation shadow-parallel capture (Option A)
- v7.8.310 — quiet ^KS11 / intl-prefix WARN spam
- v7.8.309 — raiseStopModal places fresh SELL STOP on naked positions
- v7.8.308 — Phase 0 raise-stop OVERRIDE on swing-ops modal
- v7.8.307 — NAKED chip self-heals via force-poll on render
- v7.8.306 — corpus drift-guard: 5 options-sleeve type-flip siblings to skip-list
- v7.8.305 — fix test-fixture leak polluting broker_orders.log
- v7.8.304 — PM no-data renders "PM —", not misleading "PM +$0.00 · 0.00%"
- v7.8.303 — extend PM visibility from 09:00 → 09:25 ET (per user ask)
- v7.8.302 — premarket audit: pre_volume semantic doc drift
- v7.8.301 — WAIT label names the failing weekly alignment leg
- v7.8.300 — broker readiness: 2 stale-check false negatives fixed
- v7.8.299 — broker_state_fetcher: cache-poison guard + retry on partial response
- v7.8.298 — Catalyst gate: 1-of-3 elevation for high-conviction analyst news
- v7.8.297 — journal: surface row.persisted=false in submit toast
- v7.8.296 — Non-destructive avgPrice preservation in sync merge
- v7.8.295 — Readiness color on the enriched WAIT chip
- v7.8.294 — ⚡ Arm button suppresses when alert already armed at target
- v7.8.293 (#4 sweep MEDs) — 8 bugs from 4-agent parallel deep audit
- v7.8.292 (#4 sweep HIGHs) — 7 bugs from 4-agent parallel deep audit
- v7.8.292 follow-ups — behavioral journal CHANGELOG + Reflect-button tests
- v7.8.292 — Click-to-fill on "→ sugg $X.XX" stop hint
- v7.8.291 — calibration review: one-shot aggregator for scheduled reviews
- v7.8.291 — bump APP_VERSION (Phase 3 ship sync)
- v7.8.291 — Watchlist Phase 3: ⚡ Arm-at-entry button in ACTIONS column
- v7.8.290 — behavioral journal: prior-on-this-ticker panel
- v7.8.289 — wash provenance badge: CSV/AUTO/MANUAL chip on each row
- v7.8.288 — Watchlist row math triangle: suggested stop + TP1 inline
- v7.8.287 — end-to-end smoke for the wash sale arc
- v7.8.286 — WAIT-row chip enrichment: actionable entry price + distance
- v7.8.285 — retire orphan wash_sale_tracker.py (465 LOC, never imported)
- v7.8.284 — Harvest panel: click-to-sell button per candidate
- v7.8.283 — behavioral journal: post-trade reflection capture
- v7.8.282 — Gap 4: merge server-detected wash sales into journal
- v7.8.281 — Gap 3: live wash-sale detection at fill time
- v7.8.280 — Gap 2: tax-loss harvest panel + /tax/harvest endpoint
- v7.8.279 — Gap 1: pre-trade wash sale gate
- v7.8.277 — Path A polish: options monitor (assignment radar + roll surface)
- v7.8.276 — Path A Phase 5: portfolio Greeks aggregation
- v7.8.275 — Path A Phase 4: /options/order/place real-broker endpoint
- v7.8.274 — Path A Phase 3: equity↔options integration chip
- v7.8.273 — Path A Phase 2: options calibration view + pillar predictiveness
- v7.8.272 — Path A Phase 1B: options outcome resolver
- v7.8.271 — Path A Phase 1A: options corpus capture loop
- v7.8.270 — corpus optimization for 6/11 Phase 2 review
- v7.8.269 — fix(broker): /broker/readiness tz-naive vs tz-aware crash
- chore(gitignore): cover v7.8.266 state files (promote_log + shadow_signals.lock)
- v7.8.268 — L2 fix: loosen resolver guard (was deferred in v7.8.267)
- v7.8.267 — 5 LOW-priority bugs from per-system sweep + edge tests
- v7.8.266 — 8 MEDIUM bugs from per-system bug sweep
- v7.8.265 — 5 HIGH-priority bugs from per-system bug sweep
- v7.8.264 — bug sweep remainder: 7 MEDIUM + 1 LOW + 1 cleanup
- v7.8.263 — bug sweep: 4 CSRF + path-traversal + thesis race
- v7.8.262 — investor sleeve runway Phase 2 + log-noise cleanup
- v7.8.261 — §A.7 promotion gate uses distinct setups, not rows (H3 dedup)
- v7.8.260 — chore: replace deprecated datetime.utcnow() (Python 3.14)
- v7.8.259 — cleanup: 3 bugs surfaced by the 2026-05-29 weekly audit
- v7.8.258 — feat(alerts): per-ticker override for the §A.7 cohort soak-clocks
- v7.8.257 — feat(alerts): setup_actionable closes the EP/BF ENTER notification gap
- v7.8.256 — fix(catalyst): earnings_soon stuck WAITing on yesterday's print
- v7.8.255 — fix(buy-modal): undefined
tcrash hung preview at "Sending…" - v7.8.254 — docs(legend): catch up to recent ships
- v7.8.254 — build auto-exit RUNWAY executor (Phase 1 dry-run)
- v7.8.253 — fix(dashboard): Legible-Veto Snapshot stuck on placeholder
- v7.8.252 — fix(friday-report): timezone + pre-close guard
- v7.8.251 — drift guard for shadow_signals + §A.7 docs addendum
- v7.8.251 — corpus: ship the remaining 4 cohorts (#5, #7, #8, #9)
- v7.8.250 — corpus: APP_VERSION bump for the 6-cohort expansion
- v7.8.250-pre — corpus: refused_for_earnings enrichment + #4 note
- v7.8.250-pre — corpus: orthogonal-signal enrichment fields
- v7.8.250-pre — corpus: gap_cont narrow cohort + BF narrow geometry
- v7.8.249 — feat(bf): symmetric BF entry-trigger capture + soak-clock
- v7.8.248 — (A) squeeze_primed alert + (B Phase 1) gap_continuation classifier
- v7.8.247 — feat(extended-hours): after-hours price + chip + corpus capture
- v7.8.246 — fix(corpus): TTL-cache missed-runners + canned-name aliases
- v7.8.245 — feat(dashboard): add SIGNAL column to the rankings table
- v7.8.244 — feat(dashboard): compact ranking-table flags + suppress zero-CHG
- v7.8.243 — fix(coach): show coach cost as plain dollars, not "0.30¢"
- v7.8.242 — feat(coach): show per-call AI cost on underwrite-modal coaches
- v7.8.241 — fix(coach): bump underwrite_skeptic max_tokens 700 -> 1100
- v7.8.240 — fix(corpus): stack SQL examples + friendlier multi-statement hint
- v7.8.239 — feat(corpus): time-to-resolution canned query — the censoring view
- v7.8.238 — feat(corpus): days-open on open WAIT episodes
- v7.8.237 — feat(corpus): missed-runner calibration view in the dashboard
- v7.8.236 — fix(corpus): SQL console returns a clean 400 on bad SQL, not a 500
- v7.8.235 — feat(universe): governance — throttle promotes, guard extension, evict to target
- v7.8.234 — fix(dashboard): pre-market chip read $0.00 instead of the real gap
- v7.8.233 — complete the investor russell1000 default (endpoint + UI fallbacks)
- v7.8.232 — investor broad screen defaults to russell1000 + foreign large-caps
- v7.8.231 — fix(catalyst): unify news source (Polygon+yfinance) + analyst keywords
- v7.8.230 — fix(alerts): kill switch for the offline cloud-dispatch relay
- v7.8.229 — feat(alerts): local ntfy phone-push (cloud-independent)
- v7.8.228 — fix(data): Stooq apikey-gate — free quote endpoint + CSV-header guard
- v7.8.227 — feat(investor): underwrite path from the audit-any-ticker card
- v7.8.226 — feat(gamma): squeeze-setup watch + gamma corpus capture
- v7.8.225 — fix(orders): send CSRF token when acknowledging an unverified order
- v7.8.224 — feat(corpus): DuckDB query layer + dashboard console
- v7.8.223 — feat(investor): price + margin-of-safety on the anchor/candidate cards
- v7.8.222 — fix(server): blanket GET safety-net — graceful 500 instead of a dropped connection
- v7.8.221 — chore: working-tree cleanup — green suite, gitignore cruft, vendor charts dep
- v7.8.220 — feat(investor): legend covers the new screening + risk signals
- v7.8.219 — feat(investor): legend gains the P&L color key
- v7.8.218 — feat(investor): sleeve action-item signal on the ◈ INVEST ROOM chip
- v7.8.217 — feat(investor): v1 polish — INTACT health coach + broad-screen theme tags
- v7.8.216 — fix(investor): bug-sweep fixes across the sleeve (1 P0, 2 P1, 2 P2)
- v7.8.215 — feat(investor): per-ticker anchor-screening audit card (lookup any name)
- v7.8.214 — refactor(investor): fold cohort-concentration into the sleeve-risk panel
- v7.8.213 — feat(investor): consolidated sleeve-risk panel (the rails at a glance)
- v7.8.212 — feat(investor): sleeve hardening arc (coaches, living thesis, broad screen + guards)
- v7.8.211 — feat(investor): Underwriting Skeptic — the AI coach as devil's advocate
- v7.8.210 — feat(investor): surface the decision trail on the anchor card
- v7.8.209 — feat(investor): decision ledger (anchor_decisions) — discipline, not calibration
- v7.8.208 — feat(investor): "Reset card" — self-serve un-underwrite of an anchor
- v7.8.207 — fix(investor): snapshot was on the WRONG E*TRADE account + NAV double-count
- v7.8.206 — feat(investor): buy/add + manual trim order modals — loop closed
- v7.8.205 — feat(investor): system-drafted thesis pre-fills the underwrite modal
- v7.8.204 — feat(investor): underwrite flow + sizing foundation (buy/sell groundwork)
- v7.8.203 — feat(investor): per-card action verbs in the investment room
- v7.8.202 — feat(investor): investment room tells the story (rich cards)
- feat(investor): enrich room data — the per-name story (signals + math)
- v7.8.201 — feat(investor): P3-UX-c — investment-room MODE (dashboard)
- feat(investor): P3-UX-b — GET /investor/room endpoint
- feat(investor): P3-UX-a — investor_room.room_data() structured contract
- v7.8.200 — feat(investor): P2-4 wired — hard-max enforced on anchor buys
- feat(investor): P2-4 — anchor hard-max guard logic (ready, unwired)
- fix(investor): guard PEG against TTM-only cyclical spikes
- feat(investor): P2-3 — anchors exempt from trader auto-exits
- feat(investor): P2-6 — investment-room v0 surface (read-only)
- feat(investor): P2-5 — thesis-health monitor (read-only INTACT/REVIEW/BROKEN)
- feat(investor): P2-2 — underwriting store (anchor_thesis)
- feat(investor): P1e — investor-candidate surface (investment-room v0)
- feat(investor): P1d — anchor_candidates selector (selection-only)
- feat(investor): P1c — anchor_quality lens (durability re-weight)
- feat(investor): P1b — valuation_band (Cheap/Fair/Rich/Extreme)
- feat(investor): P1a — valuation fields in quality_fetch (P/E, PEG, earnings yield)
- docs(investor-sleeve): lock the UX — two rooms (trading room vs investment room)
- docs(investor-sleeve): lock the anchor-candidate rule — spec complete
- docs(investor-sleeve): rescope Phase 1 (investor intake, not swing gate) + lock remaining Qs
- docs(investor-sleeve): resolve the valuation leg
- docs(investor-sleeve): resolve the hard-max numbers
- docs: investor sleeve design memo — the compounding half of the barbell
- v7.8.199 — feat(content): cadence covers all 4 types + channel-independent dashboard pill
- feat(content): Phase 3 — social-snippet + Learn-lesson adapters
- v7.8.198 — feat(content): monthly cadence — auto-draft → review queue → notify
- feat(content): optional LLM voice-polish over locked drafts (safe by construction)
- feat(content): blog publish adapter — md draft → AUTHORING HTML + paste snippets
- feat(content): Phase 2 — case-study generator (one notable resolved refusal)
- feat(content): Phase 1 — monthly "trades we refused" draft generator
- docs(content-engine): fold in the site-content audit + sharpened scope
- docs: content engine design memo (corpus → teaching/marketing content)
- docs: Scout design (scanner upgrade) + tooling coverage audit
- v7.8.197 — feat(quality/corpus): self-monitoring capture guard (quality-corpus analog of the stall guard)
- v7.8.196 — fix(quality/corpus): capture quality into the shadow signal → outcomes carry it
- v7.8.195 — feat(quality): Phase 1c — daily batch + corpus capture (COLLECT-NOW)
- feat(quality): Phase 1b — fundamentals fetcher (inert, read-only)
- feat(quality): Phase 1a — pure CAN-SLIM quality-score module (inert, capture-first)
- v7.8.194 — feat(corpus): self-monitoring resolution-stall guard in the audit cycle
- v7.8.193 — polish batch: tab-lock UX, FOCUS-scope guard, auto-prune proposals, lens frame-enum
- v7.8.191 — fix(corpus): resolver no longer strands orphaned signals + soak stall-guard
- v7.8.190 — fix(dashboard): FOCUS mode was blanking the entire Options tab
- chore(universe): prune 5 stale auto-promoted candidates
- v7.8.189 — fix(dashboard): UX polish — FOCUS banner, card summaries, Risk Pulse, index cold-start
- chore(universe): pin VRT + CEG anchors — exempt from score-based prune
- v7.8.187 — perf: gate Alpha Vantage out for index/futures (completes v7.8.184)
- v7.8.186 — feat(shadow-corpus): capture authorized signals + fix chronological resolver plumbing
- v7.8.184 — perf: Alpha Vantage rate-limit breaker + watcher verbose=False
- v7.8.183 — fix(dashboard): stop the FOCUS loading banner getting stuck
- v7.8.182 — feat(corpus): persist within-sector RS rank (promote from skip-list)
- test(corpus): union-sample the drift guard across all rows (fixes eff1348 intermittency)
- v7.8.181 — feat(corpus): persist news-sentiment derived scalars (collect-now)
- v7.8.180 — feat(scanner): propose sector-map at promote time (retires the auto-promote→sector-map loop)
- chore(sector-map): map UNH/SNDK/IBM/CPRT + RL allow-list (2026-05-22 promotes)
- v7.8.179 — fix(catalyst): unify volume-spike on canonical projected vol_ratio
- v7.8.178 — fix(swing-ops): full-history feed for bull-flag/EP detectors
- fix(corpus): classify informational 'sentiment' field in v7.8.174 drift guard
- v7.8.177 — feat(tools): missed-runner corpus scan (WAIT-then-TP1-hit finder)
- v7.8.175 — fix(shadow): chronological TP/SL resolution (was order-blind)
- v7.8.174 — fix(corpus): close whitelist drift + add structural drift guard
- chore(git): retro-commit v7.8.170-171 source + corpus gitignore + brief
- v7.8.173 — cleanup: sector map for DELL+COHR + fix time-of-day-dependent freshness test
- v7.8.172 — feat(stage2): Phase 2.0 dry-run executor for 5 auto-defend actions
- v7.8.169 — fix(buy-modals): reject entry ≤ stop in local-only paths
- v7.8.168 — fix(sort): apply triage tier to actual Position Sizer (was missed)
- v7.8.167 — feat(sort): action-first triage tier sort across all card surfaces
- v7.8.166 — fix(buy-modals): inherit position sizer's planned-entry override
- v7.8.165 — feat(ux): 5 UX-embed features merged from 4 parallel chips
- Merge feat/legend-modal into main
- Merge feat/first-time-tour into main
- Merge feat/swing-ops-modal-enhancements into main
- Merge feat/wait-chip-popover into main
- feat(ux): Legend modal — in-dashboard chip vocabulary catalog
- feat(ux): first-time tour — 5-step onboarding for new users
- feat(ux): WAIT chip popover — explain partial-trigger state inline
- feat(ux): Swing Ops modal — AUDIT GATE REFUSES banner + decision pipeline visualizer
- docs: fix 11-point audit vs 13 pillars conflation
- docs(blog): commit blog/images/ directory placeholder
- docs(blog): casual-voice blog posts — DXCM walkthrough + reading-the-cards
- docs: DXCM walkthrough + entry signal badges reference
- v7.8.164 — fix(polygon): auth_disabled endpoint-group for 401/403 (subscription-tier gap)
- v7.8.163 — feat(card): diagnostic tooltip on "WAIT — Weekly Unconfirmed" badge
- v7.8.162 — fix(rr): upper sanity ceiling (DXCM 41.6:1 → 3.51:1) + lens-value-quality sub-class documented
- v7.8.161 — fix(polygon): dedupe circuit-OPEN warning during concurrent-burst
- v7.8.160 — feat(observability): record_compute_failure for try/except-wrapped meta computes
- v7.8.159 — fix(tests): isolate test logging from production audit_dashboard.log
- v7.8.158 — feat(polygon): retry + circuit-breaker on _http_get_json
- v7.8.157 — fix(sector-map): CF + CIEN coverage for 2026-05-20 daemon promotions
- v7.8.156 — fix(legible-veto): rs/rb NameError + restore calibration corpus flow
- v7.8.155 — fix(bf): bull_flag phantom-reader-path closed in shadow tracker
- v7.8.154 — feat(lens-drift): AST writer-side R:R scan + frame-marker backfill (Tier 1 of universal-fix plan)
- v7.8.153 — fix(release-paths): gate-aware emission — R:R RELEASE chip now fires on Gate-blocker case (DXCM repro)
- v7.8.152 — fix(ep): phantom-reader-path closed in shadow + alerts
- v7.8.151 — fix(corpus): EP-empty cohort callout + late-feature corpus wiring
- v7.8.150 — fix(sweep): 4 cross-process race + symmetric-pending fixes from comprehensive bug sweep
- v7.8.149 — fix: 3 latent issues closed — R:R canonical reader, synced_at root cause, Python drift checker
- v7.8.148 — fix(alerts): watermark-after-dispatch + absurd-positions-age defensive clamp
- v7.8.147 — fix(regime-overlay): Yahoo-symbol key translation — regime read now matches audit_framework
- v7.8.146 — fix(alerts): entry_armed R:R now mirrors _rrCanonical — 4th hit of same-field-different-writers closed on alerts surface
- v7.8.145 — chore(sector-map): add DXCM (healthcare) — clears daemon-promotion test failure
- v7.8.144 — fix(dashboard): tighten cash double-count warning — suppress false positive on real post-trade cash
- v7.8.143 — fix(market-hours): test fixture aging + sector map for daemon auto-promotes
- v7.8.142 — fix(broker-guard): honest divergence message — stop claiming card and broker 'SAME gate'
- v7.8.141 — fix(hardening): pre-market defensive hardening — 4 lower-tier bug-sweep findings closed
- v7.8.140 — fix(consideration): concurrency hardening + AZ day boundary + bulk idempotency
- v7.8.139 — feat(consideration): install-wizard bulk-gate — opt-in framework review path for batch additions
- v7.8.138 — feat(friday): consideration activity panel — weekly accountability for the gate
- v7.8.137 — feat(consideration): decisions_log BUY-side join — stamp via_consideration on BUYs of promoted tickers
- v7.8.136 — feat(consideration): retire raw-add path, gate ticker requests through framework
- v7.8.135 — feat(alerts): entry_armed_ep alert wiring (Addendum A follow-up)
- v7.8.134 — refactor(lens-arch): drift 21→0 + flip pre-commit to --strict
- v7.8.133 — feat(pyramid): Addendum G Phase 1 — shadow capture for pyramid-in advisories
- v7.8.132 — fix(regime-overlay): 4 remove guards — don't advise removing winners
- chore(gitignore): ignore regime_overlay_preview.json — daemon-regenerated state
- v7.8.131 — feat(regime-overlay): Addendum D — regime-aware universe overlay (Phase A preview-only)
- v7.8.130 — feat(ep-trigger): Addendum A — EP entry-trigger inert mode + shadow corpus aggregator
- docs(v7.9.x): Addendum G — pyramid-in design memo (4 decisions answered)
- v7.8.129 — refactor(lens-arch): Phase 3 batch — 5 t.structure migrations + fix v7.8.117 test-stub regression
- v7.8.128 — feat(tooling): lens-drift snapshot in pre-commit hook — informational visibility, --strict deferred until drift=0
- v7.8.127 — refactor(lens-arch): Phase 3 batch — 5 getTradeRecommendation calls migrated to actionFor
- v7.8.126 — refactor(lens-arch): Phase 3 batch — 5 t.tp1 text-render sites migrated to tpForDisplay
- v7.8.125 — refactor(lens-arch): Phase 3 migrations — card SWING LEVELS TP1 + ladder-button fallback now use tpForDisplay helper
- v7.8.124 — feat(lens-arch): Phase 3 kickoff — first renderer migration (convictionMultiplierFor) + Addendum F (sprint progress memo)
- v7.8.123 — feat(tooling): lens_drift_check.py — programmatic guardrail for v7.9.x lens-architecture contract
- v7.8.122 — feat(lens-arch): actionFor(t) — biggest helper, composes all action-lens info into one call
- v7.8.121 — feat(lens-arch): tpForDisplay(t, role) canonical reader — kills v7.1.81 dual-writer
- v7.8.120 — feat(lens-arch): Phase 2 helpers batch — convictionFor + triggerStateFor + targetSharesFor
- v7.8.119 — refactor(lens-arch): Phase 2 migration — structure render sites use structureFor() canonical helper
- v7.8.118 — feat(lens-arch): Phase 1 — first canonical reader helpers (structureFor) per v7.9.x Addendum E
- v7.8.117 — chore(audit-cleanup): regime hysteresis on $100 oil boundary + intl-quiet symbol log gating + CBRS warn→info
- v7.8.116 — fix(layout): widen audit cards so v7.8.115 'D · W:' badges fit one line — gap+padding tighten + grid breakpoint bump
- v7.8.115 — fix(label): structure badge in PROMINENT header row gets 'D' prefix + 'W:' weekly surfacer
- v7.8.114 — fix(label): structure badge prefixes timeframe (D · HH/HL); weekly badge surfaces actual weekly structure
- v7.8.113 — fix(action-rec): BUY chip honors entry_trigger.ready — universal trigger-pending downgrade + v7.9.x lens-architecture memo
- v7.8.112 — fix(modal): BUY + bracket modals default qty applies weekly-alignment reduction — match card sizer
- v7.8.111 — fix(macro): outlier sanity gate on VIX/oil/futures — rejects spurious 4× spikes, prevents false regime transitions
- v7.8.110 — fix(chip): R:R RELEASE relabels to TP1 TIGHT (cyan) when canonical Gate R:R already cleared — XOM repro
- v7.8.109 — fix(action-rec): BUY chip downgrades to DAILY ONLY when weekly not aligned — XOM split-voice fix
- universe + docs: add 5 regime-favored cohort tickers + v7.9.x Addendum D (regime-aware universe scan memo)
- v7.8.108 — fix(journal): ST/LT classifier falls back to wt_pos3 entryDate — '?' badge on auto-logged AAPL stop-out
- v7.8.107 — feat(alerts): held-aware tier resolution — defensive on watch downgrades to info
- v7.8.106 — feat(action-rec): structure-intact softener for Chop Zone trim + sector-map coverage for 5 new universe tickers
- v7.8.105 — fix(cash-events): render existing events list at top of Manage Events modal — users couldn't verify what was imported
- v7.8.104 — feat(journal): cash events ledger — CSV import + manual entry + Cash Flows YTD tile (separate deposits from P&L)
- v7.8.103 — feat(journal): wash-sale entries collapsable — keep at-a-glance tiles, hide row-by-row breakdown behind
- v7.8.102 — feat(tax): inline rate editor in Tax Liability panel — adjust ordinary/LT/state without editing settings.json
- v7.8.101 — feat(settings): GET /config/settings safe-whitelist + dashboard bootstrap — tax rates flow client-side
- v7.8.100 — feat(journal): YTD tax-liability estimator + tax-loss harvest candidates panel
- v7.8.99 — fix(tooltip): escape literal " in PULLBACK PLAN tooltip — Raschke 'Holy Grail' truncated at first inner quote
- docs(blog): the Swing Deck identity — comprehensive elaboration of the four-trader synthesis
- v7.8.98 — feat(velocity): conditional hero-strip unlock chip (Phase B of 2026-05-16 UX rework)
- chore(repo): remove tauri-app — abandoned standalone-app build, returning to Chrome app as canonical surface
- v7.8.97 — test(pullback): Raschke ADX gate test coverage + comment label sync
- v7.8.96 — feat(rs): sector-relative-strength ranking — O'Neil 'L = Leader' pillar
- docs(v7.9.x): trader-synthesis backlog — Addendum C captures Swing Deck identity + historical-data-pending items
- v7.8.94 — fix(setup-perf): include broker-truth SELLs in Setup Performance stats
- v7.8.93 — fix(velocity): align buy modal cap to per-card sizer + persist velocity to corpus + drop phantom 'Defensive Protocols' label
- v7.8.93 — fix(recalc): ↻ Recalc P&L skips broker-truth entries (G&L imports / reconciled / synced)
- v7.8.92 — feat(journal): short-term + long-term capital gains classification — ST/LT YTD tiles + per-row term badge
- v7.8.91 — fix(dashboard): P&L renderers dropped minus sign on negatives — 7 surfaces fixed + pin test bans the pattern
- v7.8.90 — feat(journal): decision-time intent capture (Phase A) — buy/sell/raise-stop modals gate on user_intent + auto-snapshot framework state
- v7.8.89 — fix(dashboard): Reconcile modal "t.ts.slice is not a function" — format ms-epoch ts via helper
- v7.8.88 — feat(slippage-corpus): server capture + aggregator for journal-broker reconciliation events
- v7.8.87 — feat(slippage): journal-broker reconciliation pass — capture stop-fill slippage + basis drift
- v7.8.86 — fix(dashboard): Reconcile modal stuck on "Loading snapshot…" — decouple fetch from pill paint
- v7.8.85 — feat(friday-ritual): in-modal history browser — filter by keyword, click any past report to view/edit
- v7.8.84 — feat(dashboard): recently-closed-ticker cooldown chip + soft buy-modal veto — defensive bias check
- v7.8.83 — fix(dashboard): reconcile two Bull Flag detectors — relabel old chart chip + add v7.8.80 setup chip
- v7.8.82 — fix(audit): wire regime-modifier delta + log into audit row — kill the score-modifier invisibility
- v7.8.84 — fix(sync): per-symbol freshness guard blocks dashboard from overwriting router auto-applies
- v7.8.83 — feat(calibration-corpus): two more capture modules — pattern_clusters_log + regime_transitions
- v7.8.81 — feat(calibration-corpus): three new capture modules — stops_history + positions_snapshots + equity_curve
- v7.8.81 — feat(defense): parabolic extension detection — sharpen chase_the_top trap with Kullamägi-rigorous criteria
- v7.8.80 — feat(setup): Bull Flag / High-Tight-Flag detection (Kullamägi) — second Tier 1 setup, mirrors EP architecture
- v7.8.80 test fix — override ROUTING_FAILURES_LOG in _reload_router so CrashRecoveryTest doesn't pollute prod
- v7.8.80 — fix(transactions-router): SELL routing accepts signed qty + adds per-failure log + chronological batch order
- v7.8.79 — fix(friday-ritual): read broker_snapshot.transactions_recent as second source — surface SELLs even when transactions_router silently fails
- v7.8.79 — feat(scanner): EP-aware scanning pass — close the discovery loop for Episodic Pivot setups
- v7.8.78 — feat(friday-ritual): surface stops + sells + raises in week activity — typed event list with per-event review judgment slots
- v7.8.77 — feat(friday-ritual): weekly LOG/PLAN/ASSESS report — auto-data scaffold + blank judgment slots + cross-week corpus
- v7.8.75 — feat(setup): Episodic Pivot detection (Kullamägi) — first concrete entry-trigger work per v7.9.x design memo addendum A
- docs: addendum A to v7.9.x design memo — Episodic Pivot (Kullamägi) spec
- v7.8.76 — cleanup(dashboard): rename pattern-cluster banner (disambiguate from per-card comparable_setups) + extract cluster thresholds to named constants
- v7.8.75 — fix(etrade-client): force fresh TCP for OAuth flow — same bug class as v6.7.39 (/orders/preview's stale-pool 404)
- v7.8.74 — feat(launchd): macOS LaunchAgent keeps control_server (+ audit watcher + index fetcher) running 24/7 — Day 2 complement to the Safari Add-to-Dock pivot
- v7.8.73 — fix(etrade-client): /v1/accounts/list → /v1/accounts/list.json — E*TRADE retired the suffix-less route + broker reconcile has been silently 404ing for weeks
- v7.8.72 — pivot(standalone-app): Safari "Add to Dock" PWA support — native Mac feel without Tauri's browser-API divergence cost
- v7.8.71 — fix(tauri-app): on_navigation interceptor routes external links + window.location.href to system browser
- v7.8.70 — fix(tauri-app): switch from tauri-plugin-shell to tauri-plugin-opener for window.open routing — bypasses the shell ACL scope landmine
- v7.8.69 — debug(tauri-app): auto-open DevTools at startup so we can see the OAuth console output
- v7.8.68 — debug(tauri-app): DevTools + on_page_load re-inject + console tracing for the OAuth flow
- v7.8.67 — fix(tauri-app): window.open() → system browser for E*TRADE OAuth + all 7 external link sites
- v7.8.62 — feat(tauri-app): scaffold the standalone-app shell (Day 1 — minimal Tauri 2 wrapper, 2.9 MB .app, builds in 1m 47s)
- v7.8.66 — chore(version): catch up APP_VERSION stamp to match shipped framework state
- v7.8.65 — feat(regime): 5-band VIX classifier + realized-vol divergence escalation — kill the CALM TRAP theater
- v7.8.64 — feat(alerts): grade-transition Schmitt cushion — kill the 53% alert-noise from grade churn
- docs: v7.9.x entry-trigger design memo — pin the design seed from the 2026-05-16 conversation
- v7.8.63 — feat(regime): close stagflation framework gaps — wire DEFENSE/ENERGY/TECH_PE lists + rotation alert
- v7.8.62 — feat(shadow): historical-backfill resolver — catch intraday TP/SL crosses sparse audit snapshots miss
- v7.8.61 — feat(classifier): Schmitt-trigger hysteresis on setup_type — kill the AMAT flip-storm
- v7.8.60 — feat(universe): MIN_UNIVERSE_SIZE floor in prune_universe_ticker — kill the over-prune class
- v7.8.59 — fix(alerts): cash-inclusive concentration denominator (kills the 'AAPL 35% of portfolio' misleading copy)
- v7.8.62 — test(dashboard-lint): widen the etradeSyncBalance window + anchor the helper-call check inside the function body, not against the button
- v7.8.62 — polish(dashboard): tone down Portfolio Cash headline — 20px → 14px to match the Control Panel's compact aesthetic
- v7.8.61 — fix(dashboard): Balance card restructured — Portfolio Cash is now the headline, raw ETRADE fields demoted to "Raw ETRADE fields" details
- v7.8.60 — fix(dashboard): "Apply Cash" reads broker_cash_only from /reconcile/state, not /etrade/balance alone — handles PDT_ACCOUNT totalLongValue=null
- v7.8.59 — fix(dashboard): "Apply Cash" writes portfolio cash, not "available for investment" — kills the ~$2.4k phantom gap
- v7.8.58 — fix(dashboard): tracker-row day-change chip refreshes under live quotes — kills the half-stale "$428.49 +0.90%" row
- v7.8.57 — feat(dashboard): framework-vetoes friction on Path 1 buy modal — match the broker's discipline client-side
- v7.8.56 — fix(broker-guard): align R:R gate with the card — broker now matches the framework's NO ENTRY verdict
- v7.8.55 — fix(transactions-router): stop the dedup-index TypeError that was re-applying historical BUYs every cycle
- v7.8.54 — fix(positions-sync): stop clobbering daemon-stamped entryDate on every dashboard sync
- v7.8.53 — fix(dashboard): render post-catalyst whale read chip on the audit card (not just held-positions table)
- v7.8.52 — feat(whale-read): price-action gate replaces earnings-date gate — kills the Tradier field-rotation outage
- v7.8.51 — feat(daemon-health): tripwire alert + CP fail-streak chip — close the silent-degradation gap
- v7.8.50 — fix(broker-state): kill the 133-consecutive-fail TypeError in _digest_transactions
- v7.8.49 — fix(entryDate-backfill): self-heal — own-fetch fallback + move call outside routing gate
- v7.8.48 — feat(audit): post_earnings_whale_read synthesizer — integrate 6 flow votes into one verdict
- v7.8.47 — fix(audit): kill the phantom
indicatorssub-dict — readers now point at row-level fields - v7.8.46 — fix(dashboard): kill the false "FEED DEGRADED: T2 Finnhub" badge — reclassify deep-cascade tiers + add sample floor
- v7.8.45 — fix(audit): wrap portfolio loop in per-ticker try/except — one bad ticker can no longer abort the whole cycle
- v7.8.44 — fix(audit-cadence): AUTO_REFRESH_MIN 0→1 — give the data tiers a floor; + add CBRS to universe
- v7.8.43 — fix(audit): compute_daily insufficient-history guard — stops the cycle-killer crash loop
- v7.8.42 — fix(data-providers): gate equity tiers for index/futures symbols — kills the false "FEED DEGRADED" badge
- v7.8.41 — feat(regime): INTL/US divergence chip — overnight international vs US futures
- v7.8.40 — feat(regime): thread oil_tier through score_13pt_options energy penalty
- v7.8.39 — feat(regime): two-tier oil regime — acute OIL_SHOCK vs chronic OIL_ELEVATED
- v7.8.38 — refactor(open-orders): remove redundant Phase 3 strip; keep existing PENDING @ ETRADE widget
- v7.8.37 — fix(open-orders): STOP orders rendering as 'LMT $0.00' + placed_at digging
- v7.8.36 — feat(held-card): disambiguate framework entry vs user basis
- v7.8.35 — fix(reconcile): account-picker heuristic + balance field-name fallbacks
- v7.8.34 — feat(diagnostic): score-momentum disconnect chip on held rows
- v7.8.33 — feat(setup-classifier): consolidation_breakout_pending overlay
- v7.8.32 — feat(portfolio-truth): Phase 4 — paranoid-mode order verify
- v7.8.31 — docs(changelog): portfolio-truth arc + 03babc0 bundling note
- v7.8.29 — feat(positions): back-fill entryDate from broker transaction history
- v7.8.29 — feat(portfolio-truth): Phase 2C — auto-adjust drawdown baseline on DEPOSIT/WITHDRAW
- v7.8.28 — feat(portfolio-truth): Phase 2B — auto-apply toasts + Pending Confirmations + Cash Activity
- v7.8.27 — feat(portfolio-truth): Phase 2A — transaction router auto-applies BUY/SELL/DIV/INT/FEE
- v7.8.26 — chore(precommit): lint hook to block JS template-literal regressions
- v7.8.25 — feat(portfolio-truth): Phase 1B — Reconcile pill + modal + cash-edit prompt
- v7.8.24 — feat(portfolio-truth): Phase 1A — broker_state daemon + reconcile endpoints
- v7.8.23 — feat(shadow-tracker): second capture path — score-cleared-setup-blocked
- v7.8.22 — fix(alerts): entry_armed gate stack — score + R:R + trap check before firing
- v7.8.21 — feat(phase): Layer C — phase_advanced alert + entry_armed_add suppression
- v7.8.20 — feat(phase): Layer B — phase-aware _protectiveStopForRaise dispatcher
- v7.8.19 — feat(phase): Layer A — position-phase detection + chip (read-only)
- v7.8.18 — test(news-sentiment): regression for the v7.8.17 provenance promotion
- v7.8.17 — fix(rr-data-quality): split support_noise_inflated out of below_min_floor
- v7.8.16 — feat(alerts): entry_armed_add — held-position re-arm alert with position-size suggestion
- v7.8.15 — feat(journal): one-click sync recent broker trades — closes the V recovery loop
- v7.8.14 — fix(fill-detect): track cancellations explicitly + journal every detected fill + recover zero-diff SELLs
- v7.8.13 — fix(trade-rec): extend score≥80 entry gate to honor setup/weekly/pullback vetoes
- v7.8.12 — fix(broker): fast-fill race — pre-seed _prevPendingOrderIds so instant-fill orders trigger reconciliation
- v7.8.11 — fix(topbar-dropdown): viewport-aware anchor flip — fixes left-edge clipping on narrow viewports
- v7.8.10 — feat(@ Exits + DIT): combined stop/TP cell + auto-stamp entryDate on manual fills
- v7.8.9 — fix(held-row): LOCKED state for stop-above-basis; locked-stop-aware R:R + Risk-at-Stop columns
- v7.8.8 — fix(dd-tooltips): cross-link Cur DD ↔ DD Guard with explicit window labels
- v7.8.7 — fix(dd-anchor): skip first perfLog entry from high-water (Option C)
- v7.8.6 — feat(dd-windowing): Cur DD + Max DD chips use 6-month rolling baseline · all-time in tooltip
- v7.8.5 — fix(sharpe): weekly resample before Sharpe math · same fix in 2 call sites
- v7.8.4 — fix(win-rate): canonical helper · STOPPED-at-profit now counted as wins
- v7.8.4 — feat(legible-veto): observability stack (cycle JSONL + CP widget + cron wrapper)
- v7.8.3 — fix(feed-badge): silence optional tiers with 0 successes (not degraded, just unexercised)
- v7.8.3 — tool(legible-veto): tools/legible_veto_summary.py for eyeball week
- v7.8.2 — fix(feed-badge): stop firing red 'PRIMARY FEED DOWN' on stale E*TRADE counter
- v7.8.1 — refine(legible-veto): held-position render semantics + corpus enrichment
- v7.8.0 — feat(legible-veto): Phase 1 ships rr_release + pullback_plan
- v7.7.25 — feat(macro): background macro_fetcher daemon decouples fetches from audit hot path
- v7.7.25 — fix(shadow-tracker): endpoint NameError + post-resolution capture suppression
- v7.7.24 — fix(slStatus): ATR-aware thresholds + canonical helper
- v7.7.23 — fix(cash): atomic deduct on broker-reconcile fills + margin-account flag
- v7.7.22 — HOTFIX: UnboundLocalError on every SELL order preview
- v7.7.21 — feat(daily-Δ): pre-market gap label (PM prefix, 04:00-08:59 ET)
- v7.7.20 — feat(daily-Δ): pre-open reset window (9:00-9:30 ET weekdays)
- v7.7.19 — feat(daemons): surface auto-scanner on the Control Panel health board
- v7.7.18 — fix(config): load_dotenv(override=True) so .env edits survive os.execv
- v7.7.17 — fix(local_email): strip whitespace from SMTP password
- v7.7.16 — feat(alerts): local SMTP email delivery + morning brief routing
- v7.7.15 — fix(topbar): System dropdown menu clipped at right viewport edge
- v7.7.14 — fix(alerts): migrate to canonical positions.json + 24h staleness gate
- v7.7.13 — fix: kill Polygon /v3/trades/ 403 spam + warn-once on mute cloud alerts
- v7.7.12 — fix(daily-Δ): unbreak E3 catalyst alarm + sign-align near-zero chip
- v7.7.11 — feat(shadow-tracker): instrument the silence — capture vetoed-ready signals for empirical gate calibration
- v7.7.10 — fix(broker-parity): accept dashboard claim against EITHER chandelier or structural sl
- v7.7.9 — feat(ux): close the add-ticker feedback loop (toast + TRACKED chip + universe.txt viewer)
- v7.7.8 — refactor(raise-stop): single resolver across all 4 consumer surfaces
- v7.7.7 — fix(raise-stop-chip): gate on max(chandelier, sl) — 9th hit of same-field-different-writers
- fix(arch): migrate UI candidate flow to universe.txt (single source of truth)
- v7.7.5 — fix(audio-market-hours): module-level wrappers + endpoint dispatch
- v7.7.4 — feat(audio): market-hours-only mode — silent outside US regular session
- v7.7.3 — fix(auto-scanner tooltip): pass \n not via setAttribute
- v7.7.2 — feat(auto-scanner): dynamic tooltip + spinning chip during active scans
Full diff: pinoy81/swing-audit@v7.7.1...v7.9.18
Built from pinoy81/swing-audit@559935a.