This commit is contained in:
@@ -0,0 +1,731 @@
|
||||
# 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 14–16 — 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.
|
||||
Reference in New Issue
Block a user