mail-address-semantics/workplans/MAS-WP-0009-declare-v0-2-final.md
tegwick f07576451a MAS v0.2 final (MAS-WP-0009 finished); residual MAS-WP-0014
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
2026-10-19 13:35:10 +02:00

98 lines
4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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).