Skip to content

Layer vocabularies ​

Generated page

This page is generated from the layer vocabularies in ontology/ on every docs build.

Inside each layer, SemanticSeams uses a small vocabulary of its own or an existing one; the seam predicates only name the joins between layers. BPMN and DMN have no vocabulary here at all: their native XML is the source, and only the elements that take part in a seam get an IRI.

SemanticSeams Architecture Vocabulary ​

Source: ontology/arch.ttl · prefix arch:

A deliberately small C4-inspired vocabulary. Unlike C4 proper, the containment hierarchy is user-definable (LikeC4-style): arch:contains nests any Element in any Element, and views are projections, not fixed levels. Deployment topology is included because 'where things run' is distinct from 'what they are'.

Classes ​

TermKindDescription
arch:ElementClassAbstract superclass of everything in the architecture layer.
arch:PersonClassA human actor / role interacting with the system. Subclass of arch:Element.
arch:SystemClassHighest-level unit delivering value; often owned by one team. Subclass of arch:Element.
arch:ContainerClassA running application or data store (C4 sense, not Docker sense — though often both). Subclass of arch:Element.
arch:ComponentClassA structural building block inside a container. Profiles subtype this (e.g. idesign:Manager). Subclass of arch:Element.
arch:DeploymentNodeClassInfrastructure a container runs on: host, VM, cluster, region. Nestable via arch:contains. Subclass of arch:Element.
arch:EnvironmentClassA deployment environment (prod, demo/dv, staging) grouping deployment nodes. Subclass of arch:Element.
arch:DomainClassA business area that groups systems and bounded contexts; classified core, supporting or generic. Subclass of arch:Element.
arch:BoundedContextClassThe boundary inside which a term has one meaning: owns one seam:Ontology and the model graphs that use its language. Subclass of arch:Element.
arch:DomainClassificationClass
arch:Corearch:DomainClassificationcore.
arch:Supportingarch:DomainClassificationsupporting.
arch:Genericarch:DomainClassificationgeneric.
arch:ContextRelationshipClassA context-map relationship (ADR-0032): one arch:upstream context, one arch:downstream context and one arch:relationshipType. At most one per pair of contexts.
arch:RelationshipTypeClassHow the downstream context of an arch:ContextRelationship uses the upstream context's language.
arch:CustomerSupplierarch:RelationshipTypecustomer-supplier.
arch:Conformistarch:RelationshipTypeconformist.
arch:AntiCorruptionLayerarch:RelationshipTypeanti-corruption layer.
arch:PublishedLanguagearch:RelationshipTypepublished language.
arch:SharedKernelarch:RelationshipTypeshared kernel.

Properties ​

TermKindDescription
arch:containsPropertyGeneric nesting: system contains containers, container contains components, node contains nodes. Domain arch:Element. Range arch:Element.
arch:dependsOnPropertyCoarse dependency for sketching; refine with seam:consumes/seam:exposes when contracts are modeled. Domain arch:Element. Range arch:Element.
arch:technologyPropertyFree-text technology label (e.g. 'FastAPI', 'MySQL 8 async replica'). Domain arch:Element.
arch:descriptionPropertyDomain arch:Element.
arch:classificationPropertyDomain arch:Domain. Range arch:DomainClassification.
arch:upstreamPropertyThe context whose language the downstream context depends on: a change to it can break the downstream. Domain arch:ContextRelationship. Range arch:BoundedContext.
arch:downstreamPropertyThe context that reads, writes or subscribes to what the upstream context owns. Domain arch:ContextRelationship. Range arch:BoundedContext.
arch:relationshipTypePropertyDomain arch:ContextRelationship. Range arch:RelationshipType.

SemanticSeams IFML-inspired Interaction Vocabulary ​

Source: ontology/ifml.ttl · prefix ifml:

HONEST SCOPE STATEMENT. This is our vocabulary, inspired by and correspondent with OMG IFML 1.0 (formal/2015-02-05) — it is not a proper subset and cannot be: OMG publishes IFML as a MOF metamodel with XMI interchange, and no official RDF/OWL rendering exists, so any RDF lift is somebody's interpretation. Ours makes three kinds of departure:

  1. CORRESPONDENCE: each class below names the IFML metaclass it corresponds to (see the 'Corresponds to' notes). For that overlap, mechanical XMI round-tripping is feasible. List/Details/Form come from the IFML Extensions package, not Core. 2. DEVIATION: data binding uses seam:reads/seam:writes to SHACL shapes instead of IFML DataBinding -> UML classifier machinery; action invocation uses seam:triggers instead of the opaque Action/DynamicBehavior reference. 3. OMISSION: ActivationExpressions, ViewComponentParts, Modules, Context/Viewpoint, and the full event taxonomy are deliberately out of scope for v1.

Consequence: WebRatio/IFMLEdit models do not import losslessly, and ours do not export losslessly. This is a living-system-model vocabulary, not an interchange tool.

Rendering conventions (for the viewer): ViewContainers are boxes-in-boxes; ViewComponents are typed inner boxes; Events are circles on borders; InteractionFlows are arrows. XOR containers render with the [XOR] tag; landmark containers are reachable from anywhere (navigation menu).

View structure ​

TermKindDescription
ifml:InteractionModelClassRoot of one interaction model. Corresponds to: IFMLModel/InteractionFlowModel.
ifml:ViewElementClassCorresponds to: ViewElement (abstract).
ifml:ViewContainerClassWindow, page, area, or pane. Nestable. Corresponds to: ViewContainer. Subclass of ifml:ViewElement.
ifml:ViewComponentClassContent unit inside a container. Corresponds to: ViewComponent. Subclass of ifml:ViewElement.
ifml:ListClassPublishes a set of instances. Corresponds to: List (IFML Extensions). Subclass of ifml:ViewComponent.
ifml:DetailsClassPublishes one instance. Corresponds to: Details (IFML Extensions). Subclass of ifml:ViewComponent.
ifml:FormClassCollects input; fields generatable from the shape it seam:writes (SHACL 1.2 UI / DASH). Corresponds to: Form (IFML Extensions). Subclass of ifml:ViewComponent.
ifml:containsPropertyContainer nesting and container->component placement. Corresponds to: ViewContainer.viewElements. Domain ifml:ViewElement. Range ifml:ViewElement.
ifml:orderPropertyorder. Render order of components within their containing ViewContainer, ascending; at most one per component and unique within a container (seamsh:OrderShape). Generators emit a container's components in this order, never in graph iteration order. Our extension; IFML's viewElements is an unordered association. Domain ifml:ViewComponent. Range xsd:integer.
ifml:isLandmarkPropertyReachable from any container (global navigation). Corresponds to: ViewContainer.isLandmark. Range xsd:boolean.
ifml:isDefaultPropertyShown by default among XOR siblings. Corresponds to: ViewContainer.isDefault. Range xsd:boolean.
ifml:isXORPropertyChildren are mutually exclusive (tabs, wizard steps). Corresponds to: ViewContainer.isXOR. Range xsd:boolean.
ifml:pathPropertypath. URL path of a landmark ViewContainer: the GET route that serves the full page ("/" for the app entry point). Our extension; IFML has no URL notion. Domain ifml:ViewContainer. Range xsd:string.
ifml:titlePropertytitle. User-facing, language-tagged document title of a ViewContainer (the HTML <title>), distinct from the modeller's rdfs:label. Our extension. Domain ifml:ViewContainer. Range rdf:langString.

Events and flows ​

TermKindDescription
ifml:EventClassUser interaction, system event, or action-completion. Corresponds to: Event (collapsing the ViewElementEvent/ActionEvent/SystemEvent taxonomy — see OMISSION note).
ifml:hasEventPropertyCorresponds to: InteractionFlowElement.events. Domain ifml:ViewElement. Range ifml:Event.
ifml:InteractionFlowClassCorresponds to: InteractionFlow (abstract).
ifml:NavigationFlowClassEvent -> target; moves the user. Maps to hx-get/hx-post + hx-target swap. Corresponds to: NavigationFlow. Subclass of ifml:InteractionFlow.
ifml:DataFlowClassPure parameter passing; no navigation. Corresponds to: DataFlow. Subclass of ifml:InteractionFlow.
ifml:sourcePropertyEvent (navigation) or view component (data flow). Corresponds to: InteractionFlow.srcInteractionFlowElement. Domain ifml:InteractionFlow.
ifml:targetPropertyView element, or — via the seam — a process/decision the event seam:triggers. Corresponds to: InteractionFlow.trgtInteractionFlowElement. Domain ifml:InteractionFlow.
ifml:triggerPropertytrigger. Literal DOM event name that fires the ifml:Event ("click", "submit"); renders as hx-trigger. Our extension; IFML leaves the concrete UI event to the platform. Domain ifml:Event. Range xsd:string.
ifml:swapPropertyswap. How the response of a NavigationFlow lands in its ifml:target component; renders as hx-swap. Generator rules: an ifml:Replace flow targets the component element #<component> and its response partial is <component>.html; an ifml:Append or ifml:Prepend flow targets the component's item list #<component>_items and its partial is <component>_item.html (the operation that renders the partial is the one whose seam:rendersComponent names the target). Channel rule (no flow needed): a comm:Channel subscription a container seam:consumes always appends events into its element (hx-swap beforeend), since an event stream only adds. Our extension. Domain ifml:NavigationFlow. Range ifml:SwapStrategy.
ifml:SwapStrategyClassSwap strategy. Enumeration of ifml:swap values.
ifml:Replaceifml:SwapStrategyreplace (outerHTML).
ifml:Appendifml:SwapStrategyappend (beforeend).
ifml:Prependifml:SwapStrategyprepend (afterbegin).

Parameters ​

TermKindDescription
ifml:ParameterClassNamed typed value exposed or expected by a view element / action. Corresponds to: Parameter.
ifml:hasParameterPropertyCorresponds to: InteractionFlowElement.parameters. Range ifml:Parameter.
ifml:boundToPropertybound to. The sh:path property a Form parameter fills (an ifml:Parameter -> the property IRI of a property shape of the shape the Form seam:writes). Form rule: a Form renders an input only for properties that some ifml:hasParameter of the Form is ifml:boundTo; every other property of the written shape is system-set and never rendered as input. Presentation comes from the bound property shape: sh:order (field order), sh:minCount 1 (required), sh:maxLength (maxlength), dash:editor (widget, e.g. dash:TextAreaEditor -> <textarea>, default single-line <input>). Our extension; IFML leaves Parameter -> domain attribute binding to its DataBinding machinery. Domain ifml:Parameter. Range rdf:Property.
ifml:ParameterBindingClasssourceParameter -> targetParameter along a flow. Maps to htmx params/vals. Corresponds to: ParameterBinding.
ifml:bindsPropertyCorresponds to: InteractionFlow.parameterBindingGroup. Domain ifml:InteractionFlow. Range ifml:ParameterBinding.
ifml:sourceParameterPropertyDomain ifml:ParameterBinding. Range ifml:Parameter.
ifml:targetParameterPropertyDomain ifml:ParameterBinding. Range ifml:Parameter.

SemanticSeams Process/Decision Index Vocabulary ​

Source: ontology/proc.ttl · prefix proc:

NOT a BPMN ontology, on purpose. BPMN 2.0 XML remains the language and the render payload (seam:renderPayload); bpmn-js renders it natively, and full metamodel lifts (BBO, Rospocher/Ghidini) are a swamp that buys nothing for navigation.

This file only provides rdf:type terms for the index: the handful of elements that participate in seam edges. Types exist so that (a) SHACL shapes over the seams have class targets ('seam:decidedBy connects only BusinessRuleTasks to Decisions'), (b) cross-layer queries read as class matches rather than label heuristics, and (c) the shell knows what an IRI is before fetching a payload.

Each term mirrors exactly one BPMN/DMN metaclass; nothing about control flow, gateways, sequence flows, or lanes is modeled here — that all stays in the XML. Minimalist escape hatch: shapes can instead use sh:targetSubjectsOf on seam predicates, making these types optional; decide when the first validation shapes are written.

BPMN index types ​

TermKindDescription
proc:ProcessClassMirrors bpmn:process. The node an ifml:Event seam:triggers and that seam:detailedBy a BPMN seam:Model.
proc:TaskClassMirrors bpmn:task (and serves as the superclass for typed tasks below).
proc:ServiceTaskClassMirrors bpmn:serviceTask. The type that seam:invokes a comm operation. Implementation rule (gaps.md GAP-27): the implementation of the invoked operation is the arch:Container that seam:exposes it, reached at the operation's comm:path; there is no proc:implementation term. A container that also seam:executes the task's process serves the operation in-process. What serves the operation is its seam:implementedBy (ADR-0012). Subclass of proc:Task.
proc:UserTaskClassMirrors bpmn:userTask. Human work item: the process waits until a person completes it on the ifml:Form it seam:completedOn (ADR-0009). Its seam:governedBy policies, with the task as odrl:target, decide who may complete it. Subclass of proc:Task.
proc:BusinessRuleTaskClassMirrors bpmn:businessRuleTask. The only legal subject of seam:decidedBy. Subclass of proc:Task.
proc:MessageThrowEventClassMirrors bpmn:intermediateThrowEvent / endEvent with messageEventDefinition. Subject of seam:publishesTo (as is a proc:ServiceTask that streams its invoked operation's deltas, D046). Message-name rule (gaps.md GAP-26): the event's message name is the rdfs:label of the comm:Channel it seam:publishesTo; no messageRef is added to the BPMN payload.
proc:MessageCatchEventClassMirrors bpmn:intermediateCatchEvent / startEvent with messageEventDefinition. Subject of seam:subscribesTo. Channel start rule (ADR-0010): when the event is the bpmn:startEvent of its process, the process is channel-started. The runtime starts it whenever a message throw event publishes on the comm:Channel it seam:subscribesTo, with the publisher's correlation key and a copy of its entities and statuses.
proc:ErrorBoundaryEventClassMirrors bpmn:boundaryEvent with an errorEventDefinition, attached to a proc:ServiceTask that seam:invokes an operation. Subject of seam:catches (ADR-0013). Lifting rule: such a boundary is lifted only when it catches one of the invoked operation's errors; the attachment (attachedToRef) and the code (the errorCode of the bpmn:error its errorRef names) stay in the XML, and the runtime checks at load that they agree with the graph. A boundary with no errorRef is not lifted.
proc:TimerStartEventClassMirrors bpmn:startEvent of a bpmn:process with one timerEventDefinition: a timer-started process (ADR-0037). The process has no route; the arch:Container that seam:schedules the process starts an instance at each due time the expression defines. Lifting rule: the expression (bpmn:timeDate or bpmn:timeCycle) stays in the XML as a quoted ISO 8601 literal, and the runtime checks at load that the graph and the XML agree. The start event of an event subprocess is not lifted.
proc:TimerCatchEventClassMirrors bpmn:intermediateCatchEvent with one timerEventDefinition, or a bpmn:boundaryEvent with one, interrupting or not, attached to a proc:UserTask (ADR-0037): the instance waits, or the task's timer fires while it is still open (an overdue reminder). Lifting rule: the expression (bpmn:timeDate, bpmn:timeDuration or bpmn:timeCycle) and the attachment (attachedToRef) stay in the XML, and the runtime checks at load that they agree with the graph. A timer boundary on any other task is not lifted: a service-call timeout is an error (ADR-0013).

DMN index types ​

TermKindDescription
dec:DecisionModelClassMirrors dmn:definitions. The seam:Model-typed node whose seam:renderPayload is DMN XML.
dec:DecisionClassMirrors dmn:decision. Object of seam:decidedBy; subject of seam:reads on its input data shapes.

Runtime binding terms (M004/S02, gaps.md GAP-22..GAP-27) ​

TermKindDescription
proc:correlationKeyPropertyThe ifml:Parameter whose value identifies a running instance of the process, so later events, channel subscriptions and lifecycle transitions find the same instance. The handler that starts the process passes it as correlation_key; its name matches the hydra:variable of the comm:path mapping of the operation the triggering event seam:submitsTo (gaps.md GAP-22). Domain proc:Process. Range ns1:Parameter.
dec:payloadElementPropertyThe id of the native dmn:decision element in the decision model's seam:renderPayload (a literal, e.g. "routing_decision"). The worker joins the graph decision to the DMN on this id and checks the DMN declares it (GAP-23); it never derives the id from the IRI local name. Domain dec:Decision.
dec:InputBindingClassBinds one DMN input variable to a property path of the shape the process carries (GAP-24).
dec:OutputBindingClassBinds the decision's DMN output to the process variable it feeds (GAP-25).
dec:inputPropertyOne DMN input the worker must supply when evaluating the decision. Domain dec:Decision. Range dec:InputBinding.
dec:outputPropertyThe DMN output whose value the worker stores in the process. Domain dec:Decision. Range dec:OutputBinding.
dec:variablePropertyThe DMN-side name: for an InputBinding, the inputExpression text of the decision table input; for an OutputBinding, the output's name (or its label when the payload's output has no name attribute).
dec:fromPathPropertyThe sh:path of the carried shape whose value fills the input. Domain dec:InputBinding.
dec:measurePropertyOptional function applied to the path value before binding. Absent means the value itself. Domain dec:InputBinding. Range dec:Measure.
dec:MeasureClassEnumeration of functions dec:measure can apply.
dec:Lengthdec:MeasureThe character length of a string value.
dec:processVariablePropertyThe process variable the decision output is stored under. Domain dec:OutputBinding.

SemanticSeams Statechart Vocabulary ​

Source: ontology/state.ttl · prefix state:

Entity lifecycles as state machines. Hierarchical/parallel states deferred until a dogfood model needs them.

Statecharts (entity lifecycles) — SCXML-shaped, deliberately flat for v1 ​

TermKindDescription
state:StateMachineClass
state:StateClass
state:TransitionClass
state:hasStatePropertyDomain state:StateMachine. Range state:State.
state:initialPropertyDomain state:StateMachine. Range state:State.
state:finalPropertyDomain state:StateMachine. Range state:State.
state:hasTransitionPropertyDomain state:StateMachine. Range state:Transition.
state:fromPropertyDomain state:Transition. Range state:State.
state:toPropertyDomain state:Transition. Range state:State.
state:triggerPropertyHuman-readable trigger label. Which process tasks may fire it lives on the seam (seam:fires). Domain state:Transition.

SemanticSeams Communication Vocabulary ​

Source: ontology/comm.ttl · prefix comm:

Request/response communication is described with Hydra (hydra:Operation, hydra:method, etc.). This module only adds what Hydra lacks: asynchronous channels, and QUERY as a first-class read method. Payload contracts are SHACL shapes via seam:acceptsShape / seam:returnsShape; the fragment-vs-data distinction is seam:mediaKind.

Addressing reuses Hydra: comm:path points at a hydra:IriTemplate whose hydra:template is the URL and whose hydra:mapping entries name, per variable, the shape path (hydra:property) that supplies the value. comm:transport and comm:eventName say how a channel reaches a client; comm:requestMediaType says how an operation's request body is encoded.

Handler-name rule (no term): the code identifier of an operation or channel is its IRI local name with a trailing "_op" removed (:send_message_op -> send_message, :stream_events -> stream_events).

Token stream (declared, D046): a service task that seam:invokes an operation streams that operation's reply onto a channel only when the task itself seam:publishesTo the channel (invoke_llm seam:publishesTo :stream_events). Each delta is an event named by the channel's comm:eventName; a throw event that seam:publishesTo the same channel ends the stream (ADR-0007 spike finding 2). The runtime publishes no delta the graph does not state.

TermKindDescription
comm:ChannelClassAn async topic/queue/webhook target. Events published here are named-graph payloads whose shape is the channel's seam:acceptsShape.
comm:EndpointClassA network-addressable base a container seam:exposes; groups hydra:Operations and comm:Channels.
comm:hasOperationPropertyDomain comm:Endpoint. Range hydra:Operation.
comm:hasChannelPropertyDomain comm:Endpoint. Range comm:Channel.

Addressing, transport and encoding (M004 golden gaps GAP-08/15/18) ​

TermKindDescription
comm:pathPropertypath. The URL of a hydra:Operation or comm:Channel, relative to the exposing container: a hydra:IriTemplate with hydra:template "/conversations/{conversation}/messages" and one hydra:mapping [ hydra:variable ; hydra:property ] per variable. hydra:property names the shape path whose value fills the variable. Range hydra:IriTemplate.
comm:TransportClassHow a comm:Channel's events reach a subscriber.
comm:SSEcomm:TransportServer-Sent Events.
comm:WebSocketcomm:TransportWebSocket.
comm:SemPKMWebhookcomm:TransportSemPKM webhook. Inbound (ADR-0027): SemPKM POSTs its webhook deliveries to the channel's comm:path on the one container that seam:exposes it, and each change to an object of the channel's seam:acceptsShape starts the processes whose start event seam:subscribesTo the channel. The channel's comm:eventName is the SemPKM event type ("object.changed"); the SemPKM store is the one the accepted shape is seam:storedIn. No process seam:publishesTo such a channel.
comm:transportPropertytransport. Domain comm:Channel. Range comm:Transport.
comm:eventNamePropertyevent name. The event type a subscriber listens for (SSE event: field, htmx sse-swap). Domain comm:Channel.
comm:requestMediaTypePropertyrequest media type. Literal media type of the request body, e.g. "application/x-www-form-urlencoded" for an htmx form post or "application/json" for a seam:Data operation. seam:acceptsShape says what the body holds; this says how it is encoded. Domain hydra:Operation.

Operation implementation (ADR-0012) ​

TermKindDescription
comm:LLMCompletionClassLLM completion. Implementation kind: chat messages built from the accepted entity, a streamed completion from the serving container (the executing container's deploy:serviceOf binding) at the operation's comm:path, deltas published on the task's seam:publishesTo channel, and the joined reply validated against seam:returnsShape.
comm:PythonHandlerClassPython handler. Implementation kind: a hand-written function in the application's handlers package, called in the runtime's process with the accepted entity; its result is validated against seam:returnsShape. Names the function with comm:handler. The operation must be served in-process.
comm:HTTPEndpointClassHTTP endpoint. Implementation kind: the accepted entity POSTed as JSON to the serving container (base URL from the deploy:serviceOf binding, path from the operation's comm:path), the JSON response validated against seam:returnsShape.
comm:handlerPropertyhandler. Dotted path of a comm:PythonHandler's function relative to the handlers package, e.g. "notify.notify_manager" (function notify_manager in handlers/notify.py). Every segment is a Python identifier, so the path cannot name code outside the package. Domain comm:PythonHandler. Range xsd:string.

Operation errors (ADR-0013) ​

TermKindDescription
comm:errorCodePropertyerror code. The code of an error an operation can raise, on the hydra:Status the operation hydra:possibleStatus (e.g. "notify-failed"). An implementation raises it, and a BPMN error boundary event that seam:catches the status names a bpmn:error with the same errorCode. Unique among one operation's statuses (ADR-0013). Domain hydra:Status. Range xsd:string.
comm:typePropertytype. sh:path of the RFC 9457 problem member "type" in an error shape: a URI reference identifying the problem type ("about:blank" when absent).
comm:titlePropertytitle. sh:path of the RFC 9457 problem member "title" in an error shape: a short summary of the problem type. Required in every error shape; the runtime fills it from the status's rdfs:label.
comm:statusPropertystatus. sh:path of the RFC 9457 problem member "status" in an error shape: the HTTP status code, an xsd:integer. Required in every error shape. Its value is never stated in the shape; the runtime fills it from the status's hydra:statusCode, so the code is stated once.
comm:detailPropertydetail. sh:path of the RFC 9457 problem member "detail" in an error shape: an explanation of this occurrence of the problem, supplied by the raised error.
comm:instancePropertyinstance. sh:path of the RFC 9457 problem member "instance" in an error shape: a URI reference identifying this occurrence of the problem.

SemanticSeams Deployment Vocabulary (stub) ​

Source: ontology/deploy.ttl · prefix deploy:

The VERB side of infrastructure. arch: describes what runs where (nouns); deploy: describes how a container comes into existence: artifact, config, resources, ordering, and placement policy. This graph does not launch anything — deployment artifacts (docker-compose, Ansible inventory/plays, k8s manifests) are GENERATED projections of it, exactly as a Gantt chart is a projection of plan:.

Prior art: TOSCA (heavyweight standard for topology + orchestration templates, read but not adopted); BESSER's deployment modeling extension (same gap, same fix).

GitOps loop: the as-designed named graph is desired state; a generator/reconciler emits and applies artifacts; an observer writes actual state into an as-deployed named graph (Zabbix/monitoring as data source). Drift detection = SPARQL diff between the two graphs — with semantics ('order_api violates its placement policy'), not textual YAML diffs.

Design rule inherited from seam.ttl: few and generic. Values that are secrets are referenced by IRI (e.g. into a secret manager), never inlined as literals.

Artifact and configuration ​

TermKindDescription
deploy:ArtifactClassA launchable unit: OCI image, package, VM template. Identified by reference + version.
deploy:artifactPropertyOn an arch:Container (shared) or a deploy:Override (one environment). No rdfs:domain: two would mean both, so shapes/seam-shapes.ttl states the allowed subjects (ADR-0015). Range deploy:Artifact.
deploy:referencePropertyImage/package reference, e.g. 'ghcr.io/org/order-api'. Domain deploy:Artifact.
deploy:versionPropertyDomain deploy:Artifact.
deploy:BuildClassBuild. How to build an artifact from source instead of pulling it: a deploy:context and a deploy:dockerfile (ADR-0015).
deploy:buildPropertybuild. Build the artifact from source. Generator rule: an artifact with a build renders as compose 'build' with 'pull_policy: build', one without as a pulled 'image'. Domain deploy:Artifact. Range deploy:Build.
deploy:contextPropertycontext. The build context directory, relative to the model file's directory (like seam:renderPayload paths). Domain deploy:Build. Range xsd:string.
deploy:dockerfilePropertydockerfile. The Dockerfile, relative to the build deploy:context, as in Docker. Domain deploy:Build. Range xsd:string.
deploy:ConfigurationClassA set of environment bindings for a container in an environment.
deploy:configurationPropertyOn an arch:Container (shared) or a deploy:Override (one environment, merged with the shared bindings by deploy:key). No rdfs:domain, as for deploy:artifact (ADR-0015). Range deploy:Configuration.
deploy:bindingPropertyA key/value pair (blank node with deploy:key and one of deploy:value, deploy:secretRef, deploy:secretFile or deploy:serviceOf). Domain deploy:Configuration.
deploy:keyProperty
deploy:valueProperty
deploy:secretRefPropertyIRI into a secret manager (e.g. an Infisical path). NEVER inline secret literals.
deploy:secretNamePropertysecret name. Name of the secret in the target platform's secret store (e.g. a compose/swarm external secret), on a binding that carries a deploy:secretRef. The secret value never enters the graph; generators render the name as an external secret source.
deploy:secretFilePropertysecret file. On a binding, instead of deploy:secretRef: the secret is read from this file, not from a platform secret store. The path is relative to the model file's directory; the file's contents never enter the graph. Generators render it as a file secret the host can repoint with <KEY>_FILE (ADR-0015). Range xsd:string.
deploy:serviceOfPropertyservice of. Derived binding: the binding's value is the in-network URL of the referenced container, rendered as http://<service name>:<deploy:containerPort>. Use instead of a literal deploy:value so the URL follows the target's name and port. Range arch:Container.

Environments (ADR-0015) ​

TermKindDescription
deploy:OverrideClassOverride. An environment-scoped set of facts about one container: a qualified relation naming its deploy:environment and carrying replacement deploy:artifact, deploy:configuration or deploy:replicas facts. An override's artifact and replicas replace the shared ones whole; its bindings replace the shared binding with the same deploy:key or add one. Absent means shared, never unset (ADR-0015).
deploy:overridePropertyoverride. A container's environment-scoped facts. At most one per environment (constraint in shapes/seam-shapes.ttl). Domain arch:Container. Range deploy:Override.
deploy:environmentPropertyenvironment. The arch:Environment an override's facts hold in. Domain deploy:Override. Range arch:Environment.
deploy:proxiesPropertyproxies. A code-free reverse proxy and its target: the container forwards every request to the referenced container's single deploy:port (ADR-0015). Domain arch:Container. Range arch:Container.

Network, storage, readiness ​

TermKindDescription
deploy:PortClassPort. A port a container listens on. Without deploy:publishedPort it is internal to the deployment network (compose 'expose'); with one it is published to the host (compose 'ports').
deploy:portPropertyport. Domain arch:Container. Range deploy:Port.
deploy:containerPortPropertycontainer port. Port number the container listens on. Domain deploy:Port. Range xsd:integer.
deploy:publishedPortPropertypublished port. Host port the container port is published on. Absent means internal only. Domain deploy:Port. Range xsd:integer.
deploy:VolumeClassVolume. Named persistent storage that outlives a container, mounted into it at deploy:mountPath.
deploy:volumePropertyvolume. Domain arch:Container. Range deploy:Volume.
deploy:volumeNamePropertyvolume name. Name of the volume resource (compose top-level 'volumes' key). Domain deploy:Volume.
deploy:mountPathPropertymount path. Absolute path inside the container where the volume is mounted. Domain deploy:Volume.
deploy:HealthcheckClassHealthcheck. How the platform decides a container is ready: a probe command run on an interval.
deploy:healthcheckPropertyhealthcheck. Domain arch:Container. Range deploy:Healthcheck.
deploy:probePropertyprobe. Shell command whose exit status 0 means ready (compose renders it as CMD-SHELL). Domain deploy:Healthcheck.
deploy:intervalPropertyinterval. Time between probes, as a duration string (e.g. '5s'). Domain deploy:Healthcheck.
deploy:StoreKindClassStore kind. Controlled vocabulary of the stores the runtime can use (ADR-0011). The runtime checks a store's deploy:storeKind against it; arch:technology stays free text for people and is never read.
deploy:PostgreSQLdeploy:StoreKindPostgreSQL. A PostgreSQL server, reached through a deploy:connectsTo binding on the executing container.
deploy:SQLitedeploy:StoreKindSQLite. An embedded SQLite file. No connection is needed; the path comes from the SEAMS_DB environment variable.
deploy:SemPKMdeploy:StoreKindSemPKM. A SemPKM instance, reached over HTTP: it holds the entities of the shapes seam:storedIn it as RDF, while process state stays in the runtime's relational store. The executing container has a deploy:connectsTo binding for its base URL and a deploy:authenticatesTo binding for its service token (ADR-0025).
deploy:storeKindPropertystore kind. Store arch:Container -> the deploy:StoreKind it is. Exactly one per store (constraint in shapes/seam-shapes.ttl). Domain arch:Container. Range deploy:StoreKind.
deploy:connectsToPropertyconnects to. On a deploy:binding blank node: the store arch:Container whose connection string the binding carries. It sits beside deploy:serviceOf; the value still comes from deploy:secretRef / deploy:secretName (or deploy:value for a non-secret dev URL), and the runtime reads the environment variable named by the binding's deploy:key, never a fixed key name (ADR-0011). Range arch:Container.
deploy:authenticatesToPropertyauthenticates to. On a deploy:binding blank node: the deploy:SemPKM store arch:Container whose service token the binding carries. Its value comes from a secret (deploy:secretRef / deploy:secretName), and the runtime reads the environment variable named by the binding's deploy:key; the predicate, not the key name, tells it apart from the deploy:connectsTo binding (ADR-0025). Range arch:Container.

Resources, replication, ordering ​

TermKindDescription
deploy:cpuPropertyRequested CPU (free-form for v1, e.g. '2'). Domain arch:Container.
deploy:memoryPropertyRequested memory (e.g. '4Gi'). Domain arch:Container.
deploy:replicasPropertyRequested number of running INSTANCES of the container, not a node count. On an arch:Container (shared) or a deploy:Override (one environment); no rdfs:domain, as for deploy:artifact. Until backlog A10 the generator runs the serving container with one replica whatever this says (ADR-0015). Range xsd:integer.
deploy:dependsOnPropertyStartup ordering, distinct from arch:dependsOn (design-time dependency). Domain arch:Container. Range arch:Container.

Placement: policy in, resolved fact out ​

TermKindDescription
deploy:PlacementPolicyClassWHY a container lands where it does: affinity to an Environment or node class, hardware requirements, anti-affinity. seam:deployedTo becomes the RESOLVED OUTPUT of applying this policy, not a hand-asserted fact.
deploy:placementPropertyPlacement policy of the container. Generator rule: the RESOLVED placement, the container's seam:deployedTo node, renders as the swarm constraint 'node.labels.seams.node == <node rdfs:label>' whether or not a policy is asserted; the policy explains the choice, the deployedTo fact drives the output. Domain arch:Container. Range deploy:PlacementPolicy.
deploy:targetEnvironmentPropertyDomain deploy:PlacementPolicy. Range arch:Environment.
deploy:requiresPropertyFree-form capability requirement for v1 (e.g. 'fast-disks', 'gpu'). Matched against deploy:capability advertised by nodes. Domain deploy:PlacementPolicy.
deploy:capabilityPropertyFree-form capability a deployment node advertises (e.g. 'fast-disks', 'gpu'); matched by deploy:requires. Split from deploy:requires so neither property violates its own domain. Domain arch:DeploymentNode.
deploy:antiAffinityPropertyMust not co-locate with the referenced container. Domain deploy:PlacementPolicy. Range arch:Container.

SemanticSeams Scenario and Example Vocabulary ​

Source: ontology/verify.ttl · prefix verify:

What a model says it should do, stated so a generator can turn it into tests (ADR-0014). A scenario runs a process through its user tasks and names the state it ends in; a decision example gives a decision's inputs and its expected output; a shape example points a SHACL shape at a node it must accept or reject. Policy tests need no terms here: they derive from the ODRL policies already in the model.

Every triple that uses these terms lives in the seams graph, next to the ODRL policies: each one joins layers (a process, data paths, parties, lifecycle states). DASH's test cases were checked first; ADR-0014 records why each was not reused. The constraints on these terms are the shapes in ontology/shapes/seam-shapes.ttl.

Scenarios ​

TermKindDescription
verify:ScenarioClassScenario. One run of a process: the verify:actor starts verify:process with the verify:given field values, the parties in verify:step complete its user tasks in order, and the run ends in verify:expectState, at verify:expectEndEvent, or both. The process is one a UI event seam:triggers, so the run starts the way a person starts it. The run also takes in every process it starts through a channel (ADR-0010), so an expectation may name a state or end event of one of those. Each verify:failure makes an operation fail whenever the run invokes it.
verify:processPropertyprocess. The proc:Process the scenario runs. Domain verify:Scenario. Range proc:Process.
verify:actorPropertyactor. The odrl:Party who acts: on a scenario, who starts the process; on a step, who completes the step's user task. A test acts as a person holding that role. Range odrl:Party.
verify:givenPropertygiven. One input field value, as a blank node with one verify:field and one verify:value. On a scenario it is a field of the form that starts the process; on a step, a field of the form the task is completed on; on a decision example, a value of one of the decision's dec:input bindings.
verify:fieldPropertyfield. The sh:path of the shape property the given value fills, e.g. :amount.
verify:valuePropertyvalue. The literal for a given field or an expected output. Its lexical form is what a form submits; its datatype is what a decision evaluator receives.
verify:stepPropertystep. An RDF list of the user tasks the scenario completes, in order. Each member is a blank node with one verify:task, one verify:actor and the verify:given fields the task's form is submitted with. Domain verify:Scenario.
verify:taskPropertytask. The proc:UserTask a step completes. It is in the same BPMN model as the scenario's process. Range proc:UserTask.
verify:expectStatePropertyexpect state. The state:State the process's entity is in when the steps are done. The entity is the one whose shape seam:lifecycle holds that state. It may be an entity a process the run starts through a channel moves. Domain verify:Scenario. Range state:State.
verify:expectEndEventPropertyexpect end event. The BPMN end event the run finishes on: its IRI is the process model's IRI with the end event's id as fragment (ADR-0002), and it is lifted into the process's model graph like any element a seam names. It may instead be an end event of a process the run starts through a channel: one whose message start event seam:subscribesTo a channel an element of the scenario's process seam:publishesTo. Domain verify:Scenario.
verify:failurePropertyfailure. An operation that fails in this run, as a blank node with one verify:operation and one verify:status. Whenever the run invokes the operation, the runtime raises the status's comm:errorCode instead of calling the implementation, so the run takes the error boundary that seam:catches the status (ADR-0013). Failing the operation is the scenario's input, like a given value: the handler's own reasons for failing are not part of the model. Domain verify:Scenario.
verify:operationPropertyoperation. The hydra:Operation a verify:failure makes fail. Range hydra:Operation.
verify:statusPropertystatus. The hydra:Status the operation fails with: one of its hydra:possibleStatus that carries a comm:errorCode. Range hydra:Status.

Decision examples ​

TermKindDescription
verify:DecisionExampleClassDecision example. One row of a decision's expected behaviour: the verify:given values for every dec:input of verify:decision, and the verify:expectOutput the DMN must return.
verify:decisionPropertydecision. The dec:Decision the example evaluates. Domain verify:DecisionExample. Range dec:Decision.
verify:expectOutputPropertyexpect output. One expected output, as a blank node with the dec:variable of one of the decision's dec:output bindings and the verify:value the DMN returns for it. Domain verify:DecisionExample.

Shape examples ​

TermKindDescription
verify:validExamplePropertyvalid example. A node the shape must accept: validating it with the shape as its only shape conforms. The example node carries no rdf:type a shape targets, so it never makes the model itself fail its shapes. Domain sh:NodeShape.
verify:invalidExamplePropertyinvalid example. A node the shape must reject: validating it with the shape as its only shape does not conform. Domain sh:NodeShape.

Released under the Apache-2.0 License.