oficina / meet Public

docs: Codex round 2 fixes for slice 6 (S6-14..S6-17)

Applies Codex round 2's four findings against round 1's own fixes.

S6-14: PRODUCT.md wrongly claimed all three CGO_ENABLED=1 cases never
ship. `make race` and `make native-test`'s meetcore sub-step are
test-only, but the native Mac and iPhone/iPad apps do ship the cgo
bridge (MeetBridge, a native/apple/Package.swift binary target MeetKit
links, built by native/scripts/build-mac.sh); server releases stay
cgo-free. Fixed in PRODUCT.md and the round-1 disposition line in the
review record.
S6-15: spec §0.2's guest-grant paragraph still paraphrased doctrine
§5.2 after round 1 shortened it. Removed the clause; the paragraph is
now the bare citation "Doctrine §5.2 is also relied on, for §2."
S6-16: §9 widened the scriptless exception in round 1 but AGENTS.md's
two matching lines still named only browser media participation,
which made §9's own "the binding file and the code agree" false
again. Widened both AGENTS.md lines to name the chat panel and
admission controls; corrected §9's agreement sentence; §15.18 records
it.
S6-17: §15.18's production-promotion bullet and the review record's
§1 and §3 asserted edge's served commit and queued work as current
fact. All three now attribute it to what `carlos channels` and
`oficina/meet` discussions 11 and 14 showed on 2026-09-14, keeping
"this slice changes documentation only" as the one claim checkable
from the repository.

Adds the Codex round 2 disposition block to the review record's §2,
replacing CODEX_ROUNDS_PLACEHOLDER (a fresh one follows for later
rounds), and corrects that record's S6-3, S6-4, S6-6 and S6-13
disposition lines to point at the round-2 findings that completed
them.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CzvnuKhLzudvq7jZ7SvVt2
Paul Campbell pushed by paul@keymail.dev cd02a59a401bba25299b358d4e46c9ed270b4077 parent 2a6eee4
4 files changed, +64 −35
  • AGENTS.md +7 −5
  • PRODUCT.md +9 −7
  • docs/superpowers/reviews/2026-09-14-slice-6-record.md +30 −12
  • docs/superpowers/specs/2026-09-07-meet-design.md +18 −11

CI passed — run details

diff --git a/AGENTS.md b/AGENTS.md
index b7ab6b0..a163561 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -50,11 +50,13 @@ mechanically.
a rename is indistinguishable from a drop plus an add.
- Money is integer cents. A float never touches a value a person will
be held to.
-- Screens work with JavaScript disabled, with one exception: browser
+- Screens work with JavaScript disabled, with two exceptions: browser
media participation (the holding screen's camera preview and join
- button, and the call itself in the room) needs script; both pages
- render their title, standing, floor notice and navigation without it.
- Destructive actions get their own confirm-page URL.
+ button, and the call itself in the room), and, once a call exists,
+ the room's chat panel and its admission queue's Admit controls; both
+ pages still render their title, standing, floor notice and
+ navigation without script. Destructive actions get their own
+ confirm-page URL.
- The gate is `make ci` (vet + gofmt + tests) — the same definition
CI runs. Run it before every push. `CGO_ENABLED=0` throughout: the
stack is cgo-free by design.
@@ -100,7 +102,7 @@ Deploying section for the canary recipe.
## UX conventions (seeded from profile: considered)
-Accessible by construction, progressively enhanced, and never dependent on JavaScript to be usable, with the one exception named above: browser media participation, on the holding screen and in the room.
+Accessible by construction, progressively enhanced, and never dependent on JavaScript to be usable, with the exceptions named above: browser media participation, on the holding screen and in the room, and, once a call exists, the room's chat panel and admission controls.
These are rastrillo's own conventions, and the profile is named for what it does rather than after anyone else's work. For wider reading on interface quality, impeccable.style, the WAI-ARIA Authoring Practices and Inclusive Components are all worth your time — none of them is endorsed by, or authoritative for, this framework.
diff --git a/PRODUCT.md b/PRODUCT.md
index fffc52e..871ef8e 100644
--- a/PRODUCT.md
+++ b/PRODUCT.md
@@ -127,13 +127,15 @@ deliberately not here" below for the full, cited list.
15-second hub tick (§2.3, §2.4). A shipped migration is never edited.
The agent API's rate limit keys on the resolved agent, not the client
address, deliberately (§15.17; see below).
-- **`CGO_ENABLED=0 make ci` is the server's cgo-free gate; three things
- run under `CGO_ENABLED=1`, none of them shipped.** `make race`, for
- any change to `internal/meet/hub` or the stream; `make native-test`'s
- own `meetcore` race sub-step; and the native Apple bindings
- (`native/go.mod`), the one place real cgo bridges Go to Objective-C
- (`AGENTS.md`). **`make browser`** needs UDP, which the Claude Code
- bash sandbox blocks (`AGENTS.md`).
+- **`CGO_ENABLED=0 make ci` is the server's cgo-free gate.** Two
+ things run under `CGO_ENABLED=1` and never ship: `make race`, for
+ any change to `internal/meet/hub` or the stream, and `make
+ native-test`'s own `meetcore` race sub-step. The native Mac and
+ iPhone/iPad apps are the one place real cgo does ship — `MeetBridge`
+ is a binary target `MeetKit` links (`native/apple/Package.swift`,
+ `native/scripts/build-mac.sh`) — while every server release stays
+ `CGO_ENABLED=0` (`AGENTS.md`). **`make browser`** needs UDP, which
+ the Claude Code bash sandbox blocks (`AGENTS.md`).
## Brand Commitments
diff --git a/docs/superpowers/reviews/2026-09-14-slice-6-record.md b/docs/superpowers/reviews/2026-09-14-slice-6-record.md
index 93f82b3..2030b13 100644
--- a/docs/superpowers/reviews/2026-09-14-slice-6-record.md
+++ b/docs/superpowers/reviews/2026-09-14-slice-6-record.md
@@ -38,10 +38,13 @@ file is its substance).
pseudo-version (`go.mod`), brought in by the Home integration.
Recorded as: condition unmet, adoption done by another route,
nothing changed here.
-- **No deploy from this slice.** The change is documentation. Edge
- (`meet.oficina.works`) is promoted by hand by Paul (`651cff2` on
- 2026-09-12), with discussion 14's web UI work queued behind a live
- check. A redeploy would drop live calls for nothing; a queued
+- **No deploy from this slice.** The change is documentation,
+ checkable from this diff. As observed on 2026-09-14 from `carlos
+ channels` and `oficina/meet` discussions 11 and 14, edge
+ (`meet.oficina.works`) was being promoted by hand by Paul (`651cff2`
+ on 2026-09-12), with discussion 14's web UI work queued behind a
+ live check — state as of that observation, not asserted as current
+ here. A redeploy would drop live calls for nothing; a queued
promotion is never announced as live (programme §5). The domain was
attached before this slice.
- **Copy review is waived** for this round by Paul's steering on
@@ -120,17 +123,29 @@ round-1 section):
- **S6-1 — P2, deployment settings undocumented. Fixed:** README's Deploying section enumerates every required setting and which refuse startup outside `-env development`.
- **S6-2 — P2, the deploy-wait guarantee had an unstated prerequisite. Fixed:** README and AGENTS.md now state the `carlos apps build-probe` prerequisite and the `X-Carlos-Version` fallback it stands in for.
-- **S6-3 — P2, the scriptless exception was narrower than shipped. Fixed:** README, PRODUCT.md and spec §9 now name the chat panel and the live admission controls as script-gated too, alongside browser media participation; §15.18 notes the widening.
-- **S6-4 — P2, the cgo claims didn't match the Makefile. Fixed:** README and PRODUCT.md now say `CGO_ENABLED=0 make ci` and name `make race`, `make native-test`'s `meetcore` sub-step, and the native Apple bindings as the three `CGO_ENABLED=1` cases, none of them shipped.
+- **S6-3 — P2, the scriptless exception was narrower than shipped. Fixed, then completed in Codex round 2 (S6-16):** README, PRODUCT.md and spec §9 name the chat panel and the live admission controls as script-gated too, alongside browser media participation; AGENTS.md's two matching lines, left behind in round 1, were widened the same way, so §9's "the binding file and the code agree" holds again; §15.18 notes both.
+- **S6-4 — P2, the cgo claims didn't match the Makefile. Fixed, then corrected again in Codex round 2 (S6-14):** README and PRODUCT.md say `CGO_ENABLED=0 make ci` and name `make race` and `make native-test`'s `meetcore` sub-step as the two `CGO_ENABLED=1` cases that never ship; the native Mac and iPhone/iPad apps are named separately as the one place real cgo does ship (`MeetBridge`, linked by `MeetKit`), while server releases stay cgo-free.
- **S6-5 — P2, the SMTP fallback description was backwards. Fixed:** README now says the platform supplies `CARLOS_SMTP_FROM` too, which `MEET_SMTP_FROM` optionally overrides.
-- **S6-6 — P2, suite restatements remained under §0.2. Fixed:** rows 3, 6, 9 and 15 and the two paragraphs below the table cite section and ruling number only now; PRODUCT.md's actor sentence likewise; ruling 16's off-main provenance kept as before.
+- **S6-6 — P2, suite restatements remained under §0.2. Fixed, then completed in Codex round 2 (S6-15):** rows 3, 6, 9 and 15 cite section and ruling number only; the discussion-4 paragraph does too; the §5.2 paragraph, shortened but not emptied in round 1, is now the bare citation "Doctrine §5.2 is also relied on, for §2."; PRODUCT.md's actor sentence likewise; ruling 16's off-main provenance kept as before.
- **S6-7 — P2, PRODUCT.md cited a section that denies native clients shipped. Fixed:** spec §8.4 gained a 2026-09-14 amendment recording the shipped milestone (`v0.1.0` at `9225ec2`) and the browser-approval handoff (`86ed9f3`); PRODUCT.md's two native-client citations now point at that amendment.
- **S6-8 — P2, the shipped same-network sentence was missing from the README. Fixed:** the relay paragraph now quotes `join.html`'s floor sentence verbatim.
- **S6-9 — P2, the route inventory undercounted confirmation pairs. Fixed:** PRODUCT.md now says "five destructive confirmation pairs"; spec §9 now says "every confirm page (five)".
- **S6-10 — P3, Share's legacy behavior was omitted. Fixed:** README now distinguishes a legacy meeting's first Share (mints a new recoverable invitation alongside the old one) from every retrieval after.
- **S6-11 — P3, "60 requests a minute" obscured the permitted burst. Fixed:** README and PRODUCT.md now say "one request a second sustained, with a burst of 60".
- **S6-12 — P2, the canary creation command relied on undocumented app/account defaults. Fixed:** README's `instances create` now carries `--app meet --account oficina` and states the named environment bundle must already exist, created separately.
-- **S6-13 — P3, disposition coverage and external-state attribution were incomplete. Fixed:** README and PRODUCT.md now link to spec §15.18 as the disposition of record for the three deferred/declined items; the platform-124, no-Estilo-tag and credits-branch-canary claims are now attributed to dated records rather than presented as independently verified current state.
+- **S6-13 — P3, disposition coverage and external-state attribution were incomplete. Fixed, then completed in Codex round 2 (S6-17):** README and PRODUCT.md link to spec §15.18 as the disposition of record; the platform-124, no-Estilo-tag and credits-branch-canary claims are attributed to dated records. Round 1 left the production-promotion state itself (edge's served commit, the queued work) asserted as current fact in §15.18 and this record's own §3; both now attribute it to what `carlos channels` and `oficina/meet` discussions 11 and 14 showed on 2026-09-14, keeping "this slice changes documentation only" as the one claim checkable from the repository.
+
+**Codex round 2** (independent, static, scope `2a6eee4`): verdict
+**request changes** — four findings, S6-14 through S6-17, against
+round 1's own fixes; the other twelve confirmed fixed as claimed
+(table in the round's own report). All four applied in one commit
+(`.superpowers/sdd/2026-09-14-meet-slice-6-deploy/fix-wave-report.md`,
+round-2 section):
+
+- **S6-14 — P2, PRODUCT.md still claimed the native cgo bridge never ships. Fixed:** "three things run under `CGO_ENABLED=1`, none of them shipped" is now two — `make race` and `make native-test`'s `meetcore` sub-step, both test-only — with the native Mac and iPhone/iPad apps named separately as the one place real cgo does ship (`MeetBridge`, a `native/apple/Package.swift` binary target `MeetKit` links, built by `native/scripts/build-mac.sh`), while server releases stay `CGO_ENABLED=0`. This record's own S6-4 line is corrected to match.
+- **S6-15 — P2, the guest-grant sentence was shortened, not removed. Fixed:** "Doctrine §5.2 is also relied on, for §2: a guest grant is stored, not asked for" drops its second clause — still a paraphrase of doctrine §5.2's grant authority — leaving the bare citation "Doctrine §5.2 is also relied on, for §2."
+- **S6-16 — P2, the widened scriptless exception left `AGENTS.md` behind. Fixed:** `AGENTS.md`'s two scriptless lines (the "Screens work with JavaScript disabled" rule and the UX-conventions sentence) now name the chat panel and admission controls alongside browser media participation, matching §9, README and PRODUCT.md; §9's own "the binding file and the code agree" is corrected to say when each half landed; §15.18 records the correction.
+- **S6-17 — P3, production state was asserted as current rather than attributed. Fixed:** §15.18's production-promotion bullet and this record's own §1 and §3 now attribute edge's served commit and the queued web UI work to what `carlos channels` and `oficina/meet` discussions 11 and 14 showed on 2026-09-14, rather than presenting it as established from this repository; "this slice changes documentation only" stays stated as fact, since the diff itself proves it.
CODEX_ROUNDS_PLACEHOLDER
@@ -145,10 +160,13 @@ CODEX_ROUNDS_PLACEHOLDER
line).
- **The Estilo theme tag.** No tagged release exists; the pseudo-version
pin stays until one does. **Destination: oficina/estilo.**
-- **The production promotion of main's head.** Edge serves `651cff2`;
- main is at `9225ec2` plus this slice. `9225ec2` changed native code
- only; this slice changes documents only. **Destination: Paul**, who
- is promoting by hand while discussion 14's web UI work is queued.
+- **The production promotion of main's head.** As observed on
+ 2026-09-14 from `carlos channels` and `oficina/meet` discussions 11
+ and 14, edge was serving `651cff2` with discussion 14's web UI work
+ queued behind it — state as of that observation, not asserted as
+ current here. Main is at `9225ec2` plus this slice, checkable from
+ this repository: `9225ec2` changed native code only, and this slice
+ changes documents only. **Destination: Paul**, who promotes by hand.
- **Unauthenticated flood control on `/api/v1`** (from slice 5).
**Destination: carlos/platform**, unchanged.
- **Platform discussion 124** (`carlos canary` and the one-label host).
diff --git a/docs/superpowers/specs/2026-09-07-meet-design.md b/docs/superpowers/specs/2026-09-07-meet-design.md
index 0523d0e..8eae61f 100644
--- a/docs/superpowers/specs/2026-09-07-meet-design.md
+++ b/docs/superpowers/specs/2026-09-07-meet-design.md
@@ -96,8 +96,7 @@ This app cites the suite sharing doctrine (`oficina/suite`,
| 15 | §3: a meeting link is a capability to obtain a **guest grant at sign-in**, the `granted` rung, and never a way into a room without a name. Ruled for Meet on `oficina/suite` discussion 3, Paul, 2026-09-06. |
| 16 | The token at rest (§3.1), as amended by the 2026-09-12 sharing update at the top of this file: invitation tokens are hash-indexed with a sealed copy so a member can share the current one again; agent credentials stay hash-only and shown once (§15.17). Ruling 16 is on the doctrine's `worktree-worktree-token-at-rest` branch (suite discussion 2), not on main on 2026-09-14; Meet adopts it early so it never has the Docs defect that produced it. |
-Doctrine §5.2 is also relied on, for §2: a guest grant is stored, not
-asked for.
+Doctrine §5.2 is also relied on, for §2.
Also consumed: `oficina/suite` discussion 4, for the drive surface
(§8); the CARLOS media roadmap
@@ -1029,10 +1028,11 @@ screen and the room (§3.3, §3.4): title, start time, standing, floor
sentence, the paragraph that says what needs script, and navigation to
everything that does not.
-`AGENTS.md`'s line "screens work with JavaScript disabled" gains, in
-slice 2, the one exception in those words, so the binding file and the
-code agree from the commit that introduces the exception. `PRODUCT.md`
-records it in "what is deliberately not here" in slice 6.
+`AGENTS.md`'s line "screens work with JavaScript disabled" gained, in
+slice 2, the one exception in those words; on 2026-09-14, alongside
+this section's own widening, it gained the other two (§15.18), so the
+binding file and the code agree again. `PRODUCT.md` records it in
+"what is deliberately not here" in slice 6.
Hand-written static JavaScript, no bundler, no npm, in three files:
`devices.js` (the holding screen), `room.js` (signalling, resume and
@@ -2180,7 +2180,11 @@ than leaving the bare word to carry both.
media participation was never the only script-gated part of a room —
the live admission controls have needed script since slice 2 and the
chat panel since slice 4 — and §9, the README and `PRODUCT.md` now say
-so rather than "and nothing wider."
+so rather than "and nothing wider." Codex round 2 found the binding
+file left behind: `AGENTS.md` still named only the media exception, so
+§9's own "the binding file and the code agree" was false again the
+moment §9 widened. `AGENTS.md`'s two scriptless lines were widened to
+match on 2026-09-14, in the same commit.
- **Delivered.** `README.md`, with the scriptless floor sentence and
the relay paragraph first. `PRODUCT.md`. `AGENTS.md`'s deploy notes.
@@ -2207,7 +2211,10 @@ so rather than "and nothing wider."
condition having been met after all.
- **Declined: the production promotion.** A docs-only slice has
nothing to promote that changes behaviour, and a redeploy would drop
- every live call for no reason (§15.11). `meet.oficina.works` is
- being promoted by hand by Paul (`651cff2`, 2026-09-12) with other
- sessions' work queued behind live checks; this slice does not touch
- that queue or announce a deploy of its own.
+ every live call for no reason (§15.11). As observed on 2026-09-14
+ from `carlos channels` and `oficina/meet` discussions 11 and 14,
+ `meet.oficina.works` was being promoted by hand by Paul (`651cff2`,
+ 2026-09-12) with other sessions' work queued behind live checks —
+ state as of that observation, not asserted as current here. This
+ slice does not touch that queue or announce a deploy of its own,
+ which is checkable from this diff alone.