docs(link): the guide an integrator reads stopped at protocol 6 (Phase 9a)

The Asset Bridge's docs pass, and the acceptance walk that shaped it (v8.md §16
row 9a, §17.13-14). Phase 9 is three legs now: this one, the edge->main cutover,
and the site.

## INTEGRATION.md had stopped at 6 and contradicted itself

Its §2 said "the current version is 6" above examples already carrying
`X-UOLink-Version: 8`, there was no protocol-7 paragraph, and `assets.` appeared
zero times in 1,306 lines. It is the only document an integrator outside this org
has, so it is carried the whole way: the version block corrected, v7 (the event
plane's command half) and v8 (the asset plane) written, a §5 section for the five
routes, 425/422 in the status table, and a caveat that the asset plane is a
working set rather than a stream.

Protocol 7's absence is the Events workstream's debt rather than this one's, but
it cannot be stepped over on the way to 8.

## The operator-facing half

`UPGRADE_NOTES.md` gains the entry an operator reads when this ships: what
changed, the one required action on a Linux host, and the thing that will not
announce itself -- nothing here happens on a restart, so a patched client keeps
serving the old pictures until somebody presses a button.

`installer/INSTALL.md` gains libgdiplus as a prerequisite row and the `doctor`
row that checks it. The index rows for SPAWN_ATLAS and CLILOCS described the
workflows this protocol deleted; v8.md now has an index row of its own, and v7 is
marked as the released protocol.

## The walk

Wiped every asset row and every imported sprite, then walked it as a new
operator: 1,095 portraits in 3.18 s, 67,496 names in 1.42 s, 313 item pictures in
1.38 s, the atlas over the bridge in ~2.0 s, an Update with no drift answered in
0.99 s. Bestiary portraits are the right animals by eye; the marketplace shows
hued item art with cliloc names.

It found two defects (§17.14) and one cutover hazard: module-uo's `edge` is
behind its `main`, missing #35, so the walk measured 0 of 6,455 spawners carrying
a UniqueId. 9b's row says to sync before merging or the cutover ships a
regression.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
This commit is contained in:
2026-09-14 13:06:26 -05:00
parent 1f3c728053
commit 57ecdc8c29
5 changed files with 247 additions and 17 deletions

View File

@@ -13,6 +13,57 @@ action, whether it is required, and what happens if you do nothing.
---
## The Asset Bridge: client artwork and names come off the shard now
**Required on a Linux shard host; one action for everyone else.** Protocol 8, the Asset Bridge
([`../link/v8.md`](../link/v8.md)). The shard reads its own UO client and serves what is in it, so
three things that used to need a desktop, a converter or a shared filesystem no longer do.
### What changed
- **Creature portraits on the bestiary** come from the shard's client, not from files you draw or
place. Portraits you *have* drawn and named in `spawnAtlas.art.json` still win over an imported
one — nothing you made by hand is overwritten.
- **Item and land pictures** appear beside marketplace listings and on character sheets. They arrive
one at a time, shortly after a page asks for one, and refresh themselves after a client patch.
- **The cliloc table** (UO's id → name table, which is what makes an item read "a katana" rather
than "1023721") is decompressed **on the shard**. The old path — install UOFiddler, build a
converter against its `Ultima.dll`, copy a 5 MB file onto the web host — is gone, and so is
`server/tools/cliloc-export/` and `UOFIDDLER.md`.
- **The spawn atlas no longer needs to read your ServUO tree.** It used to require a bind mount or a
shared volume so the *website* could read the shard's `Spawns/*.xml` — the one place the rule
"only the sidecar talks to the shard" was broken, by the internet-facing component. Those files
now cross the bridge like everything else. An existing mount keeps working and is still supported;
you no longer need one.
### What you must do
1. **On a Linux shard host, install `libgdiplus`**`sudo apt-get install libgdiplus`, or see
[`../link/SHARD_PREREQS.md`](../link/SHARD_PREREQS.md). ServUO runs under Mono there, and Mono's
`System.Drawing` is a thin layer over that library, which sits in the **decode** path: without it
the shard cannot read a single sprite. It is not a crash — the panel reports `NO_IMAGING` with
the command to fix it — and names and spawn files are unaffected, because neither touches a
pixel. **Windows shard hosts need nothing.** `installer doctor` checks this for you.
2. **Import once, from Admin → Client Files.** Creature portraits, item pictures and the cliloc
table are all on that page, with the same two buttons: *Update* transfers only what a client
patch actually changed, *Re-import everything* fetches the lot.
### If you do nothing
The site runs exactly as it did — every one of these is additive, and a shard with the asset plane
switched off simply has no pictures. The bestiary shows names as text, item listings show numbers
instead of names, and nothing errors.
### The one thing that will not tell you about itself
**Nothing here happens on a restart.** Boot deliberately never calls the shard for client files: a
client patch is an event you know about and the website does not, and a site that re-read 343 MB of
client files on every restart to discover nothing had changed would pay for the rare case forever.
So after you patch your UO client, the site keeps serving the old pictures and the old names until
somebody presses a button on that page. That is the whole reason the page exists.
---
## Engagement: rules, an in-app inbox, and three things that arrive switched off
**Required.** The engagement workstream, Phases 112. Three separate actions, and the two that matter