docs: slice 5 record, Codex round 4 accept, gate and canary notes
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CzvnuKhLzudvq7jZ7SvVt2
1 file changed,
+13
−1
docs/superpowers/reviews/2026-09-11-slice-5-record.md+13 −1
CI passed — run details
diff --git a/docs/superpowers/reviews/2026-09-11-slice-5-record.md b/docs/superpowers/reviews/2026-09-11-slice-5-record.md| index 11371e2..bf5bbff 100644 |
| --- a/docs/superpowers/reviews/2026-09-11-slice-5-record.md |
| +++ b/docs/superpowers/reviews/2026-09-11-slice-5-record.md |
| @@ -137,6 +137,8 @@ followed: |
| - **S5-8 — P3, a failed assertion could leave the stalled request blocked. Fixed.** In `TestAPIAStaleReadCannotWriteOverAnEnd`, a `t.Fatal` between starting the held request and releasing it — a `waitReached` timeout, or the competing end failing its status assertion — skipped the release and parked that request on the stall channel for the rest of the package run; removing the callback does not unblock one already inside it, and the `<-done` wait had no timeout either. The held request is now a `heldRequest` whose `t.Cleanup` is registered **before** its goroutine starts and which releases and joins it exactly once (`sync.Once` on both the release and the join), with every wait — `waitReached`, the join, the response — bounded at five seconds and failing by name here rather than by the package timeout. Verified by injecting a `t.Fatal` immediately after `waitReached` in a throwaway copy: the test fails in 0.14s instead of hanging. Run 10× under `-race`, green. |
| - **S5-9 — P3, the body table still contradicted the whitespace rule and got the boundary wrong. Fixed.** The 400 row now reads "anything other than JSON whitespace after the first value" rather than "anything at all after the first object", which round 2's whitespace acceptance had made false. The 413 row now reads "reading the body encounters bytes beyond 16,384", and a new paragraph states the inclusive boundary and the two answers on the inside of it: a create padded with JSON whitespace to exactly 16,384 bytes is 201, a bodyless write carrying the same 16,384 bytes is 400 (it takes no body whatever its size), and one byte more is 413 on both. The bodyless paragraph's "reaching the cap is 413" is corrected the same way. Nothing had ever asserted the boundary — every other body test uses 17 KB, comfortably past the edge — so `TestAPIBodyCapBoundary` now pins all four answers, and the meeting being unchanged afterwards. |
| +**Codex round 4** (independent, static, scope `4f896c2`): verdict **accept** — no new finding at any severity; S5-8 and S5-9 confirmed closed, S5-1 through S5-7 unchanged under their accepted dispositions; "fit to merge and deploy on this review and the recorded gate results". Four rounds in all: 5, 2, 2, 0 findings. |
| + |
| --- |
| ## 3. Carried items, and where they go |
| @@ -204,6 +206,16 @@ followed: |
| ## 4. Deploying this slice |
| +**Canary, 2026-09-11.** `slice2-meet.bds.oncarlos.com` took `bed664b` |
| +onto its slice-4 database and logged `migrate applied=[meet/0002_agents] |
| +skipped=4`, then `4f896c2` with `applied=[] skipped=5`; both boots |
| +logged `meet: relay configured regions=1`. Probed on the platform: |
| +`GET /api/v1/meetings` with no bearer is `401 {"error":"unauthorized"}`, |
| +a made-up bearer on a made-up meeting is 404, `/settings` redirects to |
| +sign-in. The `carlos deploy` wait can time out before the instance |
| +hands over (it reported the old version for a minute and then served |
| +the new one); check `/api/version` before retrying. |
| + |
| **One migration, `0002_agents.sql`, applied at boot.** `Schema` |
| (`migrations.go`) embeds `internal/meet/migrations/*.sql` in filename |
| order and `migrate.Apply` runs whatever a given database has not yet |
| @@ -258,7 +270,7 @@ is the test-level proof, and it needs no server restart to pass. |
| |---|---|---| |
| | The one gate | `GOCACHE=/home/paulca/.cache/tmp/claude-1001/gocache CGO_ENABLED=0 make ci` | vet, gofmt, `go test ./...`, `rastrillo migration check` — unchanged from slice 4. Green on this commit; `internal/meettest` alone (the package Tasks 2-4 mostly touch) runs in the twenty-to-thirty-second range each pass. | |
| | Race | `CGO_ENABLED=1 go test -race ./internal/...` | Run through every task's fix rounds this slice; green throughout, including this commit's. | |
| -| Browser | `make browser` | **Unchanged by this slice** — no file under `internal/meet/hub`'s signalling path, `room.js`, or any `test/browser/*.test.mjs` was touched; the drive surface is a second, independent HTTP surface beside the one the browser gate exercises. Still needs the sandbox off (Chromium gathers zero ICE candidates and `getDisplayMedia` produces nothing crossing the connection inside the bash sandbox, as every slice's record from 2 onward already notes). Run once on this task's own final head, in the foreground: `go vet -tags browser` clean, 232 node tests across the five `test/browser/*.test.mjs` files, and **`TestCallInARealBrowser` 31 of 31, 0 skipped, 522.71s** — no scenario lost to the environment's own media-stall flake this run. The whole-branch review (§3 above) or slice 6 should run it again on whatever head actually ships, since nothing here guarantees no later fix round in this slice touches those files. | |
| +| Browser | `make browser` | **Unchanged by this slice** — no file under `internal/meet/hub`'s signalling path, `room.js`, or any `test/browser/*.test.mjs` was touched; the drive surface is a second, independent HTTP surface beside the one the browser gate exercises. Still needs the sandbox off (Chromium gathers zero ICE candidates and `getDisplayMedia` produces nothing crossing the connection inside the bash sandbox, as every slice's record from 2 onward already notes). Run once on this task's own final head, in the foreground: `go vet -tags browser` clean, 232 node tests across the five `test/browser/*.test.mjs` files, and **`TestCallInARealBrowser` 31 of 31, 0 skipped, 522.71s** — no scenario lost to the environment's own media-stall flake this run. Run again on the shipping head `4f896c2` after the four Codex rounds (which touched `api.go`, `store.go`, `handlers_meetings.go` and the API tests, none of the browser path): **31 of 31, 0 skipped, 522.67s**, no flake. | |
| **Why a slice that added a JSON API and a database table needed no new |
| browser scenario.** §8.4 already draws this line: the meeting API is a |