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

@ -4,7 +4,7 @@ type: workplan
title: "Declare MAS v0.2 final"
domain: communication
repo: mail-address-semantics
status: backlog
status: active
owner: claude
topic_slug: coulomb-social
created: "2026-10-19"
@ -23,7 +23,7 @@ until a second implementation or deployment exists.
```task
id: MAS-WP-0009-T01
status: wait
status: done
priority: low
state_hub_task_id: "65fe7a3f-4142-5834-bca8-3de6b8839986"
```
@ -43,7 +43,7 @@ read in a way `mas_core` does not.
```task
id: MAS-WP-0009-T02
status: wait
status: progress
priority: low
state_hub_task_id: "a30c1b69-4b41-5636-865a-82341175668b"
```
@ -51,3 +51,32 @@ state_hub_task_id: "a30c1b69-4b41-5636-865a-82341175668b"
Fold in the findings from T01, then remove "draft" from the bundle
(README, SPECIFICATION, CONFORMANCE, CHANGELOG) and date the v0.2 release
in the changelog.
## Outcome of T01 (2026-10-19)
- **Founder interview.** TypeScript on Node, with no dependencies, in
`impl/js/`. Scope: parser, statute-aware rules and an outside master.
Findings are reported before any decision to declare v0.2 final.
- **`impl/js/`.** Written from the spec texts and fixtures only. It passes,
unchanged and read in place: `addresses.json` (35), `statute-aware.json`
(33 after SCP-9) and `auth.json` (14). Its outside master passes all 11
slave-setup flows of `mas-modes-v0.1-spec` against the Python email side:
11 of 11 with the right key, 0 of 11 with a wrong key.
- **Differential test** (`tests/test_differential.py`): 1500 generated
local-parts × parse (P1 and P2), interpretation under 4 statutes, and
destination transforms.
- **Findings.**
1. §6.3 did not say that the interaction stand-in is read only without
`!` (`q!---callback`).
2. §6.3 did not say that the resource stand-in excludes an id beginning
with `-` (`ticket---`, `ticket---chat`).
Both were `mas_core` behavior not written in the spec. They are now
SCP-9 in the v0.2 draft, with fixtures si-011 to si-013 and dt-109.
The ABNF comments still said "v0.1"; fixed. Also noted, not changed: the
spec defines no concrete equivalence-key format. Conformance compares
only equality, which both implementations agree on. The spec does not
say whether a *parser* must reject more than 64 octets: `mas_core` does
and the JS parser does not. No fixture covers it.
- **Not independently validated:** the email side of the mode contract.
It exists only in Python; the JS work covers the master side.