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
When something goes wrong, PAPI now tells you what and why
- When a connection fails, PAPI tells you the actual reason and the one thing to do about it, instead of guessing that you skipped sign-in.
- Project analytics show that project's numbers; some pages were quietly reporting totals from across every project.
- Links inside a project stay inside it, so Decisions, Roadmap and Time Machine no longer drop you into a different project.
- After three failed attempts on the same task, PAPI stops and asks you how to proceed rather than trying again the same way.
Full detail
- Reconcile 10 audited migration names into BASELINE_GAP_NAMES
- Add a loop-detection → Decision escalation primitive with guidance-injection on retry
- Connect failures are invisible — record post-auth project-resolution failures and surface the reason in the connect stall escalation
- Revoke anon EXECUTE on is_project_member/is_project_writer
- Doc_register must make the doc durable, not just index it — commit untracked doc bodies at registration
Everything waiting on you now lands in one place on your hub
- One card on your hub collects everything waiting on you, instead of the same signals scattered across three separate places.
- Switching cycles on the board keeps you inside your own project instead of bouncing you out of it.
- Buttons and status colours across the dashboard hold their contrast properly, so nothing important is hard to read.
- The runbook your assistant reads to install PAPI now leads with what PAPI does for your project, not with what PAPI is.
Full detail
- Lock one outcome-led tagline across every public surface
- Consolidate scattered hub attention surfaces into one aggregator with full cross-cycle signal coverage
- Enforce AD-81 on /forgot-password and /reset-password — document the dormant recovery flow, do NOT delete
- C352 ladder fallout: CTA fill contrast, hardcoded dashboard hexes, stale doc-styles contrast analysis
- Repair the Vercel burn fetcher — date window and unit matching
- Correct Railway burn figures — price usage units, snapshot daily flow
A rebuilt landing page and demo, first-run guidance, and cleaner settings
- The getpapi.ai landing page is fully rebuilt, with a self-playing plan, build, review, release loop and a live on-the-record decision board.
- The product demo at /try is now a side-by-side walkthrough: type a command on the left, watch your hub react on the right.
- First time you open your hub, quick pointers show where your decisions live, that tasks expand on click, and how to fill your backlog.
- Your settings are split into clear sections (account, projects, keys, feedback), so finding what you need is faster.
Full detail
- Cycle 351 — Core: hosted-path integrity + SECURITY DEFINER hardening
- Cycle 351 — Dashboard: coachmarks + Ops-console/settings IA consolidation
- Gate completeBuild active-task-scope clear on hasLocalWorkspace
- Consolidate dumping-ground pages: merge /admin + /admin/activation into one badged Ops console; split 1400-line /settings into concern sections
- Stop canonicalising public /docs/* pages into the project scope
- Lightweight in-hub coachmarks for first-time users (decisions, task-expand, backlog) — NOT a full-screen bloom
- Proof board reads as a showcase + rename Wes attribution
- Leaderboard cycles never rest at 0 on mobile
- Compact 2-col leaderboard + mobile composition pass (v7.2)
- Leaderboard as two columns, name links to the live site
- Pain beat v7.1, the sideways hourglass
- Checkpoint(landing): v7 partial (agent interrupted) + final leaderboard roster + v7.1 spec
- Redesign /try as chat-left / hub-right, dark canon
- CRM has no per-touch history — every outreach past the last one is lost to a notes blob
- V5+v6 — pain beat resolves through PAPI, vertical-space law swept page-wide
- Delete ~500 lines of unreachable Contacts/Accounts render blocks in the owner-actions page (dead since repointed contacts to /crm)
- Build checkpoint write/read/clear not gated on hasLocalWorkspace() — hosted multi-tenant cross-tenant collision risk
- Remove the StartupBar widget from the landing route
- The record beat runs on real data and gains the decision track
- Polish(landing): precision pass — one container system, one gutter clamp, proof links to benchmarks
- The record beat — every decision, on the record, staged as the live hub
- Ecosystem strip restored at the hero's close
- The loop gets its depth back — pain-killer plus three capabilities per station
- Pain beat made legible — every label owned by its strand
- Living close — verdict arrives, toggles choreograph, proof compacts
- The three set-pieces — drift fray, live vignettes, the cycle ring
- Hero v2 — the orient moment replaces the full board
- Proof, tightened pricing, the imperative close, and the 7-beat mount
- Visual-led middle beats — pillars, loop, strategy, control
- Word-led hero and pain beats from the locked story
- Governance beat — decision trail, tracked and revisable
- Revert(landing): scrap hero experiments, restore original hero
- Replace hero AmbientCard with self-playing Plan→Build→Review→Release loop
- Hero rebuild 3 — self-playing AmbientCard, no chat, stripped fold
- Make the hero board a living chat->board demo + drift purge
- Surface /admin/burn from the admin landing — it was an orphan (no in-app link)
- Rebuild getpapi.ai landing — 11 bands to 6 real-surface beats
- Live $/hr burn + est-cost-today with honest provenance labels on admin/burn