mail-address-semantics/mas-v0.2-spec/CHANGELOG.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

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 by alternate_syntax.resource and alternate_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. !MODE requests 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 an ID that does not begin with -, so TYPE---… 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.json and the MAS-V0.2-STATUTE-AWARE surface cover the stand-in table, the resource_id_case equivalence 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-type is now lower-case words of a-z/0-9 joined by single - or _ (§6.1, grammar, statute schema resource_types key pattern). Ticket=PR42, my--type=X and type-=X are 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_case is deferred to v0.2.

v0.1

Initial draft.