- README: shipped concurrency/HTTP/WebSockets sat in the roadmap as "not yet available"; "no package manager" contradicted [deps]; the deps example would not have compiled (the key IS the module name) - runtime/README: leads with wovm, wo-rt.c demoted to a historical section; dropped 2 nonexistent recipes, crates/rt, @gc refcounting, 13 suites -> 18 - employee + log-watcher READMEs claimed "does not compile"; both are gates - error catalog: +10 emitted codes incl WO-E250, the only diagnostic the shipped query surface raises; recorded why the sweep rotted - language-surface: group-by parses, then the typechecker refuses it - 00-code-review + 00-link-audit re-run; history kept, not rewritten - 48 dead Rust-era exploration links de-linked rather than re-pointed (their prose names the retired plan by number); successor map -> discarded.md - 08-project-structure: compiler/plan/ never existed; corpus has 9 dirs, 5 empty - releasing.md: dropped a --draft step the workflow never had - new docs/00-doc-audit.md: findings + disposition, incl one row where the audit was wrong and the doc it accused was right - status folders removed: 34 stories flat, status only in frontmatter; 252 links recomputed from resolved paths; board/board-views/structure retaught - story 24 -> in-progress, since frontmatter is now the only truth - new iteration 38: fs mutation verbs + net.connect, the two capability families no iteration owned - new iteration 39: gofiber/fiber v3.5.0 parity study. The ledger called CSRF/sessions unblocked by iteration 34's HMAC, but the runtime has no source of randomness at all - linkcheck skips .dev/.superpowers: 0 broken paths, 0 bad anchors Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
60 lines
3.2 KiB
Markdown
60 lines
3.2 KiB
Markdown
---
|
||
slice: "24" # the story that owns the status; see stories/24-chat-websocket-workload.md
|
||
status: in-progress
|
||
---
|
||
|
||
# Active slice — chat + actor lifecycle (iteration 24, absorbing 31 + 34)
|
||
|
||
Branch `chat-ws-lifecycle`. Spec:
|
||
[`superpowers/specs/2026-08-23-chat-websocket-actor-lifecycle-design.md`](superpowers/specs/2026-08-23-chat-websocket-actor-lifecycle-design.md)
|
||
· plan:
|
||
[`superpowers/plans/2026-08-23-chat-ws-lifecycle.md`](superpowers/plans/2026-08-23-chat-ws-lifecycle.md)
|
||
· board: [`stories/00-status.md`](stories/00-status.md).
|
||
|
||
## Progress (2026-08-23)
|
||
|
||
- ✅ **T1 crypto** (`d14fa9f`): sha1/sha256/hmac_sha256, ids 85–87, RFC
|
||
vectors 18/0, corpus pin. Story 34's C-builtin resolution delivered.
|
||
- ✅ **T2 bounded mailboxes** (`92754a8`): cap 1024 + `WO_MAILBOX`,
|
||
sender-side atomic reserve, WO_T_ACTOR (trap 13) catchable. Plus a
|
||
pre-existing compiler fix: try-arm Text places (bare `e.msg`) now
|
||
copy before the arm's scope dies (was ASan use-after-free + SEGV).
|
||
- ✅ **T6 WS upgrade** (`79cfa01`): `ws_accept` + accept-key + the
|
||
101 hijack sentinel; plain HTTP byte-identical (web-app 26/26).
|
||
- ✅ **T7 frame codec** (`7ad2ced`): pure-`.wo` RFC 6455 parse/serialize,
|
||
probe-verified against the RFC's own bytes.
|
||
- ✅ **T3 call/reply** (`ed69841`): `call` parks + typed scalar reply
|
||
(WO-E226 through actor-M erasure); actor DEATH landed with it —
|
||
callers never hang (mid-call + to-dead both trap catchably). Fixed
|
||
TRAPF's fiber-death leak/dangle en route.
|
||
|
||
Every landed task: full battery 12/12, fresh-built.
|
||
|
||
## Pending
|
||
|
||
- ⬜ **T4 monitor(watched, observer, msg)** — id 89. Most of the death
|
||
machinery exists (`actor_die`); T4 adds the per-actor monitor list,
|
||
the death walk delivering the observer's own M-typed notice,
|
||
monitor-of-already-dead firing immediately, full-observer notice =
|
||
disclosed stderr drop. Three-argument form (spec deviation, disclosed
|
||
in the plan: the caller may be `main`, which has no mailbox).
|
||
- ⬜ **T5 time.after(ms, addr, msg)** — id 90, one-shot, no cancel;
|
||
rides the T4 deadline plumbing; delivery = runtime send (full = drop
|
||
+ stderr line, dead = silent). Corpus: timer-delivery,
|
||
timer-generation (the cancel idiom). Both WO_IO backends.
|
||
- ⬜ **T8 chat sample** — docs/examples/chat: registry (`call`'s first
|
||
consumer), room actors (cap-trap drops slow members, `monitor` reaps
|
||
dead writers), reader/writer actor pair per connection over
|
||
ws_accept/wsframe; SIGTERM close choreography.
|
||
- ⬜ **T9 chat gate** — scripts/chat-accept.sh + raw-RFC6455 python
|
||
client; the spec's five checks (functional cross-shard — also the
|
||
deferred cross-shard `call` proof — handshake vector, 1k soak with a
|
||
`WO_MAILBOX=8` sub-run, drain under both backends + ASan, battery).
|
||
- ⬜ **T10 closeout** — stories 24/31/34 → done/ with banners (note the
|
||
scalar-reply v1 narrowing + three-argument monitor deviations), board
|
||
standup entry, graph nodes, framework README ledger rows, runtime +
|
||
chat CODE-LOGIC sections, delete this marker. Final battery.
|
||
|
||
This file is deleted when the slice lands (board convention). It lives flat in
|
||
`docs/` rather than a status folder — since 2026-08-26 no directory in this repo
|
||
encodes state; `status:` above is the only place it is recorded.
|