v0.46.0
Summary
- Release 0.46.0 (stable)
- Built from v0.45.24...v0.46.0
- Published intentionally from main via tag promotion
- State snapshot: overdeck-state f39f597
Highlights
Features
- Per-repo generation teardown
- Two-phase all-or-nothing polyrepo promote
- Route polyrepo projects through UAT assembly, delete the guard
- Polyrepo UAT assembly engine
- Polyrepo ready set with per-repo contributions
- Scope the UAT conflict hook to a repo
- Per-repo generation tables, types, and store I/O
- Stamp dashboard build provenance (PAN-3128)
- Expose membership queryability
- Add membership unavailability contract
- Dedupe keyed deliveries in crash-independent components (PAN-2997)
- Add LinearMcpAuthBanner with status hook and AppChrome mount (PAN-2997)
- Add Linear MCP auth routes (PAN-2997)
- Wake agents after Linear MCP auth (PAN-2997)
- Ingest Linear MCP auth heartbeats (PAN-2997)
- Add Linear MCP auth lifecycle fold (PAN-2997)
- Add Linear MCP auth domain events (PAN-2997)
- Render pane choice menus as inline decision cards (PAN-3113)
- Pane choice-menu detection + answer endpoint for conversations (PAN-3113)
- Pane choice-menu parser for blocking numbered menus (PAN-3113)
- Finish the cockpit merge-train control (ac1 + ac3)
- Explain Flywheel scope and correct its apply-timing copy
- Persist and display the active run's effective scope
- Make the Flywheel rail a viewer of the shared merge train
- Host the multi-project merge train on Awaiting Merge
- Multi-project merge-train view
- Aggregate /api/merge-train/* namespace
- Add merge-train control to project cockpit
- Compute merge queue from pipeline ready set
- Use per-project DNS domain in frontend URLs
- Show issue titles in activity feed
- Show issue titles in decisions
- Populate issue titles for prompts
- Show issue titles in question dialog
- Add issue reference formatter
- Add GET/POST /api/projects/:key/merge-train endpoints
- Decouple UAT reconciler from project-root (PAN-1696)
- Decouple ready set from flywheel (PAN-1696)
- Add per-project merge_train override in projects.yaml
- Rename merge_train flag key and add legacy fallback
- Brand workspace head anchors
- Narrative feed + rich question card on the simple issue page (PAN-3090)
- Narrative feed shaping module + string catalog (PAN-3090 WI-1/WI-6)
- Report per-repo sync-main results
- Assess polyrepo merge completeness
- Find merged review artifacts
- Detect inotify watch exhaustion — banner, pill, pan doctor (PAN-3063)
- Add /pan-peer-review for operator-requested second opinions
- Seed isolated homes with skills
- Render composer command results
- Expose composer command catalog
- Scope native commands by harness
- Enforce composer command confirmations
- Open composer UI command results
- Launch detached composer commands
- Execute captured composer commands
- Intercept portable agent commands
- Intercept portable conversation commands
- Parse portable composer commands
- Add composer command policy overlay
- Route autocomplete through composer manifest
- Generate composer command manifest (PAN-1525)
- Expose command options and aliases
- Clickable feature-app link chip on expanded tree rows
- Gate slash command registry drift
- Consume generated slash commands
- Generate slash command registry
- Expose command registry introspection
- Add Claude Opus 5 (claude-opus-5) support (PAN-3026)
- Monitor transport tests, role inbox instruction, docs (PAN-3015)
- Pan monitor pull-based inbox transport for Claude Code (PAN-3015)
- Add feature flag read door
- Upload release sourcemaps
- Capture pipeline funnel telemetry
- Capture dashboard boot telemetry
- Capture CLI command telemetry
- Add server analytics service
- Add telemetry privacy settings
- Gate frontend telemetry at runtime
- Expose telemetry settings (PAN-2599)
- Define typed telemetry event schema
- Persist anonymous telemetry install id
- Add telemetry enablement config
- Add pipeline resync recovery action
- Add pan review resync
- Add review status resync endpoint
- Summarize project settings values
Fixes
- Make merge reconciliation atomic (PAN-3162)
- Resolve the PTY supervisor where its dependencies live (#3177)
- Bind merge evidence to current artifacts (PAN-3162)
- Lint the assembled UAT union and probe stacks honestly (PAN-3166) (#3173)
- Resolve specs through one path authority so UAT keeps its checklist (#3169)
- Skip forge-merged repos on merge click (PAN-3162)
- Verify non-GitHub merges from forge state (PAN-3162)
- Bound stuck merge states (PAN-3162)
- Satisfy deacon file-size ratchet (PAN-3162)
- Reconcile forge-side merges in deacon (PAN-3162)
- Observe forge-side merges (PAN-3162)
- Stabilize review feedback identity
- Short-circuit deploy dependency checks (PAN-3155)
- Scope filtered merge train empty state
- Count hidden idle merge trains
- Hide idle enabled projects
- Report deploy row merge dependency (PAN-3155)
- Prefer actionable pull request refs (PAN-3155)
- Verify strike branch merges (PAN-3155)
- Require complete merge evidence before finalizing a polyrepo batch
- Preserve live batch on ref outage; finish prefix + coalescing
- Honour configured branch prefixes; coalesce evidence checks
- Address third-round polyrepo UAT review blockers
- Address second-round polyrepo UAT review blockers
- Address polyrepo UAT review blockers
- Queue every post-merge lifecycle generation
- Preserve post-merge retry ownership
- Escalate repeated feedback suppression
- Key review feedback delivery
- Redispatch review after blocked rework
- Anchor blocked review verdicts
- Guarantee post-merge lifecycle ownership
- Preserve timed-out dashboard deployments (PAN-3128)
- Bound dashboard deployment generations (PAN-3128)
- Isolate canonical dashboard deployments (PAN-3128)
- Preserve canonical deploy dependencies (PAN-3128)
- Reject noncanonical live builds in DoD (PAN-3128)
- Build reload from canonical worktree (PAN-3128)
- Retry incomplete post-merge handoffs
- Preserve merged Docker cleanup retries
- Guarantee post-merge Docker cleanup
- Address Docker cleanup review feedback
- Avoid rebuild status import cycle
- Block rebuilds for merged issues
- Reap merged workspace networks
- Remove workspace network after merge
- Close merge recovery review gaps (PAN-3110)
- Verify symbolic default branches
- Initial poison read rejects as recoverable marker error (PAN-2997)
- Surface membership unavailability
- Return typed membership unavailability
- Preserve membership failure reasons
- Type membership gather failures
- Resolve repository default branches
- Reject invalid membership repositories
- Recoverable classification for poison-clear failures (PAN-2997)
- Resume a scheduler-yielded work agent on MERGE instead of dead-ending (PAN-3120)
- Requeue retryable auto-merge failures (PAN-3110)
- Pane-identity marker for keyed recovery, strict verification reads (PAN-2997)
- Retry merge preparation through server rebase (PAN-3110)
- Merge clean pull requests without agent rebase (PAN-3110)
- Keep spawn module below size ceiling (PAN-3110)
- Preserve anchored verdicts across work restarts (PAN-3110)
- Register POST /api/conversations/:id/pane-choice in both no-loss inventories (PAN-3119) (#3124)
- Tighten assemble project validation and complete the collapsed cockpit summary
- Heal UAT verification evidence at close-out (PAN-3114)
- Provisional terminal from birth, fail-closed poison lifecycle (PAN-2997)
- Verified keyed rollback with poison breadcrumb, fail-closed target check (PAN-2997)
- Post-submit liveness verification rolls back false terminal claims (PAN-2997)
- Liveness-gated Enter-first keyed tmux submit (PAN-2997)
- Server-owned atomic tmux submit, no ambiguous cross-tier keyed fallback (PAN-2997)
- Enforce keyed wakes atomically at crash-independent tiers (PAN-2997)
- Keyed wake outbox replaces mail-content reconciliation (PAN-2997)
- Resumable Linear wake claims with mail-outbox reconciliation (PAN-2997)
- Crash-idempotent Linear wake claims and incremental projection reads (PAN-2997)
- Address PAN-2997 review — PostToolUseFailure detection, lifecycle correlation, unbounded fold, issue links
- Persist UAT verification after promotion (PAN-3114)
- Anchor pane-menu scan at last non-blank line (PAN-3113)
- Record UAT promotion verification verdicts (PAN-3114)
- Surface send-failure reason inline and suppress doomed Retry (PAN-3117)
- Close the remaining merge-train review findings
- Address review findings on the merge-train decoupling
- Accept quiescent non-PR post-merge state
- Accept contained branch work as merged
- Register per-project merge-train routes in NO_LOSS_MATRIX
- Display 'supervisor' delivery method in session/conversation UI
- Stash enumeration of a repo-less wrapper workspace is empty, not a 500
- Record verification verdicts for strike-landed issues (PAN-3067)
- Treat missing transcript as a clean skip in memory session-start hook
- Allow read-only stash list/show through git-guard; scrub guard PATH from dashboard spawn
- Test failures — NO-LOSS-MATRIX, flywheel --json, CLI test update
- Add CSRF headers to merge-train toggle and show queue without active run
- Leave 60s headroom on installation-token JWT exp
- Regenerate composer-command manifest for --health-timeout (#3105)
- Refresh composer command manifest
- Pan-dashboard-restart — restart through the supervisor, launch with Traefik env, verify WS origin
- Add dashboard auth guard to POST merge-train endpoint
- Trust config.yaml traefik domain when launch env has no origin config
- Export readProjectJsonBody for reuse in projects-merge-train module
- Use statuses parameter for live-generation query instead of filtering
- Uat reconciliation forced rebuild and live-generation filtering
- Resolve typecheck error in listEligibleCandidatesByProject
- Uat reconciliation type errors and per-project isolation
- Fix UAT reconciler and enable per-project iteration (PAN-1696)
- Update control-settings test to check new merge_train.enabled key
- Resolve live settings, per-project persistence, polyrepo guard
- Resolve full ProjectConfig for per-project flag check
- Guard polyrepo projects from UAT assembly attempt
- Health-timeout floor + suffixes, never reap a slow-booting dashboard (#3099)
- Reap full workspace stacks after 2h idle, not just overdeck UI peers (#3050)
- Stop pan done from failing on generated devcontainer harness (#3096)
- Feed action rows read as actions — verb + server detail, errors verbatim in red, thinking markers dropped (PAN-3090)
- Fail closed on anchor uncertainty
- Derive run IDs from composite anchors
- Pair role run anchor stamp and compare
- Compare producer-issued review anchors
- Stamp bypass with workspace anchor
- Stamp composite review anchor
- Stamp route with workspace anchor
- Compare composite workspace anchors
- Preserve file-size ceiling after main sync (PAN-3037)
- Assert the notes argument on inspect verdict delivery (PAN-3086) (#3087)
- Propagate cleared review intents through fallback (PAN-3083)
- Keep review status within size guard (PAN-3083)
- Consume serviced review intents (PAN-3083)
- Stop redispatching terminal reviews (PAN-3083)
- Resolve conflicts from target branch
- Deliver inspect verdicts and always pass --effort (PAN-3077, PAN-3078)
- Reject unverifiable merge artifacts
- Stabilize concurrent start branch probes
- Fail closed without rejected lifecycle promises
- Verify branches across workspace repos
- Read polyrepo agent git status
- Surface stranded repo blockers
- Stop forgiving missing merge artifacts
- Probe dispatch branch in primary repo
- Resolve restart branch from primary repo
- Block stranded polyrepo merges
- Block partial polyrepo lifecycle
- Sync main across workspace repos
- Route Get it unstuck to the door that tripped stuck (PAN-3073)
- Clear feedback_delivery_needs_you once feedback delivery succeeds (PAN-3074)
- Drawer conversation tab can scroll again
- 404 missing assets instead of the SPA shell; allow bracketed model ids
- An agent parked on a blocking prompt is not healthy/working (PAN-3070) (#3072)
- Verification row passes on the verdict, not the commit anchor (#3071)
- Detect Claude permission prompts behind the footer hint (#3069)
- Surface tool-permission prompts as decisions without Channels (#3066)
- Type pending reap resolution (PAN-3055)
- Reap dead-agent pending input (PAN-3055)
- Gate scans on tmux census (PAN-3055)
- Regenerate synced-skills fixture for /pan-peer-review
- Count all bridge networks for Docker pool exhaustion (PAN-3053) (#3060)
- Restore main-green gates for boot-reconciliation extend route (PAN-3056) (#3059)
- Continue agents that compacted and stopped (PAN-3057)
- One GPT-5.6 context window, Anthropic-only 1M detection (PAN-3057)
- Make the boot-reconciliation dialog tell the truth (PAN-3052)
- Unswallow promotion errors, clean the promoted draft, drop the gh assumption (#3045)
- Move clearRecordPipelineClosedOutSync into the record write door (#3039)
- Clear terminal closedOut marker so reopened issues re-enter the pipeline
- Refresh composer manifest after rebase (PAN-1525)
- Close composer command review gaps (PAN-1525)
- Seed Codex homes from shared skills (PAN-1525)
- Validate detached composer paths (PAN-1525)
- Session row metadata overlap in Command Deck tree
- Session tree misses strike-only and workspace-less issues (PAN-3034)
- Eliminate the recovery check-then-rename race with claim-everything drains (PAN-2989)
- Keep claimed verdicts read-visible and never recover a dead claim over a newer live fallback (PAN-2989)
- Align unpause toast assertion (PAN-3021)
- Cancel raced reconcile/restore at the durability deadline and claim fallback generations atomically (PAN-2989)
- Hide synthetic ship conversation rows (#3024)
- Proactively drain the workspace verdict fallback (PAN-2989)
- Scrub agent identity from the spawned dashboard server env (PAN-2989)
- Bound the under-lock durability wait in updateIssueRecord (PAN-2989)
- Honor per-issue workModel override in the work-spawn route (#3022)
- Require positive close-out evidence (PAN-3018) (#3019)
- Sync cockpit URL when switching to an issue pane tab
- Report never-built UAT stacks as absent instead of healthy
- Keep cockpit deep-link URL when issue selection clears the conversation
- Replace --bare with --safe-mode for background AI spawns (PAN-3014)
- Preserve local fatal diagnostics
- Preserve process finalization semantics
- Keep the CLI exit door lightweight
- Close remaining telemetry review gaps
- Flush pipeline telemetry on CLI exit
- Route all CLI exits through the async door
- Separate configured and effective telemetry state
- Capture sanitized Node process exceptions
- Sanitize browser telemetry metadata
- Keep pipeline telemetry reads cycle-free
- Normalize persisted status comparison
- Stream sourcemap release commands asynchronously
- Enforce telemetry schema documentation parity
- Detect equal-timestamp sweep drift
- Complete pipeline telemetry funnel
- Finalize telemetry for direct CLI exits
- Prevent stale enrichment regression
- Enforce telemetry privacy lifecycle
- Keep config schema within size ceiling
- Keep reconciliation cycle-free
- Narrow review resync errors
- Type reconciled event append
- Type review event append in deacon
- Reconcile lost review status events
- Emit reconciled review status changes
- Bound review status enrichment
- Make review status event emit durable
- Show settings for sparse projects
- Show project settings disclosure state
Plus 177 internal changes (refactors, tests, tooling).
Breaking changes
- None explicitly called out in commit subjects. Review the full changelog before upgrading across versions.
Install
npm install -g @overdeck/core@0.46.0