Teams can now run their own decision lifecycle without everything queuing on one person
- Decisions are now typed and attributable, with per-project resolution modes, and you can propose, resolve or inspect any live decision right from your session.
- Idea capture stops hijacking: titles containing ordinary engineering words now file to the backlog correctly, with an explicit override when you know better.
- A passive status line shows your current cycle, work in flight, items awaiting review and actions waiting on you, rendered in your prompt bar at zero effort.
Full detail
- Cycle 366 — Team Decisions epic + reliability sweep
- Add decision type + authorship + per-project resolution mode (expand migration)
- Decision authority by resolution mode + stop proposal events releasing gated tasks
- MCP surface for typed, proposable decisions (strategy_change args, decision_resolve, ad_view, orient, build filter)
- Decision-conflict gate must fire on ad_hoc and at build time, not only at idea intake
- Owner Action Queue classifier hijacks plain build tasks and its advertised override does not work
- Release readiness and orient cycle counts ignore assignee — one member's cycle includes another member's claimed tasks of the same number
- Audit every task/cycle read path for single-operator assumptions — six per-user scoping bugs have been found reactively, one call site at a time
- Prompt-line cycle indicator — cached peek endpoint plus a CLI renderer for MCP client status bars
- Repair AD outcome vocabulary: illegal 'confirmed' write, unreachable branches, and the dropped action arg on hosted
- Move project bootstrapping into the tools and shrink bootstrap-project to a thin shippable skill
- Edge-function deploy was broken post-VPS-cutover — rebuilt for the self-hosted stack
The cycle that made your work publishable, and hosted releases finish themselves
- Public sharing goes live. Publish your brief and cycles from the dashboard with consent-gated toggles.
- Hosted releases now end with exact git steps to finish locally, not vague prose.
- Cycle updates can point at your own team Discord channel instead of a private one.
- Fixed color tokens that could render without fallbacks on dashboard surfaces.
Full detail
- Merge shared cycle branch — core
- Cycle 365: public surfaces, sharing toggles, and the dead-Supabase cleanup
- Rate-limit logical PAPI operations
- Bind Vibe route to approved artifact
- Add Vibe Tycoon project route
The cycle that made starting a session fast again, and stopped hosted projects hitting dead ends
- Opening a session is fast again. The first read of your project used to pull the whole board five times over and could time out; it now takes a single pass.
- Hosted projects no longer hit dead ends on features that work locally. PAPI asks your connection what it genuinely supports instead of guessing.
- Settings has one Connections tab: your tools, endpoint, keys, linked repo and connection health in one place, with a live status dot in the header.
- Coming back after time away, PAPI tells you how long you have been gone and names the work waiting for you instead of showing an id.
Full detail
- Collapse orient's 5 full-board pulls to 1 compact read
- Build C9 and C13 — the tour is reachable again, and the demo that already existed is now pointed at
- Rebuild light mode — close the token island, fix the toggle, invert the canon's default
- Hub restyle round 2 — density, colour reduction, one stage map, no ambient pulse, ledger surfaced
- Re-entry — say how long they were away, and name the work not its id
- Connections as one surface — client, endpoint, keys, repo and health
- Detect orphaned components in ci:local
- Per-user release notes, rendered from the cycle log
- Empty and error states name the next action instead of apologising
- Close the dead data paths — 9 routes, 6 endpoints, 1 table
- Mount HubMomentumStrip — the lifetime stats had no reader
- Stop review_submit rolling back an accept whose branch was folded into a cycle branch
- Stop /api/actions/* returning raw error text, and start logging it
- Claim the device-flow API key atomically instead of read-then-write
- Apply the Origin allow-list to /auth/collision and /oauth/revoke-all
- LPAD truncation made br-/rv- allocation deterministically collide past 999
- UX-O · Perceived performance — consistent skeletons, optimistic board updates, kill the 30s cache surprise
- Br- and rv- display_id allocation is read-then-insert, and edge writeReview orders rv-NN lexicographically
- A migration exists on production that is on no branch in this repo — reconcile or capture it
- Assignee_id/reviewer_id on task update are not validated against project membership
- EnsureDocDurable reports a false "NOT durable" for a doc committed on a different branch
- Make PapiAdapter non-optional — kill the 45 capability-sniff sites that fork behaviour between owner and paying customers
- Weekly Active Builders cannot be computed from tool_runs — re-key it on build_reports and move the bucketing into @papi-ai/shared
- ClassifyIcp defaults every unrecognised signup to 'dev' — classify on positive signal, add an 'unknown' bucket
Hosted builds and task claims stop crashing, and the dashboard shows what's actually fixed
- Claiming or releasing a task no longer fails when connecting through the hosted server.
- A build no longer crashes partway through completing when connecting via npx.
- The dashboard's caught-issues view now shows what's actually been fixed, with a found-vs-fixed count for the cycle and all time.
- Time Machine chart labels no longer overlap or get clipped, at any screen size.
Full detail
- Cycle 357: Core module
- Width-aware Time Machine X axis so dates never squash
- Two live hosted P0s — claimTask/unclaimTask ReferenceError, commit* methods 403ing
- Cycle 357: Dashboard module
- The migration gate's 3-state branch was unreachable under bash -e
- Flag discoveries a shipped task fixed in passing
- Prompt and validator agree on the handoff shape again
- Estimation calibration is computed, and hosted users stop being sent to a file they lack
- Refuse to retag when the local build differs from the published tarball
- Two gates stop reporting green having checked nothing
- Pre-commit no longer destroys unstaged work
The cycle that made "fixed" mean fixed, and gave your docs somewhere durable to live
- Your registered docs now keep their content. A doc living in a gitignored folder survives a branch switch or a stash, and doc_read restores it byte for byte.
- PAPI no longer marks an issue fixed just because the task that found it closed. Fixed now means someone actually fixed it, so expect your open count to jump the first time you look.
- Found a problem and fixed it in the same session? Record it as fixed on the spot, instead of filing a task just to close it a minute later.
- A new Discoveries tab charts caught against fixed across every cycle, so you can see whether your quality loop is closing or just filling up.
Full detail
- The migration-replay auth.users stub was missing columns migrations read
- Discoveries analytics tab — is the quality loop actually closing
- Close five defects found by the risk-tier review of the C356 Dashboard branch
- Hub caught panel becomes one open-debt tile with age and a resolve control
- Resolve route so a discovered issue can be closed from the hub
- Discovery read layer — caught-ledger.json and discoveries-by-cycle.json
- Doc_read restores a stored body from the database
- Staleness warning compares bundle content, and says it once
- Hosted re-register no longer throws; doc bodies reach hosted users
- Doc_register stores the body, .md-only, tier-scaled storage cap
- Stage exit criteria are evaluated, and unevaluated stops reading as false
- Hosted callers can finally see a fixed issue; appendCycleLearnings via RPC
- Discoveries reach planning, build start and strategy review
- Fix-or-file gate on build_execute; auto-triage cut to filed P0/P1
- Orient stops auto-clearing; fixes attributed to the build
- Adapters write per-finding via RPC; delete the auto-clear sweep
- One shared findings parser, key and gate in @papi-ai/shared
- Per-finding schema, dedup index, append_cycle_learnings RPC
- The funnel becomes the page, not its fifth section
- Make the S5 scorecard the actual exit criteria
- Document the Hermes Agent install path
- Instrument the second authentication and add web visitors as stage 0
- Noindex auth routes, drop redundant robots Allow lines
- Close the four blind spots in the acquisition funnel
- Never send automated win-back copy to a paying customer
- Programmatic Search Console access + gsc-report CLI
- Alert on paid conversion and surface tier in admin
Your pages load with real content, and PAPI asks instead of guessing which project you meant
- Connecting with more than one project now asks which one, by name, instead of failing with an error you could not act on.
- Your hub, board and roadmap arrive with real content on first load instead of an empty frame.
- Task Flow counts every task in your project. It was quietly stopping at the newest 1000.
- Teammates you invite can now see the projects they were added to.
Full detail
- One owner-facing fold, not two competing attention surfaces
- Cycle 355 — dashboard: server-rendered first paint, project-scoped routes, whole-project analytics, S5 exit criteria
- Cycle 355 — core: connect ask-don't-refuse, stall correlation, product-first orient, CI colour + migration gates