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

732 lines
56 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.