mail-address-semantics/mas_conformance/properties.json
tegwick 5b57a9941e MAS-WP-0005-T02: SCP-2 lower-case resource types (spec v0.1.1)
Grammar, statute schema key pattern, parser (is_resource_type, also used
by statute lint), reference parser, spec 6.1 and a new CHANGELOG. Fixtures
p1-042..045; prop-case-001 Ticket=PR42 is now invalid.

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
2026-10-18 18:08:36 +02:00

263 lines
6 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": false,
"error": "invalid-resource-type",
"note": "v0.1.1 (SCP-2): resource types are lower-case; was valid in v0.1"
}
]