Skip to content

v2.40.0

Choose a tag to compare

@samuelgursky samuelgursky released this 10 Jun 14:07

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 serves docs/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.md fully 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 via scripts/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.