15 KiB
51 — Post-audit product roadmap
Purpose and governing principle
This roadmap governs work after the 2026-07-29 platform audit. It extends the completed MVP without weakening package, composition, authorization, integrity or evidence contracts.
The immediate priority is no longer feature expansion. DevRunbook must first become obvious for a user who thinks in terms of project + task. Codex execution, team governance and additional forge adapters remain blocked until the simple flow and release evidence pass their gates.
Phases are outcome-gated, not date-gated. A later phase may be explored for risk reduction, but cannot be declared complete before all earlier gates pass.
North-star outcome and measures
A first-time, non-technical user can find a project, describe a task in ordinary Dutch or English, understand what will happen and generate a useful safe task without seeing internal keys, schema types, package terms or generic composer remediation. The default path normally asks only for:
- a project;
- a task.
Expert controls remain available through progressive disclosure. Simplification may supply governed defaults and friendlier presentation, but cannot bypass server validation, policy precedence or deterministic rendering.
The release dashboard must track simple-flow completion and duration, expert-control usage, blocking findings, project-search success, repository freshness, executed/skipped test counts, accessibility violations, failed jobs, backup evidence and storage headroom.
Initial release targets:
- at least 90% of representative simple-flow fixtures generate from project + task alone;
- zero raw input keys, schema types or generic fallback text in simple mode;
- usable project selection with 500 repositories;
- zero required test suites reporting success when no tests executed;
- zero serious/critical accessibility findings in critical flows;
- exactly one primary
mainlandmark per page; - primary mobile controls have at least 44 by 44 CSS-pixel target areas;
- every repository count has a named scope and reconciles with source status.
Phase 9 — Release-gate stabilization
Status: Complete Outcome: local runtime and test evidence are trustworthy before product behavior changes.
Scope:
- reproduce and profile both
@devrunbook/contenttimeouts on Node.js 24; - remove repeated fixture/catalog work or use a test-owned immutable fixture cache where isolation remains proven;
- lengthen only measured, bounded test timeouts;
- provision or require disposable PostgreSQL for
test:integrationand fail when zero tests execute; - report executed, skipped and failed integration counts separately;
- add one repository runtime marker (
.nvmrc,.node-versionor Volta) and fail preflight on the wrong Node major; - align local, CI and container Node/pnpm contracts;
- move tooling out of production dependencies where applicable and upgrade,
override or formally govern the transitive
esbuildadvisory; - reconcile
CURRENT_STATE.mdwith the existing Milestone 8 evidence.
Exit gate:
- format, lint, typecheck, unit, security and build pass on Node 24;
- formerly timing-out tests pass repeatedly without unexplained flakiness;
- all required PostgreSQL integration tests execute and pass;
- unavailable PostgreSQL produces a clear non-zero gate;
- pack validation and all 28 golden renders remain unchanged;
- remaining moderate advisories have reachability, owner and review date.
Audit findings: 13, 14, 15, 16 and 17.
Phase 10 — Two-choice simple task flow
Status: Complete
Depends on: Phase 9
Outcome: project + task is sufficient for normal beginner journeys.
Scope:
- introduce a presentation-only Simple mode, distinct from governed work mode and autonomy;
- make
targetFlowsoptional for usability work and supply a task-specific governed default such as the platform's primary user flows; - map typed inputs to ordinary-language questions and examples;
- accept friendly chips, sentences or multiline lists and normalize them to the existing server contract;
- never display keys such as
targetFlowsor types such asstring-list; - ask follow-ups only when safety or usefulness cannot be resolved from project evidence or a declared safe default;
- replace generic lint/compatibility fallback text with task-aware recovery;
- review what will be inspected/changed, what is protected, how success is checked and what the user does next;
- keep the full composer behind “Adjust details” and record privacy-safe funnel metrics without task text.
Exit gate:
- usability, bugfix, feature, documentation and inspection fixtures complete from project + task whenever their safety contract permits;
- the audited
Improve usabilityflow needs no manualtargetFlowsentry and shows no generic fallback; - every default is visible in review with provenance;
- unsafe or ambiguous tasks still stop with a human-readable reason;
- Simple and Expert produce identical bytes for identical normalized inputs;
- desktop and 390-pixel browser gates cover keyboard and all recovery states.
Audit finding: 1 and the audit's central conclusion.
Phase 11 — Scalable project selection and real identity
Status: Complete
Depends on: Phase 10
Outcome: users quickly find the right project and recognize their account.
Scope:
- add project search, recent projects, favorites and last-used selection;
- show at most five initial suggestions behind an “All projects” expansion;
- rank by recent Gitea activity with deterministic fallback ordering;
- preserve selection state across refresh and return;
- expose named states: found, imported, analyzed, stale and unavailable;
- safely import on selection when a discovered project lacks a local profile;
- show authenticated name/email, derived initials and role separately;
- link account, password and session management from the account menu;
- enforce workspace authorization on recents, favorites and imports.
Exit gate:
- keyboard/responsive tests pass with 0, 5, 31 and 500 repositories;
- recent, favorite and search ordering is deterministic;
- API and UI counts reconcile with an explanation for every difference;
- verified account data never falls back to generic identity;
- cross-workspace selection, favorite and import attempts are denied.
Audit findings: 2, 6 and 7.
Phase 12 — Plain-language navigation and localization
Status: Complete
Depends on: all Now phases
Outcome: the default interface needs no development or AI vocabulary.
Scope:
- add persistent Simple and Expert presentation modes without duplicating domain behavior;
- default primary navigation to Start, My tasks and Projects;
- group Library, Collections and Prompt Lab under an advanced “More” area;
- place operations and integration administration under role-gated Management;
- maintain a governed copy dictionary mapping technical concepts to plain labels while preserving exact terms in Technical details;
- add Dutch and English, browser-language detection and account preference;
- translate onboarding, simple composition and recovery errors first;
- show local dates/times while retaining UTC contracts/storage;
- test missing translations and draft preservation across mode/language changes.
Exit gate:
- beginner testing completes the north-star journey without explaining playbooks, packages, digests, autonomy or governance;
- users see only role-appropriate primary navigation;
- critical flows pass in Dutch and English, including validation errors;
- Expert retains provenance, digest, policy and quality detail;
- language or mode changes do not lose the active draft.
Audit findings: 3, 4, 8 and the user-facing portion of 22.
Phase 13 — Continuous repository freshness
Status: Complete
Depends on: Phase 11
Outcome: project context stays current with little operator work.
Scope:
- schedule Gitea discovery/snapshot jobs through the PostgreSQL worker;
- add “Refresh all” and per-project refresh with idempotent progress;
- detect default-branch and allowlisted-evidence changes before full analysis;
- import an eligible missing profile when selected;
- show friendly freshness with exact time in Technical details;
- warn only when staleness can affect the selected task;
- preserve last-known-good snapshots on failure;
- threat-model optional signed, replay-resistant, rate-limited Gitea webhooks;
- retain read-only forge access.
Exit gate:
- scheduled jobs survive restart, avoid duplicates and back off safely;
- meaningful evidence changes create reviewable snapshots while unchanged projects do not churn profiles;
- freshness and counts reconcile across Start, Projects and Settings;
- outage, permission, rate-limit and stale-context states are actionable;
- any webhook passes signature, replay, flood and workspace-isolation tests.
Audit findings: 5 and 6.
Phase 14 — Accessibility and interaction regression
Status: Complete (2026-07-30)
Depends on: Phases 10–12
Outcome: the redesigned app is robust with keyboard, touch and assistive
technology.
Scope:
- keep the app shell as the only page-level
main; - use labelled sections/articles below it;
- keep one interactive control per input and remove hidden expert controls from the accessibility tree;
- associate each label, description and error directly with its control;
- make full project/task cards operable with visible focus;
- enforce 44 by 44 target areas for primary mobile actions;
- add axe coverage for Start, composer, Projects, My tasks, account and Management;
- run screen-reader smoke, zoom/reflow, contrast, reduced-motion and touch checks.
Exit gate:
- critical pages have one
mainand no duplicate controls; - no serious/critical automated accessibility violations;
- critical actions are keyboard-complete with correctly announced status;
- 200% zoom, 390 pixels and both themes have no blocking clipping;
- exceptions name owner, user impact and review date.
Audit findings: 9, 10, 11 and regression protection for 12.
Phase 15 — Human operations and deployment hardening
Status: Complete (2026-07-30)
Depends on: Phase 9; may run alongside 13–14 with separate file ownership
Outcome: operators see health and recovery needs; ordinary users do not see
raw administration detail.
Scope:
- summarize operational outcomes and prominent failures; move UUIDs, attempts and raw UTC to Technical details;
- add safe retry and plain-language problem actions;
- surface app/schema version, last observed successful backup, database/artifact size, disk headroom, last Gitea sync and failed jobs;
- distinguish observed backup evidence from external success the app cannot prove;
- verify HTTPS reverse-proxy, trusted-proxy and secure-cookie behavior and document trusted-LAN-only HTTP;
- suppress unnecessary framework disclosure where compatible;
- enforce/document capability drop, PID limits and recommended memory limits;
- assess read-only all-in-one root filesystem with explicit writable mounts or
tmpfs, and minimize the root supervisor boundary; - add storage-pressure guidance and actionable degraded states.
Exit gate:
- only authorized roles reach management operations;
- the dashboard clearly answers whether app, worker, database, storage, backup evidence or Gitea needs attention;
- container limits and writable paths are verified on Unraid/Compose;
- HTTPS produces secure cookies and documented headers;
- backup-age and disk-pressure warnings never claim unobserved success.
Audit findings: 18–23.
Phase 16 — Post-audit release qualification
Status: Complete (2026-07-30; release tag awaits operator approval)
Depends on: Phases 9–15
Outcome: a release candidate proves technical correctness and beginner
usability.
Scope and gate:
- run the complete quality gate on the supported runtime;
- execute all PostgreSQL integration tests with non-zero assertions;
- run Playwright and accessibility suites in both languages and modes;
- repeat clean-room install, restart, upgrade, backup and restore;
- re-audit the project + task journey with a non-technical fixture;
- reconcile every audit finding and acceptance criterion to evidence, limitation or accepted exception;
- update
CURRENT_STATE.md, machine-readable evidence,FINAL_HANDOFF.md, release notes and operator docs; - require the targets in this document, no unexplained skipped critical tests, no unresolved critical/high product security finding and no blocking beginner-flow/accessibility/operations defect;
- create a release tag only after operator approval.
Strategic expansion after release qualification
Phase 17 — Codex-native exports
Governed AGENTS.md builder, Codex Skill/plugin-compatible export, optional
read-only MCP search/fetch/generate and supported deep-link/handoff metadata.
Start only after current official Codex contracts are verified. No direct
execution is introduced.
Phase 18 — Controlled local execution bridge
Local companion/CLI, worktrees, exact prompt handoff, explicit approvals, streaming state, cancel/retry/cleanup and signed result evidence. Requires a new threat model, ADR and independent isolation/credential/security review. The web application must not gain arbitrary remote execution.
Phase 19 — Teams and governance
Shared workspaces, membership, review/approval, workspace policy, shared profiles, private registries, OIDC/SSO, retention and signed internal releases. Requires a proven authorization matrix for every shared resource.
Phase 20 — Multi-forge and ecosystem
GitHub, GitLab and Forgejo adapters, normalized capability/freshness behavior, a non-executable connector boundary, curated registry imports, signatures and trust roots. Every adapter must preserve SSRF, redaction, least-permission, outage and last-known-good guarantees.
Phase 21 — Isolated evaluation runner
Disposable fixture environments, controlled Codex orchestration, protected-path/diff checks, command evidence, regression dashboards, operator review and cost/duration reporting. Requires Phase 18 plus an independently verified isolation, budget and teardown design.
Explicit deferrals
- vector search or a vector database;
- public ratings marketplace;
- unreviewed AI-authored package publication;
- Kubernetes as a required target;
- arbitrary server-side plugin or repository command execution;
- direct forge writes, automatic merges or write-enabled web containers;
- billing/commercial multi-tenancy and native mobile applications.
Audit traceability
| Findings | Owning phase | Primary evidence |
|---|---|---|
| 1 | 10 | Two-choice fixtures and copy assertions |
| 2, 6, 7 | 11 | 500-project, count and identity tests |
| 3, 4, 8 | 12 | Mode, role and bilingual browser matrix |
| 5, 6 | 13 | Scheduled refresh, freshness and outage tests |
| 9–12 | 14 | Landmark, label, target-size, axe and screen-reader checks |
| 13–17 | 9 | Node 24 and non-zero test/dependency evidence |
| 18–23 | 15 | Security, container, HTTPS and operations evidence |
| All | 16 | Re-audit and complete release evidence |
Delivery discipline
Every phase follows CODEX_EXECUTION_PROTOCOL.md, updates CURRENT_STATE.md and
links audit/requirement IDs to evidence. User-facing phases require browser
verification. Schema, package, catalog, API, fixture or composer changes require
pack validation and the reference-composer check before and after. Golden bytes
change only through an explicit compatibility decision and source regeneration.