v2.40.0
v2.40.0
Control panel UX overhaul and docs refresh, built from a full live audit of every panel view — plus drift guards so neither the panel docs nor the tool surface can silently go stale again.
Added
- Governance mode toggle (Advisory / Enforce) on the AI Console, wired to
set_ai_governance, with corrected card copy (the old text predated v2.39.0 enforce mode). The AI-ops ledger card gains a Recent runs list showing each run's actor (instance:pid). - Chat-first onboarding: empty Overview, Review, and Inventory states show plain-language guidance with a quoted suggested prompt and a Copy-prompt button, replacing zero-walls and "run analyze_clip first".
- History is a first-class Media menu item, deep-linkable at
#analysis/review/history. The full hash deep-link scheme (every panel view, clip/shot/transcript drill-downs) is now documented.
Changed
- Top-level "Analysis" menu renamed "Media" (it collided with the Preferences page of the same name); its "Analyze" item is now "Inventory".
- Vocabulary pass throughout: humanized readiness chips ("Unverified source · 1", "Transcript · 1"), friendly frame-sampling labels ("Flash frame", "After cut", "Mid-shot") with raw reasons as tooltips, no internal codenames, implementation file names, or absolute paths in UI copy, humanized preference pills.
- Removed the duplicate Refresh inside the readiness card; the project selector shrinks at narrow widths instead of clipping offscreen.
Fixed
- The README's linked screenshot rendered broken in the Docs reader: badge parsing claimed every linked-image line, and the panel never served repo images. Badges now require external URLs, linked local images render as figures, and a new path-constrained
/api/doc_asset/route servesdocs/images/. - Poll hygiene: all timers pause while the tab is hidden, panel-state polling backs off when the window is unfocused, and unchanged inventory polls return a tiny
{"unchanged": true}200 instead of an HTTP 304 that Chrome's fetch layer logged as an aborted request every cycle.
Documentation & guards
docs/guides/control-panel.mdfully rewritten for the current IA — Media/Inventory/Review/History, AI Console governance, the project browser, all Setup and Preferences pages — with all screenshots regenerated from the live panel viascripts/regen_panel_screenshots.py.- New drift-guard test keeps the guide in sync with the panel's actual navigation and screenshots, and the npm publish workflow now runs all three static guards (undefined names, action-list drift, panel-docs drift) on every
v*tag — a stale doc fails the publish.
Validation
- Offline unit suite: 1,053 tests, 0 failures, 0 errors. Every panel change verified live (including a governance-mode round trip and headless verification of the Docs-reader image fix at full resolution). No DaVinci Resolve scripting behavior changed.