One RDF graph · four notations · one traversal
Every tool that draws software draws one layer. C4 tools stop at a link to the repository. BPMN modelers never see the screen that fires a process. IFML never wired its hooks to data. SHACL lives in its own silo. SemanticSeams puts every element of every layer in one RDF graph, as a resource with an IRI, and treats each diagram as a view over it.
Click a node and the renderer switches with the node's notation. The descent below is the canonical one, and the viewer completes it over a hand-authored model today: see the screenshots.
client web interfaceThere is no BPMN ontology here and no DMN ontology. Native XML stays native and is rendered by the stock viewers. Only the elements that participate in a cross-layer edge get an IRI, and the edges come from one small bridging ontology, built to four rules.
Twenty-five predicates. Each one must earn a cross-layer query or it does not exist.
C4, IFML, BPMN, DMN and SHACL keep their own vocabularies. The seam ontology only names the joins.
SHACL shapes constrain the seams. CI parses every file, validates the examples, proves the shapes reject bad seams, and checks every predicate is exercised.
Because everything is one graph, cross-layer questions are SPARQL. Three ship as canned queries with exact expected rows asserted in CI, and they are buttons on the viewer's inspector, not SPARQL a user sees.
Which UI events can eventually write to this data shape, and through which task?
what-writes-shape.rq · compliance and security review
What breaks, containers, processes and data, if this deployment node goes away?
impact-of-node.rq · impact analysis and drift
Which process tasks may move an entity out of this state?
what-moves-state.rq · lifecycle audit
The first one, as it ships in docs/queries/what-writes-shape.rq: a property path from an IFML event through the seams to whatever writes the shape, including the async hop through a channel.
SELECT DISTINCT ?event ?writer WHERE { ?event a ifml:Event . ?event ( (seam:triggers/seam:detailedBy/^seam:inModel) | seam:decidedBy | seam:invokes | (seam:publishesTo/^seam:subscribesTo/seam:inModel/^seam:inModel) )+ ?writer . ?writer seam:writes ?shape . }
Proof of concept, July to October 2026. A read-only viewer completes the descent from architecture to decision table by clicking, and everything below runs under test in CI. A shared visual language for the viewer comes next, then generating the application from the model.
seam.ttl, with SHACL shapes over themArchitecture, then interface, then process, then decision, by clicking. Breadcrumbs record the path, an element with two detail views asks which to open, and DMN decision tables click through.
A SHACL model-health badge on every view, and canned cross-layer questions on the inspector, answered inline with their exact rows asserted in CI.
A single node card with a dot for every seam, containers opened in place on a deterministic layout, and IFML drawn in its own notation. See coming soon and the backlog.
htmx pages, a FastAPI route module and a docker-compose file generated from the model, with the BPMN and DMN executed by SpiffWorkflow rather than generated. Proposed in ADR-0007.
The running viewer on the chat-app example, captured in October 2026. Each step follows one seam. Select an image to open it full size.






Design mocks drawn over the same chat-app model. None of this is in the viewer yet. The first two are the next viewer work in the backlog; the third is further out.



Developed against semantic-stack, the Docker stack of triple stores and RDF tooling, and released under Apache-2.0.