Founder decision after the second implementation: close the two open gaps, then declare v0.2 final. Section 13: parsers MUST reject over 64 octets (fixtures p1-050/051); section 8: equivalence is between targets, key format not normative. Draft markers removed, CHANGELOG dated 2026-10-19, MAS_VERSION 0.2, mas_conformance vendors the v0.2 addresses.json. Mode contract v0.1 stays draft: MAS-WP-0014 (independent email side). 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
98 lines
4 KiB
Markdown
98 lines
4 KiB
Markdown
---
|
||
id: MAS-WP-0009
|
||
type: workplan
|
||
title: "Declare MAS v0.2 final"
|
||
domain: communication
|
||
repo: mail-address-semantics
|
||
status: finished
|
||
owner: claude
|
||
topic_slug: coulomb-social
|
||
created: "2026-10-19"
|
||
updated: "2026-10-19"
|
||
origin: residual
|
||
origin_ref: MAS-WP-0008
|
||
state_hub_workstream_id: "31b1e866-2f64-5606-92f4-18a67d12ad78"
|
||
---
|
||
|
||
# Declare MAS v0.2 final
|
||
|
||
Residual of MAS-WP-0008. Founder decision (2026-10-19): v0.2 stays a draft
|
||
until a second implementation or deployment exists.
|
||
|
||
## Second implementation or deployment
|
||
|
||
```task
|
||
id: MAS-WP-0009-T01
|
||
status: done
|
||
priority: low
|
||
state_hub_task_id: "65fe7a3f-4142-5834-bca8-3de6b8839986"
|
||
```
|
||
|
||
Wait for, or build, an implementation independent of `mas_core`, or a
|
||
second deployment by another operator. It must pass
|
||
`mas-v0.2-spec/conformance/addresses.json` and `statute-aware.json`
|
||
unchanged. It also covers the second draft (scope widened after the
|
||
assessment `history/2026-10-19T090725Z-scope-vs-intent.md`, risk A): a
|
||
small consumer in a second language that parses addresses and acts as
|
||
an outside master in the slave role is enough, provided it passes
|
||
`mas-modes-v0.1-spec/conformance/flows.json` unchanged. It depends on
|
||
MAS-WP-0013. Record every case where the fixtures or the spec text had to be
|
||
read in a way `mas_core` does not.
|
||
|
||
## Declare final
|
||
|
||
```task
|
||
id: MAS-WP-0009-T02
|
||
status: done
|
||
priority: low
|
||
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.
|
||
|
||
## Outcome of T02 (2026-10-19)
|
||
|
||
- **Founder decision: close the open gaps, then declare v0.2 final.**
|
||
- Length (§13): parsers MUST reject over 64 octets. Fixtures p1-050 and
|
||
p1-051. The JS parser was aligned; `mas_core` already did this.
|
||
- Equivalence (§8): it is between targets (facets and interactions take
|
||
no part), and the key format is not normative.
|
||
- **v0.2 is final** (2026-10-19). "Draft" is removed from the bundle and
|
||
`MAS_VERSION` is 0.2. `mas_conformance/addresses.json` now vendors the
|
||
v0.2 bundle (a superset of v0.1.1's).
|
||
- **Results.** Both implementations pass every fixture: `mas test` parser
|
||
64/64 and statute-aware 33/33; JS `node --test` 85/85. They agree on
|
||
every generated case in the differential test.
|
||
- **Mode contract v0.1 stays a draft** (founder). Residual: MAS-WP-0014
|
||
(an independent email side).
|