Skip to content
This repository was archived by the owner on Aug 12, 2026. It is now read-only.

Commit 2ee4741

Browse files
committed
Bring the incident index current, and fix its arithmetic
It said "Nine", listed nine, and concluded "four of the six" -- a count that had not been recomputed since the list grew. And it stopped before the day that produced the most expensive ones. Six added, each already written up where it changed something: a reflective MemorySegment.get became the headline number of two design notes, at ~1470 ns a call, retracting 0011's cost accounting and 0013's elimination table -- now mechanized as bb reflection, which found eleven more sites val_delete on a result aborts the JVM on the *second* call, so every export passed when tested alone the host silently dropped every function a real WASI world has, which is the failure 0014's own retrospective had predicted about itself Instance/close leaked the store twice, one level apart -- the second survived the fix for the first a truncated view of a source read as the whole, three times: two greps whose [a-z_] excluded digits, and a typedef whose return type was one line above the match 0018's first draft asserted a discriminator that does not exist The closing summary now says both recurring families rather than one. Five of fifteen are "generalised from an experiment that varied more than one thing"; three more are its sibling, "read a truncated view and treated it as the whole". Rules exist for both, added the same day each appeared, and neither prevented the next occurrence -- which is the point the paragraph was already making about independent review, now with the second family named. Claude-Session: https://claude.ai/code/session_01XF5Hfq4Ca2N2XYEzWQQuHt
1 parent 66f19f8 commit 2ee4741

1 file changed

Lines changed: 33 additions & 5 deletions

File tree

‎doc/status.md‎

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ minimum, set for WASI 0.3, is also the component minimum; do not lower it.
151151

152152
## Incidents so far
153153

154-
Nine, all on 2026-07-29/30 — the first two days. Each is written up where it
154+
Fifteen, all on 2026-07-29/30 — the first two days. Each is written up where it
155155
changed something; this is the index.
156156

157157
- **The gate passed locally and failed in CI** — empty `src/` and `test/` that
@@ -189,10 +189,38 @@ changed something; this is the index.
189189
incident, after the untracked empty directories — and the lesson is that a
190190
flake change is a CI change.
191191

192-
**Four of the six are the same failure**: generalising from an experiment that
193-
varied more than one thing. The rule for it was added the same day and did not
194-
prevent the next occurrence. **What has caught it every time is an independent
195-
reviewer with fresh context**, which is worth more than the rule.
192+
- **A reflective `MemorySegment.get` became the headline number of two design
193+
notes.** `(def ^:private I32 ValueLayout/JAVA_INT)` with no type hint made
194+
the result read in a benchmark loop resolve reflectively, at ~1470 ns a
195+
call — so `0011` attributed ~1.57 µs to wasmtime and `0013` built a
196+
seven-row elimination table on top of it. Both retracted. Mechanized: `bb
197+
reflection` is in the gate and found eleven more sites. `clj-kondo` does not
198+
catch it and `*warn-on-reflection*` was off everywhere.
199+
- **`wasmtime_component_val_delete` on a result aborts the JVM on the *second*
200+
call.** Every single call succeeded and each of fourteen exports passed when
201+
tested alone. Recorded in `0014` E.
202+
- **The host silently dropped every function a real WASI world has.**
203+
`instantiate` walked only top-level exports, so interface functions did not
204+
appear and nothing said so. `0014`'s own retrospective had predicted exactly
205+
this shape of failure about itself.
206+
- **`Instance/close` leaked the store, twice, one level apart.** Fixed once by
207+
reordering the in-call check; the same shape survived in the handle loop
208+
inside the guarded block and was found by a review.
209+
- **A truncated view of a source, read as the whole — three times.** Two greps
210+
whose `[a-z_]` class silently excluded digits (`tuple_type_types_count`,
211+
`VALTYPE_S8`, `add_wasip2`), and a typedef whose return type was one line
212+
above the match, which cost a JVM crash and two turns of looking in the wrong
213+
place. `/survey` carries both halves now.
214+
- **A design note asserted a mechanism that does not exist.** `0018`'s first
215+
draft called it measured that a reflected valtype compares equal to a
216+
host-registered resource type. It compares 0. Deferred, then rewritten.
217+
218+
**Five of the fifteen are one failure**: generalising from an experiment that
219+
varied more than one thing. **Three more are its sibling** — reading a
220+
truncated view of a source and treating it as the whole. Rules were added for
221+
both the same day they appeared and neither prevented the next occurrence.
222+
**What has caught them every time is an independent reviewer with fresh
223+
context**, which is worth more than the rules.
196224

197225
## Deliberately not built
198226

0 commit comments

Comments
 (0)