Files
DevRunbook release export cfd2804e27
Managed validation / full (push) Successful in 3m18s
Publish DevRunbook source
2026-09-03 04:09:17 +02:00

56 KiB
Raw Permalink Blame History

Current state

Current milestone

Milestone 13 — continuous repository freshness: complete

Status: MILESTONE_13_COMPLETE

Next: execute Milestone 14 accessibility and interaction regression under docs/51-post-audit-product-roadmap.md.

Completed scope

  • Added fail-closed Node.js 24/pnpm 10.33 runtime preflight, explicit runtime marker files and CI enforcement.

  • Made the PostgreSQL integration command fail when the database is missing, zero tests execute or any required test is skipped, with explicit executed, skipped, failed and duration counts.

  • Stabilized exhaustive content validation under measured Windows filesystem load and proved the 21-test content suite in three consecutive runs.

  • Corrected Windows migration URL conversion and removed host/database clock coupling from immediate PostgreSQL job availability; the repaired three-test lease suite passed three consecutive real PostgreSQL runs.

  • Removed the transitive moderate esbuild advisory through a patched override; the production dependency audit now reports zero advisories.

  • Implemented the first Phase 10/11 slices: governed usability defaults, human-readable simple-mode errors, five-item project suggestions, 500-item search, recents/favorites presentation, real authenticated identity and removal of nested composer/start main landmarks.

  • Made the ordinary-language task statement part of the two-choice Start flow and deterministically normalized bugfix, feature, usability and inspection requests into existing governed inputs; added the missing documentation journey without changing the server composition contract.

  • Added a simple review of every resolved task value with human-readable labels and explicit task-detail versus playbook-default provenance.

  • Added workspace-authorized, same-origin simple-flow funnel events backed by append-only audit evidence. Metrics retain only an event, playbook slug and coarse duration bucket; task text and project identity are never submitted.

  • Added server-owned, per-user and per-workspace project favorites and last-used history with an additive migration, deterministic ordering, optimistic UI rollback and fail-closed cross-workspace repository matching.

  • Linked the real account identity menu to authenticated identity and password/session management pages; active sessions can be inspected and non-current owned sessions revoked through the existing protected API.

  • Replaced the PostgreSQL readiness probe with a real query against the target database, preventing Compose migration from starting during PostgreSQL's temporary bootstrap server window.

  • Started Phase 12 with persistent same-origin Simple/Expert and Dutch/English presentation preferences, browser-language detection, a matching document language and owner-only Management navigation in Simple mode.

  • Reduced Simple primary navigation to Start, My tasks, Projects and More while retaining the established technical navigation unchanged in Expert mode.

  • Completed Phase 12 with governed Dutch/English copy for Start and the simple composer, translated task search, localized document language and dates, and persistent draft-safe language switching.

  • Added working My tasks, More and owner-only Management destinations so every Simple primary-navigation item resolves to a useful, role-appropriate page.

  • Added an application icon and eliminated the final browser-console resource error from authenticated desktop and mobile flows.

  • Started Phase 13 by exposing same-origin, workspace-authorized per-project and Refresh-all endpoints over the existing idempotent PostgreSQL snapshot jobs; refreshes remain bounded to 500 imported projects and read-only forge access.

  • Added actionable project freshness labels, exact snapshot timestamps and optimistic refresh progress without replacing last-known-good profile data.

  • Completed Phase 13 with a PostgreSQL-backed periodic repository planner. It selects only due, enabled, imported Gitea repositories, atomically creates the queue job and collecting snapshot, excludes queued/running duplicates and reuses a stable time-bucket idempotency key across worker restarts.

  • Added configurable refresh cadence and stale thresholds. Planner failure is contained independently of job polling; snapshot jobs retain leased retry, backoff and stale-lease recovery.

  • Added a bounded preflight over the default-branch commit, forge capabilities, tags, releases, governance and workflow availability. Unchanged repositories stop before tree/file reads and never create a profile revision; meaningful changes continue through bounded full analysis.

  • Added task-dependent stale-context guidance to Start with an exact collection time and a direct, actionable Projects refresh path.

  • Documented the disabled Gitea webhook threat model and its mandatory HMAC, timestamp, replay, flood, body, event and workspace-isolation gates. No webhook endpoint or forge write scope was added.

  • Established the pnpm/Turborepo modular-monolith contract, pinned Node.js 24, PostgreSQL 17, application dependencies, strict TypeScript, formatting, lint, Vitest, Playwright, production builds, CI, and typed configuration.

  • Validated all 28 P0 packages, six normative examples, 72 roadmap catalog entries, nine schemas, 28 golden prompts, and 68 release-evidence fields.

  • Implemented the production TypeScript composer with byte-identical output for all 28 supplied golden fixtures.

  • Implemented the 26-table Drizzle schema, two ordered migrations, immutable generated runs, persistent artifacts, setup locking, job idempotency, leases, fencing, retry, and stale-lease recovery.

  • Implemented safe built-in package ingestion and PostgreSQL-backed searchable projections with digest conflict protection.

  • Completed structured path/code/message/remediation validation, aggregated multi-package failures, seed-catalog schema validation and exact 72-entry to 28-P0 runtime cross-checking.

  • Added the application-owned built-in import contract, advisory-locked PostgreSQL importer, immutable published-version trigger, correct Semantic Version ordering and lifecycle-aware current-version selection.

  • Added typed search/filter, full detail/history and exact-version catalog queries plus their list, detail and exact-version HTTP boundaries.

  • Made worker startup validate and synchronize all built-ins before polling, including both production and development container content layouts.

  • Implemented Better Auth behind the application-owned authentication boundary, first-run owner/workspace creation, local sign-in/logout, session limits, versioned password hashing and upgrade, and single-use operator reset tokens.

  • Implemented workspace-scoped viewer/editor/owner authorization without an instance-administrator bypass.

  • Implemented the first vertical slice through live production boundaries: first-run setup, 28 imports, API listing, package detail UI, deterministic composition, immutable run storage, artifact storage, and restart recovery.

  • Implemented hardened Docker/Compose web, worker, migrate, and PostgreSQL roles. Web and worker run non-root with read-only roots and no arbitrary code execution.

  • Implemented explicit liveness/readiness, database-degraded readiness, a persistent safe worker loop, and an operator persistence validator.

  • Delivered the authenticated Library Explorer with URL-owned search, facets, sorting, card/dense views, persisted favorites and match reasons.

  • Delivered responsive detail/version views, governed lifecycle handling, an exact version/digest composer handoff, light/dark/system themes, mobile navigation and a keyboard command palette.

  • Aligned playbook and favorite API error/status/query contracts with OpenAPI, including same-origin failures and UUID request IDs.

  • Established the Milestone 3 governed RepositoryProfile boundary with strict JSON/YAML parsing, semantic path/command checks, deterministic export and exact digest parity with the published example.

  • Added authorized repository use cases, strong profile ETags, atomic manual creation, workspace-scoped immutable revision persistence, semantic no-op handling and generated-run snapshot-independence coverage.

  • Added an additive repository-list index plus database-enforced positive revision and lowercase SHA-256 invariants without adding a mutable current revision pointer.

  • Delivered the authenticated repository overview, governed profile detail, manual/import creation and immutable revision editor with explicit viewer, degraded, validation and conflict-recovery states.

  • Exposed strict workspace-authorized repository HTTP routes with same-origin mutation checks, strong ETags, bounded JSON/YAML imports and deterministic JSON/YAML exports that re-import successfully.

  • Carried immutable repository revision, digest and protected-path context into the composer handoff without executing repository commands.

  • Added the governed composition resolver with typed input normalization, three-valued condition evaluation, fail-closed policy outcomes, repository compatibility, protected scope resolution, prompt lint, block provenance and deterministic preview digests while retaining all 28 reference-v1 bytes.

  • Added server-authoritative preview and immutable generation boundaries that load published playbook versions and exact repository revisions, compute snapshots/lint/prompt bytes server-side and reject substituted store data.

  • Added workspace-authorized composition drafts with strong ETags, monotonic revisions, atomic compare-and-swap updates and secure draft HTTP routes.

  • Added persisted-run JSON/digest integrity checks, mandatory idempotency keys and an atomic append-only audit event on first immutable generation.

  • Delivered the seven-step responsive guided composer with exact-version and historical-profile pinning, live deterministic preview, block outline, provenance, linked lint findings and explicit degraded/viewer states.

  • Linked guided immutable generation back to its authorized persisted draft, while preserving the generic direct-composition API path.

  • Proved Milestone 4 in the production Unraid stack; exact evidence is recorded in docs/47-milestone-four-guided-composer.md.

  • Added exact prompt copy, deterministic Markdown and Run Pack ZIP exports, review-only AGENTS recommendations, authorized artifact history/download and bounded historical Run Pack verification without extraction.

  • Added strict archive, manifest, inventory, digest, TASK-envelope, filename, retention, idempotency and workspace-authorization enforcement with hostile traversal, symlink, duplicate, overlap, CRC and size-limit coverage.

  • Proved Milestone 5 in the production Unraid stack, including export/import, artifact persistence after container recreation and five responsive widths; exact evidence is recorded in docs/48-milestone-five-export-run-packs.md.

  • Implemented workspace-authorized Gitea connection, capability, discovery, encrypted-token, rotation, deletion and repository-import boundaries with no write-capable forge methods.

  • Added DNS/IP/redirect SSRF enforcement, response and file limits, safe error projection, capability-level degradation and redacted logging.

  • Added bounded deterministic repository evidence collection, immutable evidence digests, findings, create-initial-only profile generation and a durable ID-only worker job handoff.

  • Delivered imported-repository status and last-known-good snapshot continuity in the integration UI, including after remote outage and integration deletion.

  • Proved Milestone 6 against an isolated live Gitea 1.27.0 fixture and the production Unraid stack; exact evidence is recorded in docs/49-milestone-six-gitea-repository-intelligence.md.

  • Delivered bounded private package import/export, complete persisted draft inventories, strong ETags, atomic revision updates and field-specific schema/semantic diagnostics without extraction or execution.

  • Delivered the responsive Prompt Lab with deterministic example reproduction, lint/evidence display, exact-digest editorial review, governed publication, immutable published versions and coherent next-version cloning.

  • Persisted evaluation cases/results with exact playbook, fixture, environment and rendered-prompt digests while keeping editorial review separate from objective evidence and transactionally rechecking publication policy.

  • Proved Milestone 7 in production through import, invalid-edit recovery, review, publication, versioning, composer reproduction, restart persistence and a five-width browser matrix; exact evidence is recorded in docs/50-milestone-seven-prompt-lab.md.

Changed modules

  • Root workspace commands, CI, container definitions, environment contract, and validation scripts.
  • apps/web: health, catalog, package detail, setup, status, login, logout, and password-reset boundaries and accessible pages.
  • apps/worker: standalone ESM-safe worker, safe job dispatch, and operator password reset.
  • packages/application, artifacts, composer, config, content, db, domain, integrations, observability, testing, and ui.
  • Deployment and host evidence in docs/42-implemented-deployment.md and docs/43-milestone-zero-host-validation.md.
  • Milestone 1 package-ingestion and live API evidence in docs/44-milestone-one-package-ingestion.md.
  • Milestone 2 library, detail, API and browser evidence in docs/45-milestone-two-library-explorer.md.
  • Milestone 3 repository profile, PostgreSQL, API and browser evidence in docs/46-milestone-three-repository-profiles.md.
  • Milestone 4 composer and production evidence in docs/47-milestone-four-guided-composer.md.
  • Milestone 5 artifact, archive, PostgreSQL, security and browser evidence in docs/48-milestone-five-export-run-packs.md.
  • Milestone 6 Gitea adapter, snapshot worker, persistence, outage and browser evidence in docs/49-milestone-six-gitea-repository-intelligence.md.
  • Milestone 7 private package, quality evidence, publication, migration and browser evidence in docs/50-milestone-seven-prompt-lab.md.

Validation evidence

Post-audit Phase 9/10/11 additions through commit 3cf2167:

Command/check Result Evidence
Wrong-runtime preflight PASS Node 23.7.0 rejected; Node 24.14.0 with pnpm 10.33.0 accepted.
Content regression repetition PASS Three consecutive runs, 21/21 each; no timeout or skip.
Missing-database integration gate PASS No DATABASE_URL exits non-zero before Vitest.
Disposable PostgreSQL 17 integration PASS Fresh isolated Unraid container, migrations applied, executed 33, skipped 0, failed 0; container verified removed.
Job lease regression repetition PASS Three consecutive real-PostgreSQL runs, 3/3 each.
Focused simple/project/identity tests PASS Four files, 14 tests; web typecheck passed.
Security suite PASS Two files, 11/11 tests.
Pack and golden contract PASS 28 P0, 6 examples, 72 catalog entries, 9 schemas and 28 byte-identical prompts.
Production dependency audit PASS Zero advisories after the esbuild override.
Direct uncached pnpm verify PASS Node 24.14.0/pnpm 10.33.0; all 14 package lint/typecheck scripts, unit suites, pack/golden contracts and production builds passed with exit 0 in 855,316 ms.
Clean-room frozen install and verify PASS Detached checkout at 164fa49, no copied dependencies/build output; frozen install succeeded and the direct gate passed with exit 0 in 585,617 ms.
Gate cache/process safety PASS Release qualification now invokes package scripts directly through topological pnpm -r; stale Turbo cache reuse and a Windows post-build Turbo hang cannot produce release evidence.
Phase 10 focused model/UI tests PASS Three focused files, 11/11 tests; web typecheck passed.
Phase 10 live desktop browser PASS Isolated PostgreSQL-backed owner/project flow reached a ready usability task with ordinary task text and visible default provenance; no browser warnings/errors.
Phase 10 live 390px browser PASS Start and simple composer had one main, no horizontal overflow and 44px primary/detail actions; task text and provenance remained readable.
Phase 10 privacy-safe funnel contract PASS Two focused application tests plus application/database/web lint and typecheck; raw task text is rejected as a metric dimension.
Phase 11 preference unit contracts PASS Application preference tests 3/3, schema tests 9/9 and Start ordering tests 8/8; 0, 5, 31 and 500 repository boundaries are covered.
Phase 11 API/spec regression PASS Pack validation covers 28 P0 packages, 6 examples, 72 catalog entries and 9 schemas; all 28 reference prompts remain byte-identical.
Phase 11 server PostgreSQL gate PASS Isolated PostgreSQL 17.9 on Unraid applied all nine migrations; the preference integration executed 2/2 with cross-workspace, missing and archived mutations denied.
Phase 11 production build/replay PASS Node 24.18.0/pnpm 10.33 server build completed 14/14 packages. A fresh Compose volume then migrated with exit 0 after the PostgreSQL initialization health race was repaired.
Phase 11 desktop browser PASS Live server flow created a real repository, persisted favorite state across refresh, created a simple draft, showed exact owner name/email/role and loaded the current session without console warnings/errors.
Phase 11 mobile browser PASS At 390×844 Start retained one main landmark, 390px viewport with 375px content width, a 44px favorite action, persistent selection/favorite state and no console warnings/errors.
Phase 12 presentation foundation PASS Server Node 24 checks: 7/7 preference/navigation tests, web lint, typecheck and production build; default Simple navigation, Dutch labels, Expert parity and viewer Management denial are covered.
Phase 12 complete server gate PASS Unraid Node 24.18.0: formatting, all 14 package lint/typecheck scripts and all unit suites passed (web 227/227); the Compose production build completed 14/14 packages. The aggregate pnpm verify then stopped only because its Node image intentionally has no Python, so both Python gates were executed separately.
Phase 12 pack and golden post-check PASS Unraid Python 3.13: 28 P0 packages, 6 examples, 72 catalog entries, 9 schemas and all 28 reference prompts verified.
Phase 12 bilingual browser flow PASS Live PostgreSQL-backed Unraid flow created a real project and draft, matched Dutch search text, preserved draft 59b580b2-5d9c-4f04-a2a7-cb7f041a7263 across Dutch/English changes, and retained technical Expert navigation.
Phase 12 navigation and mobile browser PASS My tasks, More and owner-only Management loaded in Dutch; at 390×844 the four mobile shortcuts remained visible and keyboard-addressable. A fresh post-favicon browser session reported zero errors and warnings.
Phase 13 refresh vertical slice PASS Unraid Node 24.18.0: production Compose build 14/14 packages; web lint and typecheck passed; 50 files and 230 tests passed, including same-origin, invalid-ID, missing-idempotency-key and refresh-all boundaries.
Phase 13 API post-check PASS Unraid Python 3.13 pack validation retained 28 P0 packages, 6 examples, 72 catalog entries and 9 schemas; all 28 golden prompts remain byte-identical.
Phase 13 continuous-freshness gate PASS Unraid Node 24.13.0: formatting, 14/14 lint and typecheck packages, all unit suites and 14/14 production builds passed. Web retained 50 files and 230 tests; worker passed 18 tests.
Phase 13 PostgreSQL scheduler gate PASS Fresh PostgreSQL 17.9 on Unraid applied all migrations; 35/35 integration tests executed with zero skips. A new scheduler instance produced one atomic job/snapshot pair and a same-bucket restart produced zero duplicates.
Phase 13 live browser gate PASS Fresh production Compose on Unraid reached authenticated Dutch Start with the rebuilt worker active, correct progressive disclosure and zero browser warnings or errors.

Authoritative host: Unraid 7.2, Docker 27.5.1, Compose 2.40.3, Node.js 24.18.0 container, PostgreSQL 17.9 container. The Windows workstation's Node.js 23.7.0 is unsupported and is not release evidence.

Command/check Result Evidence
python3 scripts/validate_pack.py PASS 28 P0, 6 examples, 72 catalog entries, 9 schemas, 28 goldens, 68 release fields.
python3 scripts/reference_compose.py --check PASS All 28 reference prompts verified.
Frozen pnpm install under Node 24.18.0 PASS Clean Git checkout without copied dependencies or build output.
pnpm verify under Node 24.18.0 PASS Formatting, 13-workspace lint/typecheck, unit tests, pack checks, composer checks, and 13 builds.
PostgreSQL integration gates PASS Six files and 15 tests; setup, import, composition, artifact, authorization, job, lease, retry, and reconnect coverage.
pnpm test:security PASS 11 hostile-input, redaction, secret-at-rest, origin, and dependency-boundary tests.
Production Compose build/start PASS Fresh migration; web, worker, and PostgreSQL healthy; non-root hardened services.
First-run/authentication PASS Setup 201, closure 409, wrong login 401, correct login/session 200, logout revocation, reset/replay/expiry/session-revocation/rehash proof.
Workspace authorization PASS Viewer/editor/owner permissions, disabled user, cross-workspace denial, and no admin bypass.
Worker persistence PASS Safe health job succeeded; unsupported job failed safely; no duplicate after restart; stale lease covered by PostgreSQL test.
pnpm validate:m0-persistence PASS Golden run and 6,806-byte artifact persisted and restored at SHA-256 8389b948158cc35fa1716e170c9893bd3939dc3aaad9311971b6c267f835ae1b.
Full Compose restart PASS Readiness recovered; catalog, identity, run, and artifact remained; validation retries were idempotent.
PostgreSQL outage/recovery PASS Readiness 503 database-unavailable, liveness 200; readiness returned to 200 after restart.
Migration replay/failure PASS Initialized replay exited zero; unreachable test database exited non-zero visibly without a secret.
Backup/restore drill PASS Logical dump and artifact archive restored into empty isolated volumes; run bytes and digest matched.
Production log scan PASS Configured secret values, authorization headers, and bearer markers absent.

Milestone 1 authoritative additions at commit b7dcb5d:

Command/check Result Evidence
Clean Node 24 pnpm verify PASS 13-workspace format/lint/typecheck/build, unit tests, 28 packages, 72 catalog entries, 9 schemas and 28 golden prompts.
Content validation tests PASS Structured errors, invalid UTF-8, hardlinks, multi-package aggregation, catalog mismatch and duplicate identity.
Catalog/import tests PASS SemVer ordering, lifecycle recommendation, exact history/version reads, idempotency and digest conflicts.
Fresh PostgreSQL migration and replay PASS Empty PostgreSQL 17 volume migrated; post-test replay exited zero.
pnpm test:integration PASS 3 files, 7 tests with database and artifact targets, including immutable published-version rejection.
pnpm test:security PASS 2 files, 11 tests.
Fresh production Compose PASS Worker inserted 28/28, web/worker/PostgreSQL healthy, exact-version route live.
Worker restart PASS Zero inserts, 28 unchanged versions, healthy after restart.
Live API matrix PASS 28 list items; combined search/filter exact match; detail/history/exact-version; invalid filter 422.
Production log scan PASS No configured secret values, authorization headers or bearer markers.

Milestone 2 authoritative additions at commit 3397226:

Command/check Result Evidence
Pack and reference composition checks PASS 28 P0, 6 examples, 72 catalog entries, 9 schemas, valid OpenAPI and 28 golden prompts.
Database and web unit gates PASS Database 29 passed/3 optional integration skipped; web 80 passed.
pnpm test:security PASS 2 files and 11 tests, including route/persistence dependency boundaries.
Production Compose build/start PASS Final web/worker/migrate images built; web, worker and PostgreSQL healthy.
Live API matrix PASS Auth boundary, 28 items, facets, search/filter, detail/version digest, favorites round-trip and origin rejection.
Production Playwright matrix PASS 23 passed and 3 intentional skips across desktop and 390×844 narrow projects.
Production log/boundary scan PASS No sensitive or stack patterns; web/worker non-root and read-only.

Milestone 3 authoritative additions through commit 76b28de:

Command/check Result Evidence
Repository intelligence package gates PASS Lint, typecheck, build and 23 focused tests; exact example digest remains 041e20f67e299665e85e5f14800a4bbcfa5e6c42ccdd7b22d29206e2c3f6727e.
Application repository gates PASS 13 files and 67 tests, including actor matrix, server-owned metadata, validation, ETags and export.
Database repository gates PASS 41 unit tests plus 7 live PostgreSQL integration tests for atomicity, isolation, concurrency, no-op behavior and frozen snapshots.
PostgreSQL 17.9 invariant drill on Unraid PASS Fresh 0000→0001→0002 SQL application; valid insert; invalid revision/digest rejection; immutable update rejection; cascade preservation; index-only workspace-list scan. Ephemeral container and test files removed.
Pack and reference composition gates after schema changes PASS 28 P0, 6 examples, 72 catalog entries, 9 schemas and all 28 reference prompts remain valid.
Production Compose and migration replay PASS Corrected runtime at 184af5c; migrate completed twice, then web, worker and PostgreSQL were healthy.
Live repository API matrix PASS Manual create, revision summary, ETag/no-op/append/conflict/precondition, JSON/YAML export and re-import, traversal and origin rejection.
Production browser matrix PASS 4 passed, 2 duplicate-mutation skips across desktop and narrow projects; zero console/page errors.
Restart, container and log evidence PASS Full-stack restart preserved 9 repositories/13 revisions; web/worker non-root and read-only; zero sensitive/error patterns.

Milestone 4 authoritative additions through commit 80b95bc:

Command/check Result Evidence
Integrated Node 24 pnpm verify PASS 14-workspace formatting, lint, typecheck, tests and build with isolated Python pack validation.
Composer/application/web gates PASS 37 composer tests, 96 application tests and 132 web tests.
Pack and golden contract PASS 28 P0, 6 examples, 72 catalog entries, 9 schemas and 28 byte-identical prompts.
Live PostgreSQL and migration PASS Migration count 4; draft/source/history integrations green; existing repositories preserved.
Production browser matrix PASS Exact handoff, autosave, lint gate, preview/provenance, immutable task, historical pinning, responsive matrix and zero console issues.
Draft-linked generation PASS Run a87ae11c-54b7-41c6-ba70-3a2d2a9aac0e persisted exact source draft, digest and one creation audit event.
Restart and security boundary PASS Run survived restart; services non-root/read-only/cap-drop/no-new-privileges; zero sensitive log patterns.

Milestone 5 authoritative additions through commit 5ba0caf:

Command/check Result Evidence
Integrated Node 24 verification PASS 14-workspace formatting, lint, typecheck, tests and production build; focused mobile regression test also passed after the live defect repair.
Artifact/application/web gates PASS 23 artifact, 100 application and 147 web tests, including 18 hostile/deterministic archive cases.
Pack and golden contract PASS 28 P0, 6 examples, 72 catalog entries, 9 schemas and all 28 production prompts remain byte-identical.
Live PostgreSQL artifact integration PASS 6 focused files and 17 tests; three production-created artifact rows retained exact sizes, hashes and valid expiry.
Production export/import flow PASS Exact copy plus Markdown, ZIP and AGENTS creation; downloaded ZIP verified against the immutable historical run without extraction.
Restart and download persistence PASS Web/worker recreation preserved the run, artifact count and all three authorized download rows.
Responsive/browser gate PASS 390, 768, 1024, 1440 and 2560 widths without overflow after the status-digest regression repair; zero console entries.
Runtime security boundary PASS Non-root, read-only, all capabilities dropped, no-new-privileges; zero token, password or error log matches.

Milestone 6 authoritative additions through commit 0af5254:

Command/check Result Evidence
Clean Node 24 quality gate PASS Formatting, lint and typecheck across 14 workspaces; all unit tests; 14 production builds; 11 security tests.
Pack and golden contract PASS Clean Python 3.12 validation of 28 P0 packages, 6 examples, 72 catalog entries, 9 schemas and 28 byte-identical prompts.
Live PostgreSQL integration PASS Focused Gitea persistence test, including encrypted projection, workspace isolation, snapshot status and retention.
Live Gitea pipeline PASS Gitea 1.27.0 capability probe, one-item discovery, 202 import, worker completion, evidence digest, finding and immutable profile revision.
Outage and deletion continuity PASS Imported state remained visible with discovery offline; after integration deletion, one repository, one complete snapshot and one profile revision remained and both local APIs returned 200.
Responsive browser gate PASS Healthy and unavailable states, safe token suffix, imported repository and retained snapshot rendered; 390 by 844 had no horizontal overflow.
Runtime security boundary PASS Web/worker healthy, non-root, read-only and capability-dropped; secret/header log scan passed; temporary fixture resources removed.

Milestone 7 authoritative additions through commit 07cba0f:

Command/check Result Evidence
Clean Node 24 quality gate PASS Formatting, lint, typecheck, all unit tests, 14 production builds and the configured security suite.
Pack and golden contract PASS Clean Python 3.12 validation of 28 P0 packages, 6 examples, 72 catalog entries, 9 schemas and 28 byte-identical prompts.
Fresh PostgreSQL integration PASS Migrations 0000 through 0006; private draft, package-file and publication/evaluation persistence suites passed.
Production authoring flow PASS ZIP import, exact-path invalid edit, reset, exact-digest review, immutable publication, coherent next-version creation and deterministic export.
Example reproduction PASS Stored example rendered twice through the production composer with a byte-identical repeat and persisted render digest.
Responsive browser gate PASS 390, 768, 1024, 1440 and 2560 widths without overflow; fresh-tab console log was empty after the hydration repair.
Migration and restart boundary PASS Corrected 0005 trigger ordering applied; 0006 applied; web recreation retained draft/publication/version evidence; services healthy.

Milestone 8 release-candidate additions through commit 3b255f3:

Command/check Result Evidence
Node 24 quality gate PASS Formatting, lint and typecheck each completed across 14 workspaces; 25/25 test tasks passed, including 212 web, 160 application, 97 database unit and 16 worker tests; security suite 11/11.
Fresh PostgreSQL integration PASS Eight migrations applied to a disposable PostgreSQL 17 database; 15 files and 33 integration tests passed for invitations, sessions, personal data, collections, operations, immutable audit and existing persistence contracts.
Pack and golden contract PASS Python 3.12 validated 28 P0 packages, 6 examples, 72 catalog entries, 9 schemas and all 28 byte-identical production prompt fixtures.
Operations and identity PASS Authorized queue/audit console, safe retry, sessions, single-use invitations, password-confirmed personal export/deletion, collections and bounded artifact retention are implemented and tested.
Backup and restore PASS Backup pre-m8-b2fb5a5 passed strict checksums; isolated restore applied migration 0007, matched users/runs/artifacts/audit/migration counts and reproduced all artifact SHA-256 values before exact temporary-resource removal.
Clean-room installation PASS Independent project devrunbook-release-cleanroom-56cbbab built from the documented Compose path, applied all eight migrations, completed protected setup (201, repeat 409), imported 28/28 built-ins, passed preflight/readiness and remained healthy after restart. Temporary project resources were then removed.
Performance PASS Deterministic 10,000-version fixture, 30 iterations: search P95 241.913 ms against 500 ms target; detail P95 24.469 ms against 400 ms target. See evidence/performance-report.json.
Security and supply chain PASS Production audit has no high/critical dependency findings; final web and worker images have zero high/critical Trivy findings; Gitleaks found no leaks across 153 commits; 161 production package records have classified licenses.
Production browser PASS Collections create/membership, operations safe failures/audit, invitation generic failure, desktop and 390 by 844 layouts were exercised. A narrow Operations overflow was found and repaired; the fresh verification tab had zero warnings/errors.
Host-capacity recovery PASS Repeated release builds exhausted unused Docker build cache. PostgreSQL completed crash recovery after space was reclaimed; the worker was explicitly restarted, resynchronized 28 unchanged built-ins and returned healthy. No application volume was removed.

Browser verification

  • The 2026-07-29 Unraid consolidation replaced 23 accumulated DevRunbook validation and production containers with one healthy DevRunbook DockerMan container. A restored production backup was first verified on port 23004, including 2 users, 43 repository profiles and both health endpoints. The final port-1231 container retained authenticated access and Gitea project selection after a container restart, with zero browser warnings or errors. DockerMan metadata includes the WebUI URL and the installed DevRunbook SVG icon.

  • The 2026-07-28 production re-audit verified authenticated library search and URL state, all seven primary application surfaces, a governed composer draft with live deterministic preview and blocking lint, explicit Gitea degraded state, Ctrl+K command palette behavior and theme switching. Desktop Library and Composer plus all primary routes at 390 by 844 had no horizontal page overflow, and the browser console contained zero warnings or errors. See evidence/functional-visual-audit-2026-07-28.md.

  • Live Unraid home page loaded 28 persisted built-ins without Gitea.

  • Setup remained closed and displayed Instance ready after restart.

  • Invalid local login used a generic failure and cleared the password field.

  • The root-cause-bugfix detail displayed the persisted package identity and source digest.

  • At 390 by 844 there was no horizontal overflow; semantic form and navigation roles remained present.

  • Browser console warnings and errors: zero.

  • The canonical Playwright suite covers keyboard focus, reduced-motion, responsive, security-header, setup, login, and recovery behavior.

  • Milestone 1 rechecked the live Root-Cause Bug Fix detail and its immutable version/digest at 390 by 844 with no horizontal overflow and zero browser warnings or errors.

  • Milestone 2 verified URL-preserved search/filter/view state, favorites, complete detail governance, composer handoff, command palette, themes, keyboard behavior and horizontal-overflow absence in desktop and 390×844 production projects. The final matrix passed 23 tests with 3 documented environment/isolation skips.

  • Milestone 3 verified manual repository creation, immutable editing, protected-path and inert-command display, export/re-import, composer context, keyboard/theme/reduced-motion behavior and horizontal-overflow absence. The production matrix passed 4 tests with 2 deliberate duplicate-mutation skips.

  • Milestone 4 verified the production guided composer at 390, 768, 1024, 1440 and 2560 widths, exact historical profile pinning, live preview, immutable generation and restart persistence with zero browser console issues.

  • Milestone 5 verified exact prompt copy, three persisted export formats, historical Run Pack re-import without extraction, download history after container recreation and the same five-width responsive matrix with zero browser console entries.

  • Milestone 6 verified safe Gitea connection metadata, repository discovery and import, worker-completed snapshot/profile creation, explicit offline state, retained local profile use and 390-pixel responsive layout.

  • Milestone 7 verified package import, path-linked validation recovery, exact-digest review, immutable publication, next-version creation and stored example reproduction. The Prompt Lab passed 390, 768, 1024, 1440 and 2560 widths without horizontal overflow; a fresh tab had zero console messages.

  • Milestone 8 verified personal collection creation and membership, operations queue/audit rendering, safe invalid-invitation feedback and the new navigation entries on the live Unraid release candidate. Collections and Operations were checked at desktop and 390 by 844; the final tab had zero console messages.

Migrations and configuration

  • Nine forward migrations are authored. Migration 0003 adds governed draft revision/output state and mandatory generated-run idempotency; migration 0004 hardens Gitea persistence, secret envelopes and snapshot integrity; 0005 adds private package drafts/files, 0006 adds immutable quality, review and publication evidence, 0007 adds personal collections and 0008 adds workspace/user-scoped repository preferences. All nine pass fresh PostgreSQL 17.9 application and production replay on Unraid.
  • Production Compose keeps baked built-ins separate from persistent operator content, artifacts, and database volumes.
  • Unraid DockerMan can alternatively use the all-in-one image target. Its private PostgreSQL database, artifacts and operator content share the single /config persistence boundary; only HTTP port 3000 is published.
  • The installed DockerMan template uses a cached PNG icon through DockerMan's file:// convention and exposes managed-container, shell and WebUI metadata.
  • The secure validation environment file is mode 0600; no values are recorded in repository evidence.
  • Ordinary backups intentionally exclude session and encryption keys. Operators must preserve those separately.

Risks and limitations

  • Release qualification was exercised on linux/amd64; other architectures are not claimed by this release evidence.
  • The live validation stack and backup evidence remain in the restricted Unraid validation directory. Temporary restore resources were removed.
  • Gitea remains deliberately read-only and optional. No GitHub/GitLab adapters, arbitrary command execution, semantic search or scheduled remote health monitoring are included in the MVP.
  • Operational log rotation is configured in the Docker logging layer; audit pruning is intentionally manual until append-only governance and backup policy are reconciled.
  • The former transitive esbuild advisory was removed through the governed package override; the latest recorded production dependency audit reports zero advisories.
  • The shared validation host approached Docker storage capacity during repeated image builds. Only unused build cache was pruned; operators should monitor Docker storage so PostgreSQL always retains write headroom.

Active delegated work

  • No delegated work remains active. The lead thread integrated and validated all Milestone 8 slices in the canonical branch.

Next action

Post-audit Phases 14 through 16 are complete. Review the recorded evidence and create a release tag only after explicit operator approval; no tag was created automatically.

Usability recovery — active 2026-07-30

The operator accepted docs/52-usability-recovery-roadmap.md after a live visual audit showed that technical qualification had not produced a sufficiently readable product. Phase A is active. Its first slice standardizes authenticated navigation around tasks and projects, localizes command labels, introduces unique primary-route metadata, and reduces Task library density. Server and browser evidence will be added before this phase is declared complete.

First-slice evidence: on Unraid Node 24, Prettier, web lint and web typecheck passed; the web unit suite executed 51 files and 233 tests with zero failures; the all-in-one production Docker build completed all 14 package builds. The candidate was deployed at a private validation host, reported ready and healthy, and retained its /config data, LAN port and DockerMan labels. The new authenticated browser regression could not log in because the stored validation credential no longer matches the active account (HTTP 403). No account password was changed. Phase A therefore remains active pending authenticated browser evidence and the remaining primary-page localization work.

The next continuous slice localized the Projects overview and task-history recovery, added a bounded case-insensitive project-name query across UI, API, application and PostgreSQL store, and moved dense project evidence behind a technical-details disclosure on project detail. Unraid validation passed all 14-package lint and typecheck tasks, 51 web test files with 233 tests, pack validation and all 28 golden prompt checks. The production all-in-one image was rebuilt and the single DockerMan container returned healthy and ready with its existing persistence and LAN mapping.

The final usability-recovery slice completed the generated-task and task-history surfaces. Generated tasks now use locale-aware ordinary-language headings and actions, keep immutable status explicit, and move provenance, prompt details and technical evidence behind disclosures. Task history now supports bounded search, readiness filtering, localized status summaries, result counts and distinct empty and no-match recovery paths.

Final Unraid evidence on 2026-07-30: repository format, all 14 lint tasks, all 14 typecheck tasks, all unit suites and all 14 production builds passed. The focused web suite passed 51 files and 233 tests; security passed 11 tests; the production dependency audit found no known vulnerabilities. A fresh PostgreSQL 17.9 database applied all migrations and executed 36 integration tests with zero skips or failures. Pack validation covered 28 P0 packages, 6 examples, 72 catalog entries and 9 schemas, and all 28 golden prompts remained byte-identical.

The release image was built and deployed on the Unraid server. Exactly one DevRunbook container is present, reports healthy and ready on a private validation port, retains /mnt/user/appdata/devrunbook:/config, and exposes the DockerMan managed, WebUI and local-icon labels. A live Chrome check found no horizontal overflow at 390 by 844, 50-pixel login fields, a 52-pixel primary action and zero console warnings or errors. Public home/start routing and the login surface were visually checked. Authenticated production browser replay remains unavailable because the stored validation credential no longer matches the operator account; no password, account or production data was changed to manufacture a green browser result.

Post-audit Phases 1416 — 2026-07-30

  • Completed scope: single-main authenticated landmarks, named compact controls, accessible light/dark contrast, keyboard/touch/reflow/reduced-motion checks, human-readable operations status, storage and backup evidence, hardened Compose limits, HTTPS/security headers and final release qualification.
  • Changed modules: authenticated pages and shell controls, operations service/UI, PostgreSQL system-status store, Compose/Next configuration, deployment and operator documentation, Playwright accessibility coverage and migration readiness/preflight constants.
  • Server gates: Node 24 format, lint, typecheck, unit and production build passed; fresh PostgreSQL 17.9 migration plus integration gate executed 36, skipped 0, failed 0. Security tests and production dependency audit were included in the final verification command.
  • Browser evidence: production Compose on Unraid passed 24/24 Phase 14 tests across desktop and 390-pixel projects for Start, composer, Projects, My tasks, account and Management, with no serious/critical Axe findings. The existing repository creation/edit/context handoff flow also passed after regression repair.
  • Deployment evidence: web and worker report read-only root filesystems, CapDrop=[ALL], PID limit 256, 1 GiB memory and 64 MiB /tmp tmpfs. HSTS, frame/CSP protection and suppressed framework disclosure were observed.
  • Recovery evidence: restart preserved 1 owner and 28 built-ins and returned readiness to ready; an isolated pg_dump restore matched 1 owner, 28 playbooks and 9 migration rows. Restore database and dump were removed.
  • Migration/configuration: no new migration was introduced. Readiness and migration preflight now correctly expect the existing nine migrations.
  • Remaining limitation: qualification is linux/amd64; HTTPS termination and off-host backup scheduling remain operator infrastructure responsibilities.
  • Next milestone: optional Phase 17 Codex-native exports, only after operator release approval. No release tag has been created.

Usability follow-up audit — 2026-08-01

  • Completed scope: localized every shared authenticated shell control, the Dutch expert navigation, account preferences, password/session management, new-project entry and workspace-management denial. Account and security routes now receive the common command set by default instead of opening an empty search dialog.
  • Role clarity: owner, editor and viewer labels use ordinary language. Viewers no longer receive the write-only advanced composition destination in expert navigation or search. An empty viewer workspace explains who can add a project and links to the readable Projects overview instead of offering an unauthorized Gitea action. Editor and viewer denial states preserve context and recovery.
  • Changed modules: authenticated presentation/layout, shared shell, workspace, account, theme and command controls, account/security pages, management and new-project entry, Start copy/empty state, plus localization and browser regression suites. No schema, migration or runtime configuration changed.
  • Server gates: the final Linux/Node 24 candidate passed formatting, all repository lint and typecheck tasks, all unit suites (including 52 web files and 235 web tests), pack validation for 28 P0 packages, 6 examples and 72 catalog entries, all 28 byte-identical golden prompts, all 14 production builds, 11 security tests and the production dependency audit with zero known vulnerabilities. A fresh PostgreSQL 17.9 run applied migrations and executed 36 integration tests with zero skips or failures.
  • Browser evidence: an isolated all-in-one image on the Unraid server was set up from a clean volume and exercised as a new owner plus invited editor and viewer. Invalid login, empty workspace, account, sessions, management denial, new-project rights, simple/expert, Dutch/English, keyboard mobile navigation, 390-pixel mobile, 640-pixel 200%-equivalent reflow and desktop presentation were inspected. The final browser had no horizontal overflow and zero console warnings or errors. The focused Chromium/Axe matrix passed 17/17 scenarios on eight critical authenticated routes with no serious accessibility findings.
  • Remaining boundary: the active-workspace control intentionally exposes only the deterministic current membership; selecting among multiple memberships is not implemented by the current authorization lookup. Advanced repository-profile and integration authoring retain canonical technical/English contract labels. Public first-run setup, login and invitation acceptance also remain English; the authenticated primary navigation, explanations, rights and recovery are localized. These are explicit future product capabilities, not hidden fallbacks in this release.
  • Deployment evidence: commit 5b8d207 was pushed to origin/main and its verified all-in-one image replaced production with automatic rollback protection. Exactly one DevRunbook container remains, is healthy and ready on LAN port 1231, retains /mnt/user/appdata/devrunbook:/config, and exposes the DockerMan managed, shell, WebUI and local-icon labels. Temporary candidate, gate and PostgreSQL resources were removed.
  • Next action: create a release tag only after explicit operator approval.

Complete usability closure — 2026-08-12

  • Completed scope: the public home, setup, login, invitation and password-reset journeys now follow Dutch or English presentation preferences; compact language controls use an authoritative same-origin cookie endpoint. On narrow screens the actionable form precedes explanatory copy. Sign-out and Gitea connection tests remain inside the application and expose accessible failures instead of raw API responses.
  • Workspace and role clarity: every active authorized membership is selectable. The server re-authorizes the preference on every request and falls back safely when it is missing, stale or unauthorized. Owner, editor and viewer flows were exercised with two memberships each; write and management destinations remain permission-aware.
  • Expert usability: repository-profile and Gitea authoring now localize primary labels, explanations, policy values and status feedback while preserving exact canonical contract values in requests and stored profiles.
  • Changed modules: public presentation and authentication pages, locale and workspace preference endpoints, application workspace queries, authenticated layout and shell, repository-profile and integration presentation, plus focused unit and browser regression coverage. No schema or migration changed.
  • Verification: format, all 14 lint and typecheck tasks, unit suites including 53 web files and 242 web tests, all 14 production builds and 11 security tests pass. Pack validation still covers 28 P0 packages, 6 examples, 72 catalog entries and 9 schemas; all 28 golden prompts are byte-identical. The production dependency audit has zero known vulnerabilities after pinning patched fast-uri and nanoid transitives. A fresh PostgreSQL 17.9 gate executes all 36 integration tests with zero skips or failures.
  • Browser evidence: an isolated all-in-one server candidate was exercised as a new owner plus invited editor and viewer across both workspaces. Public NL/EN, invalid invitation/reset recovery, sign-out, workspace switching, management denial and expert authoring were checked at desktop and 390 by 844 without horizontal overflow. The focused Chromium/Axe matrix passed 17/17 scenarios on eight critical routes at desktop, mobile and 200%-equivalent reflow.
  • Deployment: the verified all-in-one image is deployed as the sole DevRunbook container, healthy and ready on a private validation port with the persistent /config mount and DockerMan managed, shell, WebUI and local-icon labels. Temporary candidate and gate resources were removed after qualification.
  • Remaining infrastructure boundary: qualification remains linux/amd64; HTTPS termination and off-host backup scheduling are operator responsibilities. No release tag was created.

Deep presentation follow-up — 2026-08-12

  • Completed scope: closed remaining mixed-language presentation on Collections, complete playbook details and favorite actions, technical repository evidence, the advanced composer, Prompt Lab overview/import and Operations. Dutch and English now share the same interaction and safety boundaries; canonical policy, mode, lifecycle and autonomy values remain unchanged in requests and storage.
  • Interaction quality: collection creation and optimistic membership rollback announce localized outcomes; composer conflicts, expired sessions, preview readiness and blocking reasons stay actionable; Operations formats dates and sizes for the selected locale and reuses formatters across rows.
  • Changed modules: collection, playbook-detail, repository-detail, composer, Prompt Lab and Operations pages/components plus their focused presentation and contract tests. No schema, migration, API contract or stored content changed.
  • Verification: Node 24 formatting, all 14 lint and typecheck tasks, all unit suites including 54 web files and 244 web tests, all 14 production builds, 11 security tests and the production dependency audit pass with zero known vulnerabilities. Pack validation and all 28 golden prompt fixtures remain valid and byte-identical. A fresh PostgreSQL 17.9 database applied all nine migrations and executed 36/36 integration tests with zero skips or failures.
  • Live evidence: the exact server-built devrunbook:ux-audit-v9 image replaced v8 with automatic rollback protection. Production is healthy and ready on LAN validation port. A 390 by 844 live Chrome check confirmed Dutch login/recovery copy, no horizontal overflow and zero console warnings or errors. Authenticated presentation changes are covered by the exact Linux build, unit contracts and the previously qualified role/accessibility flows; no production credential was changed to manufacture a signed-in replay.
  • Deployment shape: exactly one DevRunbook container remains with the persistent /config mount and DockerMan managed, shell, WebUI and local-icon labels.

Public-repository consolidation — 2026-08-31

  • Consolidated the later recovery branch into the publication candidate so the Dutch/English onboarding, setup, login, invitation/reset, workspace selection and plain-language presentation work are no longer stranded on a side branch.
  • Replaced the implementation-pack landing page with a user-oriented README and documented the difference between historical build-pack version 1.2 and application version 0.1.
  • Removed private validation addresses from the current tree. Historical commits still contain those addresses and three work-email author records; the recommended public-history decision is recorded in docs/PUBLICATION_READINESS.md without rewriting shared history.
  • Hardened deployment defaults: development and production web ports bind to host loopback, production requires an explicit PUBLIC_BASE_URL, and the development stack no longer contains a shared first-run bootstrap token.
  • Added a 16 KiB streaming limit to the unauthenticated setup request before JSON parsing, including declared-length and streamed-overflow regression tests.
  • Replaced the ineffective Gitea placeholder validation with Node 24, pinned pnpm, PostgreSQL-backed unit/integration/security gates. Automatic Unraid deployment now depends on the same exact-revision publication gates.
  • Corrected security and configuration documentation that incorrectly described the implemented application as an undeployed archive or claimed enforcement for reserved proxy/CIDR settings.
  • Local evidence at this point: both Python contract validators pass, the focused setup-body suite passes 3/3, Compose renders successfully with fixture secrets, git diff --check passes and Gitleaks found no secret across 207 commits. Final Node 24, PostgreSQL, security and audit authority remains the managed Gitea run for the final candidate commit.