sam

SAM registries

Companion data files for the SAM specification. Advisory only — not enforced by the JSON Schema.

Files

Why advisory, not enforced

Registries that are enforced by schema age poorly. New standards emerge faster than the SAM schema can churn; if industryRefs.standard were enum-restricted, every new ISO release would require a major version bump. The spec accepts free-text strings (§5.1.9) and adds this companion registry to reduce drift without locking the value space.

Tooling MAY:

Tooling MUST NOT reject a SAM solely because it uses an unregistered string in industryRefs.standard or tensionsDeclared[].tension.

Shape

The registries are flat JSON files with registry, version, description, and an entries[] array. Per-entry shapes:

standards.json entry:

{ "canonical": "...", "aliases": ["..."], "uri": "...", "domain": "..." }

canonical is the spelling SAM-aware tooling will treat as authoritative. aliases lists known variations that should map to the canonical. uri points at the canonical authoritative source for the standard. domain is a free-text categorization for filtering.

tensions.json entry:

{ "id": "...", "name": "...", "summary": "...", "cite": "...", "uri": "...", "applies_to": ["..."] }

id is the value that goes in tensionsDeclared[].tension. name, summary, and cite describe the tension to humans and auditors. applies_to names the SAM qualityAttributes characteristics or extensions that the tension typically couples.

delivery-forms.json entry:

{ "id": "...", "name": "...", "aka": ["..."], "operator": "producer|consumer|shared", "typical_layers": ["..."], "perimeter_owner": "...", "claims_read_as": "..." }

id is the canonical delivery-form identifier (the value for intent.deliveryForm and envelope.dependencies[].deliveryForm, v0.3). aka lists common names that map to it (e.g. SaaS, COTS, SDK). operator is who runs the software (producer, consumer, or shared). typical_layers names the subject.layer values the form usually appears at. perimeter_owner names who owns the security/operational boundary. claims_read_as explains, for authors, how §10 quality claims should be interpreted for that form.

patterns.json entry: same shape as tensions.json (id, name, summary, cite, uri, applies_to). id is the value that goes in intent.architecturalPatterns[]; applies_to names the qualityAttributes the pattern typically serves.

Versioning

Each registry declares its own version independent of the SAM specification version. Registry versions follow SemVer at registry granularity:

A registry’s version does not change the SAM manifestVersion. SAMs reference standards and tensions by string; the registry is a translation aid, not a normative dependency.

Contributing

Open an issue or PR at the SAM repo with:

Aliases for existing entries are welcome — they lower the cost of producer drift.