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
67 lines
2.4 KiB
Markdown
67 lines
2.4 KiB
Markdown
---
|
|
id: MAS-WP-0006
|
|
type: workplan
|
|
title: "MAS address composer"
|
|
domain: communication
|
|
repo: mail-address-semantics
|
|
status: finished
|
|
owner: claude
|
|
topic_slug: coulomb-social
|
|
created: "2026-10-18"
|
|
updated: "2026-10-19"
|
|
origin: residual
|
|
origin_ref: MAS-WP-0003
|
|
state_hub_workstream_id: "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
|
|
|
|
```task
|
|
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
|
|
|
|
```task
|
|
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).
|