diff --git a/amethyst/plans/2026-09-21-deck-0003-sno.md b/amethyst/plans/2026-09-21-deck-0003-sno.md index b7411bee74..42580406d2 100644 --- a/amethyst/plans/2026-09-21-deck-0003-sno.md +++ b/amethyst/plans/2026-09-21-deck-0003-sno.md @@ -239,6 +239,49 @@ mode), `orient` (winding faces outward so a lit bench can paint backfaces dark), exists nowhere in the DECK), `pose`, `scale`, `hsv`. None of it is needed to *read* an object. All of it would be needed to build a workshop, which is D3's argument. +### 2.5a Checked against the reference implementations, not only the spec + +§8.10 says its two reference implementations are "pinned to one set of golden +vectors", and the first pass built the avatar ladder from the section's +pseudocode instead — which is the same text both implementations read, so +agreement with it proved nothing about agreement with them. Closed since: +`tests/fixtures/avatar_work.json` from cyberspace-cli is now a test, and **all +eight vectors pass**. The two fixture sets (cyberspace-cli and cyberspace-core) +carry the same eight names with identical `reach` and `required` throughout, so +the "one set" claim holds and checking either checks both. + +The vector that earns its keep is **"half gibson, ticks"**: a vertex of +`[-1, -1, -1]` with ticks `[60, 60, 60]` is **-0.5** of a unit, not -1.5, +because the whole part is the floor and the ticks count up from it. An +implementation that takes the magnitude before adding the ticks prices that +avatar at three times its reach and passes every other vector in the set. + +`verify_avatar_work` in the Python reference also confirms the shape of the +payment check independently: committed ≥ required **and** zeros ≥ committed, as +two separate conditions with distinct failure reasons — which is what §5 of this +plan's own note about `Event.pow()` is about. + +**The Python reference is stale on the avatar kind, and we do not follow it.** + +| Implementation | Avatar kind | +| ---- | ---- | +| `CYBERSPACE_V2.md` §8.10 | **11333** | +| cyberspace-core (TS, 2026-09-14) | 11333 | +| ONOSENDAI (the client) | 11333 | +| cyberspace-cli (Python, 2026-09-07) | **33331** | + +The Python CLI predates the kind move by a week and still calls 33331 the avatar +kind, which DECK-0003 has since given to standalone objects. Run against the +current network it would refuse a conformant avatar as `not-an-avatar`, and +would treat one of the seven published `kind 33331` objects as an avatar and +demand proof of work of it. We follow the spec and the two current +implementations. + +Nothing else in the Python CLI overlaps this work: it implements no §1.9, no +palette and no mode — its only SNO surface is the avatar ladder. It does +implement the `kind 33330` bag (encrypt/decrypt), which is the part we +deliberately do not. + ### 2.6 The two reference implementations disagree, and I checked which way The DECK's conformance note says `sno-reference.py` and ONOSENDAI's TypeScript reader