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
3.9 KiB
MAS specification changelog
v0.2 (2026-10-19)
Declared final by the founder after the second implementation
(MAS-WP-0009): impl/js, written from the texts alone, passes every
fixture unchanged and agrees with mas_core on 1500 generated
local-parts. Closed before release:
- Length, §13. A parser MUST reject a local-part over 64 octets. Fixtures p1-050 (64 octets, valid) and p1-051 (65 octets, invalid).
- Equivalence, §8. Equivalence is between targets (facets and interactions take no part). The key format is not normative.
New features, opt-in per statute with "mas_version": "0.2"
(mail-address-semantics MAS-WP-0005; proposals SCP-6 and SCP-7 in
docs/spec-change-proposals.md).
-
Stand-ins (SCP-6), §6.3.
--for=and---for!, fixed by the spec and switched on byalternate_syntax.resourceandalternate_syntax.interaction. Matching order: interaction first, then resource. No stand-in for+. -
Destination transforms (SCP-6), §12.1 and §12.2. There is a closed set of five generator transforms. The canonical form is preferred, and the generator refuses when the statute does not permit a needed transform. An informative section covers integrations, with IONOS and Google Groups as examples.
-
Resource-identifier case (SCP-7), §8.
equivalence.resource_id_case: exact | insensitive. -
Length, §13. The length is re-checked after transforms.
-
SCP-1, quoted equivalence. A quoted local-part whose content is a valid canonical MAS local-part (no quoted-pairs) is equivalent to the unquoted form. Receivers treat them identically; generators emit the unquoted form; canonical parsers still reject the quoted form (§4). Fixture p1-040 note updated.
-
Handoffs (SCP-8), §7.1.
!MODErequests a handoff whose behavior the separate MAS mode contract defines (mas-modes-v0.1-spec/, MAS-WP-0010). It is informative for parsers and generators, with no grammar or statute change. -
Stand-in matching edge cases (SCP-9), §6.3. Found by the second, independent implementation (MAS-WP-0009, differential testing). An interaction stand-in is not read when the local-part already has
!. A resource stand-in needs anIDthat does not begin with-, soTYPE---…is never a resource stand-in. Fixtures si-011 to si-013 and dt-109 were added. The ABNF comments no longer say "v0.1". -
Conformance (MAS-WP-0008).
conformance/statute-aware.jsonand theMAS-V0.2-STATUTE-AWAREsurface cover the stand-in table, theresource_id_caseequivalence and destination-transform refusals. The text inherited from v0.1.1 no longer says "v0.1" for rules that are unchanged.
v0.1.1 (errata)
Errata from the reference experiment and the live provider test
(mail-address-semantics MAS-WP-0002/0003). Proposals and evidence:
docs/spec-change-proposals.md in the implementation repository.
-
SCP-2, resource types are lower-case.
resource-typeis now lower-case words ofa-z/0-9joined by single-or_(§6.1, grammar, statute schemaresource_typeskey pattern).Ticket=PR42,my--type=Xandtype-=Xare no longer canonical. New fixtures: p1-042 to p1-045. -
SCP-3, type intake. Address registry entries may carry
intake_for: TYPE(statute schema). This explicitly makes a function address the intake for a declared resource type (§7). An opaque target equal to a type name has no intake semantics without it. -
SCP-5, intake auto-reply bounds. New §14 item 10: auto-replies to intake or interaction addresses SHOULD require an authenticated sender, MUST be volume-bounded, and MUST NOT go to automated mail.
-
SCP-7, case-robust identifiers (recommendation). §6.2: generators SHOULD use identifiers whose meaning does not depend on case, and receivers SHOULD match them case-insensitively. The statute field
resource_id_caseis deferred to v0.2.
v0.1
Initial draft.