Files
amethyst/cli/tests/sno/.gitignore
T
Vitor PamplonaandClaude Opus 5 288ed01105 feat(cli): amy sno, and a conformance harness against the reference
`amy sno parse|work|verify` — validate a DECK-0003 payload against §1.9,
price the proof of work an avatar owes for it, and check whether a
kind:11333 avatar has paid. Local, accountless, thin over quartz: the
verbs exist so the reader can be diffed against the implementations the
spec points at, without a device or a relay.

cli/tests/sno/ is that diff. The reference's own fixtures drive it —
_rejections() out of decks/sno-reference.py and the golden vectors out of
cyberspace-cli — so the cases are theirs, not ours. 26 §1.9 verdicts
agree on both the answer and the rule number; all 8 avatar vectors agree.

The four places the two differ are asserted as divergences rather than
skipped, because a reader that quietly stopped diverging would be as
interesting as one that started:

- we read the v:2-with-literal-triples cohort, the arbiter refuses it (§5
  permits the generosity; three of seven live objects need it);
- we refuse a vertex past 64 units, the arbiter accepts it (§8's own open
  question, and whole*120 overflows an Int);
- the Python reference still calls 33331 the avatar kind, a week behind
  §8.10's move to 11333, so it reads a conformant avatar as
  not-an-avatar and would price a standalone object as one;
- empty content is §8.10's default avatar to us and not-an-avatar to it.
  Same outcome — the client draws its default — different word.

SnoAvatarEvent gains payment(), which reports required/committed/zeros
and why, mirroring verify_avatar_work's shape so the two are directly
comparable; isPaid() is now that result's ok.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JwXApJjoZYtkD3sPRWbPNa
2026-09-22 02:41:01 +00:00

2 lines
23 B
Plaintext