One shared Task-vocabulary normalizer module (priority/complexity/effort)
Move shared helpers out of tools/ to restore the dependency direction
Fail closed when cycle scope is unavailable
Scope health reads to selected cycle
Normalize worktree dependency marker paths
Project dashboard history reads
Remove redundant complete inventory counts
v0.402.6
Hosted headerless MCP calls now honor exactly one access-validated persisted project default before returning an ambiguity prompt.
Missing or duplicate hosted defaults remain fail-closed, with regression coverage for cross-project isolation.
v0.402.5
Hosted project defaults now persist only after access validation, preserving fail-closed cross-project isolation.
Hosted project switching now gives truthful stateless reconnect guidance and regression coverage.
v0.402.4
Make the self-hosted edge deploy backup loop safe when the remote shared-module directory is newly created and empty.
v0.402.3
Self-hosted data-proxy deployments now stage the canonical shared edge modules into the VPS function mount, preventing merged edge code from booting with unresolved repository imports.
Edge deploy backups and rollback instructions now cover both the function files and their shared-module boundary.
v0.402.2
Hosted board reads now honor compact projections and request the exact count once per paginated query; connect diagnostics are asynchronous with bounded retention.
Cycle metrics and project timeline reads now use project-scoped SQL summaries instead of draining full task, report, cycle, and strategy histories.
Added regression coverage for hosted column parity, diagnostic retention, and summary RPC response contracts.
Kill the silent default-project fallback for multi-project accounts — always show the project picker (reverses RECORD-ONLY)
"Reset connection" is mislabeled and returns a bare key: relabel to "reset all agent connections" + return the full per-project connector snippet
Hosted connection doctor: a remote-user equivalent of npx @papi-ai/server doctor — dashboard surface showing projects, which one the active credential resolves to, and recent connect failures
Add Pi coding agent (pi.dev / @earendil-works) as a first-class connect target: connect-UI tab, install-snippets builder, and llms.txt entry
Orient: emit local-divergence check instruction on hosted transport instead of no-op
MCP initialize accepts a revoked bearer; only the first tools/call 401s — client shows "connected" then every action fails
v0.400.0-codex-cycle-10-record-committed
Search and filter across all views
Alerts — blocked tasks, strategy review due, stale in-progress items
Multi-project support — project switcher and configurable .papi/ directory
Master dashboard as default landing page
Multi-project UI view with papi-projects.json
Migrate inline styles to Tailwind classes
Parallel task mutation drops task IDs and Cycle 1 member dashboard remains empty
Fast-path to record a cycle whose code is already written and committed — bulk create cycle + handoffs + build reports + mark shipped in one flow
v0.399.0
Add the canonical strategy decision-history route
Send customer receipts for paid Stripe checkouts
Include project owners in contributor lists
Restore historical hub member metrics
Make the WSL full gate safe for clean checkouts
Harmonize incremental TypeScript checks
Consolidate incremental TypeScript checks
Run targeted checks and qualify the full suite twice daily
Make the pull-request gate sub-minute
Avoid duplicate workspace builds
Keep Santa Fe dependency setup warm
Make hosted progress steps idempotent
v0.397.0
In-Cycle tasks parked in a non-live cycle no longer vanish from the hub and team view — a write guard stops the strand and the read surfaces them
Phantom active cycle from a half-finished plan apply no longer traps you — plan absorbs it and re-plans over it, and orient tells you how
board_view and orient cycle counts now show the whole cycle's contents, not just your slice, and warn when the two membership records disagree
The bound project is now unmissable on every orient, and a write on a session that can't be cross-checked says so
On a near-empty board, the AI is told to route a work-dump through idea → plan instead of hand-writing code
The install runbook forbids handing over a config with a placeholder still in it — no more silent "connected" that isn't
Parallel/batch board_deprioritise calls no longer silently drop tasks — a batch request is rejected loudly instead of half-applying
New plan task_ids=[...] — take a chosen set of backlog tasks straight into a cycle with build handoffs, atomically
plan only hands a Claude-Code Task() prompt to Claude Code; every other client gets an inline path and a stated fallback
A contributor's first cycle no longer pulls the whole project history into the planner context
v0.396.0
Site-wide soft 404: auth proxy redirects every unknown path to /login instead of returning HTTP 404