mail-address-semantics/mas_conformance/properties.json
tegwick 59815701c1 Implement MAS v0.1 reference experiment (MAS-WP-0002 M0-M8, M9 first pass)
- mas_core: P2-maximal parser with required_profile, generator, statute
  schema + semantic lint + defaults-only inheritance, exact-host discovery
  with typed failures and same-origin redirects, pure policy resolver
- mas_conformance: vendored spec fixtures (drift-tested) + property and
  statute cases
- mas CLI: parse / explain / discover / lint-statute / test
- mas-gateway: generic mail -> MAS event -> HTTP (MTA pipe + webhook)
- examples: static great-service.example statute, reference ticket service
- docs/experiment-review.md: first-pass findings; live MTA test still open

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 623586@bnt-lap001
Assistant-Session: 10b30928-5b3b-4c11-9934-5ecca07367d8
2026-10-08 00:24:43 +02:00

270 lines
6.1 KiB
JSON

[
{
"id": "prop-len-063",
"local_part": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"profile": "p1",
"valid": true,
"parsed": {
"target": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"target_kind": "opaque",
"facet": null,
"interaction": null
},
"note": "63 octets"
},
{
"id": "prop-len-064",
"local_part": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"profile": "p1",
"valid": true,
"parsed": {
"target": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"target_kind": "opaque",
"facet": null,
"interaction": null
},
"note": "64 octets: exactly the SMTP limit"
},
{
"id": "prop-len-065",
"local_part": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"profile": "p1",
"valid": false,
"error": "too-long",
"note": "65 octets exceeds the SMTP limit"
},
{
"id": "prop-len-065-p2",
"local_part": "ticket=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx!callback",
"profile": "p2",
"valid": false,
"error": "too-long",
"note": "limit applies to the whole local-part incl. operators"
},
{
"id": "prop-eq-001",
"local_part": "ticket==PR42",
"profile": "p1",
"valid": true,
"parsed": {
"target": "ticket==PR42",
"target_kind": "resource",
"facet": null,
"interaction": null,
"resource_type": "ticket",
"resource_id": "=PR42"
},
"note": "only the first '=' is structural"
},
{
"id": "prop-eq-002",
"local_part": "ticket=PR42=",
"profile": "p1",
"valid": true,
"parsed": {
"target": "ticket=PR42=",
"target_kind": "resource",
"facet": null,
"interaction": null,
"resource_type": "ticket",
"resource_id": "PR42="
},
"note": "trailing '=' is resource-id data"
},
{
"id": "prop-eq-003",
"local_part": "bernd.worsch+a=b",
"profile": "p1",
"valid": true,
"parsed": {
"target": "bernd.worsch",
"target_kind": "opaque",
"facet": "a=b",
"interaction": null
},
"note": "'=' is data inside a facet"
},
{
"id": "prop-res-001",
"local_part": "$",
"profile": "p1",
"valid": false,
"error": "reserved-operator"
},
{
"id": "prop-res-002",
"local_part": "support^",
"profile": "p1",
"valid": false,
"error": "reserved-operator"
},
{
"id": "prop-res-003",
"local_part": "ticket!callback$",
"profile": "p2",
"valid": false,
"error": "reserved-operator"
},
{
"id": "prop-res-004",
"local_part": "ticket!call^back",
"profile": "p2",
"valid": false,
"error": "reserved-operator"
},
{
"id": "prop-p2-001",
"local_part": "ticket!callback",
"profile": "p2",
"valid": true,
"parsed": {
"target": "ticket",
"target_kind": "opaque",
"facet": null,
"interaction": "callback"
},
"required_profile": "P2",
"generator_allowed": true,
"note": "maximal parser accepts; namespace support for P2 is a policy question"
},
{
"id": "prop-p2-002",
"local_part": "support+urgent",
"profile": "p1",
"valid": true,
"parsed": {
"target": "support",
"target_kind": "opaque",
"facet": "urgent",
"interaction": null
},
"required_profile": "P1",
"base": "support",
"note": "registry lookup operates on the base target 'support', never 'support+urgent'"
},
{
"id": "prop-pct-001",
"local_part": "a%40b",
"profile": "p1",
"valid": true,
"parsed": {
"target": "a%40b",
"target_kind": "opaque",
"facet": null,
"interaction": null
},
"note": "percent sequences are data, never decoded"
},
{
"id": "prop-op-001",
"local_part": "+comments",
"profile": "p1",
"valid": false,
"error": "empty-target"
},
{
"id": "prop-op-002",
"local_part": "!callback",
"profile": "p2",
"valid": false,
"error": "empty-target"
},
{
"id": "prop-op-003",
"local_part": "ticket=PR42+",
"profile": "p1",
"valid": false,
"error": "empty-facet"
},
{
"id": "prop-op-004",
"local_part": "ticket=+x",
"profile": "p1",
"valid": false,
"error": "empty-resource-id"
},
{
"id": "prop-op-005",
"local_part": "tic.ket=PR42",
"profile": "p1",
"valid": false,
"error": "invalid-resource-type",
"note": "resource-type has no '.'"
},
{
"id": "prop-op-006",
"local_part": "ticket=PR..42",
"profile": "p1",
"valid": false,
"error": "invalid-resource-id"
},
{
"id": "prop-op-007",
"local_part": "ticket+.x",
"profile": "p1",
"valid": false,
"error": "invalid-facet"
},
{
"id": "prop-op-008",
"local_part": "ticket!a..b",
"profile": "p2",
"valid": false,
"error": "invalid-interaction"
},
{
"id": "prop-op-009",
"local_part": "a b",
"profile": "p1",
"valid": false,
"error": "invalid-target"
},
{
"id": "prop-op-010",
"local_part": "ticket+a!",
"profile": "p2",
"valid": false,
"error": "empty-interaction"
},
{
"id": "prop-kind-001",
"local_part": "research-companion",
"profile": "p1",
"valid": true,
"parsed": {
"target": "research-companion",
"target_kind": "opaque",
"facet": null,
"interaction": null
},
"note": "no actor inference from '-'"
},
{
"id": "prop-kind-002",
"local_part": "invoice_ingest",
"profile": "p1",
"valid": true,
"parsed": {
"target": "invoice_ingest",
"target_kind": "opaque",
"facet": null,
"interaction": null
},
"note": "no function inference from '_'"
},
{
"id": "prop-case-001",
"local_part": "Ticket=PR42",
"profile": "p1",
"valid": true,
"parsed": {
"target": "Ticket=PR42",
"target_kind": "resource",
"facet": null,
"interaction": null,
"resource_type": "Ticket",
"resource_id": "PR42"
},
"note": "grammar permits upper-case resource types; statutes register lower-case"
}
]