Release Notes: v0.1.0¶
Release Date: 2026-09-07
Highlights¶
Initial release of Systems Architecture Spec (SAS): a statically-typed-friendly,
Go-first semantic model for describing software systems as typed graphs — nodes,
relationships, boundaries, identities, and entitlements — with diagrams, launch
readiness, and threat modeling as views over that one model rather than
separately maintained artifacts. Dogfooded end to end on real PlexusOne
portfolio systems: sas validate --profile security gates internet-facing
launches, sas view replaces hand-drawn architecture diagrams, and sas bind
/ sas export threat-model are verified against the real external tools they
integrate with (PIDL, Threat Model Spec) rather than internal assumptions
about their shape.
What's New¶
Core semantic graph¶
sas.Architecture is the canonical document: Node, Relationship,
Boundary, Identity, Entitlement, View, ProtocolBinding, Assurance,
and namespaced typed Extensions. See SPEC.md for the full
normative model.
import "github.com/plexusone/systemspec-architecture/sas"
arch := sas.Architecture{
Version: "0.1",
Nodes: []sas.Node{
{ID: "web", Kind: sas.NodeKindService, Name: "Storefront"},
{ID: "db", Kind: sas.NodeKindDataDatabase, Name: "Orders Database"},
},
Relationships: []sas.Relationship{
{ID: "web-to-db", From: "web", To: "db", Kind: sas.RelationKindDataAccess},
},
}
Go structs are the source of truth. JSON Schema is generated
(invopop/jsonschema, lint-clean under schemakit --property-case camelCase)
and stays within the static-type profile — no oneOf/anyOf/allOf. Zod and
TypeScript types generate from that same schema and conform to the same
fixture corpus as the Go model.
CLI¶
sas validate <architecture.json> [--profile development,deployment,security,threat-model,sre] [--format console|json]
sas view <architecture.json> [--view <id> | --group-by --include-kinds --include-relations --include-boundaries] --format mermaid|d2|dot
sas bind <architecture.json> --pidl <protocol.json> [--format console|json]
sas export threat-model <architecture.json>
sas assure <architecture.json> [--format console|json]
sas validate --profile security is the launch-readiness gate: every
internet-facing relationship must declare transport encryption, identity, and
data classification, and its target node must declare an owner — one command
a launch checklist runs before a system ships to production.
Renderers and catalogs¶
render/mermaid, render/d2, and render/dot each render a View's
selection, verified against the real d2 and dot CLIs compiling to SVG, not
just internally-consistent Go string output. catalog supplies AWS/GCP/
Kubernetes display names and icon hints, plus HTTP/SQL/MCP operation
mappings — vendor detail stays out of the core NodeKind vocabulary.
PIDL bindings and the Threat Model Spec bridge¶
ProtocolBinding instantiates a PIDL
protocol's abstract entities as concrete SAS nodes; sas bind verifies a
binding against a real PIDL protocol document. bridge/threatmodel exports an
Architecture as the system-under-analysis (DiagramIR) for
Threat Model Spec, verified
against its real published JSON Schema — SAS never re-describes threat
reasoning, which stays in Threat Model Spec.
Assurance coverage¶
sas assure reports, per node and relationship, whether each of the four
Assurance evidence categories (tests, metrics, detections, deployment) has
at least one reference — a concrete gap list, not just a summary percentage.
Non-Goals (v1)¶
Runtime reconciliation, semantic diff / change-impact analysis, and CALM
(FINOS) interop are explicitly deferred — see SPEC.md §12
for the full list and rationale. Semantic diff is the leading v0.2 candidate.
Getting Started¶
go get github.com/plexusone/systemspec-architecture@v0.1.0
go run ./cmd/sas validate examples/dogfood/acme-widgets.json --profile security
go run ./cmd/sas view examples/dogfood/acme-widgets.json --view context --format d2
Requirements¶
- Go 1.26+
d2and GraphvizdotonPATHfor D2/DOT renderer output (optional — the renderers themselves have no external dependency; only compiling their output to an image does)
Full Changelog¶
See CHANGELOG.md for the complete list of changes.