MAS-WP-0005-T08: v0.2 stand-ins and resource_id_case in policy; lint; gateway reports canonical form

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:
tegwick 2026-10-18 22:24:28 +02:00
parent 7d978f1f26
commit eb10f54fd2
6 changed files with 165 additions and 7 deletions

View file

@ -256,7 +256,7 @@ against its own schema. Discovery accepts both.
```task
id: MAS-WP-0005-T08
status: todo
status: done
priority: medium
state_hub_task_id: "a345e073-04ca-54e1-bac7-837fe7955e4e"
```
@ -266,6 +266,29 @@ The policy interprets `---MODE` (interaction first, enabled mode only) and
`resource_id_case: insensitive` in the equivalence key. Statute lint covers
the stand-in constraints. Statute-aware fixtures.
- 2026-10-18 done:
- `mas_core.policy.apply_stand_ins` runs first in `resolve()`. It
matches the interaction (`---MODE`, enabled mode, last `---`; in the
facet or the target) and then the resource (`TYPE--ID`, declared type,
first `--`). Everything later (classification, registry,
`intake_for`, equivalence) sees the canonical parse, and the parser
stays statute-blind.
- `AddressSemantics` gains `stand_ins` and `canonical_local_part`; the
equivalence key lower-cases resource ids under
`resource_id_case: insensitive`.
- The gateway event reports the canonical target and base, plus
`target_syntax: resource-alternate` when `--` was used, while
`local_part` keeps what arrived.
- Lint: `stand-in-collision` (registry keys that would change meaning),
`stand-in-mode-name`, and `stand-in-without-p2` (warning).
- Tests: the spec §6.3 example table, correlation of
`ticket--GS-…+comments` with `ticket=gs-…`, intake via `---`, the
switch requirement (v0.1, off, no statute), exact id case, and lint.
168 tests pass.
- A v0.2 statute for mas.coulomb.social lints clean, and the gateway
turns `ticket--gs-85qj8wc09p+comments@` into resource
`ticket=gs-85qj8wc09p` with facet `comments`.
## v0.2 sending side: destination transforms in the generator
```task