mail-address-semantics/workplans/MAS-WP-0006-address-composer.md
tegwick 499ddce015 MAS-WP-0006: mas compose (canonical + forwarder-safe address)
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 09:27:31 +02:00

2.4 KiB

id type title domain repo status owner topic_slug created updated origin origin_ref state_hub_workstream_id
MAS-WP-0006 workplan MAS address composer communication mail-address-semantics finished claude coulomb-social 2026-10-18 2026-10-19 residual MAS-WP-0003 0934280a-f85a-55f1-a17c-61c5255b5e3b

MAS address composer

Decision-gate outcome of MAS-WP-0002 (founder, 2026-10-18). Pulled forward because provider configuration forms do not preserve MAS syntax: the IONOS forwarding form refuses = and forces lower case, and Google Groups lower-cases members (MAS-WP-0003 T04). Depends on the SCP-6/SCP-7 outcome in MAS-WP-0005.

Scope and interface

id: MAS-WP-0006-T01
status: done
priority: medium
state_hub_task_id: "13071dfc-fbaa-503e-bd0d-ddd6c2377758"

Define what the composer does: from a statute and an intent (resource, facet, interaction), emit the canonical address and, when the statute declares one, the forwarder-safe form (lower case, -- separator). Warn about the 64-octet budget and facet/interaction exclusivity. Decide whether it is a new CLI command (the CLI has no generate command yet), a web page, or both. The library side exists: mas_core.generator.for_destination (MAS-WP-0005 T09).

Implement and test

id: MAS-WP-0006-T02
status: done
priority: medium
state_hub_task_id: "69cb22fe-9995-55c3-91de-63eab5c09282"

Build it on mas_core.generator, with fixtures for the forms seen in MAS-WP-0003.

Outcome

  • Interface (T01): a CLI command only, mas compose DOMAIN TARGET [--facet F] [--interaction MODE] [--for DESTINATION] [--statute FILE | --no-discover]. There is no web page: it would need a second parser in JS, and nothing asks for one yet. TARGET is TYPE=ID or a registry name.
  • Output: the canonical address with its octet count. If the statute declares stand-ins, also the forwarder-safe form (stand-ins, then lower case). --for adds the named destination profiles. The composer warns when fewer than 16 of the 64 octets are left, and when the statute would not handle the address. It refuses facet + interaction (exit 1). A form the namespace would misread is reported as "cannot express".
  • Tests (T02): tests/test_compose.py, using the MAS-WP-0003 forms (IONOS ticket--gs-85qj8wc09p+comments, Google Groups lower case, ticket---callback, ticket=RE=2026-4711 not expressible).