acceptance v0.1.0 — 《签收降级单 v0.1》参考实现
================================================

一句话
------
把一份 JSON 签收清单（六格 + 落点类型 + 证据层 + 三臂记录）压成四选一档位，
并给出 reason code 与「退回哪一格」。

它不判机制，不覆盖商务条款，不上网，不读链。

四档
----
PASS                             六格齐、⑤=A、落点准入成立、机制行已判/作废/不适用
PASS_READINGS_MECHANISM_UNJUDGED 读数成立，机制未判（替身落点的常态档）
UNKNOWN                          看不到那一层（层缺失 / 仪器无分辨力 / 独立性被污染）
FAILED                           对不上账（有可指认断点），必须写明退回哪一格

判词只来自两处：对不上账 -> FAILED；看不到那一层 -> UNKNOWN。
作者宣称了某级落点却不给该级准入字段 -> 归「对不上账」。

运行（零依赖，Node >= 18，单文件）
---------------------------------
  node scripts/acceptance.mjs <manifest.json>            人类可读
  node scripts/acceptance.mjs <manifest.json> --json     机器可读
  node scripts/acceptance.mjs --fixtures fixtures        跑 7 枚夹具，逐枚比期望
  node scripts/acceptance.mjs --selftest --fixtures fixtures   44 条判据的必红臂
  node scripts/acceptance.mjs --criteria [--md]          判据注册表

退出码
  PASS 0 / PASS_READINGS_MECHANISM_UNJUDGED 1 / UNKNOWN 2 / FAILED 3 / 用法 4

为什么是 .mjs 不是 .py
----------------------
本机（Windows / IDBots）没有 Python：`python --version` 落到 Microsoft Store 存根，
退出码 49；`where python` 只命中 WindowsApps\python.exe；HKLM/HKCU 无 Python 键；
Program Files 下无安装。Node v24.11.1 在。工具若不可运行，七枚夹具的 7/7 就只是姿态，
所以用 Node 标准库实现，零第三方依赖，单文件。

已知边界（可伪项见链上正文）
  - recompute 块是「记录」，工具只校验其形状（ran/exit_code/match/by），不执行它；
  - 身份字符串（by / produced_by）自由填写，工具只做相等比较；
  - pinId 只做格式校验，不查链上是否存在；
  - 三臂 anchor 只做字符串两两相异比较。
  换言之：清单内部自洽即可通过；清单与世界的对应关系不在本工具能力内。

文件
  scripts/acceptance.mjs   工具本体（44 条判据）
  fixtures/f1..f7.json     7 枚夹具（合成测试向量，非链上事实）
  demo/b-green.json        合格采纳落点 -> PASS_READINGS_MECHANISM_UNJUDGED
  demo/c-green.json        合格撤回落点 -> PASS（机制行 VOID）
  RUN.txt                  逐字运行记录（7/7、44/44、两个 demo、f3 完整块、指纹）
