MAS-WP-0009 T01: independent JS implementation (impl/js), differential test, SCP-9

impl/js (Node, zero deps, written from the specs): parser, v0.2
statute-aware rules, signing, outside master. Passes addresses.json,
statute-aware.json and auth.json unchanged; its master passes the 11
slave-setup mode flows against the Python email side (ExternalMaster).
Differential testing vs mas_core found two unstated stand-in rules, now
SCP-9 in the v0.2 draft with fixtures si-011..013, dt-109; ABNF comments
no longer say v0.1. Runner: external masters, step errors fail the flow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5787@bnt-lap001
Assistant-Session: 5db26b82-138b-40cc-9856-4d5eb0f752fd
This commit is contained in:
tegwick 2026-10-19 13:22:22 +02:00
parent ecb1ba47f6
commit a841ceec73
23 changed files with 938 additions and 49 deletions

View file

@ -327,6 +327,33 @@ implement handoffs get a contract to conform to.
---
## SCP-9: stand-ins stand for absent operators
**Section:** §6.3 Stand-ins.
**Evidence:** MAS-WP-0009. A JavaScript implementation, written only from
the spec text, was compared with `mas_core` over 3000 generated
local-parts. They disagreed on two inputs that §6.3 leaves open:
- `q!---callback`: read literally ("ends in `---MODE`"), the interaction
stand-in applies even though the local-part already has `!`. That gives
two interactions, which is invalid. `mas_core` reads it canonically.
- `ticket---`, `ticket---chat` (`chat` not enabled): read literally
("split at the first `--`"), this is `ticket=-` / `ticket=-chat`.
`mas_core` does not read a resource stand-in whose id begins with `-`,
because three dashes signal the interaction stand-in.
**Change (applied to the v0.2 draft):** the interaction stand-in needs a
local-part with no `!`. The resource stand-in needs an `ID` that does not
begin with `-`. Identifiers beginning with `-` cannot be written with the
resource stand-in, so generators refuse. New table rows; fixtures si-011
to si-013 and dt-109.
**Impact:** clarifies edge cases. Neither implementation changes behavior
on any earlier fixture.
---
## Lower-priority gaps (no proposal yet)
Recorded in the review, not urgent: