---
name: v0310-attr-passthrough
description: "2026-08-26 SHIPPED v0.31.0 — generic envelope-attribute pass-through closes the 3-time recurrence class at render_frames; ALL 3 acceptance arms now field-closed (minted-name probe). Also: my gate had been RED for 3 commits."
metadata: 
  node_type: memory
  type: project
  originSessionId: 2c19f52d-24b6-4027-8f3f-a5841747c348
  modified: 2026-08-26T02:04:11.042Z
---

**SHIPPED + FIELD-OBSERVED same night.** claude-spt v0.31.0 generalizes the v0.30.0 `seal` carry into
the class rule core published as `REQ-EVENT-ATTR-PASSTHROUGH` (riding core v0.63.0).

`hook::render_frames` kept `from` + body and dropped every other attribute, so each new one had to be
caught BY NAME after a field loss: `mnemonics-json` (v0.26.2), `trust-warning` (v0.29.x), `seal`
(v0.30.0). ⭐ **Three losses at ONE seam is a recurrence class, and a by-name fix cannot close it —
the next attribute is unnamed by construction, and the deletion is invisible at the site that drops
it, because nothing there ever names what it dropped.**

Built: an attribute ITERATOR over the opening tag; carry every non-consumed attribute onto
`<sptc_messages>` in wire order, value RAW and attr-escaped, in ATTRIBUTE POSITION (the v0.30.0
mechanism widened — unescaped into body/frame context a crafted value forges a delivery at our frame
level). `CONSUMED_ATTRS` = `from`/`seal`/`trust-warning`/`mnemonics-json`, re-derived against the drop
test at build time, and **it may never grow without proof — one silent addition rebuilds the
forbidden allowlist**. Name grammar `[a-z0-9_-]+` enforced; a non-matching tag-position span is
refused, never re-emitted, and reported to the AGENT in `<sptc_frame_integrity>` — ordered ahead of
even the trust warning, because every other block is derived from that same tag, so a caution read out
of a damaged frame must not be believed before the notice that the frame is damaged.

⭐⭐ **`type` rides — and that changed the bytes of EVERY delivery** (30 expectations updated). The drop
test is what settled it: `render_frames` never read `type`, so notify and msg rendered
byte-identically. Corollary that bit: **the no-regression control must be written on an envelope of
ONLY consumed attributes** — a byte-identity control on a `type`-bearing envelope asserts the defect
back.

**Field, unstaged:** seconds after the node updated, an unrelated peer answer arrived as
`<sptc_messages from="alchemy-1" type="msg">` where it had been bare `from=` before. doyle observed
the same on his side (caveating that he had not verified his own adapter version — frames observed,
not mechanism). Scoped: proves `type` survives on a real same-node delivery; does NOT discharge the
unknown-attribute arm (a name this binary has never heard of, which it cannot mint for itself) and
says nothing cross-node. That arm rides the operator's sealed-send field acceptance as arm 3, with
doyle's **vacuity rule pre-registered: if the envelope carries nothing beyond the consumed set, the
arm is VACUOUS, not passed.**

**ARM 3 CLOSED 2026-08-25 — and the two candidates that looked like proof were both worthless.**

1. `type` riding (above) is an attribute the binary DOES know; it proves the carry runs, not that an
   unknown name survives.
2. doyle then offered sealed deliveries whose `<sptc_seal … token="…">` frames arrived with `token`
   intact, asking whether `token` was in my consumed set. **Ruling: NOT evidence — it is the exact
   opposite.** `token` is not an envelope attribute at all; it is the value of `seal=`, which IS in
   `CONSUMED_ATTRS`, re-expressed BY NAME by hand-written `seal_citation_block()` (`hook.rs:492`),
   shipped in v0.30.0 at `09e1811` — predating the pass-through entirely. **Zero pass-through code ran
   to produce it.** ⭐ *A downstream frame rendering an attribute intact says nothing about the generic
   path — check WHICH code authored those bytes before counting them as evidence for it. The most
   special-cased attribute in the binary reads, at the far end, exactly like an unknown one that
   survived.*
3. What actually closed it: doyle **MINTED a new attribute name** — `arm3-probe` — after v0.31.0
   shipped, so it provably cannot be in the consumed set, and sent it as a pre-formed typed envelope
   through the stock CLI → daemon → spool path. It rendered intact on his hook-inject frame:
   `<sptc_messages from="doyle" type="msg" arm3-probe="minted-2026-08-25T21-05">`. ⭐⭐ **The only
   honest test of an unknown-name carry is a name minted AFTER the ship — I could not mint one for
   myself (any name I chose, I would have known), so this arm structurally required the peer.**

All three acceptance arms closed; recorded on releases `#222`/`#223`.

⭐⭐⭐ **MY GATE HAD BEEN RED FOR 3 COMMITS AND I DID NOT KNOW.** `ATTR-PASSTHROUGH-PLAN.md` was minted at
root without the mirror-EXCLUDES line every other root plan carries, so the leak guard tripped on its
private-board citation from `d2355ed` onward. Nothing leaked (the v0.30.0 mirror predates the file),
but I had declared work done on a gate I never re-ran after adding a file. Fixed by excluding the root
plan CLASS, not the one file that tripped — **the other two pass the guard today only because neither
happens to name the private home YET, which is luck, not a property.** See
[[mirror-guard-scope-and-excludes]]: the guard pins org/repo literals only, so "guard passed" has
never meant "belongs in public".

Release: gates PASS, `traceable-reqs check` exit 0, 524 units, **mutation-checked (7 mutations, each
caught by its intended test)** per the [[v0300-seal-carry]] lesson. Three triples rebuilt with 0.31.0
embedded and 0.30.0 absent from all three. Tag `v0.31.0`, published to BigscreenVR/claude-spt-bs
(asset + body verified at the consumer), mirrored to SaberMage/claude-spt (commit `4c997a9`, verified
via `git ls-remote`). Node updated 0.30.0 → 0.31.0. No cplugs republish. `REQ-EVENT-ATTR-PASSTHROUGH-
RENDER` doc/impl/unit; KNOWN-HAZARDS 2.19.

Gate story: [[node-local-book-gate]]. Board: only `#1` open, PARKED.
