- 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
270 lines
6.1 KiB
JSON
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"
|
|
}
|
|
]
|