docs(events): the acceptance walk, and the three contracts it moved (Phase 16a) #228

Merged
whitlocktech merged 1 commits from docs/events-p16a-walk into edge 2026-09-09 13:46:53 +00:00
Member

Phase 16 is split into 16a / 16b / 16c

The phase as written asks for the walk "first, against released artefacts" and then the cutover. Those two sentences cannot both hold: link, servuo-plugins and Module-uo all release on push to main, so no released artefact carrying events can exist until after the cutover. Engagement Phase 13 met the same wall and resolved it the other way — it cut over first and walked from main.

Decided the other way here (org lead, 2026-09-09), because every walk in this workstream has found defects and a defect found on edge is a reviewed PR rather than a hotfix to main:

  • 16a — the walk, against artefacts built from edge exactly the way a release builds them.
  • 16b — the cutover, then a re-verify against the real released bundle, so the delivery path is still proved, just second.
  • 16crunicgateway.com and .profile.

EVENTS_PLAN.md gains the 16a record: the rig, all three deliberate failures passing, the six defects, the one finding withdrawn, and what each fix was verified against.

Three contracts move

Each because the walk proved the built thing did not match the written one.

link/v6.md rule 2 — a refusal does not spend its key. It had two cases, throw and return, and needed a third: a handler that ran to completion and deliberately refused did nothing, so freezing that refusal as the key's answer made a refusal that waiting fixes impossible to retry past. uo.world.save is the case that found it — six attempts, one frozen sentence. The section now carries the rule the release rests on: do not answer *.error after changing the world, because the shard cannot verify "nothing happened" and takes the .error kind as the claim. [bridge status gains refused=.

website/MODULE_API.mdrevert's idempotencyKey identifies a dispatch; it is not a key to send on the undo. The paragraph explained what the key is FOR and never said what it is not, and module-uo read it the other way: every despawn went out under the key its spawn had used, so a store keying on the key alone answered the undo with the DO's reply and teardown became a no-op that reported success — the ledger reading reverted while the shard still held every object.

website/EVENTS.md §I — the public calendar matches a run that OVERLAPS the window. The row promised "upcoming, live and recent" and the built route served only the first, because it read the start instant and a live run has already started. The default window now reaches back so "recent" has somewhere to live, and projections are forecast from now rather than into that tail.

Diffs

26/5, 10/0, 1/1, 59/0 — content only, no CRLF rewrite (checked against --numstat).

Pairs with Module-uo#33, website#198 and servuo-plugins#25.

  • AI-assisted: written with Claude Code (Claude Opus 5).

🤖 Generated with Claude Code

https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4

## Phase 16 is split into 16a / 16b / 16c The phase as written asks for the walk *"first, against released artefacts"* and then the cutover. **Those two sentences cannot both hold**: `link`, `servuo-plugins` and `Module-uo` all release on push to **`main`**, so no released artefact carrying events can exist until after the cutover. Engagement Phase 13 met the same wall and resolved it the other way — it cut over first and walked from `main`. Decided the other way here (org lead, 2026-09-09), because every walk in this workstream has found defects and a defect found on `edge` is a reviewed PR rather than a hotfix to `main`: - **16a** — the walk, against artefacts built from `edge` exactly the way a release builds them. - **16b** — the cutover, then a re-verify against the **real** released bundle, so the delivery path is still proved, just second. - **16c** — `runicgateway.com` and `.profile`. `EVENTS_PLAN.md` gains the 16a record: the rig, all three deliberate failures passing, the six defects, the one finding **withdrawn**, and what each fix was verified against. ## Three contracts move Each because the walk proved the built thing did not match the written one. **`link/v6.md` rule 2 — a refusal does not spend its key.** It had two cases, throw and return, and needed a third: a handler that ran to completion and deliberately refused did nothing, so freezing that refusal as the key's answer made a refusal that *waiting fixes* impossible to retry past. `uo.world.save` is the case that found it — six attempts, one frozen sentence. The section now carries the rule the release rests on: **do not answer `*.error` after changing the world**, because the shard cannot verify "nothing happened" and takes the `.error` kind as the claim. `[bridge status` gains `refused=`. **`website/MODULE_API.md` — `revert`'s `idempotencyKey` identifies a dispatch; it is not a key to send on the undo.** The paragraph explained what the key is FOR and never said what it is not, and `module-uo` read it the other way: every despawn went out under the key its spawn had used, so a store keying on the key alone answered the undo with the DO's reply and teardown became a no-op that reported success — the ledger reading `reverted` while the shard still held every object. **`website/EVENTS.md` §I — the public calendar matches a run that OVERLAPS the window.** The row promised "upcoming, live and recent" and the built route served only the first, because it read the start instant and a live run has already started. The default window now reaches back so "recent" has somewhere to live, and projections are forecast from now rather than into that tail. ## Diffs `26/5`, `10/0`, `1/1`, `59/0` — content only, no CRLF rewrite (checked against `--numstat`). Pairs with `Module-uo#33`, `website#198` and `servuo-plugins#25`. - [x] AI-assisted: written with Claude Code (Claude Opus 5). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
wtclaude added 1 commit 2026-09-09 13:33:39 +00:00
Phase 16 is split into 16a (the walk), 16b (the cutover) and 16c
(runicgateway.com + .profile), because the phase as written asked for a walk
"against released artefacts" BEFORE the cutover and all three component repos
release on push to `main`. The walk therefore runs against artefacts built from
`edge` the way a release builds them, and 16b re-verifies against the real bundle.

`EVENTS_PLAN.md` gains the 16a record: the rig, all three deliberate failures
passing, the six defects, the one finding withdrawn, and what each fix was
verified against.

Three contracts move, each because the walk proved the built thing did not match
the written one:

**`link/v6.md` — a refusal does not spend its key.** Rule 2 had two cases, throw
and return, and needed a third: a handler that ran to completion and deliberately
refused did nothing, so freezing that refusal as the key's answer made a refusal
that WAITING FIXES impossible to retry past. The section now carries the case
`uo.world.save` found it with, and the rule the release rests on — do not answer
`*.error` after changing the world. `[bridge status` gains `refused=`.

**`website/MODULE_API.md` — `revert`'s `idempotencyKey` identifies a dispatch; it
is not a key to send on the undo.** The paragraph explained what the key is FOR
and never said what it is not, and `module-uo` read it the other way: every
despawn went out under the key its spawn had used, so a store that keys on the key
alone answered the undo with the DO's reply and teardown became a no-op that
reported success.

**`website/EVENTS.md` §I — the public calendar matches a run that OVERLAPS the
window.** The row promised "upcoming, live and recent" and the built route served
only the first, because it read the start instant and a live run has already
started. The default window now reaches back so "recent" has somewhere to live,
and projections are forecast from now rather than into that tail.

Pairs with `website#`, `Module-uo#` and `servuo-plugins#`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
whitlocktech merged commit 08a8f145dc into edge 2026-09-09 13:46:53 +00:00
whitlocktech deleted branch docs/events-p16a-walk 2026-09-09 13:46:56 +00:00
Sign in to join this conversation.
No description provided.