# P1.1 manual acceptance This walkthrough is the separate human gate for the P1.1 workspace-directory registry. It is independent from both `.artifacts/p1-integration/**` and `.artifacts/p11-integration/**`. The helper prepares and serves the lab, but the reviewer performs the registry, Git, UI, export, render, `tht`, refusal, secret-scan, and cleanup checks and records the verdict. ## Prerequisites - clean repository checkout with the P1.1 implementation present; - `node`, `npm`, `git`, `curl`, and `python3` available; - built production assets: ```bash npm --prefix backend run build npm --prefix frontend run build ``` - executable harness CLI at `harness/.venv/bin/tht`; - free loopback ports `127.0.0.1:8791` and `127.0.0.1:8792`. ## Lifecycle commands Run from the repository root: ```bash ./scripts/p11-manual-acceptance.sh prepare ./scripts/p11-manual-acceptance.sh serve ./scripts/p11-manual-acceptance.sh stop ./scripts/p11-manual-acceptance.sh cleanup ``` The fixed lab root is: ```text .artifacts/manual-acceptance/p11/ ``` Expected lifecycle behavior: - `prepare` creates the fixed root, ownership record, bare remote, curator clone, root catalog, nested filesystem evidence, fixture secrets, request fixtures, generated command scripts, and `GUIDE.md`; it leaves status `PENDING`, performs no reviewer publish operation, and never writes `VERDICT.md`. - `serve` starts the production backend on `127.0.0.1:8791` and a production-built frontend preview on `127.0.0.1:8792`, recording exact ownership for both. - `stop` refuses foreign or partial ownership and stops only the two owned loopback processes. - `cleanup` refuses live state and removes only `.artifacts/manual-acceptance/p11/`. ## Reviewer workflow After `prepare`, open the generated `.artifacts/manual-acceptance/p11/GUIDE.md` and personally: 1. inspect the catalog, nested descriptor/evidence layout, ownership, and secret-path bindings; 2. serve both surfaces and verify the owned listeners; 3. list `configuration_required` slots; 4. validate and bootstrap-create descriptors exactly once; 5. inspect catalog/descriptor/evidence/docs Git object IDs; 6. retry create/update/delete and verify refusal plus unchanged object IDs; 7. make a curator descriptor+catalog edit, push, pull, and verify the API did not rewrite curator bytes; 8. make an evidence-only commit and inspect the new revision identity; 9. verify the live UI shows read-only existing workspaces and bootstrap-only editing for missing slots; 10. exercise export/import under bootstrap-only rules; 11. render twice, diff the results, and run `tht config check`; 12. run negative catalog/path/secret cases and a bounded secret scan; 13. stop the lab, verify both listeners are gone, write `VERDICT.md`, and only then cleanup if desired. ## Expected outcomes - `prepare` produces a fresh P1.1-only lab and leaves no `VERDICT.md`. - `serve` exposes only the owned loopback backend and frontend preview. - positive API operations succeed once; curator-owned follow-up mutations are refused safely; - curator Git changes become active only after pull; - renders are deterministic; `tht config check -c ` succeeds; - secret scans find no canaries outside the fixture-secret boundary; - after `stop`, nothing remains listening on `127.0.0.1:8791` or `127.0.0.1:8792`. ## Verdict format The reviewer creates `VERDICT.md` manually. Include: - reviewer identity; - UTC timestamp; - result for each checklist step; - observations and failure evidence; - exactly one final line: `manual acceptance: PASS` or `manual acceptance: FAIL`. Passing `bash scripts/test-p11-manual-acceptance.sh` proves only the tooling/lifecycle guards. It does not perform or approve manual acceptance.