docs(roadmap): refresh post Phase 8 + Phase 12 backend merges

* Phase 9/10/11 status rows: dependencies satisfied, mark "open now" with
  pointers to step-level plans where they exist.
* Phase 12 row: GUI tab is folded into the Phase 9 lane plan (not its own).
* ASCII dependency diagram: collapse the just-landed Phase-8/Phase-12-backend
  layer; show the three open lanes (9+12-GUI, 11 TOTP, 10 first-login)
  fanning into Phase 13.
* "Parallel-safe right now" heading bumped to post-Phase-8+12-backend.
  Table swaps the now-stale Recovery and post-Phase-8 GUI rows for the
  three actually-open lanes, with file footprints + plan links.
* Sequential tail paragraph names the six Code-complete phases (1, 3, 4,
  6, 8, 12) whose deferred gates Phase 14 must clear.
* Phase 12 closeout intro names the merge commit and corrects the now-stale
  "waiting on Phase 8" wording.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
michael
2026-04-27 10:09:22 -07:00
parent 4ec69119f6
commit b624f005b2

View File

@@ -36,10 +36,10 @@
| 6 | PAM module: `pam_authforge_pending.so` (C) | 3 days | ✅ **Code complete** (2026-04-27) — `pamtester` smoke recipe in `pam/TESTING.md` | | 6 | PAM module: `pam_authforge_pending.so` (C) | 3 days | ✅ **Code complete** (2026-04-27) — `pamtester` smoke recipe in `pam/TESTING.md` |
| 7 | CLI: `authforgectl` | 4 days | ✅ **Done** (2026-04-27) — 14 subcommands | | 7 | CLI: `authforgectl` | 4 days | ✅ **Done** (2026-04-27) — 14 subcommands |
| 8 | GUI: app shell + Security Keys tab | 68 days | ✅ **Code complete** (2026-04-27) — 4 unit tests; manual smoke recipe in `gui/TESTING.md` | | 8 | GUI: app shell + Security Keys tab | 68 days | ✅ **Code complete** (2026-04-27) — 4 unit tests; manual smoke recipe in `gui/TESTING.md` |
| 9 | GUI: Policy tab + lockout-warning UX | 4 days | **Spec'd** — opens after Phase 8 | | 9 | GUI: Policy tab + lockout-warning UX | 4 days | **Spec'd** — open now (plan at [2026-04-27-phase-9-and-12-gui.md](2026-04-27-phase-9-and-12-gui.md); bundles Phase 12 GUI tab) |
| 10 | First-login flow: autostart entry + fullscreen modal | 4 days | **Spec'd**needs Phase 6 ✓ + Phase 8 ✓ | | 10 | First-login flow: autostart entry + fullscreen modal | 4 days | **Spec'd**open now (Phase 6 ✓ + Phase 8 ✓) |
| 11 | TOTP support (PAM module + GUI tab) — feature flag | 5 days | **Spec'd** — opens now (needs Phase 2 ✓ + Phase 4 ✓) | | 11 | TOTP support (PAM module + GUI tab) — feature flag | 5 days | **Spec'd** — open now (Phase 2 ✓ + Phase 4 ✓ + Phase 8 for the GUI tab) |
| 12 | Recovery flow (codes + emergency unlock) | 4 days | ✅ **Code complete** (2026-04-27) — backend + PAM landed; GUI tab queued in Phase 9 lane | | 12 | Recovery flow (codes + emergency unlock) | 4 days | ✅ **Code complete** (2026-04-27) — backend + PAM landed; GUI tab folded into the Phase 9 lane plan |
| 13 | Debian packaging finalization (postinst, debconf, purge) | 4 days | **Spec'd** — sequential tail; needs all binaries built | | 13 | Debian packaging finalization (postinst, debconf, purge) | 4 days | **Spec'd** — sequential tail; needs all binaries built |
| 14 | Launchpad PPA build setup | 2 days | **Spec'd** — sequential tail after 13; **VM smoke gate for all "Code complete" phases** | | 14 | Launchpad PPA build setup | 2 days | **Spec'd** — sequential tail after 13; **VM smoke gate for all "Code complete" phases** |
| 15 | `authforge-gnome-integration` (Users panel shortcut) | 3 days | ✅ **Done** (2026-04-27) — parallel subagent (gnome lane) | | 15 | `authforge-gnome-integration` (Users panel shortcut) | 3 days | ✅ **Done** (2026-04-27) — parallel subagent (gnome lane) |
@@ -72,16 +72,18 @@ The phase numbering is a dependency-respecting ordering, **not** a serial schedu
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
└──────┬───┘ │ │ └──────┬───┘ │ │
↓ │ │ ↓ │ │
┌───────────┐ │ │ Phase 8 ✅ Phase 12 ✅ Phase 16 ✅
Phase 8 ✅ Phase 9 Phase 12 Phase 16 ✅ GUI keys+shell recovery Ansible (parallel agent)
GUI keys GUI policy recovery Ansible (parallel agent) │ backend+PAM
(open) (open)
↓ ↓
┌──────────────┬────────────┐
│ │ │ │ │ │
└──────────┼────────────┘ Phase 9 + 12-GUI Phase 11 Phase 10
policy + recovery TOTP first-login (needs 6 ✓ + 8 ✓)
Phase 10 tabs (open) (open) (open)
first-login (needs 6 + 8) │ │
└──────────────┴────────────┘
Phase 13 Phase 13
deb finalization (needs every binary) deb finalization (needs every binary)
@@ -99,19 +101,19 @@ The phase numbering is a dependency-respecting ordering, **not** a serial schedu
v1.0 release v1.0 release
``` ```
### What's parallel-safe right now (post-Phase 4+5) ### What's parallel-safe right now (post-Phase 8 + Phase 12 backend)
Three lanes touch disjoint file trees and can land in any order: Three lanes are open and touch disjoint file trees:
| Lane | Phases | Touches | Why parallel-safe | | Lane | Phases | Touches | Why parallel-safe |
|---|---|---|---| |---|---|---|---|
| **GUI** | 9 (after 8 ✓) | `gui/src/views/policy.rs` (new), small additions to `keys_page.rs` for the policy-violation banner | Phase 8 (Keys tab) landed 2026-04-27; Phase 9 (Policy tab) reuses the same shell + ToastOverlay + Daemon client. | | **GUI policy + recovery** | 9 + 12 GUI tab | `gui/src/{app_context,policy_form,policy_page,recovery_page}.rs` (new), additive bus.rs methods, ViewStack tabs in `main.rs` | Both views consume the typed D-Bus contract that landed with Phases 8 + 12 backend. AppContext refactor was foreseen by Phase 8's Task 7. Plan: [2026-04-27-phase-9-and-12-gui.md](2026-04-27-phase-9-and-12-gui.md). |
| **Recovery** | 12 | `daemon/src/recovery.rs`, `pam/pam_authforge_pending.c` (recovery hook), small `dbus.rs` `GenerateRecoveryCode` body | The PAM module already has a `recovery_code_matches` stub returning 0; Phase 12 makes it real. Daemon side is brand-new file. | | **TOTP** | 11 | `daemon/src/totp/` (new), `gui/src/totp_page.rs` (new), `debian/control` Recommends | Feature-flagged at build time. Phase 8 ✓ unblocked the GUI tab; daemon-side TOTP module is brand-new. Step-level plan still to be written. |
| **TOTP** | 11 | `daemon/src/totp/`, `gui/src/views/totp.rs`, `debian/control` Recommends | Feature-flagged at build time. Phase 8unblocked the GUI tab; both daemon + GUI surfaces open now. | | **First-login** | 10 | `gui/src/firstrun.rs` (new), `gui/data/authforge-firstrun.desktop`, `--first-run` CLI flag in `gui/src/main.rs` | Both Phase 6(PAM pending blocker) and Phase 8 ✓ (GUI shell) are in. Step-level plan still to be written. |
### Sequential tail (no parallelism wins) ### Sequential tail (no parallelism wins)
Phase 10 (first-login) needs both Phase 6 ✓ and Phase 8 ✓ — now fully unblocked. Phase 13 (deb finalization) needs every binary built. Phase 14 (PPA) chains off 13 — and is the **VM smoke gate** for everything currently in "Code complete" status. Phase 17 (integration tests) chains off 14. Phase 18 (user docs) and R (release) follow. Phase 13 (deb finalization) needs every binary built — opens once Phases 9, 10, 11 land. Phase 14 (PPA) chains off 13 — and is the **VM smoke gate** for everything currently in "Code complete" status (1, 3, 4, 6, 8, 12 — six phases with deferred real-hardware/root-write/libargon2-dev gates). Phase 17 (integration tests) chains off 14. Phase 18 (user docs) and R (release) follow.
### Lessons learned from this session's parallelism ### Lessons learned from this session's parallelism
@@ -254,7 +256,7 @@ Single-lane execution in a worktree at `.claude/worktrees/phase-8-gui-keys`. Pla
### Phase 12 backend closeout notes (2026-04-27) ### Phase 12 backend closeout notes (2026-04-27)
Backend + PAM landed via the plan at [2026-04-27-phase-12-recovery-backend.md](2026-04-27-phase-12-recovery-backend.md). 9 commits on `feature/phase-12-recovery-backend`. GUI tab is queued in the Phase 9 lane (waiting on Phase 8 ✓). Backend + PAM landed via the plan at [2026-04-27-phase-12-recovery-backend.md](2026-04-27-phase-12-recovery-backend.md). 9 commits on `feature/phase-12-recovery-backend`, merged to `main` as `4ec6911`. GUI tab is folded into the Phase 9 lane plan ([2026-04-27-phase-9-and-12-gui.md](2026-04-27-phase-9-and-12-gui.md)) — that lane is now open since Phase 8 ✓.
**Done:** **Done:**
- `daemon/src/storage/safe_user.rs` — extracted shared username path-segment sanitizer; `PendingStore` migrated to it. 2 new unit tests. - `daemon/src/storage/safe_user.rs` — extracted shared username path-segment sanitizer; `PendingStore` migrated to it. 2 new unit tests.