What we shipped.
Every release, newest first. Morning updates itself — this is what arrived.
v0.1.402026-08-25
New
- An explicit Standard tier override is honored, never dead config
- DeepSeek-harness adoption — loop guard, env scrub, retention, conjunction verdicts, prompt goldens
Fixed
- One shared platform-chip toggle rule (mobile family is exclusive)
- Prompt-cache tokens reach usage accounting from the SDK adapters
v0.1.392026-08-24
New
- App side — seat picker, invites UI, company name, onboarding
- Dependency drift install + the Brain's bash fixes count again
Fixed
- Review fixes — resend stale-closure bug, AC-14 jump links, band pin
- Plan changes reach the app without a restart
v0.1.382026-08-22
New
- Platform glyphs on the delivery-platform chips (project settings + new-project wizard); mobile shows the Apple+Android pair
- Outlined Apple + full-body Android platform marks (Tabler paths, lucide-matched strokes)
- Apple/Android marks on the card; mobile always shows both; gate results per platform on hover
- Task card redesign — header strip, gate results on platform glyphs, scrollable tags, flush progress
- Dedicated flat Settings step after create; first screen stays minimal
- One screen, many states — data-screen-state panels, state-aware data-nav, registry states
- Remember the last e2e gate results on the task card; reset when a new run starts
- Follow-ups are fixed where they were found — in-task by default, explicit deferrals proposed, symptom-only titles
- Execution concurrency is one honest number; per-stage limits always on
Fixed
- Stat cards use the theme border token (bare `border` rendered near-black)
- The top-panel palette glow is server-stated, never inferred
- Hide the tag-row scrollbar (global ::-webkit-scrollbar styling beat the arbitrary variant)
- Keep the last e2e results visible until the new window's first settle
- Remembered e2e results keep every leg of the window
- Per-attempt durations add up to the headline total
- Ceiling aborts are run errors (blocked, not 'paused by user'); sweep the worktree's processes on abnormal run end; deny whole-suite runs in skill sessions
v0.1.372026-08-20
New
- Domain-research locates official protocol specs; Morning snapshots them as reference docs
- PDF text extraction for attachments (unpdf); reference extraction keeps whole documents
- Reference grounding — attachments + links reach every skill; plan pins protocol contracts
- Guided next steps, project-creation tracks (362), first-task friction (364), live gate-leg progress
- Richer generation context, coverage tiers, diagnosable runs
- Sweep stale simulator XCTest attachments (testmanagerd debris)
- Design-system rethink: token gallery, usage notes, library + creation flow, clickable prototypes
- Claude SDK model discovery — the account's real roster, not a hardcode
- Copilot model catalog → current roster; retired-model defaults fixed
- Codex model catalog → current GPT-5 lineup
Improved
- Remove the per-flow design-system select from the toolbar
- Drop the Plan and Design cards; attachments list collapsed by default
Fixed
- The provider row's Claude account reaches every caller; a 401 names the failing credential
- Maestro post-run housekeeping crash is not a verdict; re-run gate failures are counted rounds
- Superproject wip snapshot excludes Morning-internal dirs by pathspec
- Review shows every task-owned submodule, diffs three-way; wip snapshot never commits on a stale clone
- Cross-phase parallelism — skip-and-continue barriers + per-stage limits default on
- Settle-vs-flush race, off-screen spotlight, provision misroute, import URL redaction
- Review r2 — spawn-error guard, scoped project row on jobId GET, scaffold commit identity
- ONE palette-key convention — bare names, normalized at every boundary
- Embedded setup-tokens are live-validated, not presence-trusted
- Connection probes honor the ROW's embedded credential
- QA triage clusters same-reason failures; non-e2e skills can't drive devices
- Harvested screenshots supersede prior rounds — never accumulate
- Expired-OAuth CLI notice is an ERROR that fails over — never output
- Instant previews degrade to default scenes; drop the per-group Feedback button
- Route discovery settles hydration before capturing affordances
- Submodule touch-detection tests its OWN base, not the parent's name
- Diff from the tip-most base branch point, not a stale local base
- Exit handler picks the stream carrying the CAUSE
- CHROME RULE — app chrome is never a value moment in another scenario's story
v0.1.362026-08-18
New
- Pipeline editor — full-width canvas, hint below, Discard/Save footer
- Pipeline tab renders the flow editor inline + user-facing flow→Pipeline rename
- Brain FAB unread — rainbow wave radiating through the icon strokes
- Activity signal, cost/expiry surface, consented destroy
- Full-footage demo authoring rules + Flow gets its own project tab
- One card per scenario — list + results grid unified
- Flows land visible results; regen is breakage-aware and failure-keyed
- Interaction probes reveal the dialog layer; flows must be distinct
- Flows script only observed affordances; small sets grow
- Narration sells from the first word; from-scratch drafts cover 4-7 value moments
- Deleted scenarios never resurrect + Morning ships its own demo seed
- Head-trim, honest video removal, voice-over toggle
- Seeded credentials make demo auth fully autonomous
- Scaffold auth.demo.yaml from the login form when walled
- The Brain fixes demo breakage itself, never via pipeline tasks
- Off-camera auth — auth.demo.yaml signs in once, footage starts authenticated
- Auth-wall fail-fast, true per-row re-record, informative Brain aborts
- Live status bar, active-row spinner + stop, locked rows
- Cold-compile grace for app-network noise + persisted last-words tail
- Restart guard, Stop-triage, and non-empty reasons
- Gate flags host Metro-proxy / IPv4↔IPv6 forwarders
- Progress bars, running-flow timer, project-list QA/docs chips, top-panel edit
- Opt-in parallel iOS+Android comprehensive runs (Metro lanes)
- Live per-flow status table for comprehensive runs
- Docs + Demos become top-level project tabs; Automation is flat Autopilots
- Sibling sweep for shared-shape config fixes
- Parallel mobile gate legs on isolated lanes (opt-in)
- Deterministic post-generation corrections
- Task-launch prebuild + generation teaches freshness
- Per-service launch targets (main vs task)
- Call out task launches of prebuilt-image stacks
- Read ALL warnings/errors; classify; fix or MASK
- QA runs narrate their phase on the card
- Workspace-wide chat binds itself to a project
- Generic connectivity-distress tier in log ingest
- Commit selector + resizable sidebar
- Kafka broker-unreachable visibility (wms incident)
- Docker-daemon-hang fast path + one-click restart
- Notes as its own task-detail tab (after Chat, before Cost)
- Two-pane wizard shell — left-rail steps + roomy content
- Task Notes replace steer, injected into every skill
- Move Language picker from Account to Settings → Appearance
- Per-scenario re-render/remove + per-video download/remove
Improved
- Brain FAB unread = neurons-firing animation, not a corner dot
- Fade the project-edit pencil, divider before launch button
Fixed
- Last test-suite stragglers + interrupted tool chips on completed messages
- Sweep stale test pins green + scenario gen never returns empty
- Cross-bundle in-memory registries ride globalThis
- Abort mid-gate must not seal the phase row (Spec 344b completion half)
- Probe destructive-click guard + recovering-indicator flash
- Project-scoped WS routing + residuals
- Durability review — reconnect recovery, half-open watchdog, event coverage
- Cards keep their videos while a run is in flight
- Generation applies the demo seed before discovery
- The WS port follows the app port — PORT+1
- Remove video scrubs the run snapshot too
- Route discovery uses the off-camera session too
- Webpack engine + isolated dist dir for npm run dev
- Simulator.app opens always name their device
- Base-integration lines never read as a stage claim
- An aborted run never settles gate steps
- Unqueue lands PAUSED on auto-mode boards
- Harness-lib v19 — Metro lives in its own process group
- Off-flow columns rejoin the flow, never silently end it
- Project-side subprocesses never inherit Morning's NODE_ENV
- Retry the Gatekeeper build race up to 3×
- Top-panel project-edit button uses the Pencil icon (matches the list)
- Comprehensive run pins the iOS bundler itself (No script URL red screen)
- Fallback iOS boot never boots another project's pinned sim
- IOS launch never fires on another project's booted sim
- Expo rebuild uses `run:<platform>`, not the bogus `launch:` (the --device error)
- Runner opens the INSTALLED iOS app instead of rebuilding (bundle-id divergence)
- IOS render probe detects the "No script URL" red box (no more green over it)
- Durable iOS bundle-id pin (the (null) "No script URL" red screen) + QA parallel progress line
- Render probe stops flagging login/form screens as blank
- WaitForPorts reconciles to the run-root compose
- Readiness never errors a busy process (soft verdict)
- In-place live-row updates feed the stall sweep
- Fold gate sub-phase lines into the leg's live row
- DependsOn wait extends while upstream is starting
- Removing the first manual config no longer reverts
- Drop duplicate generated services (same cwd+command)
- Generation invariant: no empty launch target
- Make the target filter visible
- Warn on readiness-blind dependency roots
- Rejection voids every worker column from destination to gate
- Single-commit view hides base-inherited submodules
- The web leg carries real evidence
- Gatekeeper race on fresh checkouts: xattr + retry once
- Stable base-worktree dir + free prepare classification
- Commit list excludes base-integration commits
- Prepare failures surface the real error, not npm warn
- Kafka missing-topic errors get an identity
- QA legs run maestro-prepare + gate-parity env + fail-fast
- Batch investigation relaunches after file fixes
- Last wizard step reads "Finish", not "Continue"
- Diff panel stuck at "0/0 files" + cycling git logs
Faster
- Keep the .next cache between builds; skip the duplicate build-time lint
v0.1.352026-08-12
New
- Merge-failure Brain recovery; delivery failures never mangle main
- Add scenario by prompt — author one exact scenario from a free-text brief
- Scenario-gen UX — spinner, visible list, per-scenario regenerate, boot-degrade
- Grouped nav rail + flat sectioned card for app & project settings
- Autonomy — stop-what-you-booted, persist starters, one-shot scenario reconcile
- Run docs/demos even when empty (route auto-discovery)
- Loud untrack hygiene — suspicious untracks and ignored-source divergence are named with the responsible ignore rule
- Seed/ skill contract, capture.json compat, structure lint wiring
- Project layout contract + demo-runs spec docs
- Demo scenario lifecycle (M3c of Spec 315)
- Demo render + multilingual voice (M3a of Spec 315)
- Web demo runs on the docs-run chassis (M2 of Spec 315)
- Project layout contract (M1 of the Spec 315 conception)
Fixed
- Ban generic narration filler; ground scripts in PRODUCT.md + name
- Register demos_automation_enabled as a Labs gate
- 1 — restore develop's gate file; re-apply the lint surgically
- Never sweep build-output dirs (target/, node_modules/, …) into commits
v0.1.342026-08-11
New
- "Push changes to the remote" now gates ALL pushes (incl. wip)
- Full-width left sidebar with icons + selected-tab header
- Delivery is its own tab; project tabs move to a left rail
- Per-project "push merged changes to the remote" setting
- Fix-first triage — investigate, fix, verified retry; inline session-end facts
- Improve the code review screen ISSUES (#6)
Fixed
- Classify Higgsfield's underscore not_enough_credits as the typed credits error
- Total task time counts every phase VISIT, not one per phase name
- No background-task wake exists — never notification-wait or end a turn with backgrounded work
- Make the merge-mode control an explicit two-option choice
v0.1.332026-08-10
Fixed
- Precise ENOENT message in mixed build results + boot PATH-patch source pin
- Resolve the GUI-launch PATH once onto process.env — every spawn inherits it
- Toolchain PATH resolution everywhere Morning spawns project tools; bare Brain retries are propose-only
v0.1.322026-08-10
New
- Layered, submodule-aware repo map for every codebase scan
- Add IDE-style code review screen with sidebar and evidence
Fixed
- Loop guards hold — one failure signature per root error, Brain retries grant one round instead of resetting the budget
- Pre-review gate resolves the node toolchain and never fabricates a lint error from its own crash
- Keep the model's buffered doc when a repo scan exhausts turns
v0.1.312026-08-10
New
- RBAC-gated cross-project reads+writes for global/ops threads
- Multi-round text-protocol loop for narrating models
- Context-fit fuse — warn when a local model will truncate the prompt
- Make narrated-tool-call handling visible in the task timeline
- Recover tool calls a model narrates as text instead of calling them
Fixed
- Wip snapshot no longer skips a submodule when .morning-artifacts leaks in
- Scope hint reflects the OPEN thread, not the selected project
- Salvage reads the saved review, not narration; no false FAIL on "no blocking issues"
- Recover bare-name narrated calls; auto-commit only this turn's edits
- Execute tool calls a model narrates as text, then answer
- Persist a whole assistant turn as one ai_output card, not per line
- Coalesce streamed ai_output into whole lines (no more one-token cards)
v0.1.302026-08-08
New
- Discover models for custom/local (Ollama) endpoints
- Dedicated Ollama card + lock provider/transport on type-specific add
- Add a project language selector to the new-project wizard
- Move the Flows editor from the board top panel into project Settings
- View back in bar, blocked→menu, grouped dividers, leaner rows
- Reorder to Auto·Path·Design·Provider + Appearance menu group
- Remove the "System logs" execution dock
- "View diff" on the task panel → inline comments → backtracking
- Show pipeline progress on every card (backlog + needs-you)
- Localize account usage-window labels
- Localize settings copy, user menu, greeting + compact board-view settings
- Migrate final 71 surfaces via workflow (Tier 2 batch 3)
- Migrate 54 more surfaces via workflow (Tier 2 batch 2)
- Migrate 28 high-traffic surfaces via workflow (Tier 2 batch 1)
- Migrate first-contact surfaces — auth + errors (Tier 1)
- App-UI i18n engine — next-intl cookie-only (Phase B)
- Per-project artifact output language (Phase A)
- Settings clarity for non-technical users
- Image-generation install card + CLI-auth save fix
- Component-library-aware implement across frameworks
- Split task-card progress — phase steps inline, overall on the bottom border
Fixed
- Log tool COMPLETION on the API path so calls don't look stuck/duplicated
- Accept `cmd` alias for run_command + give repair the exact schema
- Discovered custom models use an obvious dropdown, not a datalist
- Don't mislabel every 404 as a missing /v1 (surface the real cause)
- Don't double-count one account under Ollama AND Custom / Local
- Default tool taskId to the current task (stops get_task_info({}) crash)
- Repair malformed tool calls instead of crashing the run (helps Ollama)
- Real health check + clearer setup for custom/local (Ollama) endpoints
- Raise max-images-per-design cap to 12 so saving 7 no longer 400s
- Scroll the add/edit-provider dialog body so the footer stays reachable
- No "Checking AI" flash when toggling Simple/Pro
- Show the real filename for deleted files (not /dev/null)
- Phase-count progress, hide 0%, show phase name when paused
- Match the diff button to the copy button (small, muted, left of branch)
- Three-dot diff — show only the task's own changes
- Omit only individually-huge files; smaller, lighter diff
- Show all files, readable diff colors, icon-only trigger
- Review pass — wrong-file comments, shell injection, gate misrouting
- Recover from a dead refresh token instead of retrying forever
- Keep "QA" verbatim + compact eye-icon board settings in full board
- Lock checkout on unverified accounts + honest expired-session error
- Indeterminate phase bar slides instead of filling full-width
- Guard avg cycle time against corrupt timestamps (389026.4d)
- Tapping a "Needs you" row opens the task
- Phase-steps bar shows only the OPEN attempt, never a stale prior one
v0.1.262026-08-06
New
- Platform-aware provider install instructions
- Liveness pill, provisioning milestones, ready toast (Spec 302r4)
- Version indicator + 'Update now' in the app (Spec 302r3)
- Loopback drain probe GET /api/internal/busy
- Membership-wide sandbox discovery in the app (Spec 302r2)
- Company sandbox, morning side
- Wire worker-mode boot + docs cross-links
- Remote execution concept + worker boot profile + auto-mode collision guard
Fixed
- Drop /login from history after sign-in (Back no longer returns to signin)
- Restore last project synchronously (no empty-state flash on load / screen switch)
- Theme-adaptive splash + window background (no dark-on-light flash)
- Review fixes — AC-6 tarball verification + no double-shipped migrations
v0.1.222026-08-06
New
- Neurons brand backdrop on the first-run splash
- Instant branded splash on first run (no more blank window)
Faster
- Defer non-critical boot work so the server serves sooner
v0.1.192026-08-06
Fixed
- Migrate provider-install tilde-expand to homeDir() (Windows EPERM)
v0.1.182026-08-06
New
- Real provider brand icons (@lobehub/icons) + card fixes
- Provider & integration marketplace
Fixed
- "signed in" for cloud actions = a linked account, not a live token
v0.1.172026-08-05
Fixed
- Tolerant markdown-block extraction (unclosed / wrapped fences)
- Resilient memory harvest — don't fail the whole init on one verbose memory
v0.1.162026-08-05
New
- Remove the status widget — the tray menu is the one shell surface
Fixed
- Gate on a linked cloud account, not a live access token
v0.1.152026-08-05
Fixed
- Visible tray icon + honest macOS update path
v0.1.142026-08-05
Fixed
- No Brain FAB on auth pages; external links never steal the app window
- Device-flow approve link never rendered — verificationUri field mismatch
v0.1.132026-08-05
New
- Cloud-only sign-in for desktop + cloud-linked web instances
Fixed
- Status banners are session-gated (no realtime/limit noise on the login page)
v0.1.122026-08-05
Fixed
- Real Claude auth check + clear "sign in" errors (not cryptic parse failures)
v0.1.102026-08-05
New
- Compiled-node-child MCP so Codex/Copilot get morning tools in the packaged app
Fixed
- MORNING_BUILD env is the reliable build-phase marker
- Build-phase DB connections go to a throwaway temp file
- Stop @vercel/nft globbing the whole home dir on Windows
- Strip runtime pollution from the standalone before packing (4GB → normal dmg)
- Run chat MCP servers in-process (type:'sdk') in the packaged app
v0.1.92026-08-05
New
- Single-device reaction + fix MCP server address
- Durable auto-update + Spec 298 widget remake
- 3 — remove the local@morning.app auto-admin everywhere; desktop uses normal cookie sessions from the cloud-first shadow identity
- Cloud-first desktop identity: first-run cloud sign-in (device flow + EULA), shadow local admin, token-expiry relogin gate with 14-day offline grace
- Branded auth frame (bg_neurons + wordmark), EULA-at-registration in /setup (server-enforced, audited), modal suppressed on auth pages, beta-aware trial banner
Fixed
- Clear the init lock live on project_init events
- Bundle skills/ into the standalone
- Run the morning MCP as an in-process SDK server
- No dead tools in an unbound floating chat
- SignedIn preview uses the refresh-capable token path
- Pipeline % measured across WORK columns
- Desktop WS client connects to the runtime port
- First-run cloud routes — malformed body cannot bypass consent; admin-exists race recovers with a session (review catches)
- /api/eula GET is public + middleware-allow-listed — the pre-auth /setup page needs it; a true first run was stuck otherwise (review catch)
v0.1.32026-08-04
New
- Declared platform targets as authoritative scope
- In-app "Report a bug" (cloud-proxied)
- Device registry in the account card (list sessions, sign out, this-device flag) via admin proxies
- MorningDEV rebrand (MD identity) + runtime/error hardening
- BETA badge + free-beta banner; beta flag through the sync (trial banners suppressed while beta)
- Desktop surfaces: cloudAiEnabled through sync, credits UI hidden while dormant, desktop-trial copy, banded Team label
- Desktop EULA gate (first-run modal, packaged builds only) + cloud-reported acceptance
- Email-verification state in the account card + send-verification button; human checkout-gate error (Spec 260r2)
- Mid-task AI decisions pause the task + answer in global chat
- Allow authors to select backtracking targets for approval gates
- Phase-aware "Needs you" titles and design-mode glyph in Simple View
- Gate the New Project wizard Documentation option behind docs Labs gate
- Gate experimental features behind Labs + settings/brand cleanups
- Redesign Simple View for clarity and scannability
- Higgsfield CLI image backend
- Labs tab with progressive disclosure
- Design scan sees the code on API + product scan verifies
- Studio first-draft grounding (provenance tool-gate + pre-draft quiz)
- Finish the run→launch domain rename
- Burn-rate coloring — amber/red when spending ahead of pace
- Harness_ensure_metro: per-flow Metro liveness re-check
- Deployment-topology visibility for generation + the Brain
- Add Codex account limits via the app-server JSON-RPC
- Surface reset time on the top-bar usage
- Keychain grant-access hint when the usage read is blocked
- Top-bar usage bars, all-provider fetchers, settings ui-kit, docs
- REAL Claude account meter (5h/weekly), the way Orca does it
- Explicit enable/disable Switch per provider
- Live provider usage under the provider (top bar + Capabilities)
- Idempotent mutation ledger (L1)
- Per-project scope + auto-import scheduler
- Candy UI-kit (feedback primitives + fast-win polish)
- Provider usage meter (F2) + budget threshold meter (F6)
- Capabilities matrix, Labs pane, scope badges
- M5 — settings UI + board import dialog
- Ingest tasks from GitHub/GitLab/Jira/Linear/Redmine
- One research scan (init) shown live in the wizard
- Promote/design-disabled deadlock + global rename directive
- Surface key project settings in the New Project wizard
- Direct-edit a plan iteration (deterministic escape from LLM refine)
- Shared "Add to batch" refine queue (Studio + approval)
- Init-aware new-project wizard + governed-doc codebase scans
- Doc-first Design library (+ in-flight Spec 253 wizard)
- The durable automation loop (journal, visibility, verification, escalation)
- /247 — phantom deferral, chat ownership, destructive gate
- Run config materializes into served worktrees
- Destructive-fix approval lives in the Brain's chat proposal
- Worktree-run state isolation (per-task DB + test data)
- Investigations get working tools; build-cache clears unbanned
- Diagnose classifies the fix LAYER before fixing
- One-click approval for destructive fixes + migration-collision knowledge
- Worktree envFile falls back to the project root; .next-run types; chooser back nav
- Task-card serving indicator + flow-run blocking
- Console-signal cold start replaces the 4-probe ladder
- Direct fixes on task-worktree runs — no intermediary
- Cold-start probe retry ladder + Brain handoff on real failures
- Structured Delivery section — branch, PR/MR, Submodules list
- V2 — paid Desktop ($10/mo, 14-day trial), team-only cloud, ribbon retired
- Transcript-driven diagnose fixes (env field, honest strips)
- Recovery quality: gated inputs, honest outputs, one owner
- Scan an existing repo into the greenfield review
- Per-task base branch (stacked tasks)
- Local base fast-forwards to origin at task start
- Morning.run.yml — the run config becomes a repo-resident file
- Git-hosting tokens move to the project Delivery section
- Settings → Git hosting — custom host mapping + UI-managed tokens
- Auto-create remote repos for NEW service submodules
- UI-first Design chooser — full-screen try-on + full redesigns
- The Design library — generate, store, select, and tune designs
- Onboarding guidance (tips, provider guard, signals)
- Per-iteration time breakdown (AI work vs approval wait)
- AC ids, Decisions table, testable negative scope
- Run a project instance from a task's worktree
- Stop button to cancel a live headless investigation
- One collapsed attachment strip for every chat surface
- Coverage catalog — living e2e/README.md matrix across tasks
- Teams inbound message relay (Spec 220) + remote-execution concept
- Reorder subtabs Timeline·Progress·Graph + per-phase durations on Timeline
- Live "investigating…" placeholder for background triage
- Cold-start the design system from the codebase during init
- Web folder picker for the Path field
- Merge Execution+Flow tab, rename Tokens→Cost, tab icons; messenger "Preview" button
- Per-project policy for pre-existing (drift) failures
- Harness_should_rebuild + gate warning so wrappers stop rebuilding every run
- Auto-commit the Brain's direct edits to a project checkout
- Render-check verdict chip on the message bubble
- Wire render-check into all refine surfaces
- Render-check diagnose+verify in the shared core
- Let the Brain edit small localized fixes directly (incl. visual)
- Prefix downloaded artifact filenames with the task title (length-capped)
- Route pre-existing e2e drift failures to Brain bugfix tasks
- Register new screens from the per-task plan (Spec 209 #2)
- Propose_task — one-click "Create task" button for new work (not prose, not a quiz)
- Copy-paste command hints in the channel dialog
- Command menu + per-messenger formatter + native buttons
- Universal render probe (harness_verify_app_renders)
- Branded Brain avatar on AI messages
- Broadcast user messages; gate logs typed as tools
- Message attribution — every human message names its author
- Visible loops — stopped is never silent; approval attests "I fixed it"
- Gitlink rescue — the machine's bytes are Morning's to publish
- Tested table + signature purity + visible base integration (Spec 198–200)
- Tested table — every testing artifact says what actually ran
- Delay the supporter ribbon to the end of the first week
- Sub-tabs inside the project Settings tab
- Root-failure fail-fast + entry canary — N identical failures are ONE defect
- Design pipeline as a positive switch; stop gating the rest of the tab
- Auto-apply is the default — flip existing 'review' projects to 'auto'
- Input-integrity rule — fail at the keystroke, not three steps later
- In-app skill editor (admin, edit .md on disk) — Spec 193
- Canonical iOS sim resolver + one test-visibility setting (Spec 191 + 192)
- Global rate-limit banner in the app shell
- Per-phase default capacities + drop the "WIP" qualifier
- Generic permission-fault detection — detect by error class, confirm by stat
- A real Stop for chat turns (Spec 186 follow-up)
- Read the SVG, don't inline it (Spec 186 T6+T9)
- Apply-as-a-tool on both transports + routes (Spec 186 T4-5)
- Apply-tool infrastructure — seam, endpoint, MCP server (Spec 186 T1-3)
- Extract shared apply seam (Spec 186 Task 1)
- 1-hour prompt cache for durable warm-start
- Declutter generation UI + delete sessions + relocate screens
- Auto-continue on quiz completion + Back button to revise answers
- Pin the live quiz on every chat surface
- Pin the live quiz above the composer + add a custom answer option
- Daily multi-project Brain ops chat
- Collapse Design document history + move it to the bottom of the tab
- Stoppable capture runs, issues split, Brain fix loop
- Stoppable runs, honest verdicts, Brain fix loop
- Weekly promo cooldown + discoverable lifetime purchase in settings
- Channel-aware inbound chat — the bot can act on what it pinged
- Free-tier supporter promo + lifetime unlock
- Product-defect routing, in-chat quizzes, external MCP servers (Specs 170 + 172 + 175)
- Scoped rejection routing + accumulated per-artifact review (Specs 168+169)
- Screenshots group in task artifacts tab (Spec 164 follow-up)
- Add existing screens mid-session
- Resizable + collapsible sidebar panels in review modals and Design Studio
- Read-only codebase access in chat + refine
- Visual tuning editor (Spec 160) + start from existing screens
- Sync app changes into registered screen designs
- Readability contract — word budgets, revision log, style gate
- Vertical-slice task sizing + per-run coarse granularity knob
- Orphaned-record debug count when nothing matches the phase (Task 13)
- Surface partial-stale approve outcomes (Spec 153 Task 14/15)
- Runner/QA/docs acquire the device lock for a pinned device (Task 4)
- Persist last mobile-launch target/device across restarts (Task 10)
- Native-toolchain remediation + clean escalation
- Surface FTS relevance-recall health in the tab (Spec 153 Task 20)
- Idempotent materialise + crash-recovery to the approval gate (Task 7)
- In-phase provider failover before blocking (Spec 153 Task 8)
- Expire stale design proposals + prune resolved ones (Task 9)
- Age-prune tombstones so deleted-id lists don't grow forever
- Pause on 401/403 with a re-auth banner (Spec 153 Task 5)
- Persistent admin alert on provider sticky-disable (Task 18 §17)
- Show run age + force-finalize a stuck run (Spec 153 Task 18 §10)
- Surface executed-flow-count on a mobile gate PASS
- Global realtime-offline banner on WS drop (Spec 153 Task 18 §20)
- Surface per-channel delivery health in the channel manager
- Persist per-channel delivery health (Spec 153 Task 18/19)
- Per-channel outbound rate cap (notify-storm guard)
- Unify thinking / tool-call UI across every chat surface
- Create tasks with enforced "blocked by" dependencies
- Thinking indicator on every chat surface
- Attach office documents and let the model read them
- Process-audit — systemic flow-by-flow gap + durability review
- Self-service display name + reorder phase-control cycle
- Multiuser completion — membership sync scope, attribution, audit-or-exempt
- Visible task-id chip + ?task= deep-link (worktree correlation)
- Design EDIT paths carry the knowledge fragments (Spec 148 follow-up)
- Behavioral principles fragment wired into plan, design, and review
- 'Run configuration' shortcut in the board run dropdown
- Stale dev-client automation + reserved e2e AVD + sim name disambiguation
- Interactive live build — scroll, device frames, liveness note
- Live generation progress (phase, KB streamed, elapsed)
- Parse, gate, and surface the plan TL;DR
- TL;DR contract — the whole concept in one reviewable paragraph
- Grouped settings surfaces + merged Automation tab
- Per-project device affinity + parallel mobile testing
- Owned-only gate scope + the task-ownership contract
- Left-rail assistant chat + hover-overlay refine visuals + theming
- Architecture onboarding + canonical ARCHITECTURE.md
- Brain-first background QA
- Living user docs (per-task updates + localized capture runs)
- Mid-task AI↔user decision channel + task steering
- Tasks 4-10 — distiller, consolidation, recall tool, staleness, user prefs, tests, docs
- Task 3 (+8 store) — memoryPolicy enum, proposals queue, source-gated writes
- Tasks 1-2 — FTS5 recall index + task-relevant injection
- Per-skill live web-research opt-in via frontmatter
- Web search in all chats, task-chat write parity, plan-chat direct edits
- Icon-only Simple/PRO toggle + theme icon in the top panel
- One chat stack, one tool display, one design-refine engine
- Tasks 13-15 — Design Studio (design-first) + cross-cutting tests + docs
- Tasks 11-12 — real-screen previews + Constructor full-doc apply
- Tasks 8-10 — Design Constructor directions + scenes
- Tasks 5-7 — design_doc_policy + Design-tab history/revert/queue
- Tasks 1-4 — flag hygiene + DESIGN.md as single source of truth
- Design badge is icon-only on the card — label moves to hover
- Native provider web search as the default mechanism
- Domain-research as a parallel Planning skill
- Common web research + grounded critique
- Self-clean committed build artifacts on run start (not just fresh worktrees)
- Run-start integration v2 + worktree lifecycle hardening
- Unified per-attempt context contract for every phase entry
- Drive the burning sparks from REAL token spend
- Flame emits rising "token" embers while LIVE
- Per-task auto-resume ceiling (bounds runaway idle-stall loops)
- "Complete" task menu item for last-column tasks (force → done)
- Auto -wipe-data cold boot when the Android emulator is out of storage
- Phase 3 — provider-form tier inputs + per-project tier overrides
- Phase 2 model tiers — per-provider tier_models + per-skill Settings UI
- Per-skill model tiers (economy/standard/premium), provider-agnostic
- Inject a gate-enforcement directive so the skill validates EVERY target OS
- Task Flow tab — per-task execution graph + timeline
- Skip-unchanged-phase caching (#6) + unified interrupt registry (#3)
- Replay-from-checkpoint (#2) + scoped reducers (#4) + fan-out primitive (#5)
- Erase iOS sims on teardown to reclaim disk (not just shut down)
- Surface a bell alert when the macOS Automation/TCC permission is missing
- Auto-apply dependency/product fixes (raised autonomy)
- Replace equalizer with a calm ember-glow live indicator
- Burn-up curve, runtime-health light, rate-limit cooldown
- Cockpit instruments — live "burning" indicator, pipeline, velocity, ETA
- Show the real phase on queued cards (Clock icon marks queued)
- Dashboard redesign — project card + stat cards + zones
- Exhaustion advances to the NEXT phase (universal) — supersedes replan-to-Planning
- Exhaustion moves forward to replan→Approval instead of hard-blocking
- On a build-gate failure, order the fix phase to RUN the real build
- Phase-advance waits in the queue (like a manual run) when the next phase is at capacity
- Show which task the Brain is actively working on
- Surface Brain messages — unread dot on the Brain button + bell
- Boot+hourly sweep to recover dropped blocker triage
- Use the shared floating Brain button (like PRO), drop the rail
- Auto-launch the mobile app preview on Metro-ready
- Simctl fallback when Expo's Simulator-focus osascript fails (TCC)
- Animate + resize lifted side panels, persist width per-user
- Rename "AI Execution Log" → "System logs"; drop stop button + AI icon
- Per-project Metro port so mobile previews run concurrently
- Detect silent port failures → Brain-visible signal
- Autonomy ON by default + triage ALL error classes (not just product)
- Make the Needs you section collapsible too
- Dynamically detect a FREE Metro port (was a fixed hash)
- Rebrand the chat as "Brain"; hide it behind a side button
- Make the Now and Up next sections collapsible
- Platform icons on feature titles + distinct queued state
- Persist per-project + read the durable truth
- Sort actively-running features above paused ones in NOW
- Open the chat on a fresh empty conversation each time
- Redesign — cockpit layout + chat rail, richer cards
- Embed full chat instead of brain-recents; swap the two lanes
- Simple Mode as the default screen, PRO board behind a toggle
- Per-project Metro port — let native e2e runs run concurrently
- Unify the brain + make autonomy durable
- Run the FULL native suite (smoke + comprehensive), like the web gate
- Force the e2e skill to fix EVERY failing flow, not just its own
- Post-escalation fresh in-place round — full self-heal ladder
- Failure-class escalation ladder — Testing×N → Implementing×1 → block
- Remove the per-task "Human-step skipping" feature
- Gather full prompts — capture the assembled system+user per run
- Layer 2 — board-level token analytics + outcome correlation
- Prompt-token analytics — section manifest + cache metrics per run
- Version documents instead of overwriting; browse history on review
- Surface triage in task log + project chat + bell badge
- Inline cycling icon on the Execution-tab phase list (drop the separate section)
- Per-task phase controls — skip or pause any phase
- Glab/gh setup hint + PR-auth health check under "Merge changes without PR"
- Send the 'done' notification on task completion (it was never fired)
- Per-subagent log division for ensemble candidates
- Canonical e2e-layer structure as the single source of truth (no manifest, no guessing)
- Surface fan-out in the Logs tab (visibility for N subagents)
- Per-column WIP capacity (option B) — serialise Testing via a phase-entry semaphore
- Default the `plan` skill to 2 subagents
- Make Brain config UI-settable (Settings → Morning Brain), not env-only
- Phase 4 — earned autonomy + anti-thrash closure + loop-trigger + channel push
- Phase 4 (part) — tool-equipped READ-ONLY autonomous triage
- Phase 4 (part) — config-override reach via update_task
- Phase 3 — conversational + actionable (the propose→act bridge)
- Phase 2 — runtime-exception fold-in (the second silent runner)
- Phase 1 — blocker triage (propose-mode, chat-surfaced)
- Move the subagent count to the column inspector panel
- Health-check + recycle a wedged device before reuse
- Headless android emulator + iOS sim by default (mobile_emulator_headless)
- Per-skill ensemble count control + API passthrough
- Ensemble skills (best-of-N + auto-synthesizer)
- Envelope the roadmap critique (third debate unified)
- Unify the debates' response-envelope reading
- Unify convergence across in-phase + cross-phase loops
- Surface sandbox denials + warn when the model lacks vision
- Vivid light-theme primary (14 88% 43%)
- Generic evidence manifest + investigate-first loop
- Make the failure CLASSIFIER screen-aware (feed it the screenshot)
- Surface the Maestro failure SCREENSHOT into the fail artifact
- Desktop local-single-user, folder picker, shared apiFetch, in-place New Project, R2 auto-update
- Reflect the cloud trial in the app (banner + Upgrade)
- Event-triggered instant sync push + tombstone derivation test
- Sync tombstones — propagate deletions across the team
- Automatic shared-project sync sweep + "Share to team" UI
- Sync engine (local) — board snapshot serialize/merge + reconcile
- Plan-upgrade checkout from the app (Stripe per-seat)
- Cloud account loop — device-code sign-in, entitlements, routes, UI
- Cloud-as-provider seam + local-only-by-default cloud session
- Warm the light-theme primary toward salmon
- Recolor primary from blue to Dawn coral (icon-matched)
- Add Morning sun app icon
- Package the app as native installers + build them in CI
- Autonomous emulator provisioning in harness lib (v2)
- Shared version-pinned Maestro harness lib (Option A)
- Open PR/MR via gh/glab CLI first, REST as fallback
- Open PR/MR via gh/glab CLI first, REST as fallback
- Move close + download actions to the header (match approval dialog)
- Move close + download actions to the header (match approval dialog)
- Log deployed build version at server startup
- Log deployed build version at server startup
- Stamp deployed code version into the run-start log
- Stamp deployed code version into the run-start log
- Open one MR per touched submodule, not just the parent
- Open one MR per touched submodule, not just the parent
- Persist delivered branch + PR/MR URL so it survives Done
- Persist delivered branch + PR/MR URL so it survives Done
- Autonomous environment remediation + env-class budget split
- Autonomous environment remediation + env-class budget split
- Feed cumulative replan history to the implementer (REPEATED-issue awareness)
- Feed cumulative replan history to the implementer (REPEATED-issue awareness)
- Open every artifact full-screen, like plan/design
- Open every artifact full-screen, like plan/design
- Event ("task") autopilots NOTIFY on a board event — never create a task
- Event ("task") autopilots NOTIFY on a board event — never create a task
- Live runtime-error pipeline — detect, classify, surface, (gated) auto-fix
- Live runtime-error pipeline — detect, classify, surface, (gated) auto-fix
- Human-step skipping on the create + edit forms (not just the detail panel)
- Human-step skipping on the create + edit forms (not just the detail panel)
- Channel selector for task-event autopilots
- Channel selector for task-event autopilots
- "Any column" for Target too + default both column fields to Any
- "Any column" for Target too + default both column fields to Any
- Optional source-column filter for event tasks ("Only when in column")
- Optional source-column filter for event tasks ("Only when in column")
- Auto-detect Telegram Chat ID (no hand-running getUpdates)
- Auto-detect Telegram Chat ID (no hand-running getUpdates)
- Collapse plan + design to one row each (opens the latest)
- Collapse plan + design to one row each (opens the latest)
- Inline "where do I get these" setup steps in the channel form
- Inline "where do I get these" setup steps in the channel form
- Trigger derives from kind (report=schedule, task=event) + "Any" event; fix UUID in notifications
- Trigger derives from kind (report=schedule, task=event) + "Any" event; fix UUID in notifications
- Headless android build primary (symmetric to iOS)
- Headless android build primary (symmetric to iOS)
- Headless iOS build as the PRIMARY path (drop expo run:ios)
- Headless iOS build as the PRIMARY path (drop expo run:ios)
- Read-only design viewer + click-a-design-artifact opens it
- Read-only design viewer + click-a-design-artifact opens it
- Clicking a plan artifact opens the read-only plan viewer
- Clicking a plan artifact opens the read-only plan viewer
- Read-only plan-review viewer (version history, no approve/reject)
- Read-only plan-review viewer (version history, no approve/reject)
- Plan version strip shows kind + "what was required" (2/2)
- Snapshot rejected plan as a version + plan-version-history lib (1/2)
- Plan version strip shows kind + "what was required" (2/2)
- Snapshot rejected plan as a version + plan-version-history lib (1/2)
- Signing-proof iOS fallback ends the code-signing loop
- Signing-proof iOS fallback ends the code-signing loop
- Surface pushed branch + PR/MR (or skip reason) in logs AND summary
- Surface pushed branch + PR/MR (or skip reason) in logs AND summary
- Push-only ALWAYS opens the PR/MR; source token from local authorities
- Push-only ALWAYS opens the PR/MR; source token from local authorities
- A gate-build failure tells the AI to FIX THE BUILD
- A gate-build failure tells the AI to FIX THE BUILD
- Delegate the native build to the project's own maestro script
- Delegate the native build to the project's own maestro script
- Surface the optional account token field for anthropic-sdk
- Surface the optional account token field for anthropic-sdk
- Per-account auth via CLAUDE_CODE_OAUTH_TOKEN (multi-account groundwork)
- Per-account auth via CLAUDE_CODE_OAUTH_TOKEN (multi-account groundwork)
- Stick-to-bottom auto-scroll on chats + task Logs tab
- Stick-to-bottom auto-scroll on chats + task Logs tab
- Per-step human-approval skipping — board list + per-task overrides
- Per-step human-approval skipping — board list + per-task overrides
- Configurable approval reject-target + always-require-human; plan data contracts
- Configurable approval reject-target + always-require-human; plan data contracts
- Bare-Xcode iOS support in the pre-maestro rebuild
- Bare-Xcode iOS support in the pre-maestro rebuild
- Rebuild + reinstall from current source before maestro
- Rebuild + reinstall from current source before maestro
- Label debate-loop evaluator groups as "Debate loop (…)"
- Label debate-loop evaluator groups as "Debate loop (…)"
- Explicit reviser selector for the debate loop + test/e2e evaluators
- Explicit reviser selector for the debate loop + test/e2e evaluators
- Move Export into the tab strip; remove Comments filter
- Move Export into the tab strip; remove Comments filter
- Group phase checkpoints by skill with friendly labels
- Group phase checkpoints by skill with friendly labels
- Run unit/integration in Implementing as a debate loop; Testing = e2e only
- Run unit/integration in Implementing as a debate loop; Testing = e2e only
- Export task execution logs as JSON
- Export task execution logs as JSON
- Universal up.sh provisioning at Testing entry + drift-aware failed-flows-first
- Universal up.sh provisioning at Testing entry + drift-aware failed-flows-first
- Mobile ownership scoping + orchestrator-run up.sh provisioning
- Scope web verdict to task-owned specs + known-red baseline
- Mobile ownership scoping + orchestrator-run up.sh provisioning
- Scope web verdict to task-owned specs + known-red baseline
- Wire Google Gemini as a provider (API adapter)
- Wire Google Gemini as a provider (API adapter)
- Per-autopilot channel — route a report to one channel (not all)
- Per-autopilot channel — route a report to one channel (not all)
- Note inbound/public-URL support under the channel type select
- Note inbound/public-URL support under the channel type select
- Slack (Socket Mode) + Discord (Gateway) inbound chat — no public URL
- Slack (Socket Mode) + Discord (Gateway) inbound chat — no public URL
- Telegram inbound via long-polling — chat WITHOUT a public URL
- Telegram inbound via long-polling — chat WITHOUT a public URL
- Inbound chat — reply to the bot in Telegram (epic phase 4, Telegram-first)
- Inbound chat — reply to the bot in Telegram (epic phase 4, Telegram-first)
- Event-driven triggers (epic phase 3)
- Event-driven triggers (epic phase 3)
- Report kind — scheduled stats digests to channels (epic phase 2)
- Report kind — scheduled stats digests to channels (epic phase 2)
- UI-configurable channels (epic phase 1 — foundation for report autopilots + inbound chat)
- UI-configurable channels (epic phase 1 — foundation for report autopilots + inbound chat)
- Settings UI — manage scheduled recurring tasks
- Settings UI — manage scheduled recurring tasks
- Scheduled recurring agent work (multica-inspired)
- Scheduled recurring agent work (multica-inspired)
- Agent-CLI auto-detection — scan the host for known runtimes (multica-inspired)
- Agent-CLI auto-detection — scan the host for known runtimes (multica-inspired)
- Multi-channel "come look" pings — Slack/Discord/Telegram/MS Teams (comparison-#10)
- Auto-open a PR/MR when a task reaches Done in push-only mode (comparison-#9, opt-in)
- Visual-regression gate — coarse design-vs-build drift (comparison-#6, opt-in)
- Multi-channel "come look" pings — Slack/Discord/Telegram/MS Teams (comparison-#10)
- Auto-open a PR/MR when a task reaches Done in push-only mode (comparison-#9, opt-in)
- Visual-regression gate — coarse design-vs-build drift (comparison-#6, opt-in)
- Per-project token & cost budgets with auto-pause/resume
- Apply the Anthropic prompt-cache breakpoint on the api path (was a no-op)
- Per-project token & cost budgets with auto-pause/resume
- Apply the Anthropic prompt-cache breakpoint on the api path (was a no-op)
- Exact rate-limit resets from the SDK's rate_limit_event (aif-handoff idea)
- Exact rate-limit resets from the SDK's rate_limit_event (aif-handoff idea)
- Convergence-aware backtrack — stop early when not converging (comparison-#A)
- Authenticated OUTWARD MCP surface for external clients (comparison-#B, opt-in)
- Convergence-aware backtrack — stop early when not converging (comparison-#A)
- Wire the HTTP MCP server behind KANBAN_MCP_HTTP (#1, stage 4 — cutover)
- Long-lived HTTP kanban MCP server (#1, stage 3, opt-in)
- Session-context registry — keystone for the long-lived HTTP MCP server (#1, stage 1)
- Wire the HTTP MCP server behind KANBAN_MCP_HTTP (#1, stage 4 — cutover)
- Long-lived HTTP kanban MCP server (#1, stage 3, opt-in)
- Session-context registry — keystone for the long-lived HTTP MCP server (#1, stage 1)
- Salvage an evaluator verdict from output when none was recorded (#3)
- Salvage an evaluator verdict from output when none was recorded (#3)
- Per-stage model override (KANBAN_STAGE_MODELS) — first cut of per-stage profiles
- Per-stage model override (KANBAN_STAGE_MODELS) — first cut of per-stage profiles
- Light/dark theme switcher + full color-token migration
- Capture device screen for the summary when Maestro emits none
- Capture device screen for the summary when Maestro emits none
- Persist unsent refinements + pre-fill them into the reject message
- Image card backgrounds + WYSIWYG preview (card matches the picker)
- Customizable project card background + settings entry + layout polish
- Back-to-projects icon + delete task in card overflow menu
- Completion forecast on project cards — est. days to finish all uncompleted tasks
- Post-login projects landing with per-project stat cards + quick switch
- Harvest e2e screenshots into the Implementation Summary + portable export
- Harvest e2e screenshots into the Implementation Summary + portable export
- Class-aware Testing gates — hybrid failure classifier
- Class-aware Testing gates — hybrid failure classifier
- Failure-class routing for the Testing↔Implementing loop (Spec 121 a+b)
- Failure-class routing for the Testing↔Implementing loop (Spec 121 a+b)
- Collapse topbar account cluster into one avatar menu
- WS auth + membership gating + presence (Spec 120 T15)
- Scope notification reads to assigned projects (Spec 120 T16)
- Audit log + attribution (Spec 120 T13)
- Optimistic concurrency on task edits (Spec 120 T17)
- Account security — pw-change, lockout, sessions, forced rotation (Spec 120 T14)
- Session-aware UI + user management (Spec 120 T9-10)
- Guard all API routes — capability + scope (Spec 120 T6-7)
- Login + setup UI; fix Edge build for middleware (Spec 120 T8)
- Auth routes + coarse middleware (Spec 120 T4-5)
- Foundation — schema, auth service, guards (Spec 120 T1-3)
- Upgrade to zod 4 + claude-agent-sdk 0.3.161 (matches CLI 2.1.161)
- Accumulate planner envelopes across tool calls under per-turn cap
- Show tool-call details in task logs
- Auto-generate downloadable "What Was Built + User Flows" artifact on Done
- Gate owns the authoritative Testing verdict (conclusion + run-tests)
- Detect app-didn't-render (build/bundle) failures, surface root cause
- Per-flow fixes, authoring carry-forward, visible Fix stages, android auto-boot
- Tag-scoped auto mode + TagEditor component
- Stalled-task watchdog catches Docker/sim/zombie hangs
- Emit per-platform task log entries so UI shows gate activity
- Per-skill carry-forward continue + retry-from-scratch
- Auto-scaffold i18n language-switch helpers + negative-assertion guidance
- Native-mobile testing track (Maestro) + engine-routing safety net
- Surface patch-apply failures + audit-pass for plan refines
- Plan review surface with cross-phase feedback routing
- Fold design/UI/UX review into review-plan and add faithfulness check in review
- Make feature-research cap configurable from the dialog
- Two-layer memory schema + internal-architecture capture
- Support submodule monorepos in worktrees
- Emit Tool complete events so UI shows tool-call duration badges
- File-based contentPath to bypass Copilot 16k per-turn cap
- Reasoning-effort plumbing across all three SDK adapters
- Render AI Output logs as markdown
- Forward images through all SDK adapters instead of stripping
- WEB/MOBILE/IOS/ANDROID/DESKTOP platform model + bundle fix
- Cross-platform framework awareness + mobile e2e foundation
- Roadmap feature-approval gate
- Design refine UX overhaul + roadmap/plan-run/infra specs WIP
- Full-screen review surface; compact approval dialog
- Chat-applied design patches (phase 3)
- Bidirectional design chat (phase 2)
- Figma-style in-iframe comment bubbles
- Refine batches, in-iframe pulse, side chat, history
- UX overhaul (Spec 099) — picker, kill switch, AI fallback, direction merge
- DependsOn + waitForPorts for service ordering
- Reconcile port from runtime when service binds elsewhere
- Maven/gradle stack addendums with Spring profile hint
- Detect nested frontends + per-service envFile
- Per-service enable/disable toggle
- UX in plan + native design tracks + multi-screen carousel
- Per-scene carousel in live preview surface
- Manual-trigger jobs run before older auto-queued FIFO
- Snapshot projectRoot WIP into a tagged commit before worktree
- Configurable concurrency cap + parallel-skill toggles
- Stop button to abort in-flight AI responses
- Preserve done checkpoints + add Fix tasks on backtrack
- Untrack already-committed files when adding gitignore baseline
- Warn when SDK chat hallucinates kanban actions
- Regroup Project Settings tab into headed sections
- Image attachments, copy button, drop stale-scope threadId
- Require homepage smoke test, fail on scaffolding stubs
- Pair tool logs + per-task implement checkpoints
- Floating AI chat with full app + bash access
- Write stack-aware .gitignore baseline on first worktree
- Fold Attachments into Details, reorder tabs
- Add tailwind-utility-clobbered rule
- Computed-style render-verifier catches cross-file rot
- Close implementation pipeline + make planner design-aware
- Add tailwind-default-suffix fix-pattern
- Add tailwind-v4-opacity-syntax fix-pattern
- Add vite-process-undefined fix-pattern
- Runtime render analyzer + pattern-matched auto-fix
- Refine UX — autoscroll, disclosure, selection bridge
- Flow-driven design positioning
- Surface design stages in planning when designMode=on
- Phase 5 + 6 — drop designSystemId load-bearing paths, docs
- Phase 4 — composer drawer surfaces brand layers
- Phase 3 — prompt-builder + verifier read brand_layers
- Phase 2 — preview route reads brand_layers (?projectId + ?layers)
- Phase 1 — pristine flag + brand_layers backfill
- Per-product-type multi-scene live preview
- Editable productType + platforms in Settings
- Layer-aware composer with preset picker (Spec 077 Phase 8)
- Design as first-class Planning step (Spec 077 Phase 7)
- Project-context awareness (Spec 077 Phase 6)
- Unified design skill + ios/android/desktop platforms (Spec 077 Phase 5)
- Platform targets + multi-platform design reference (Spec 077 Phase 4)
- Scan existing codebases for layers (Spec 077 Phase 3)
- Product type + platforms + per-platform styles (Spec 077 Phase 2)
- Composable layers + presets API (Spec 077 Phase 1)
- Bash audit + end-of-run stray recovery
- No-code authoring + user catalog (Spec 076 Phase 7)
- Catalog distinctness gate + picker UX (Spec 076 Phase 6)
- App→project→task scope chain (Spec 076 Phase 5)
- Post-generation verifier + alignment panel (Spec 076 Phase 4)
- Emit System contract block in prompts (Spec 076 Phase 3)
- Structured DesignSystemSpec parser (Spec 076 Phase 2)
- System primary, composition secondary (Spec 076 Phase 1)
- Phase 4 — visual polish on picker tiles
- Phase 3 — adopt drawer in NewTaskForm + ProjectDesignTab
- Phase 2 — DesignComposerDrawer foundation
- Phase 1 — tokenize thumbnails + route ?tokensFrom
- Teach NN to set designMode on UI tasks
- Retire dead surfaces + docs (Spec 073 Phase 6)
- Inject design + components into implement skills (Spec 073 Phase 5)
- Multi-platform design support (Spec 073 Phase 4)
- Visual template picker + skill thumbnails (Spec 073 Phase 3)
- Per-task toggle + visual system picker (Spec 073 Phase 1+2)
- Manual vs auto trigger; relax pre-merge gate for manual reruns
- Integrated kanban UX
- DesignOnly flag, runbook, seed script (Spec 071 Phase 4)
- Design→implement skill + apply-to-repo (Spec 071 Phase 3)
- Edit-in-place (Spec 071 Phase 2)
- Iteration strip + Refine button
- Project-level direction pin
- Add /skills catalog browser
- Export tokens as CSS / JSON from the catalog
- Phase 3 — catalog browser + comprehensive E2E
- Phase 2 — discovery form, flow override, device frames
- Adopt open-design engine into ai-kanban
- Add skills
- Model dropdown sourced from /api/ai/models
- Multi-provider chain with per-project pin + automatic failover
- Human-wait count chip alongside inFlightCount
- Coordinate task-Done merges + fix board freeze
- Multiple backtrack rules per column (one per evaluator skill)
- Stop recovery — terminate the loop without skipping through
- Opt-in Bash for the diagnose AI
- Copy-able shell commands inside diagnosis cards
- See polyglot monorepo children, not just Node
- Type-aware icons + mobile simulator/emulator launch
- Persist logs, observable+interruptible recovery, hardened lifecycle
- Server-side detection + recovery state survives navigation
- Visible multi-attempt AI recovery loop
- Pattern library + stack-aware AI diagnose
- SDK transport now applies the fix, not just describes it
- Zero-config UX — press Run, project starts, URL opens
- Post-test build gate runs only affected projects
- Post-test build gate — universal compile check after Testing skill
- Add universal run/restart button for any project type
- Retry inherits prior phase time so the timeline stays continuous
- Surface reviewer verdicts + separate dialog into labeled sections
- Preserve foundation, accumulate review feedback, stop shipping rejected plans
- Show in-flight task indicator per project
- Observability + Write tool in inline conflict resolver
- Redirect to Testing after AI conflict resolution to revalidate
- Inline AI conflict resolver between integration and block
- Integrate base into worktree at Done — under the hood, no skill, no reroute
- Universal task-progress contract + project-init blocking workflow
- Edit page replaces modal + new projects ship with default board
- Blocking init bg-process + slim project list + header cleanup
- Rename Approval column model + add humanStepKind variants
- Visual blueprint editor with xyflow + column CRUD/merge backend
- Per-skill telemetry, in-loop typecheck, diff-aware review, pre-review gate
- Ground decomposition in real project shape (digest + read-only tools)
- Fix kanban state and background workers on project selection
- Adoption + coverage + UX + quality overhaul (v2)
- Skills json output
- Move blockers and execution progress to dedicated tab
- Make task description expandable
- Add attachments to creation form and fix dialog layout overflow
- Add full-page settings and statistics view
- Consolidate dual plan/roadmap UI into single roadmap mode
- Add inline phase indicators and comprehensive tests
- Implement backtrack tracking - phases, time accumulation, and API routes
- Wire upload and preview into task detail panel
- Roadmap review
- Add ability to unqueue tasks from execution queue
- Merge conflicts resolution manager
- Git clean behaviour
- Markdown view
- Add markdown viewer with proper spacing and table support
- Implement task attachments with upload, validation, and storage
- Retest on failed test result
- Enable parallel skill execution within phases
- Add comprehensive project statistics
- Copilot sdk + openai fix
- Add task blocker tracking system
- Add manual review for tasks in approval columns
- Persist execution logs across page refreshes
- Add project editing and improve dropdown layout
- Autoexecute phase on task drag-and-drop
- Auto-expand active phase in progress view
- Auto-expand active phase in progress view
- Add branch visibility to task detail panel
- Add branch visibility to task detail panel
- Show pause button directly on running task cards
- Display durations in digital clock format
- Add drag-and-drop task reordering within columns
- Add autostart on move and approval
- Display artifacts in approval dialog for review
- Redesign with spent time display and improved controls
- Recover stuck tasks on startup and resume from completed phases
- Unify artifact viewing with modal dialog
- Add total task time display in detail panel
- Make description textarea expandable with 10 rows
- Show only current phase progress on task cards
- Add phase duration display in task details
- Add interactive AI chat for task Q&A
- Add task editing functionality
- Add filter buttons for log types
- Add multi-provider adapter architecture
- Drive tasks through flow on Run AI, simplify auto-mode
- Add delete task button with confirmation dialog
- Add project path display, persist last selected project
- Initial implementation of AI Kanban app
Improved
- Session selector header, background-generation glow + notification, layout polish
- Rail hierarchy, preview padding, New design action
- Design / Plan / Flows become icon-only with hover tooltips
- Widen task + chat side panels
- Widen the artifact dialog for HTML designs
- Move 'AI shell access' into the AI Diagnosis panel as a Switch
Fixed
- Stamp canonical verdicts on single-flow runs; nudge harness_ensure_metro adoption
- Render the server-reported cap, never a hardcoded 5 (review catch)
- 10s timeout on the acceptance report — never hang sign-in (review catch)
- Unclassified orchestrator errors park blocked with a blocker row, never idle
- Batch refine leaves a chat trail (was silent)
- Based-on-task worktrees keep the parent's submodule gitlink
- Board Palette glows for the pending-quiz state too
- A redesign brief reads the current implementation
- Live chat completion + don't resurface the quiz
- Reconcile brandLayers before studio generation reads it
- Self-heal the brandLayers cache when DESIGN.md drifts
- Headingless §2 palette parses; preview accent picks the brand
- Scanned shadcn palette shows its real colors, not a near-white strip
- Scanned "Current" card renders its palette swatches
- Don't deliver base-inherited submodule advances as the task's MR
- Refresh the studio "Current" system when DESIGN.md changes
- Preview loads fonts + the "Current" card shows swatches
- The preview scene renders colors — normalize HSL channels in token CSS
- Parse plain (no-backtick) DESIGN.md palette tables — the "no colors" bug
- Rename the Design card's "Scan codebase" → "Redraft…"
- Render Tailwind HSL-channel colors as swatches (Style Lab + palette)
- Pin the pre-draft quiz above the composer, not at the top
- Pre-draft quiz saves progress mid-quiz (survives navigation)
- Cool down until the account window actually resets
- Pre-draft quiz reuses the shared QuizCard (one quiz UI)
- A running app's button says "Restart", not "Launch"
- Follow-up — rename leftover user-facing Run/Runner strings
- The pre-draft quiz survives navigation (was strandable)
- Surface the real cause of a GET /screens failure
- Per-account usage — each provider row uses its OWN credential
- Brighter bar fills so meters aren't muddy on the light theme
- Recover usage bars fast on a fresh run
- 2 — scaffold lint for unscoped kills of shared test-infra process families
- Port-in-use on a compose stack routes to the Brain
- Recovery-loop coherence (pending-approval gate, two-tier consent, health-is-truth)
- Scaffold sabotage fails the leg pre-flow; render probe targets the resolved sim
- 2 — guard also denies inline Metro starts on the shared 8081/8082 family
- BashGuard denies inline cross-project device sabotage from skill sessions
- Run-tab config save targets the active run's worktree
- Sticky account-usage cache — stop the meter flickering off
- Hold "Stopping…" until the refresh actually ends
- Stoppable context refresh + cancelled ≠ failed
- Keep the top-bar reset time in the tooltip, not inline
- Project-scoped provider for chats + visible blocked-provider notice
- Carry the precise ALGORITHM, not just the structure
- Reconcile ACs against the shipped app (AC is intent, not proof)
- Reconcile plan concepts against the diff (code is truth)
- Show the re-planned version + reject label after a rejection
- Concept-faithful, plan-complete implementation summaries
- A4 — heal promoted sessions orphaned before the delete-hook
- 2 — pin/residue logic uses the pbxproj+app.json bundle-id union; pin the installed id
- Render tables that lack a blank line before them
- Reject a patch that unbalances code fences
- Version refines by the group key so they supersede the base
- Jump to the refined iteration + hide composer while refining
- Move projectForSet out of the route module (Next route-export rule)
- Tolerate smart-punctuation drift + auto-retry a failed plan patch
- Silent auto-continue on quiz complete — no "please continue" bubble
- Move the refine-batch action onto the preview toolbar
- Grounded codebase re-scan from the Design tab
- New EVIDENCE re-arms one fresh investigation
- Exit-0 before first-ready is a failure; dead ≠ stalled
- Cheap runtime digests fixed at all three layers
- Serving affordance follows card conventions
- The handoff line reports what the Brain actually DID
- Stale log-file discipline — kills the same-fix recovery loop
- TaskCard drops its QueryClient dependency — refresh rides the context
- Cold-start retry no longer clobbered by the drift timer
- Last page diagnosis stays visible after the service stops/fails
- Probe verdict is NEVER suppressed; ladder is additive
- Self-run copy gets its own Next dist dir (.next-run)
- Dev script port is env-driven — ${PORT:-4000}
- Run menu (incl. Run configuration) available in every phase
- Port bump refuses when provably useless — escalates to the Brain
- Port bump rewrites the COMMAND's hard-coded port, not just the field
- Port-in-use-self auto-bumps the runConfig port
- Fatal patterns without an auto-fix reach the Brain diagnosis
- Global chat opens at the tail + auto-selects the newest conversation; drop single-platform hint card
- Review opens the CLICKED artifact, not the stage's first
- Undeclared CSS vars: verifier rule + Style Lab token block
- Follow-up turns re-attach the newest prior image
- Placeholder-marker gate stops flagging legitimate UI placeholder idioms
- Approved actions confirm visibly — ops-chat + task-log line
- Drop the redundant Progress heading inside the Progress execution mode
- 5 — a late "fixed" verifier never silences live work
- 3/r4 — cascades aren't errors; limits reach the banner
- 2 — diagnose fix survives restart; ONE banner mechanism
- Investigation lights the pinned banner; Stop reaches the loop
- Review — manual Done path honors override push+MR routing
- No-progress stops are final; activity rides the banner
- Coherent run-recovery narrative, in-flight owns the story
- Diverged submodule gitlinks advance to the submodule's own base
- Headless probe classifies default-port emulator boots
- Spec docs stay TRACKED on self-runs; exact-path redirect elsewhere
- Port-block isolation for concurrent instances
- Submodule auto-merge targets the SUBMODULE's own base branch
- Keep pipeline paperwork + ALL scratch dirs out of the user's repo
- Evict sibling-project apps from the pinned sim; forbid the skill from borrowing foreign devices
- Shared-Metro-port squats are lint-flagged; harness gains the canonical iOS bundler pin
- Task duration total no longer banks sleep dead-time on completed phases
- Worktree-targeted runs investigate and diagnose the tree they execute from
- Specs 231+232 — pin the iOS bundle URL per run; lint wrappers that ignore the iOS session pin
- Plural runtime errors become ONE consolidated incident
- Cross-project parallelism (web port affinity, probe TTL, lock owners)
- Visibility setting can no longer lie in either direction
- Total time counts AI work only, even after live WS updates
- Recovery/comms wedge fixes (resolution resets the guard)
- Generate-from-context works on SDK/CLI providers, not just API
- Approval gate surfaces ALL of a selected stage's artifacts, not just the newest
- Stop no longer duplicates the last reply (skip full save after abort)
- Brain reply no longer disappears on tab switch (non-destructive refetch)
- Generate Roadmap dialog footer stays inside the dialog
- Total time matches the Progress tab (canonical, sleep-bounded)
- Ops-thread replies answer WITH the project's context, not morning's repo
- Render inline markdown in setup-dialog candidate previews
- Render ARCHITECTURE.md as markdown, not raw <pre>
- Total time excludes human-gate waits inside cycle groups
- "needs you" recovery chat carries the PROPOSED FIX, not just the cause
- Recovery chat never sticks on "investigating" — resolve on every terminal state
- Diverged local base no longer over-owns sibling specs
- Auto-gitignore the e2e scratch so it stops polluting the repo
- Give the runtime-error triage the crashed backend's own logs
- Collapse per-endpoint network errors + surface recovery in chat
- One coherent story — runtime-error triage defers to active recovery
- Schedule crons in local machine time, not UTC
- Don't bank a slept phase's idle wall-clock across retries
- Task-logs download uses the same task-title prefix as artifacts
- Tune color pickers no longer clipped/hidden
- Copy-message works over non-localhost http (insecure context)
- Show a chat-style working banner, not a Tool-call stack
- AVD provisioning must produce consistent, installed-image AVDs
- Pin-less projects get a per-project AVD, not the shared morning_e2e
- Brain task proposals show without a manual reload
- Surface the reason a blocked task won't run (Spec 149 follow-up)
- Mobile designs bucket into the iOS track, not Web (Spec 090/117)
- Carousel per-screen render fills the frame, not center-bleed
- Lock the plan on a design-scoped rejection
- Reconcile screenIds BEFORE the fan-out/screen-count gate
- Reconcile task.screenIds from the plan at design fan-out entry
- Reject data-screen on a non-<section> element
- Reject invented screen attributes at the plan gate (Spec 209 #1)
- Hide empty streaming bubble until first token; global chat routes new work to tasks
- Reject screen-attribute lookalikes (one-column stack)
- Pass visibility intent through to the affinity boot (recycle-windowed)
- Collapse the setup-hang killed message to the stable family too
- Killed-run message gives facts + investigate tools, not a flow-blaming guess
- Stable identity + environment class for 0-owned-executed coverage fail
- Min-h-0 on task + floating chat scroll areas so autoscroll works
- Pre-merge snapshot of dirty base — stop merges blocking on uncommitted tracked files
- Exclude human-step gate time from task work duration
- Idempotent manual Run — a repeat press is never weaker
- Re-pump the board when a mobile task leaves the device phase
- Whitespace-tolerant fallback for rendered-DOM SEARCH drift
- Count thinking as activity in the task refine chat
- Scroll the Edit channel dialog body
- Reachable run config + honest label during recovery
- One-way Android visibility recycle — stale headless emulators re-boot windowed
- Proposals remember they were acted on
- Don't mistake emulator -list-avds warnings for AVD names
- Morning-prefixed AVD name in the bootstrap (create + boot)
- Narrow android categorical block — respect AVD creation
- Blocked-task sweep idempotence per blocker, not per task
- Block fast on categorical android absence, don't loop the budget
- Audit-cover the skill editor PUT; pin keepMessageOnAbort semantics
- Nudge for a missing entry canary on app-not-rendering
- Route app-not-rendering to Development, not Testing-in-place
- Stable identity for app-not-rendering gate loop
- The gitlink guard verifies the task's delta, not the repo's standing debt
- One blocked message — the triage IS the notification
- Done-push failures create a git_error blocker
- Dedup identical ⚠ git: warnings at the log choke point
- Drop the wrong legend on the Types pie
- Dangling-gitlink guard fetches before refusing
- Content-aware submodule delivery — housekeeping merges never become MRs
- Scope newline preservation to paragraphs (kill the big gaps)
- Auto-scroll every chat to the bottom on open
- False "no flows found" on all-green runs — digit-bound the count probe
- Move model-tiers note, fix ?tab deep link, chart colors, drop design note
- Preserve newlines in chat messages
- Unique click selector for siblings sharing a class
- Profile avatar matches the task-card avatar
- Collapse the task-details Screenshots section by default
- Direction-aware drag reorder + no misleading drop animation
- Fit the lightbox image to the dialog, don't overflow
- Fallback never steals a foreign-pinned device
- Flip to 'running' on any non-running status at run start
- Fix test-surfaced follow-up defects in-task, never defer
- Unwritable-tree blocking + evidence freshness
- No queued-status flash on Run when a slot is free
- Rate-limit banner counts only limit blockers, not any retryAt
- AI status reads "Not available" instead of "none — not connected"
- Pin approval footer + add 'one per feature' granularity
- Surface ask_user_quiz so the Brain asks batches as a quiz, not prose
- Composer textarea auto-grows with its content
- Stop no longer removes the sent question
- Flaky-gate loop defenses — honest rebuilds, stable signatures, honest verdicts
- Thread project device pins into skill/wrapper runs
- Setup-abort false positive + verdict-parser hardening
- App-shell flex column so top banners don't break scrollable screens
- Show the thinking banner on switch-back (Spec 186 follow-up)
- Restore switched-away chat message + live "writing" bar
- Cache stable prefix + ride SVG as source, not vision
- Ceiling is a sanity backstop, not a budget — inactivity governs
- Restore generous ceiling — don't cut off a producing run
- Cap reasoning effort — design is generative, not a thinking puzzle
- SVG attachments ride as a reference, not inlined into the brief
- Stop agentic repo-crawl hangs — generate from injected context
- Accept SVG attachments (route as text source, not a vision image)
- Watchdog fires only on true INACTIVITY (thinking counts as active)
- No-PROGRESS watchdog + honest phase/banner (studio generation)
- Vacuous-green diagnosis says fix-the-RUNNER when owned flows exist
- Idle-based generation watchdog + live tool/thinking banner in studio
- Tool-call crawl re-arms the first-output watchdog
- Phase-aware watchdog + cancel — stop 30-min "reading your project" runaways
- Morning heals the retired global Maestro lock itself
- Quiz/side-channel broadcasts must append, not hijack the temp bubble
- Manual restart cancels the in-flight blocker triage
- Instance-scope the mobile gate boot pre-flight
- Count model thinking as activity + always clear the chat spinner
- Extract the LAST complete HTML document from model output (blank preview)
- Bare 'budget' regex made not-converging blockers invisible to triage
- Flow attribution on the wrapper path + in-attempt suite verify
- Auto-create per-project Android emulator on first run
- Render pasted images as small zoomable thumbnails
- Render data:image attachments in messages (were showing as filename text)
- Enforce feature coverage per declared platform — close vacuous-green gates
- Address Spec 175 code-review findings
- Dynamic base-branch resolution — follow the checkout, no env, no hardcodes
- Approval-dialog design chat sees the full design — unify on the studio core
- Platform picker preselects the project default regardless of the design switch
- E2e gate integrity — pin-aware scoping, mobile QA baseline, serial-guarded adb
- Default platformTargets to the project platform so tasks aren't shipped without e2e
- Promote a refined design as the screen head (refines no longer leave heads pinned to the pre-refine design)
- Post-test build gate writes a superseding PASS so a resolved failure stops looping the task
- Task chat can reach every artifact — full content via temp files + relevance order
- Design refines collapse to one latest version (implement no longer anchors on stale design)
- Verification claim gate supersedes its prior FAIL on recovery (Spec 169 r10)
- Stream tool activity to the studio chat banner (Spec 166 follow-up)
- Chat sees the full document + liveness-based turn guard
- Review suggestions — approval resets debate seed history
- Never truncate consumed artifacts + planning-loop guards
- Resolve screen heads across mixed platform keys
- Gate refresh-from-app on SDK transport (Spec 161 review #2)
- Surface SDK tool activity on task chat + unify the thinking banner
- Guard against dangling submodule gitlinks on delivery
- Atomic cross-process run claim (Spec 153 Task 16 review)
- Heartbeat lease so a live run isn't reclaimed cross-process (Spec 153 Task 16)
- Register launch timers/siblings for stop + sync first-track PID flush (Task 10)
- Don't cross-swap concurrent asks on WS broadcast (Spec 153 Task 11)
- Retry decomposition on an unparseable response (Spec 153 Task 7)
- Route native-toolchain build failures as environment (Spec 155 Phase 1)
- Hydrate FloatingChat unread badge on mount + WS reconnect (Task 3)
- Resync plan-run state on WS reconnect (Spec 153 Task 7)
- Supersede pending questions on abort/error, not just finalize
- CAS approve/cancel so a race can't clobber a terminal state (Task 7)
- Verify app still installed before native build-skip
- Rowid watermark eliminates same-second boundary loss
- Boot-reconcile orphaned 'generating' sessions to error
- Guard constructor apply against lost updates (base-hash precondition)
- Make promoteDesignSession race-safe (one task per session)
- Make applySnapshot atomic — one transaction, no torn board
- Default to no-patch banner on a change-framed ask
- Record collapsed cron ticks after downtime instead of silent skip
- Distinct user-facing warning when a configured backend is broken
- Completion gate trusts emit-time taskDone, not a post-hoc re-read
- Explicit disabled channel skips, never broadcasts to all
- Surface reconcile failure as a distinct needs-review notification
- Surface an unhonored model-tier request on the task (Spec 153 Task 20)
- Quarantine a poisoned project after repeated apply failures (Spec 153 Task 5)
- Reset everyN counter only on a real fire (Spec 153 Task 16)
- Boot-prune SIGKILL-orphaned QA/docs run worktrees (Spec 153 Task 16)
- Prune merged docs-refresh branches (Spec 153 Task 16)
- Synchronous FTS index write closes the crash-drift window (Spec 153 Task 14)
- Atomic interrupt claim prevents double-apply — Task 17 complete
- Sweep skips in-flight triage to prevent double-triage (Spec 153 Task 17)
- Expire open brain-action interrupts on task finalize (Spec 153 Task 9)
- Label degraded-classification fix tasks (Spec 153 Task 17)
- Surface a note when triage investigation fails (Spec 153 Task 17)
- Flag savedPartial after the real save, not before (Spec 153 Task 11)
- Persist inbound offset per-update to stop replay double-replies (Spec 153 Task 11)
- Preserve screen gates on blockedBy replace; drop redundant strip
- Guard blockedBy against dependency cycles
- Inbound routing always replies, even on total failure (Spec 153 Task 11)
- Explicit budget-exhaustion signal on propose (Spec 153 Task 17)
- Null worktreeInfo on teardown so leaked plan-run worktrees sweep (Spec 153 Task 7, partial)
- TOCTOU run-launch guard + budget-gate auto fix-tasks (Spec 153 Task 16, partial)
- Distiller in-flight guard prevents double-distill (Spec 153 Task 14, partial)
- Wall-clock safety timeout on both /ask routes (Spec 153 Task 11, partial)
- Reconnect resync + wildcard replay RBAC + backoff (Spec 153 Task 3, mostly)
- Durability cluster — recovery, re-entrancy, rebuild-cancel, sibling kill (Spec 153 Task 10)
- Clean up sync state + tags on delete/sign-out (Spec 153 Task 6, mostly)
- Bounded retry on outbound sends (Spec 153 Task 19, partial)
- Per-project in-flight latch coalesces concurrent syncs (Spec 153 Task 5, partial)
- Deterministic same-second log ordering via rowid (Spec 153 Task 13, partial)
- Resolve incidents when a task's blockers clear (Spec 153 Task 17, partial)
- Atomic + serialized DOMAIN.md writes (Spec 153 Task 20, partial)
- Expired cloud token no longer sticky-disables the provider (Spec 153 Task 8, partial)
- Supersede pending questions above the project guard (Spec 153 Task 9, partial)
- Suspend-tolerant watchdog deadlines (Spec 153 Task 12)
- Device lock on the direct Maestro path — closes the audit P0 (Spec 153 Task 4)
- Ephemeral-table prune sweep + fault-isolated boot recovery (Spec 153 Task 1)
- Atomic read-modify-write hardening (Spec 153 Task 2)
- Declutter the header — meta line + separate labels row
- Task-card actor avatar leads the footer on the left
- Render markdown in the TL;DR card (was showing literal * / **)
- Verify a stale build-gate verdict before escalating
- Self-healing base integration
- RCT_METRO_PORT is compile-time — bare-RN launches use RCT_jsLocation (device-verified)
- Bare-RN apps launch with SIMCTL_CHILD_RCT_METRO_PORT — deep links can't carry a port
- End expo at install-complete — its stray :8081 deep link can hit ANOTHER project
- Expo rejects --port with --no-bundler — heal the deep-link race by detection instead
- Kill the 'No script URL provided' race — expo deep-links to the right Metro
- Backlog-aware dependency blocking
- Make the expected osascript/TCC note actionable
- Stop Chrome autofill from ghosting the settings page
- The rejecting evaluator must re-judge — never carry its checkpoints
- Plan-debate feedback must not repaint a studio-approved design
- Show the TL;DR once — strip the markdown copy under the hero card
- Never stream raw patch code into the chat bubble
- Repeated components fan out to all instances instead of failing
- Selector-aware HTML windowing — the model could not see end-of-body elements
- Make the stream real — the idle watchdog starved on a silent SDK
- Stop killing healthy generations at the wall-clock (the 'aborted by user' error)
- Sleep-aware stall handling — keep-awake assertion + loop-guard exemption
- Apply ?tab= deep link post-hydration (review finding)
- Narrate the instant iOS launch path
- Verify iOS launches against the NATIVE project's bundle id
- Annotate expo's expected osascript failure in the run log
- Heal the "No script URL provided" cold dev-client launch
- Self-finishing expo run:ios — survive the osascript step, target the runner's Metro
- Reverse ALL service ports on android launch + Brain owns diagnose bash
- Expo run:android device naming + late adb reverse + iOS launch narration
- Visible pinned-emulator boots + honest picker + sticky iOS pin
- Spirit-guide launch fixes — verified iOS deep-links + per-project AVD creation
- Review of 6aff5de — unblock the event loop on sim boot + idempotent tests
- Durable multi-emulator mobile runs (spirit-guide Metro conflicts)
- Stop Done↔Testing livelock — ignore merged-in base commits in the unvalidated-changes check
- Honor 'skip' phase-control at backtrack re-entry too (parity with pause)
- Honor a 'pause' phase-control at backtrack re-entry, not only fresh forward entry
- Build the app from base before mobile docs capture
- Mobile designs fill the viewport — stop self-drawing a phone shell (phone-in-a-phone)
- Manual drag-to-Done runs the Done column skills (commit + summarize) before merging
- Structured Maestro verdicts, device leases, per-platform locks, build skip
- Remove env knobs — same-error cap hardcoded at 3, lifetime backstop deleted
- Signature-scoped loop guard + Brain-first blocker triage
- Visible selection on click + pending sweep through background refines
- Model runs survive client disconnects in all four review-chat routes
- Auto-resume the latest session per platform on load
- Tabs mirror the project's declared platforms; route renamed to /design-studio
- Project-scoped, background generation, attachments, per-platform sessions, full project context
- Honor designDisabled in the planner's design-context builders
- Auto-resolve native/config churn to base — mobile Done merges stop blocking on the same 9 files
- Make the build-artifact untrack async so it doesn't freeze the UI
- Make the untrack-on-add step work on large repos (85k tracked build files)
- Recover from a timed-out base merge instead of blocking Done
- Post-delivery race guard + RN/Expo build-output gitignore baseline
- Log merge success on the manual move-to-Done path
- Never force-sync a DIRTY submodule (preserve mid-phase work)
- Honor the e2e skill's failureClass verdict (stop the Testing loop)
- Don't block backend-diagnostic curl/docker (URL & API routes aren't file paths)
- Route a failed server-address setup flow as environment
- Don't claim "Patch applied — re-queued" when the patch wasn't applied
- Don't run the generic JVM `classes` task against Android/RN projects
- Don't freeze the UI while merging the default branch (async git fetch/merge)
- Stop duplicate "Skill stalled" blockers + pause orphaned runs
- Match pipeline legend colors to segments; liven the equalizer
- Publish task_updated on every status change (instant board updates)
- End the "Brain working" indicator when the Brain produces its answer
- Also delete the empty WIP-pushed remote branch on no-changes
- Don't push + open a PR when the branch has no real changes vs base
- Unqueue clears a stranded queued task; revert the stranding hybrid
- Resilient migrate — record + skip a drifted migration instead of stopping
- Free Android storage harder — clear staged APKs + logcat before evicting apps
- Capacity-waiting tasks bypass the stalled-skill detector
- Clear message when a mobile port can't be bumped (was "no free port")
- Scope the floating chat to the project on screen (URL ?project=)
- Open installed dev client via deep link instead of rebuilding
- Reflect Brain autonomy ON-by-default in the UI
- Reap orphaned worktree Metro/dev-servers at startup
- Never port-bump a mobile/Metro service (breaks the device app)
- Give the e2e SKILL the dynamic Metro port too (stop 8081 squat)
- Reap stale worktree Metro before provisioning (no 8081 squat)
- Actually kill running Android emulators in cleanup (emu kill)
- Clean up stranded mobile devices on boot + shutdown
- A full column no longer head-of-line-blocks the queue
- Inject RCT_METRO_PORT for Expo/Metro services (not just PORT)
- Manual runs bypass per-column capacity — run separately, not queued
- Idle-stalled skill auto-resumes instead of freezing the board
- Requeue in-flight tasks on shutdown so auto-mode resumes them
- Overwrite the stale FAIL with a PASS so a fixed task recovers
- Retry RESETS the backtrack budget so a fixed task can recover
- Surface a NEW thread (Brain triage) live, not only after reload
- Don't let a passing gate mask a failing sibling gate
- Distinguish paused from running in Happening now
- Kill a task's e2e daemons (Metro / dev-servers) before teardown
- Sort platform icons by a fixed canonical order
- Surface the e2e-skip cause + show platform icons on cards
- Scope the escalation to Implementing as PRODUCT-ONLY (no test edits)
- Name the off-screen/scroll cause of an assertVisible failure
- A phase reset must clear carry-forward so skills actually re-run
- Scan the WORKING TREE, not stale committed HEAD
- DnD into a column (and Retry-from-scratch) restarts the phase
- A phase-control pause runs through backtrack loops, not re-pause
- Manual resume of a blocked task resets the backtrack budget
- HEAD-independent hard loop cap — stop infinite retry on a recurring blocker
- Durable per-phase WIP snapshot — stop losing worktree (esp. submodule) work
- Route a real app-compile failure to Implementing, not Testing
- Group the synthesized plan into Planning, not OTHER
- Dedup the live artifact list + hide ensemble candidates
- A candidate's set_phase_conclusion must not abort its siblings
- Target the repo's real default branch + integrate submodule base
- Make the anti-loop guard worktree-state-aware
- Run the production build in Testing, not just the test suite
- Force-end the turn after set_phase_conclusion even when busy
- Resolve task flowId from type label on create/edit/run
- Manual resume clears provider limit-cooldown
- Detect touched submodules by committed gitlink, not drifted clone HEAD
- Drop the skip/pause badge from the task card
- Two loops on the same task — phantom tsconfig claim + e2e re-scaffold
- Manual move-to-Done now opens the PR/MR (parent + submodules), like the auto flow
- Enforce per-column capacity at DISPATCH (incl. manual resume)
- Handle a vanished worktree — restore from branch, else block clearly
- Cooldown pause must be 'paused', not 'blocked', or it never resumes
- Give the chat each task's WORKTREE path so it stops inspecting `main`
- Classify prepare/expo INSTALL failures as 'install' (env), not 'build'
- Move 🧩 subagent filter to its own sub-row under the main filters
- "Task run complete" fires only at genuine task-done, not every phase
- "Task run complete" no longer fires on blocked tasks
- Race-free stick-to-bottom (scrollbar-drag up no longer yanks)
- Stick-to-bottom no longer yanks the view when you scroll up
- Per-column mode relaxes the global cap; show count/max in column header
- Fan out on resume when the skill hasn't produced its artifact yet
- Re-run the producer on a backtrack — Fix items were skipped + rubber-stamped
- Persist subagent count — patch schema dropped flow.ensembleConfig
- Fail-fast + environment-route on a setup/backend abort (API not healthy)
- Auto-resumable blocker when all providers are in limit-cooldown
- Patch-id-aware unvalidated-commit check + clear stale gate conclusion
- Signature fingerprint for issue-less failures (silent-loop hardening)
- Prebuild native dirs in the worktree (Expo CNG gitignores ios/)
- Expo prebuild before iOS build — fixes "xcworkspace does not exist" loop
- Remove CI=1 from the gate env — it broke native expo builds
- Scope the tag picker to NOT-done tasks only
- Show the LATEST phase row's conclusion, not a stale early attempt
- Don't salvage a verdict for the gate-evaluated e2e skill
- Tell the agent the evidence/toolchain dirs ARE readable on a read-deny
- Drop non-null assertion (unknown eslint rule broke build)
- Confine outputFileTracingRoot (fixes Windows EPERM Application Data)
- Create-project silently failing + dashboard New Project card
- Reliably skip migrations during desktop build + retry on lock
- Ad-hoc re-sign macOS bundle after afterPack (fixes 'damaged')
- Skip DB migrations + backfills during next build (SQLITE_BUSY race)
- App icon + empty-window (better-sqlite3 ABI) + free ports
- Use Morning sun mark on the dashboard header
- Replace Bot header icon with Morning sun mark
- Apply Windows .cmd/shell fix to after-pack hook too
- Shell:true for Windows .cmd spawns (Node 20 EINVAL)
- Unsigned mac build, Linux homepage, Windows rebuild bin
- Harness lib v3 — clean the DRIVER, not the whole emulator
- Allow mobile/web test toolchain paths outside the worktree (cross-OS)
- Allow mobile/web test toolchain paths outside the worktree (cross-OS)
- Route server/runtime infra failures to environment, not product
- Close budget-leak under interruption + add maxBacktracks floor
- Route server/runtime infra failures to environment, not product
- Close budget-leak under interruption + add maxBacktracks floor
- Branch new tasks from origin/<base>, not the drifting local base
- Branch new tasks from origin/<base>, not the drifting local base
- Exclude desktop/ from root tsconfig type-checking
- Exclude desktop/ from root tsconfig type-checking
- Logs autoscroll no longer fights scroll-up under a fast feed
- Logs autoscroll no longer fights scroll-up under a fast feed
- Keep e2e harness/connection failures in Testing, not Implementing
- Keep e2e harness/connection failures in Testing, not Implementing
- Settle on process exit, not stdio close (orphaned-daemon root fix)
- Settle on process exit, not stdio close (orphaned-daemon root fix)
- Name the orphaned-daemon-FD cause so the e2e skill can fix it
- Name the orphaned-daemon-FD cause so the e2e skill can fix it
- Show the live Done-phase progress on the card (was a blank Done card)
- Show the live Done-phase progress on the card (was a blank Done card)
- Don't silently complete a broken delivery — block on PR auth-fail + un-pushable submodule
- Don't silently complete a broken delivery — block on PR auth-fail + un-pushable submodule
- Resolve planRun scope by run_id + scope asset upload by board
- Resolve planRun scope by run_id + scope asset upload by board
- Defer to PRODUCT-class skill FAIL only — don't loop the finished feature on unrelated drift
- Defer to PRODUCT-class skill FAIL only — don't loop the finished feature on unrelated drift
- Gate fails when the e2e skill fails — defer to ANY skill FAIL, not just product
- Gate fails when the e2e skill fails — defer to ANY skill FAIL, not just product
- Don't override a PRODUCT-class skill FAIL with an owned-spec pass
- Don't override a PRODUCT-class skill FAIL with an owned-spec pass
- Don't flag/recover intentional project-root writes (DESIGN.md, .gitignore)
- Don't flag/recover intentional project-root writes (DESIGN.md, .gitignore)
- KeyFailureLine ignores optional-step WARNED noise, prefers the hard assertion
- KeyFailureLine ignores optional-step WARNED noise, prefers the hard assertion
- Lead the failure reason with the REAL engine error, not Spec-115 boilerplate
- Lead the failure reason with the REAL engine error, not Spec-115 boilerplate
- A build killed for silence is a timeout, not a compile error
- A build killed for silence is a timeout, not a compile error
- Drive single-flow maestro-run.sh wrappers per-flow
- Drive single-flow maestro-run.sh wrappers per-flow
- Re-wiring an edge moves the column's board position too
- Re-wiring an edge moves the column's board position too
- Make scroll-up actually stick — gate follow on a ref, not racy state
- Make scroll-up actually stick — gate follow on a ref, not racy state
- A column inserted mid-pipeline renders at that spot on the board, not last
- A column inserted mid-pipeline renders at that spot on the board, not last
- Stick-to-bottom autoscroll instead of always force-scrolling
- Stick-to-bottom autoscroll instead of always force-scrolling
- Block on non-convergence instead of advancing to the (already-passed) Approval gate
- Block on non-convergence instead of advancing to the (already-passed) Approval gate
- Delegate native build to maestro-prepare (correct binary) + aggressive android storage self-heal
- Delegate native build to maestro-prepare (correct binary) + aggressive android storage self-heal
- Freeform plan reject snapshots a version too (history/diff after any reject)
- Freeform plan reject snapshots a version too (history/diff after any reject)
- Provision the runtime (Metro + seed) via maestro-prepare before native flows
- Provision the runtime (Metro + seed) via maestro-prepare before native flows
- Dedup event fires per source task — stop the per-event task flood
- Dedup event fires per source task — stop the per-event task flood
- Keep raw markdown in acceptance criteria so bold/code render
- Keep raw markdown in acceptance criteria so bold/code render
- Scope the Statistics route as a board, not a project (RBAC 404)
- Scope the Statistics route as a board, not a project (RBAC 404)
- Universal install-failure self-heal + classify by step, not error string
- Universal install-failure self-heal + classify by step, not error string
- One column field (filter = destination) + actually RUN the created task
- One column field (filter = destination) + actually RUN the created task
- Trim task card title right padding (pr-16 → pr-14)
- GenerateId works in non-secure contexts (LAN HTTP)
- Trim task card title right padding (pr-16 → pr-14)
- GenerateId works in non-secure contexts (LAN HTTP)
- Signing-proof iOS fallback must build the APP scheme, not a pod
- Signing-proof iOS fallback must build the APP scheme, not a pod
- Caller's MAESTRO_DEVICE must win; flag wrong-platform builds
- Caller's MAESTRO_DEVICE must win; flag wrong-platform builds
- Integrate latest base into the task branch before push
- Integrate latest base into the task branch before push
- Seconds-free compact duration that doesn't overlap the task title
- Seconds-free compact duration that doesn't overlap the task title
- A post-conclusion hang COMPLETES the phase, not a timeout-fail
- A post-conclusion hang COMPLETES the phase, not a timeout-fail
- Expo build must use --no-bundler (+ pin sim) so it terminates
- Expo build must use --no-bundler (+ pin sim) so it terminates
- Recoverable blocked tasks; iOS signing is environment not product
- Recoverable blocked tasks; iOS signing is environment not product
- A skill may only complete checkpoints it OWNS (no cross-skill ticking)
- A skill may only complete checkpoints it OWNS (no cross-skill ticking)
- Treat set_phase_conclusion as authoritative done — short grace then force wrap-up
- Treat set_phase_conclusion as authoritative done — short grace then force wrap-up
- Break the stream at the terminal `result` (root cause of stuck-on-conclusion)
- Break the stream at the terminal `result` (root cause of stuck-on-conclusion)
- Tool-aware idle watchdog — catch the SDK turn that never ends
- Tool-aware idle watchdog — catch the SDK turn that never ends
- On resume, scope the implement prompt to its OWN checkpoints
- On resume, scope the implement prompt to its OWN checkpoints
- On resume, skip worker skills whose checkpoints are already done
- On resume, skip worker skills whose checkpoints are already done
- MCP emit can't hang a tool; honest stall labels + low-disk fast-fail
- MCP emit can't hang a tool; honest stall labels + low-disk fast-fail
- Don't re-execute an already-finished phase on resume
- Don't re-execute an already-finished phase on resume
- Stop run events redirecting to dashboard-picked project + unclickable dialog X
- Stop run events redirecting to dashboard-picked project + unclickable dialog X
- Harvest mobile screenshots from the worktree + require flows to test to the result
- Harvest mobile screenshots from the worktree + require flows to test to the result
- A gate PASS must not override the skill's explicit FAIL
- A gate PASS must not override the skill's explicit FAIL
- Don't block a "no device booted" skip as a creds failure
- Don't block a "no device booted" skip as a creds failure
- Reject marks Approval phase failed, not completed (no 100%-green)
- Reject marks Approval phase failed, not completed (no 100%-green)
- Durable backtrack budget + a failed fix can't reach Done
- Durable backtrack budget + a failed fix can't reach Done
- Self-seed evaluator checkpoints so the loop is never invisible
- Self-seed evaluator checkpoints so the loop is never invisible
- Web gate PASS overrides the e2e skill's self-fail (stop the drift backtrack loop)
- Web gate PASS overrides the e2e skill's self-fail (stop the drift backtrack loop)
- Fold backtrack Fix checkpoints into the worker group (not a "Steps" group)
- Fold backtrack Fix checkpoints into the worker group (not a "Steps" group)
- Place Export in the Logs sub-filter row, not the main tab strip
- Place Export in the Logs sub-filter row, not the main tab strip
- Re-run the reviser's DOWNSTREAM worker skills too, not just the reviser
- Re-run the reviser's DOWNSTREAM worker skills too, not just the reviser
- Catch Maestro false-green + stop embedding failure-frame screenshots
- Catch Maestro false-green + stop embedding failure-frame screenshots
- Treat a transient unhealthy stack as environment-retry, not a block
- Treat a transient unhealthy stack as environment-retry, not a block
- Apply ownership scoping to the forced-reporter fallback too
- Apply ownership scoping to the forced-reporter fallback too
- MobileLaunchButtons — drop redundant target !== 'web' that broke the build
- MobileLaunchButtons — drop redundant target !== 'web' that broke the build
- Soften user chat bubble + float mobile device picker as overlay
- Soften user chat bubble + float mobile device picker as overlay
- Teams — support Power Automate Workflows webhooks (MessageCard was rejected)
- Teams — support Power Automate Workflows webhooks (MessageCard was rejected)
- Hide Target column for event-driven tasks (event fires regardless of column)
- Hide Target column for event-driven tasks (event fires regardless of column)
- Friendly schedule, derived report period, drop Flow, scrollable dialog
- Friendly schedule, derived report period, drop Flow, scrollable dialog
- Require screenshots on MOBILE + for any UI task (was web/design-only) — empty summaries
- Require screenshots on MOBILE + for any UI task (was web/design-only) — empty summaries
- Block on alwaysLoad + fast-boot the kanban MCP child to stop status='pending'
- Block on alwaysLoad + fast-boot the kanban MCP child to stop status='pending'
- Legible dark log console in both themes + eye-comfort palette pass
- Make ThemeToggle segments share width so they fit the account menu
- Widen the MCP-connect retry (startupTimeout is inert) to span the post-gate load spike
- Widen the MCP-connect retry (startupTimeout is inert) to span the post-gate load spike
- Clear stale FAIL artifact on pass; drop misleading final-state device screenshot
- Clear stale FAIL artifact on pass; drop misleading final-state device screenshot
- Stop re-running e2e authoring on backtrack — sync prompt skip-markers with the row
- Stop re-running e2e authoring on backtrack — sync prompt skip-markers with the row
- Give the kanban MCP server a generous startup timeout (fragile-timeout root cause)
- Give the kanban MCP server a generous startup timeout (fragile-timeout root cause)
- Re-running tests must also reset the downstream results checkpoints
- Re-running tests must also reset the downstream results checkpoints
- Retry the SDK session on intermittent kanban-MCP connect failure
- Retry the SDK session on intermittent kanban-MCP connect failure
- Hide harvested e2e screenshots from attachments + export only referenced
- Hide harvested e2e screenshots from attachments + export only referenced
- Force JSON reporter when no report found, instead of hard-block
- Force JSON reporter when no report found, instead of hard-block
- Deterministically rebuild native app on missing-module crash
- Deterministically rebuild native app on missing-module crash
- Launch tsx MCP servers from local bin, declare tsx as dependency
- Launch tsx MCP servers from local bin, declare tsx as dependency
- Startup Claude CLI↔SDK version-skew check + skip wrong-platform pinned CLI
- Block the task when the kanban MCP server never connects (don't silently stall)
- Block the task when the kanban MCP server never connects (don't silently stall)
- Clean cover-band card background (drop the muddy scrim)
- Project page "Back" returns to wherever you came from (router.back)
- Project page "back" goes to the dashboard, not a hardcoded board
- Back-to-projects is icon-only with a tooltip (no inline text in the topbar)
- See test files inside git submodules (stop the false "claimed-but-missing" loop)
- See test files inside git submodules (stop the false "claimed-but-missing" loop)
- Bound stalled/hung phases in project statistics duration (no more "duration stack")
- Bound stalled/hung phases in project statistics duration (no more "duration stack")
- App sign-in 401 / E2E_PASSWORD is the e2e skill's to fix (retryable), not a human block
- App sign-in 401 / E2E_PASSWORD is the e2e skill's to fix (retryable), not a human block
- Never carry the "Run tests" checkpoint forward — re-run + re-validate every entry
- Never carry the "Run tests" checkpoint forward — re-run + re-validate every entry
- Mobile gate resolves Android SDK env itself (adb/emulator/maestro on PATH)
- Mobile gate resolves Android SDK env itself (adb/emulator/maestro on PATH)
- Mobile gate blocks-for-human only on USER-OWNED failures; device/toolchain stays retryable
- Mobile gate blocks-for-human only on USER-OWNED failures; device/toolchain stays retryable
- Drop single-skill idle timeout (it killed long e2e); rely on a generous wall-clock cap
- Drop single-skill idle timeout (it killed long e2e); rely on a generous wall-clock cap
- Clamp idle tails on terminal phase rows closed long after work stopped
- Clamp idle tails on terminal phase rows closed long after work stopped
- Auto-boot an iOS simulator in the mobile gate + fuller iOS setup in e2e skill
- Auto-boot an iOS simulator in the mobile gate + fuller iOS setup in e2e skill
- Mobile coverage gate blocks (non-retryable) when nothing ran
- Mobile coverage gate blocks (non-retryable) when nothing ran
- Stop counting pause/idle tails in per-task Total Time
- Stop counting pause/idle tails in per-task Total Time
- Integrate origin/<base> too + make run-start base refresh visible
- Integrate origin/<base> too + make run-start base refresh visible
- Refresh task worktree from base at run start (stale-infra fix)
- Cap single-skill execution with an absolute wall-clock ceiling
- Refresh task worktree from base at run start (stale-infra fix)
- Cap single-skill execution with an absolute wall-clock ceiling
- Web e2e gate catches "pre-feature frontend image" feature-UI skips
- Web e2e gate catches "pre-feature frontend image" feature-UI skips
- Block non-retryable infra/credential e2e failures immediately instead of looping
- Durable web e2e gate — never ship a web task whose browser suite didn't run
- Block non-retryable infra/credential e2e failures immediately instead of looping
- Durable web e2e gate — never ship a web task whose browser suite didn't run
- Block task when backtrack budget exhausted instead of advancing
- Block task when backtrack budget exhausted instead of advancing
- Setup/login form feedback + Secure-cookie over HTTP
- Make e2e tests required and block if was not executed
- Mcp server calls update
- Don't count pause→resume idle time as phase duration
- Pin the Claude CLI to the SDK's version so MCP works
- Claude path resolution fails loudly + health check matches runner
- Extract resume hints from provider limit errors for auto-resume
- Debate-loop evaluator dropdown can show/select non-column critics
- Repair stale Planning debate evaluator ('plan' → 'review-plan')
- Relabel pre-merge WIP commits into proper conventional commits
- Make mobile-singleton barrier symmetric + device-phase-only
- Scope mobile-singleton barrier to the device phase, not task start
- Guard the APP-facing backend URL + enforce app==harness isolation
- Reset a partially-run skill's checkpoints on resume of a paused phase
- Deterministic backend-isolation guard + hardened discovery
- Enforce isolated backend + speed up Android Maestro input
- Stop false 'missing artifacts' on '|' separators, design, prose plans
- Scope authoring carry-forward to intent='auto' only
- Mobile-coverage gate owns the run-tests checkpoint
- Durable Maestro/Playwright runner — stream, time-out, decide
- Un-block event loop during mobile-coverage Maestro runs
- Break continue-loop + unblock Maestro test reads
- Continue short-circuit on 100% carry + move overflow to top-right
- Filter test-tooling noise from Implementation Fix: items
- Maestro-run.sh auto-recovers from iOS driver-session flakiness
- Test-plan review on re-entry + bound stalled-phase idle in durations
- Make maestro-run.sh a UDID-resolving translator; align gate args
- Use --platform not --device for Maestro + skip unavailable platforms
- Drop invalid --format=json from Maestro gate invocation
- Stop Maestro orphan/watchdog leak + bound the hang vectors
- Serialize mobile-native tasks (simulator is a singleton)
- Serialize + timeout-guard Maestro runs (sim-singleton + hang prevention)
- Mobile target runs BOTH iOS and Android (drop Spec-117 collapse)
- Close brandLayers race + reject duplicate screen ids
- Preserve submodule commits across Done-stage merge
- Include .kanban-artifacts/ in managed gitignore entries
- Emit per-tool task_log rows (not a bulk \"Tool calls: a, b, c\")
- Force contentPath in user-prompt + tail-anchor (system-prompt update wasn't reaching the model)
- Carry over plan prep checkpoints when a prior plan exists (iteration mode)
- Mandate contentPath for design save (refine + fresh modes)
- Restrict project-init reads to user workspace
- Pre-complete design prep checkpoints when refine mode applies
- Harvest memorySuggestions only when task is accepted
- Tolerate bulleted \`- **Screens:**\` marker so uxFingerprint isn't empty
- Stop re-running design on prose-only plan edits + preserve original checkpoint timestamps
- Structured tool-call output replaces text-JSON parsing (research phase)
- Strip per-screen scaffolding so previous-frame label doesn't bleed in fluid viewport
- Broaden fan-out gate + model-driven screen discovery
- Orchestrator-level per-screen fan-out, drop chunked-save
- Actually populate execInput.reasoningEffort from skill defaults
- Jsonrepair fallback rescues AI JSON with trailing commas + unescaped newlines
- Neutral diagnostic when save_artifact never fired
- RFC 6266 Content-Disposition for non-ASCII filenames
- Land paused status synchronously, don't overwrite
- Per-provider maxSteps ceiling for streamText
- Run scripts in carousel + scope refine to active screen
- Trim irrelevant artifacts, fix silent SDK hangs
- Suppress legacy refine side panel in lifted mode
- Tighten compact card; raise surface above the dialog
- Unblock production build for refine-state guard + design-chat helpers
- Plan + design were running in the same parallel group
- Render image thumbnails inline + dark-mode contrast
- Remove direction list from catalog page
- Reset recovery budget on manual re-diagnose
- Cancel stale queued jobs on server restart
- Show configured provider label in top-bar AI status
- Keep task.status=running across phase boundaries
- Correct bypass flag, terminal-row mutation, retry re-entry
- Honor Stop button on the Done phase
- Refuse SIGKILL when child.pid is stale or recycled
- Break paragraphs between AI step text and tool calls
- Rely solely on .gitignore + surface gate events
- Auto-take base for ignored / build-output paths
- Never paint stale 100% over a bypassed audit row
- Translate Claude tool names so model isn't stranded with zero tools
- Chat MCP — auto-resolve board/column + workspace overview tool
- Retry pass 1 without digest when agent calls zero tools
- Floating chat no longer creates a thread on every open
- Commit our .gitignore writes so the next worktree passes assertBaseClean
- Attribute review-plan to Planning, not Other
- SDK chat gets MCP kanban + artifacts grouped by phase
- Refuse global chat under SDK transport instead of lying
- Cancel in-flight run on manual move so new column gets fresh execution
- Real checkpoints + update_progress nudge
- Pause source phase during backtrack detour
- Clear stale gate artifact, self-heal task_moved cache
- Normalize Next.js → 'web', seed e2e in Testing
- Detect sibling frontend when root has package.json
- Pre-review gate filters warnings + keeps row open on FAIL
- Smaller FAB, lift above log dock
- Stream tool-call events + strip system_notification leaks
- Floating chat — left FAB, thread naming, real tool calls
- Dedup floating-chat race between WS broadcast and SSE stream
- Collapse per-card 1Hz timers + drop /progress refetch storm
- Unref poll timer + WS-driven UI to stop hang and fix Ctrl+C
- Block set_phase_conclusion when canonical artifact missing
- Auto-complete "Save X" checkpoint after save_artifact succeeds
- Force canonical name/type in save_artifact to keep upserts stable
- Always inject stack profile into plan-skill prompts
- Stop NODE_ENV=production leak into spawned dev servers
- Set type="button" so toggling never submits the parent form
- Exempt .kanban-worktrees/ from base-clean check
- Sync save_artifact enum with schema artifactType
- Use existing design as spec; never produce design artifacts
- Make brand-layers contract directive on radii + border
- Pristine projects auto-refresh brand_layers on boot
- Strip post-</html> trailer; parse markdown-bold radii + border
- Render HTML artifacts in iframe, not raw source
- Render HTML artifacts in iframe even when type='other'
- -muted is a surface, not the chroma `muted` token
- Canonical swatches + colon-label normalization
- Live preview thumbnail for unified design skill
- Description-update regression + parity with NewTaskForm
- Escape JSX entities to satisfy react/no-unescaped-entities
- ResolveDesignChain — read task fields through unknown bag
- Recover from "untracked working tree files would be overwritten"
- Modernize seed + runbook for Spec 073 per-task model
- Paste + drop file capture
- Plug auto-mode leaks that hung the page and blocked Ctrl+C
- Escape apostrophe in skill-folder hint
- Align dropdown items with trigger text
- Align dropdown items with trigger text
- No-creds SDKs + per-provider setup hints + readable errors
- Break blocked-by retry loop, rework prerequisite UX, unstick recovery panel after Stop
- Trim replan-context to current round + chunked log flush with backpressure
- Static-site shape + test-script annotation so AI doesn't propose `npm run e2e` as the run target
- Cancel orphan poll loops, drop stale auto-mode entries, debounce PID flush
- Render every backtrack rule, not just the last one
- Normalize backtrackConfig in getBoardFullState too (was bypassing the service-layer normaliser)
- Reset reviser+evaluator checkpoints between iterations
- Drop '|' delimiter, carry over preserved-artifact skills, add evaluator checkpoints
- Debate-non-convergence advances to next column for human decision
- Show 'needs revision' phases as amber, not solid green
- Detect kLSApplicationNotFoundErr + show full err message
- Allow enable_diagnose_bash through PATCH /api/settings
- Kill orphan children on fresh Start + surface real xcrun/adb errors
- Pre-flight resolves ./mvnw against service cwd, not kanban-app cwd
- Reflect server-side detection + recovery state on the header button
- Unstick the 'Restarting' phase + emit exhausted at limit
- Help AI return valid updatedRunConfig + recover when it doesn't
- Launch mobile via xcrun/adb deep link, not stdin keystroke
- Infer mobileStack from command when AI omits it
- Validate AI-proposed runConfig before applying
- Unstick on interactive prompts + auto-apply fixes from quick-death
- Logs no longer flash + lines no longer cut off
- Config gen sandbox + sub-dir manifest detection + UI gates
- Pre-flight failures defer to post-loop, always fire recovery
- Pre-flight + quick-death failures route through recovery loop
- Config edits stick — auto-save on remove, dirty-flag inputs
- Keep recovery panel visible across mid-cycle restart
- Trigger AI diagnose on readiness timeout + include stdout
- Readiness probe waits as long as logs are flowing
- "Running" now waits for the port to actually answer
- Give header its own stacking context so Run dropdown wins
- Pass configured port through PORT env var to spawn
- Resolve ESLint and Next.js build warnings
- Pre-flight port check + self-run detection
- Suppress auto-recover on quick-death + show stderr
- SIGTERM the whole process group, not just the shell
- Handle agent transcripts + leaked tool-call markup
- Strip markdown fences before parsing AI diagnosis
- Actually invoke SDK executor (was awaiting handle)
- Tolerate fenced/prose-wrapped/empty AI output
- Also swallow ADD-COLUMN race on multi-worker migration startup
- Collapse shared ScrollArea on Chat tab to remove the empty bottom strip
- Show actual progress on cancelled/paused phase rows + prefer active over completed
- Resolve conflict markers in mcp-kanban.ts + boardId-fix test that shipped via 3e074b1
- Refuse to auto-commit a worktree that contains conflict markers or has MERGE_HEAD
- Redirect to Testing when worktree has unvalidated commits since Testing completed
- Discard local generated-artifact mods in projectRoot before mergeAndCleanup checkout
- JSON-output fallback when both tool calls and markdown bash blocks fail
- Pre-merge gate also runs on advanceAfterResume's terminal-column path
- Wildcard subscribers receive per-board broadcasts
- Auto-commit dirty worktree before pre-merge integration
- Support SDK transport (Copilot SDK / Claude Code) — branch executeChat by transport
- Pin prose elements to --foreground so headings/strong/code stay readable
- Execute markdown bash blocks as fallback when SDK didn't fire tool calls
- Conflict resolver via Bash heredoc + flip queued→running at run start
- Pre-feed file contents + Write-only directive prompt
- Integrate against LOCAL base, not origin/<base>, in worktree integration
- On-demand artifact tools + surface empty-response and real errors
- Feed merge-conflict context to the implement skill via rejection-feedback channel
- Retire phase rows on merge-conflict reroute so they actually re-execute
- Defer to debate verdict instead of fighting it with the artifact gate
- Retire terminal rows on superseded close so reject re-executes
- Pick the configured evaluator's artifact, not newest of type
- Self-heal projects without a board on first GET (kanban switch was a no-op)
- Drop hardcoded HIGHLIGHTS allowlist for universal deps
- Bias output toward implement-feature tasks (no research verbs)
- Wire allowedTools so planner text-only contract applies on Copilot
- Whitelist tsconfig.tsbuildinfo + specs/** intentional writes
- Pass boardId through completeCheckpoint/failCheckpoint/setPhaseConclusion
- Cap merge-conflict recovery to stop infinite reroute loop
- Pass boardId to progress service functions for real-time SSE events
- Forbid AI from asking clarifying questions; better parse error
- Run roadmap inside the worktree + forbid AI from writing files
- Cap vitest forks at 4 + per-worker DB to prevent memory blowup
- Make git lifecycle fail-loud instead of silent wipe
- Worktrees sandbox
- Enable image paste from clipboard in task creation
- Enable image paste via clipboard in upload component
- Filter E2E test projects from list
- Missed plan added
- Prevent roadmap artifacts from being merged into main branch
- Resolve checkpoint name mismatch in phase init
- Handle 'need revision' routing and prevent infinite replan loop
- Replace per-hook EventSource with shared WebSocket subscriptions
- Fix tool call formatting in execution logs
- E2e tests port
- Abort stale board fetch on project change
- Project clear on tests
- Build issue
- Task performing issues
- Git clean
- Inherit theme foreground color in prose
- Pass KANBAN_API_URL to child process for event emission
- Correct statistics endpoint board validation
- Task dialog reset
- Solve conflicts on merging branch
- Copilot integration
- Add missing SSE event types for blocker events
- Resolve type issues in chat implementation
- Eliminate message duplication, empty responses, and add AI greeting
- Build issues
- Build issues
- Sync EditTaskDialog form state when dialog reopens
- Prevent test files from being created in project root
- Tasks flow and worktrees
- Worktree
- Revive debate + backtrack loops for existing flows
- Pin MCP child DATABASE_URL so artifacts reach the main DB
- Resolve unknown tool names in execution log
- Updating ui issue
- Handle unknown tool calls in execution log
- Claude path recognition
- Add INTERNAL_SECRET to styles webServer env to fix TS build error
- Assign task flow from planned type for branch lifecycle
- Fix phase progress stale closure and add diagnostic logging
- Prevent paused tasks from auto-advancing to next phase
- Prevent position collisions when tasks complete concurrently
- Prevent card jump animation during drag-and-drop reorder
- Preserve task progress when stopping or resuming execution
- Add artifact gate to single-column (no-flow) execution path
- Show duration in common M:SS / H:MM:SS format
- Reduce noise from status checks, model resolution, and SDK output
- Load historical logs on page refresh
- Retry phases with missing artifacts + externalize ws from bundle
- Fix layout by moving chat tab outside ScrollArea
- Ensure progress bar updates reliably during AI execution
- Ensure tasks reach 'done' status and emit SSE events
- Prevent AI from calling move_task during phase execution
- Resume rejected/approved tasks in auto-mode and clean up phases
- Prevent date serialization error in phase duration display
- Correct message cleanup on error
- Bridge SSE events from MCP child process to parent via HTTP
- Handle stuck running tasks after server restart
- Persist activeExecutions map across HMR re-imports
- SSE disconnect, phase checkpoints & log verbosity
- Resolve skill folder from project path instead of process.cwd()
- Add status indicator, enable Run AI without flow, wire auto-mode execution
- Auto-mode toggle, status endpoint, backlog task query
- Refresh board instantly after task deletion
- Add cross-browser scrollbar consistency + e2e tests
- Prevent main view scrollbars when tasks overflow columns
- Align ExecutionPanel SSE parsing with server protocol
- Portal dialog and register select options when closed
- Project creation dialog and select display name
- Wire Tailwind v4 for production builds
- Resolve 5 failing comprehensive tests
Faster
- Warm once per gate leg — harness_once memoizes idempotent setup
- Skip the rebuild + maestro run when the skill already failed
- Skip the rebuild + maestro run when the skill already failed
- Defer kanban MCP server's heavy module graph until first tool call
- Defer kanban MCP server's heavy module graph until first tool call
- Scoped in-place re-run — re-run only the failing skill, not the whole phase (Spec 121 d)
- Scoped in-place re-run — re-run only the failing skill, not the whole phase (Spec 121 d)
- Canonical single-flow invocation + deterministic RESULT block (cut output-capture re-runs)
- Canonical single-flow invocation + deterministic RESULT block (cut output-capture re-runs)
- Stop the mobile suite running 2-3× (skill over-run + authoritative gate re-run)
- Stop the mobile suite running 2-3× (skill over-run + authoritative gate re-run)
- Pre-flight device skip + failed-first re-run (both engines)
v0.1.22026-06-20
New
- Desktop local-single-user, folder picker, shared apiFetch, in-place New Project, R2 auto-update
- Reflect the cloud trial in the app (banner + Upgrade)
- Event-triggered instant sync push + tombstone derivation test
- Sync tombstones — propagate deletions across the team
- Automatic shared-project sync sweep + "Share to team" UI
- Sync engine (local) — board snapshot serialize/merge + reconcile
- Plan-upgrade checkout from the app (Stripe per-seat)
- Cloud account loop — device-code sign-in, entitlements, routes, UI
- Cloud-as-provider seam + local-only-by-default cloud session
Fixed
- Confine outputFileTracingRoot (fixes Windows EPERM Application Data)
- Create-project silently failing + dashboard New Project card
v0.1.12026-06-20
New
- Warm the light-theme primary toward salmon
- Recolor primary from blue to Dawn coral (icon-matched)
- Add Morning sun app icon
- Package the app as native installers + build them in CI
Fixed
- Reliably skip migrations during desktop build + retry on lock
- Ad-hoc re-sign macOS bundle after afterPack (fixes 'damaged')
- Skip DB migrations + backfills during next build (SQLITE_BUSY race)
- App icon + empty-window (better-sqlite3 ABI) + free ports
- Use Morning sun mark on the dashboard header
- Replace Bot header icon with Morning sun mark
- Apply Windows .cmd/shell fix to after-pack hook too
- Shell:true for Windows .cmd spawns (Node 20 EINVAL)
- Unsigned mac build, Linux homepage, Windows rebuild bin