diff --git a/README.md b/README.md
index 1f371c33..dd690e47 100644
--- a/README.md
+++ b/README.md
@@ -22,12 +22,21 @@ An operating system for AI agents. Not a chatbot wrapper. Not a prompt chain. A
## Current State: Beta
-**It works.** The pieces are all in place and the system runs well in a single project. We're past prototyping — 15 branches are operational, tested, and communicating.
+**It works.** 15 branches are operational, tested, and communicating. We're past prototyping and into hardening — building the infrastructure that makes the system reliable at scale.
+
+**Recently completed:**
+
+- **Credential model** — UUID-based registry matching is live. Every project gets a unique registry ID, every citizen's passport carries it. `aipass init` creates a new project in any directory with its own credentials. Agents always know which project they belong to, even with multiple AIPass projects on the same machine.
+- **Stderr routing** — system-wide migration across 10 branches (48 files). CLI owns the display layer (`error()`, `warning()`, `fatal()` all route to stderr). Seedgo enforces it with an automated checker.
+- **Dashboard pipeline** — Prax now owns the dashboard end-to-end. Per-branch `STATUS.local.md` files sync to a central `STATUS.md` via `drone @prax status sync`. DevPulse section removed — it's a coordinator, not a service.
+- **CLI init** — `aipass init` migrated from prototype to CLI branch. Creates registry, passport, `.trinity/`, hooks — everything needed to bootstrap a new project. 99% seedgo compliance.
+- **Drone test suite** — 188 tests across 5 files. Interactive mode for human-facing commands (backup snapshot, versioned). Credential verification with dedicated error hierarchy.
+- **System governance** — git workflow, commit signing (`Co-Authored-By: @branch`), DPLAN/FPLAN documentation, and "How to Work" guidelines all codified in the global prompt.
**What we're solving now:**
-- **Multi-project isolation** — `aipass init` should work in any directory, creating its own registry and credentials. Right now the system assumes one project. We're adding a credential model (UUID-based registry matching) so agents always know which project they belong to, even if multiple AIPass projects exist on the same machine.
-- **System-wide compliance** — as we make large-scale changes (stderr routing, import patterns, error handling), seedgo audits ensure nothing drifts. We're refining the checkers to eliminate false positives and catch real issues.
+- **Lint cleanup** — 474 ruff violations remain (mostly unused imports from unwired modules). Blocked until seedgo audit coverage is higher — we can't confidently remove imports until we know what's actually used.
+- **Dashboard CLI routing** — the Python API works but `drone @prax dashboard refresh --all` fails because argparse eats the flags before the module sees them. Known bug, fix pending.
- **Cross-platform reliability** — Linux and Windows tested. macOS is structurally supported but needs a dedicated testing pass. All paths use `pathlib`, no hardcoded paths, secrets stored at `~/.secrets/aipass/`.
- **Agent agnosticism** — currently focused on [Claude Code](https://docs.anthropic.com/en/docs/claude-code) (hooks for auto-diagnostics, prompt injection, session recovery). But AIPass is designed to not depend on any single provider. `agents.md` and `gemini.md` can bootstrap the system for Codex and Gemini — you lose hooks but keep the core. The plan is truly agnostic: any agent, anywhere, persistent memory, no vendor lock-in.
@@ -67,6 +76,8 @@ Then just talk to it. Ask what the system is, what's been built, what branches e
Once devpulse confirms the core systems are working (email, drone routing, flow plans), you can start exploring individual branches directly with `cd src/aipass/{branch} && claude`.
+> **Want a fast overview?** Every branch has its own `README.md` with architecture details, commands, integration points, and known issues. Have your agent read all 15 READMEs (`src/aipass/*/README.md`) and you'll have a solid understanding of the whole system in minutes. You can also run `drone @branch --help` on any branch to see its available commands and usage.
+
### What Each Branch Does
Every branch is a citizen — an expert in its domain with its own memories and identity.
diff --git a/STATUS.md b/STATUS.md
index 28aa196c..6013d635 100644
--- a/STATUS.md
+++ b/STATUS.md
@@ -2,7 +2,7 @@
> Auto-generated by `drone @prax status sync`. Do not edit manually.
-**Last sync:** 2026-03-10 13:08
+**Last sync:** 2026-03-14 23:55
**Summary:** 14 operational | 1 in-progress | 0 not started
---
@@ -52,24 +52,31 @@
-@backup — Operational (2026-03-10)
+@backup — Operational (2026-03-14)
# @backup
> Multi-mode backup — snapshot, versioned, Google Drive
**State:** Operational
-**Last update:** 2026-03-10
+**Last update:** 2026-03-14
## Milestones
-- Snapshot and versioned backup modes
-- CLI imports fixed
+- Snapshot and versioned backup modes working
+- Rich CLI output with drone interactive mode
+- Ignore patterns extracted to editable JSON (FPLAN-0037)
+- Directory whitelist + file size cap (FPLAN-0043)
+- Pattern audit scan tool (tests/test_pattern_scan.py)
## Current Work
--
+- PR #44 open: stderr routing, error fixes, ignore patterns split
+- FPLAN-0043 built, needs commit + push
+- DPLAN-0035 stays open for ongoing backup operational work
## Known Issues
-- Missing config.json template in json_templates/
+- Versioned backup needs initial seed run (stale data in versioned_backup/ dir)
+- Google Drive commands parked (1 unread email from @api about auth migration)
+- Dead code: diff/ handlers unwired, integrations.py unreachable
@@ -88,7 +95,11 @@
- Shared across all branches
## Current Work
--
+- [x] FPLAN-0041: Migrated init_project.py from devpulse (2026-03-14)
+ - handler: `apps/handlers/init/bootstrap.py`
+ - module: `apps/modules/init_project.py`
+ - wired: `drone @cli aipass init [target] [name]`
+ - seedgo: 99%
## Known Issues
- None known
@@ -137,51 +148,89 @@
-@devpulse — Operational (2026-03-10)
+@devpulse — Operational (2026-03-14)
# @devpulse
> Orchestration hub — coordinates via dispatch + agents (no apps/)
**State:** Operational
-**Last update:** 2026-03-10
+**Last update:** 2026-03-14
## Milestones
-- 18 sessions of system coordination
+- 29 sessions of system coordination
+- STATUS board system (per-branch + central aggregation)
- Prompt architecture (breadcrumbs pattern)
-- dev.local.md system-wide
-- Dispatch+wake workflow
-- Full system health assessments
+- dev.local.md → STATUS.local.md consolidation
+- Dispatch+wake workflow (backup, flow, cli, prax all verified)
+- First PR review cycle — 8 PRs reviewed+merged in one session
## Current Work
-- STATUS board (this feature)
-- Flow plan lifecycle testing
+- DPLAN-004: Dashboard pipeline — prax Phase 1 merged (#45), Phase 2 merged (#47) but argparse bug still present (--all/--branch flags eaten by prax.py). Python API works, CLI routing broken.
+- DPLAN-003: credential model Stage 1 complete. Phase 2 done (aipass init CLI, PR #48 merged). Phase 3 (drone aipass help) pending.
+- Ruff CI: 474 violations remaining after config (E402 + __init__ F401 ignored). No cleanup until seedgo coverage higher. Hook already catches on edits.
## Known Issues
-- None — manager branch, no code to break
+- **prax dashboard CLI routing**: `drone @prax dashboard refresh --all` fails — argparse eats flags before module. Python API works fine.
+- **flow/DPLAN CWD default**: DPLANs always go to flow's dev_planning/ regardless of caller's CWD.
+- **api**: `models` command not routed through drone
+- **ai_mail**: `get_current_user()` returns relative `mailbox_path` — causes doubled paths in reply
+- **drone**: versioned backup exceeds 30s subprocess timeout
+- **seedgo self-violation**: stderr_routing_check.py fails its own standard
+- **ruff CI**: 474 lint violations (331 unused imports, 87 unused vars, etc). Backlog — don't auto-fix until seedgo coverage is 100%.
+- **wake.py no --model flag**: dispatched branches use CLI default model. Can't control from our side.
+
+## Todos
+- [ ] Close stale FPLANs (0017, 0021) once verified complete
+- [ ] DPLAN-003 Phase 3: `drone aipass help` module
+- [ ] Email prax about argparse bug (--all/--branch still broken despite PR #47)
+- [ ] Seedgo: single-file checklist command broken (`drone @seedgo checklist ` fails silently)
+- [ ] Ruff cleanup FPLAN (after seedgo coverage reaches 100%)
+- [ ] Add --model support to wake.py for dispatched branches
+
+## Recently Completed
+- Session 29: Merged 8 PRs (#39-48), ruff investigation (612→474), dispatch reply breadcrumb, /prep broadened (2026-03-14)
+- Session 28: Global prompt governance, DPLAN/FPLAN, Git Workflow, How-to-Work, PR #41+#42 merged (2026-03-14)
+- Prax Phase 1+2: dashboard devpulse section removed, refresh pipeline 4 bugs fixed (2026-03-14)
+- CLI init_project.py migration: FPLAN-0041 done, 99% seedgo, all tests passed (2026-03-14)
+- FPLAN-0033 Phase 3 stderr migration — 10 branches, 48 files (2026-03-14)
+- DPLAN-003 Stage 1 — credential model complete (2026-03-14)
+
+## Notepad
+> **SCRATCH SPACE — gets wiped at session start or topic change.**
+
+- Git on `feat/session-29-cleanup`. PR #49 open — needs merge.
+- Prax and CLI both wrapped up (/prep done, PRs created)
+- Inbox empty
-@drone — Operational (2026-03-10)
+@drone — Operational (2026-03-14)
# @drone
> Command router, @branch resolution, subprocess dispatch
**State:** Operational
-**Last update:** 2026-03-10
+**Last update:** 2026-03-14
## Milestones
- Core routing operational
- `drone systems` command
- @branch resolution
- `--help` for all branches
+- Interactive tuple for human-facing commands (monitor, snapshot, versioned)
+- Credential verification (RegistryMismatchError)
+- Seedgo audit: 99%
+- Test suite: 188 tests, 5 files, 3-round audit process complete
## Current Work
--
+- DPLAN-0042 test suite complete — ready to commit
## Known Issues
-- stderr kwarg crash on some error paths
+- README at 83% in seedgo audit (minor formatting standard)
+- ai_mail branch detection still broken (recurring error notifications every dispatch cycle)
+- Production bug: resolver.handle_command("resolve"/"info", ["@NONEXISTENT"]) raises unhandled BranchNotFoundError — should catch and return False