One join graph, product-neutral.
Node and edge types, the identity rules, the interface layers between graphs, the gates a mesh must pass, nesting and peering, and the crosswalk to OTCS-0020's observation classes.
- Trajectory is identity: the identity specification
- OTCS-0020 Observation classesDRAFT · in deliberation · earliest decision 2026-12-11
- Join profiles between graphs: an OTCS proposal in draft, not yet public
Acequia, Inc. is an invented organization. These pages present a working design, not deployment results; its contracted stages and change freezes are illustrative. The sections below mirror the Governed Autonomy workbook (v0.50): its columns, rules, invariants and catalogs, as written, with the worked example's organization named as it is there. The deployment's own rows, parties, contract identifiers and configuration stay with the deployment; where a table's rows stay, its columns are shown.
01What the graph isworkbook tab 07 · Knowledge graph
What this is for. How to build the shared map of the case as plain files that any tool can read.
Each organization keeps its own graph. A shared map can sit inside a larger one or meet another as an equal, and each keeps its own names. How to use it. Read what to create, then the file layout, then the build order. A worked example and a checker ship with the specification.
One join graph across the six seats. Every node is a plain file: any graph store can load it, and no product is needed to rebuild it. A product's own graph is one source. A Join can sit inside a larger Join, or connect as a peer with another organization's Join. The (section 11) is the larger Join for Acequia: it joins every IT group with the Business and traces work to the Mission. The detail is in the knowledge graph specification. The starter kit at kg/ holds one worked Case and a validator.
1. What the graph is — one join graph, product-neutral
- ¶One graphThe join graph holds one Case and the shared identifiers on it: host, identity, service, venue, owner, journey, playbook step, field, and context object.
- ¶Product-neutralEvery node is a plain file. Any graph store can load it. No product is required to rebuild it.
- ¶Join identityThe join graph mints every join ID. A product ID is a mapping onto a join ID. It is never the join key.
- ¶SourcesA product's own graph, a case system, an ITSM, and a field model are sources. Each one maps onto join IDs.
- ¶Two or more graphsOrganizations keep their own graphs. Each one connects to a Join through a profile and a declared interface (section 7).
- ¶Nested and peer JoinsA Join is a graph too. It can nest inside a larger Join or peer with another organization's Join (section 10).
- ¶Mission JoinThis six-seat Join nests inside the Mission Join, which joins IT groups, business departments and the Mission through the work each does (section 11; Mission Join tab).
- ¶Not the program graphThe join graph is separate from the program graph at data/graph.json. A PTY:: code maps to an org:* identifier there.
- ¶Contractthe knowledge graph specification is the Markdown contract. This tab and that file say the same thing.
023. What to create — node typesworkbook tab 07 · Knowledge graph
- ¶CaseProcess spine state 0–7. One spine.
- ¶FindingQualification state. Raised by one Detection.
- ¶ObservableNormalized fact: IP, domain, hash, URL, user, host, session, email artifact, or composite identity event.
- ¶HostMember of the entity graph. IP, hostname, DNS, and asset tag are identifiers on the node.
- ¶IdentityKind: workforce, visitor/volunteer, service account, or privileged.
- ¶ServiceAccountable owner (PTY::).
- ¶VenueNetwork, access, and operational boundary.
- ¶JourneyEnd-to-end service path: participant, media, workforce, or visitor.
- ¶PartyFour digits, extensible to five. Main name and second name, both required.
- ¶Join seatExactly these six in this Join. A seat is not a party. The 's tiers are its own seats, not new seats here.
- ¶Context objectObservation class (, , , , ), domain, risk domain (node, neighborhood, or zone), , population (declared, stub, populated).
- ¶DetectionStable detection identity. Versioned logic lives on Detection version.
- ¶FieldField-contract model and field name.
- ¶Source contractTelemetry source a Detection requires.
- ¶playbook stepThe step on a playbook family procedure.
- ¶ITSM taskIncident, change, or request. Linked to one Case.
- ¶SessionPurpose, lineage, action class, revoke path. V3.
- ¶Platform releaseAs-of and validity horizon.
- ¶mission horizonAcequia, the next peak operating window, the peak operating window after it.
- ¶Source graphOwner (PTY::), profile, exchange pattern, and kind: source or join.
033. What to create — edge typesworkbook tab 07 · Knowledge graph
- ¶has-findingCase
- To
- Finding
- Rule
- A Finding sits on one Case.
- ¶has-observableCase
- To
- Observable
- Rule
- Many-to-many.
- ¶aboutFinding
- To
- Host, Identity, Service, Venue, or Journey
- Rule
- The Finding names the entities it describes.
- ¶raised-byFinding
- To
- Detection
- Rule
- Many-to-many.
- ¶on-caseCase
- To
- Host, Identity, Service, Venue, or Journey
- Rule
- The shared identifiers for this Case.
- ¶owned-byService or Case
- To
- Party
- Rule
- Owner is this edge. Owner is not a node type.
- ¶occupiesParty
- To
- Join seat
- Rule
- A party occupies one or more seats. A new party gets no new seat.
- ¶at-stepCase
- To
- playbook step
- Rule
- The playbook consumes the Case. The playbook is not the ontology.
- ¶opens-taskCase
- To
- ITSM task
- Rule
- Closing the task leaves the Case open until the acceptance authority closes it.
- ¶constrainsContext object
- To
- Case or Session
- Rule
- Written only when the is complete. It narrows. It never widens authority.
- ¶declared-byContext object
- To
- Party
- Rule
- The party that owns the object.
- ¶bindsSession
- To
- Context object
- Rule
- V3 writes declared objects onto the session.
- ¶attaches-releasePlatform release
- To
- mission horizon
- Rule
- A release attaches to a mission horizon. It does not open a joint version.
- ¶conflictEntity
- To
- Entity
- Rule
- Two canonical IDs for one real object. Both nodes remain. No silent merge.
- ¶published-bySource graph
- To
- Party
- Rule
- Each source graph has one owner.
- ¶connectsInterface
- To
- Source graph
- Rule
- A member interface connects source graphs through a Join. A peering interface connects Joins only.
- ¶nested-inJoin
- To
- Join
- Rule
- The child Join is a member of the parent Join. At most one parent per Join.
- ¶Detection links edgesDetection
- To
- Source, layer, field, entity, signal, outcome, technique, control
- Rule
- As specified on Detection links and in the detection ontology map.
043. What to create — identity rulesworkbook tab 07 · Knowledge graph
- ¶One canonical IDEach real object has one join ID. Other identifiers are properties on that node.
- ¶Conflict, not mergeA second canonical ID for the same object is a conflict edge. Both nodes stay.
- ¶Product IDs mapA product ID maps onto a join ID in mappings/. It never mints a join node.
- ¶Envelope firstA context object carries its before a constrains edge is written. , , , : subject, population, window. : subject, as-of, validity horizon.
- ¶UnknownA missing node, edge, membership, or source is written as unknown. Never zero, false, or no-risk.
- ¶Contract changeRenaming or removing a join ID is a contract change.
054. How to create — mesh rulesworkbook tab 07 · Knowledge graph
- ¶Links are IDsA link is a join ID. Paths and titles are not links.
- ¶Broken link failsA link to an ID with no node file fails the gate.
- ¶Absence is unknownAbsence is written as unknown.
- ¶Mappings never mintA product mapping never mints a join node.
- ¶Rename is a contract changeRenaming an ID is a contract change.
065. Build orderworkbook tab 07 · Knowledge graph
- ¶1Declare the schema
- Output
- kg/schema/node-types/ and kg/schema/edge-types/ match this tab.
- ¶2Mint identities
- Output
- One join ID per real object in kg/nodes/; conflicts written as conflict edges.
- ¶3Write the first wave
- Output
- Entity graph, evidence fitness, mission schedule, service catalog, authority; stubs declared, not populated.
- ¶4Write the edges
- Output
- Case join edges and Detection links edges, by ID.
- ¶5Add product mappings
- Output
- kg/mappings/<source>/ for each product, case system, and ITSM.
- ¶6Declare profiles and interfaces
- Output
- kg/profiles/ for each source graph; kg/interfaces/ for each connection.
- ¶7Gate
- Output
- kg/tools/validate.py passes every gate in section 8 and every competency question.
- ¶8Load
- Output
- Any graph store loads kg/ as files. No product is required.
077. Interfaces between graphs — layersworkbook tab 07 · Knowledge graph
- ¶IdentityIs it the same object?
- Artifact
- Crosswalk in kg/mappings/<source>/
- Rule
- Each pair carries asserted-by (PTY::), as-of, and evidence. Disagreement is a conflict edge.
- ¶MeaningIs it the same kind of thing?
- Artifact
- kg/profiles/<source>.md
- Rule
- Source types and edges map onto join types and onto actor, authority, action, environment, time, and evidence.
