MAS-WP-0003: finished; MAS-WP-0002 gate decided; residuals MAS-WP-0004..0007
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 252470@bnt-lap001 Assistant-Session: ad628c8f-4be2-4979-94c9-76c7ed6f8241
This commit is contained in:
parent
482fdee287
commit
1c0fcce69d
7 changed files with 260 additions and 8 deletions
|
|
@ -242,10 +242,12 @@ That is also an injection and spam vector. Ticket ids are non-guessable
|
|||
(10 Crockford base32 characters), but sender policy belongs to the
|
||||
application, not to MAS.
|
||||
|
||||
## Decision gate (MAS-WP-0002), recommendation
|
||||
## Decision gate (MAS-WP-0002)
|
||||
|
||||
The gate asks which additions answer a need the experiment demonstrated.
|
||||
This is a recommendation; the decision is the founder's.
|
||||
**Decided 2026-10-18 (founder):** the recommendation below, plus the
|
||||
address composer pulled forward. Follow-up work: MAS-WP-0004 (Postfix
|
||||
profile), MAS-WP-0005 (spec errata and v0.2 drafts), MAS-WP-0006
|
||||
(composer). MAS-WP-0007 retires the live test environment later.
|
||||
|
||||
| Candidate | Demonstrated need? | Recommendation |
|
||||
|---|---|---|
|
||||
|
|
@ -257,5 +259,6 @@ This is a recommendation; the decision is the founder's.
|
|||
| Signed statutes | Not shown; pinned local statutes covered the operator case (see Discovery) | Defer |
|
||||
| P3 economic profile | Not exercised | Defer |
|
||||
|
||||
T04 (SRS/VERP) could change the `!`/`=` row for forwarded mail. Revisit
|
||||
this table once T04 is done.
|
||||
T04 confirmed the table: SRS and list bounce addresses never collided with
|
||||
MAS syntax, and the risks it found (forms refusing `=`, lower-casing) are
|
||||
covered by SCP-6/SCP-7 and the composer.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ status: done
|
|||
owner: claude
|
||||
topic_slug: coulomb-social
|
||||
created: "2026-10-08"
|
||||
updated: "2026-10-08"
|
||||
updated: "2026-10-18"
|
||||
state_hub_workstream_id: "17d1228a-bfd1-5fed-ac90-a314b64f6f5b"
|
||||
---
|
||||
|
||||
|
|
@ -881,6 +881,16 @@ P3 economic profile
|
|||
|
||||
Each addition should answer a demonstrated need from the experiment.
|
||||
|
||||
**Decided 2026-10-18 (founder)** on the evidence of this workplan and
|
||||
MAS-WP-0003 (`docs/experiment-review.md`, `docs/spec-change-proposals.md`):
|
||||
- **Build:** the Postfix integration profile (MAS-WP-0004); spec v0.1.1
|
||||
errata plus v0.2 drafts for SCP-6/SCP-7 (MAS-WP-0005); and the address
|
||||
composer (MAS-WP-0006), pulled forward because provider forms refuse `=`
|
||||
and lower-case addresses.
|
||||
- **Defer:** the TypeScript and Go implementations, the mail-client
|
||||
inspector, signed statutes, and the P3 economic profile. None of them
|
||||
had a demonstrated need.
|
||||
|
||||
---
|
||||
|
||||
## Initial execution order
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ type: workplan
|
|||
title: "MAS live provider test on a real subdomain"
|
||||
domain: communication
|
||||
repo: mail-address-semantics
|
||||
status: active
|
||||
status: finished
|
||||
owner: claude
|
||||
topic_slug: coulomb-social
|
||||
created: "2026-10-08"
|
||||
|
|
@ -227,7 +227,7 @@ change the cap, edit `MAS_MAX_SENT` in the manifest and restart the pod.
|
|||
|
||||
```task
|
||||
id: MAS-WP-0003-T05
|
||||
status: progress
|
||||
status: done
|
||||
priority: high
|
||||
state_hub_task_id: "63e86851-9c7d-5ce8-977f-5d09268d9dcc"
|
||||
```
|
||||
|
|
@ -244,3 +244,17 @@ decision gate.
|
|||
auto-reply reflection). The review ends with a decision-gate
|
||||
recommendation; the founder decides. Pending: T04 results, then
|
||||
revisit SCP-4 and the gate table.
|
||||
- 2026-10-18: T04 is folded in. SCP-6 (`--` alternate separator) and SCP-7
|
||||
(case-robust identifiers, now highest priority) were added. MAS-WP-0002
|
||||
decision gate taken by the founder: build the Postfix profile, the spec
|
||||
errata and the composer; defer the rest.
|
||||
|
||||
## Residuals
|
||||
|
||||
Handed off as live work records (origin: residual, origin_ref MAS-WP-0003):
|
||||
- MAS-WP-0004: Postfix integration profile.
|
||||
- MAS-WP-0005: spec v0.1.1 errata, v0.2 drafts, case-robust ticket ids
|
||||
in the reference service.
|
||||
- MAS-WP-0006: address composer.
|
||||
- MAS-WP-0007 (backlog): retire the live test environment. Namespace `mas`
|
||||
stays up for follow-up validation, capped at 300 sends.
|
||||
|
|
|
|||
65
workplans/MAS-WP-0004-postfix-integration-profile.md
Normal file
65
workplans/MAS-WP-0004-postfix-integration-profile.md
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
---
|
||||
id: MAS-WP-0004
|
||||
type: workplan
|
||||
title: "MAS Postfix integration profile"
|
||||
domain: communication
|
||||
repo: mail-address-semantics
|
||||
status: proposed
|
||||
owner: claude
|
||||
topic_slug: coulomb-social
|
||||
created: "2026-10-18"
|
||||
updated: "2026-10-18"
|
||||
origin: residual
|
||||
origin_ref: MAS-WP-0003
|
||||
---
|
||||
|
||||
# MAS Postfix integration profile
|
||||
|
||||
Decision-gate outcome of MAS-WP-0002 (founder, 2026-10-18). MAS-WP-0003
|
||||
showed that a default Postfix silently drops every P2 (`!`) address, and
|
||||
that the correct relay configuration is not obvious
|
||||
(`docs/experiment-review.md`, operational findings). Turn the working
|
||||
setup in `deploy/railiance/entrypoint.sh` into a documented, tested
|
||||
integration profile.
|
||||
|
||||
## Extract the profile
|
||||
|
||||
```task
|
||||
id: MAS-WP-0004-T01
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
Write a standalone Postfix profile (main.cf/master.cf fragments plus
|
||||
the relay regexp) for a MAS receiving domain:
|
||||
- explicit `@DOMAIN` relay regexp, ending the restriction list in `reject`;
|
||||
- `allow_untrusted_routing=yes`, `swap_bangpath=no` and `allow_percent_hack=no`;
|
||||
- pipe to `mas-gateway`;
|
||||
- optional authenticated relay with a send cap;
|
||||
- null-sender discard.
|
||||
Explain each setting and say why the stock config fails.
|
||||
|
||||
## Probe the profile
|
||||
|
||||
```task
|
||||
id: MAS-WP-0004-T02
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
Extend `experiments/postfix-probe/` to run the profile against the full
|
||||
address corpus. Include the relay negatives (`x@other`, `x!y@other`,
|
||||
`a@other@DOMAIN`, `a@DOMAIN@other`) and P2 forms. Make it part of the test
|
||||
suite where Docker is available.
|
||||
|
||||
## Exim notes
|
||||
|
||||
```task
|
||||
id: MAS-WP-0004-T03
|
||||
status: todo
|
||||
priority: low
|
||||
```
|
||||
|
||||
Check whether Exim has equivalent pitfalls for `!`/`%` local-parts and
|
||||
record the needed settings. Build an Exim profile only if there is
|
||||
demand.
|
||||
71
workplans/MAS-WP-0005-spec-errata-v0-1-1.md
Normal file
71
workplans/MAS-WP-0005-spec-errata-v0-1-1.md
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
---
|
||||
id: MAS-WP-0005
|
||||
type: workplan
|
||||
title: "MAS spec v0.1.1 errata and v0.2 proposals"
|
||||
domain: communication
|
||||
repo: mail-address-semantics
|
||||
status: proposed
|
||||
owner: claude
|
||||
topic_slug: coulomb-social
|
||||
created: "2026-10-18"
|
||||
updated: "2026-10-18"
|
||||
origin: residual
|
||||
origin_ref: MAS-WP-0003
|
||||
---
|
||||
|
||||
# MAS spec v0.1.1 errata and v0.2 proposals
|
||||
|
||||
Decision-gate outcome of MAS-WP-0002 (founder, 2026-10-18). Turn
|
||||
`docs/spec-change-proposals.md` into spec text. The `mas-v0.1-spec/` bundle
|
||||
is normative, and `mas_conformance/` plus `mas_core/schema/` are vendored
|
||||
copies checked for drift, so each change updates the bundle, the vendored
|
||||
copies, the fixtures and the implementation together.
|
||||
|
||||
## Review the proposals with the founder
|
||||
|
||||
```task
|
||||
id: MAS-WP-0005-T01
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
Walk through SCP-1 to SCP-7, settle the open options (SCP-2 (a) or (b),
|
||||
SCP-6 split rules), and record which proposals are accepted.
|
||||
|
||||
## v0.1.1 errata
|
||||
|
||||
```task
|
||||
id: MAS-WP-0005-T02
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
Apply the accepted errata: SCP-1 (quoted equivalence), SCP-2 (lower-case
|
||||
types), SCP-3 (type intake, `intake_for`), SCP-5 (intake auto-reply
|
||||
bounds), and the SCP-7 recommendation (case-robust identifiers). Add
|
||||
fixtures and update the parser, policy and schema.
|
||||
|
||||
## Reference service: case-robust ticket ids
|
||||
|
||||
```task
|
||||
id: MAS-WP-0005-T03
|
||||
status: todo
|
||||
priority: high
|
||||
```
|
||||
|
||||
SCP-7 evidence: IONOS and Google Groups both lower-cased the recipient,
|
||||
and a list post was lost to its ticket. Make the reference ticket service
|
||||
issue and match ids case-insensitively. Crockford base32 is case-insensitive
|
||||
by design. Verify on the live MX by repeating the Google Groups post.
|
||||
|
||||
## v0.2 drafts: SCP-6 and the SCP-7 statute field
|
||||
|
||||
```task
|
||||
id: MAS-WP-0005-T04
|
||||
status: todo
|
||||
priority: medium
|
||||
```
|
||||
|
||||
Draft the statute fields `resource_syntax.alternate_separator` (`--` for
|
||||
`=`, endorsed by the operator after the IONOS refusal) and
|
||||
`equivalence.resource_id_case`, with policy semantics and fixtures.
|
||||
47
workplans/MAS-WP-0006-address-composer.md
Normal file
47
workplans/MAS-WP-0006-address-composer.md
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
---
|
||||
id: MAS-WP-0006
|
||||
type: workplan
|
||||
title: "MAS address composer"
|
||||
domain: communication
|
||||
repo: mail-address-semantics
|
||||
status: proposed
|
||||
owner: claude
|
||||
topic_slug: coulomb-social
|
||||
created: "2026-10-18"
|
||||
updated: "2026-10-18"
|
||||
origin: residual
|
||||
origin_ref: MAS-WP-0003
|
||||
---
|
||||
|
||||
# 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: todo
|
||||
priority: medium
|
||||
```
|
||||
|
||||
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 an extension of `mas generate`, a web page, or both.
|
||||
|
||||
## Implement and test
|
||||
|
||||
```task
|
||||
id: MAS-WP-0006-T02
|
||||
status: todo
|
||||
priority: medium
|
||||
```
|
||||
|
||||
Build it on `mas_core.generator`, with fixtures for the forms seen in
|
||||
MAS-WP-0003.
|
||||
42
workplans/MAS-WP-0007-retire-live-test-environment.md
Normal file
42
workplans/MAS-WP-0007-retire-live-test-environment.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
id: MAS-WP-0007
|
||||
type: workplan
|
||||
title: "Retire the MAS live test environment"
|
||||
domain: communication
|
||||
repo: mail-address-semantics
|
||||
status: backlog
|
||||
owner: claude
|
||||
topic_slug: coulomb-social
|
||||
created: "2026-10-18"
|
||||
updated: "2026-10-18"
|
||||
origin: residual
|
||||
origin_ref: MAS-WP-0003
|
||||
---
|
||||
|
||||
# Retire the MAS live test environment
|
||||
|
||||
Residual of MAS-WP-0003. The live MX for `mas.coulomb.social` stays up for
|
||||
follow-up validation (founder, 2026-10-18), capped at 300 sent replies.
|
||||
Retire it once MAS-WP-0004 and MAS-WP-0005 no longer need it. Cluster-scoped
|
||||
and external pieces do not disappear when the namespace is deleted.
|
||||
|
||||
## Retire the environment
|
||||
|
||||
```task
|
||||
id: MAS-WP-0007-T01
|
||||
status: wait
|
||||
priority: medium
|
||||
```
|
||||
|
||||
Run when follow-up validation is done:
|
||||
1. Export the evidence (`/var/lib/mas/events.jsonl` and the ticket DB from
|
||||
the `mas-mx` pod) into the repo or an archive.
|
||||
2. Delete namespace `mas`.
|
||||
3. Notify ops-mason to remove OpenBao role `external-secrets-mas-tem-relay`,
|
||||
policy `workload-kv-read-mas-tem-relay` and KV path
|
||||
`platform/suppliers/scaleway/mas-tem-relay` (MASON-WP-0014 teardown).
|
||||
4. Founder: revoke the Scaleway TEM API key and remove the TEM domain.
|
||||
5. Founder: remove the `mas.coulomb.social` MX, A, SPF and DKIM records at
|
||||
IONOS, the `mas-fwd@coulomb.social` forward, and the
|
||||
`coulomb-social` Google Group if no longer used.
|
||||
6. Remove the side-loaded `mas-live:wp0003-*` images from k3s containerd.
|
||||
Loading…
Add table
Add a link
Reference in a new issue