docs(link): what a 4 MB spawn file does to a 1 MiB wire (Phase 7) #242

Merged
whitlocktech merged 2 commits from docs/asset-bridge-p7 into main 2026-09-14 07:36:35 +00:00
Member

Phase 7 of the Asset Bridge. Pairs with servuo-plugins#34 and Module-uo#40.

link/v8.md

§10.1 — the phase as written could not work. §10 said the shard would serve tree/<label> → bytes. Spawns/trammel.xml is 4.03 MB, the sidecar discards any inbound line over 1 MiB, and that file as one base64 row is 5.4 MiB: dropped, timed out, re-requested forever, with no error in it anywhere. Two files on a stock tree are in that state. The section now carries the label-group table and the three carriages measured before anything was written — and the argument for why the winner is not the smallest one: whole-file gzip is 1.21 MB against chunked gzip's 1.26 MB and is bounded by nothing, so it works on every tree anyone would test and fails on the first one nobody did. The chunk is the guarantee; the compression is only the saving.

§10.2 — it is a tree family, not §14's tree.* commands. Phase 5's registry already owns the single slot, the envelope, the key ceiling and the mid-import guard, so reusing it left link with nothing to do for the third phase running. The consent is its own — Bridge.TreeEnabled — because declining to serve an EA-licensed client is not the same as declining to serve the spawn files an operator wrote, and the atlas would have been the casualty.

§10.3 — the two defects, and which harness found which. An empty catalog is not an absent one. And GZipStream writes nothing at all for zero bytes of input, which stock ServUO's two empty decoration files walk straight into — an offline probe called that a success, because .NET's own decompressor reads an empty stream as empty data and the declared length and hash both agree with it. Only a live walk through a reader on another runtime disagreed.

§10.4 — one canonical read order, because the decoration index keeps the first item id it sees and the two readers agreed by coincidence rather than construction. PARSER_VERSION 4 → 5, and the fingerprint moves to raw bytes.

§10.5 — the end-to-end numbers against a live shard.

§14 loses the tree.manifest / tree.fetch row and /tree/*, and gains the phase-7 paragraph. §16's phase 7 row and §15's obligations are updated. §17 gains decision 12 — including the one that departed from the recommendation: boot never calls the shard, so an install on the bridge has no automatic refresh at all, which the panel, the CLI and the log all say out loud.

website/SPAWN_ATLAS.md

Rewritten around two sources and no longer requires a shared filesystem. "What it is not" was claiming the atlas never touches the bridge — true until this phase, and bought at the price of the website reading the shard's disk. The boot-path, CLI and sources sections now distinguish the two ends, the sources table gains Data/Decoration/**/*.cfg (and the note that two of its 120 files are zero bytes on a stock tree), and the parser-version section records both the canonical order and the raw-byte fingerprint.

Protocol stays 8; EXTRACTOR_VERSION stays 3.

🤖 Generated with Claude Code

https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4

Phase 7 of the Asset Bridge. Pairs with **servuo-plugins#34** and **Module-uo#40**. ## `link/v8.md` **§10.1 — the phase as written could not work.** §10 said the shard would serve `tree/<label>` → bytes. `Spawns/trammel.xml` is 4.03 MB, the sidecar discards any inbound line over 1 MiB, and that file as one base64 row is 5.4 MiB: dropped, timed out, re-requested forever, with no error in it anywhere. Two files on a *stock* tree are in that state. The section now carries the label-group table and the three carriages measured before anything was written — and the argument for why the winner is **not** the smallest one: whole-file gzip is 1.21 MB against chunked gzip's 1.26 MB and is bounded by nothing, so it works on every tree anyone would test and fails on the first one nobody did. The chunk is the guarantee; the compression is only the saving. **§10.2 — it is a `tree` family, not §14's `tree.*` commands.** Phase 5's registry already owns the single slot, the envelope, the key ceiling and the mid-import guard, so reusing it left `link` with nothing to do for the third phase running. The *consent* is its own — `Bridge.TreeEnabled` — because declining to serve an EA-licensed client is not the same as declining to serve the spawn files an operator wrote, and the atlas would have been the casualty. **§10.3 — the two defects, and which harness found which.** An empty `catalog` is not an absent one. And `GZipStream` writes nothing at all for zero bytes of input, which stock ServUO's two empty decoration files walk straight into — an offline probe called that a success, because .NET's own decompressor reads an empty stream as empty data and the declared length and hash both agree with it. Only a live walk through a reader on another runtime disagreed. **§10.4 — one canonical read order**, because the decoration index keeps the first item id it sees and the two readers agreed by coincidence rather than construction. `PARSER_VERSION` 4 → 5, and the fingerprint moves to raw bytes. **§10.5 —** the end-to-end numbers against a live shard. **§14** loses the `tree.manifest` / `tree.fetch` row and `/tree/*`, and gains the phase-7 paragraph. **§16**'s phase 7 row and **§15**'s obligations are updated. **§17** gains decision 12 — including the one that departed from the recommendation: boot never calls the shard, so an install on the bridge has **no** automatic refresh at all, which the panel, the CLI and the log all say out loud. ## `website/SPAWN_ATLAS.md` Rewritten around two sources and **no longer requires a shared filesystem**. "What it is not" was claiming the atlas never touches the bridge — true until this phase, and bought at the price of the website reading the shard's disk. The boot-path, CLI and sources sections now distinguish the two ends, the sources table gains `Data/Decoration/**/*.cfg` (and the note that two of its 120 files are zero bytes on a stock tree), and the parser-version section records both the canonical order and the raw-byte fingerprint. Protocol stays **8**; `EXTRACTOR_VERSION` stays **3**. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
wtclaude added 1 commit 2026-09-14 07:03:00 +00:00
10 said the shard would serve `tree/<label>` -> bytes. Measured against a stock
57.4 tree it cannot: Spawns/trammel.xml is 4.03 MB, the sidecar discards any
inbound line over 1 MiB, and that file as one base64 row is 5.4 MiB. It would be
dropped, time out, and be re-requested forever with no error in it anywhere --
and two files on a STOCK tree are in that state.

10.1 records the three carriages measured before anything was written, and why
the winner is not the smallest one: whole-file gzip is 1.21 MB against chunked
gzip's 1.26 MB and is bounded by nothing, so it works on every tree anyone would
test and fails on the first one nobody did. The chunk is the guarantee; the
compression is only the saving.

10.2: it is a `tree` family on assets.fetch, not 14's separate tree.* commands
-- phase 5's registry already owns the single slot, the envelope, the ceiling
and the mid-import guard, so reusing it left `link` with nothing to do for the
third phase running. Its CONSENT is its own, though: Bridge.TreeEnabled, because
declining to serve an EA-licensed client is not the same as declining to serve
the spawn files an operator wrote, and the atlas would have been the casualty.

10.3 records the two defects and which harness found which. An empty `catalog`
is not an absent one. And GZipStream writes nothing at all for zero bytes of
input, which stock ServUO's two empty decoration files walk straight into -- an
offline probe called that a success, because .NET's own decompressor reads an
empty stream as empty data and the declared length and hash both agree with it.
Only a live walk through a reader on another runtime disagreed.

10.4: one canonical read order, because the decoration index keeps the first
item id it sees and the two readers agreed by coincidence rather than by
construction. PARSER_VERSION 4 -> 5.

10.5 has the end-to-end numbers against a live shard. 17 gains the phase's three
decisions, including the one that departed from the recommendation: boot never
calls the shard, so an install on the bridge has no automatic refresh at all.

SPAWN_ATLAS.md is rewritten around the two sources and stops requiring a shared
filesystem. Protocol stays 8; EXTRACTOR_VERSION stays 3.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
wtclaude added 1 commit 2026-09-14 07:33:56 +00:00
10.3 recorded the empty-`catalog` defect as a tree-family bug. It was inline in
three places -- the body catalogue, statics and land, and the tree -- and all
three now share one comparison. Records why BridgeLeases keeps the other shape,
and names the two defects as one kind of thing: a value meaning "I am not
asserting anything" has two spellings on a wire, and a stock install finds
whichever one you did not think about.

Adds the whole-plane check against a stock ServUO install: every family asked
with a real catalog, an absent one and an empty one, plus the cross-family and
stale-catalog refusals and both of stock ServUO's empty decoration files.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
whitlocktech merged commit ae0efe26b3 into main 2026-09-14 07:36:35 +00:00
whitlocktech deleted branch docs/asset-bridge-p7 2026-09-14 07:36:38 +00:00
Sign in to join this conversation.
No description provided.