KTP/
github
Skip to this page's sections
A monochrome view through window blinds shows a chile ristra, a spider decoration and a street
Governed Autonomy · run it · knowledge graph

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.

The KTP mechanism

Trajectory is identity: a graph is the record of standing over time, and a product ID is a mapping, never the key.

In KTP an agent is what it has been doing, witnessed and chained. A knowledge graph built for governed autonomy is that record for a whole estate: cases, findings, hosts, identities, services and the parties that touch them, joined by identity rules no product owns. When two graphs meet, the seam keeps each side's namespace, and what crosses it arrives as an observation with a loss and a clock.
The working form, from the workbook
One graph, product-neutral, with join identity. Twenty-one node types and nineteen edge types with their rules. Five interface layers between graphs (identity, meaning, trust, access, exchange) and three exchange patterns. Ten gates the mesh must pass. Rules for nested and peer graphs, no transit, bilateral identity. Twenty-six invariants, KG-1 to KG-26.

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 graph
    The join graph holds one Case and the shared identifiers on it: host, identity, service, venue, owner, journey, playbook step, field, and context object.
  • Product-neutral
    Every node is a plain file. Any graph store can load it. No product is required to rebuild it.
  • Join identity
    The join graph mints every join ID. A product ID is a mapping onto a join ID. It is never the join key.
  • Sources
    A product's own graph, a case system, an ITSM, and a field model are sources. Each one maps onto join IDs.
  • Two or more graphs
    Organizations keep their own graphs. Each one connects to a Join through a profile and a declared interface (section 7).
  • Nested and peer Joins
    A Join is a graph too. It can nest inside a larger Join or peer with another organization's Join (section 10).
  • Mission Join
    This 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 graph
    The join graph is separate from the program graph at data/graph.json. A PTY:: code maps to an org:* identifier there.
  • Contract
    the 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

  • Case
    Process spine state 0–7. One spine.
  • Finding
    Qualification state. Raised by one Detection.
  • Observable
    Normalized fact: IP, domain, hash, URL, user, host, session, email artifact, or composite identity event.
  • Host
    Member of the entity graph. IP, hostname, DNS, and asset tag are identifiers on the node.
  • Identity
    Kind: workforce, visitor/volunteer, service account, or privileged.
  • Service
    Accountable owner (PTY::).
  • Venue
    Network, access, and operational boundary.
  • Journey
    End-to-end service path: participant, media, workforce, or visitor.
  • Party
    Four digits, extensible to five. Main name and second name, both required.
  • Join seat
    Exactly these six in this Join. A seat is not a party. The 's tiers are its own seats, not new seats here.
  • Context object
    Observation class (, , , , ), domain, risk domain (node, neighborhood, or zone), , population (declared, stub, populated).
  • Detection
    Stable detection identity. Versioned logic lives on Detection version.
  • Field
    Field-contract model and field name.
  • Source contract
    Telemetry source a Detection requires.
  • playbook step
    The step on a playbook family procedure.
  • ITSM task
    Incident, change, or request. Linked to one Case.
  • Session
    Purpose, lineage, action class, revoke path. V3.
  • Platform release
    As-of and validity horizon.
  • mission horizon
    Acequia, the next peak operating window, the peak operating window after it.
  • Source graph
    Owner (PTY::), profile, exchange pattern, and kind: source or join.

033. What to create — edge typesworkbook tab 07 · Knowledge graph

  • has-finding
    Case
    To
    Finding
    Rule
    A Finding sits on one Case.
  • has-observable
    Case
    To
    Observable
    Rule
    Many-to-many.
  • about
    Finding
    To
    Host, Identity, Service, Venue, or Journey
    Rule
    The Finding names the entities it describes.
  • raised-by
    Finding
    To
    Detection
    Rule
    Many-to-many.
  • on-case
    Case
    To
    Host, Identity, Service, Venue, or Journey
    Rule
    The shared identifiers for this Case.
  • owned-by
    Service or Case
    To
    Party
    Rule
    Owner is this edge. Owner is not a node type.
  • occupies
    Party
    To
    Join seat
    Rule
    A party occupies one or more seats. A new party gets no new seat.
  • at-step
    Case
    To
    playbook step
    Rule
    The playbook consumes the Case. The playbook is not the ontology.
  • opens-task
    Case
    To
    ITSM task
    Rule
    Closing the task leaves the Case open until the acceptance authority closes it.
  • constrains
    Context object
    To
    Case or Session
    Rule
    Written only when the is complete. It narrows. It never widens authority.
  • declared-by
    Context object
    To
    Party
    Rule
    The party that owns the object.
  • binds
    Session
    To
    Context object
    Rule
    V3 writes declared objects onto the session.
  • attaches-release
    Platform release
    To
    mission horizon
    Rule
    A release attaches to a mission horizon. It does not open a joint version.
  • conflict
    Entity
    To
    Entity
    Rule
    Two canonical IDs for one real object. Both nodes remain. No silent merge.
  • published-by
    Source graph
    To
    Party
    Rule
    Each source graph has one owner.
  • connects
    Interface
    To
    Source graph
    Rule
    A member interface connects source graphs through a Join. A peering interface connects Joins only.
  • nested-in
    Join
    To
    Join
    Rule
    The child Join is a member of the parent Join. At most one parent per Join.
  • authoritative-for
    Party
    To
    Interface
    Rule
    Carries a scope: the node type or property. One authoritative party per scope.

043. What to create — identity rulesworkbook tab 07 · Knowledge graph

  • One canonical ID
    Each real object has one join ID. Other identifiers are properties on that node.
  • Conflict, not merge
    A second canonical ID for the same object is a conflict edge. Both nodes stay.
  • Product IDs map
    A product ID maps onto a join ID in mappings/. It never mints a join node.
  • Envelope first
    A context object carries its before a constrains edge is written. , , , : subject, population, window. : subject, as-of, validity horizon.
  • Unknown
    A missing node, edge, membership, or source is written as unknown. Never zero, false, or no-risk.
  • Contract change
    Renaming or removing a join ID is a contract change.

054. How to create — mesh rulesworkbook tab 07 · Knowledge graph

  • Absence is unknown
    Absence is written as unknown.
  • Mappings never mint
    A product mapping never mints a join node.
  • Rename is a contract change
    Renaming an ID is a contract change.

065. Build orderworkbook tab 07 · Knowledge graph

  • 1
    Declare the schema
    Output
    kg/schema/node-types/ and kg/schema/edge-types/ match this tab.
  • 2
    Mint identities
    Output
    One join ID per real object in kg/nodes/; conflicts written as conflict edges.
  • 3
    Write the first wave
    Output
    Entity graph, evidence fitness, mission schedule, service catalog, authority; stubs declared, not populated.
  • 4
    Write the edges
    Output
    Case join edges and Detection links edges, by ID.
  • 5
    Add product mappings
    Output
    kg/mappings/<source>/ for each product, case system, and ITSM.
  • 6
    Declare profiles and interfaces
    Output
    kg/profiles/ for each source graph; kg/interfaces/ for each connection.
  • 7
    Gate
    Output
    kg/tools/validate.py passes every gate in section 8 and every competency question.
  • 8
    Load
    Output
    Any graph store loads kg/ as files. No product is required.

077. Interfaces between graphs — layersworkbook tab 07 · Knowledge graph

  • Identity
    Is 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.
  • Meaning
    Is 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.
  • Trust
    Whose claim holds?
    Artifact
    Profile and interface
    Rule
    One authoritative party per node type or property, with and freshness window.
  • Access
    What crosses?
    Artifact
    kg/interfaces/<a>--<b>.md
    Rule
    Purpose, node and edge types, expiry. The credential is issued per request (ASM-36).
  • Exchange
    How does it move?
    Artifact
    kg/interfaces/<a>--<b>.md
    Rule
    One declared pattern: federated query, published extract, or join-held.

087. Interfaces between graphs — coordinatesworkbook tab 07 · Knowledge graph

  • Actor
    Party, Identity, Join seat
  • Authority
    owned-by, declared-by, authoritative-for, Session revoke path
  • Action
    playbook step, ITSM task, Session action class
  • Environment
    Context object with its and risk domain
  • Time
    Joint maturity, platform train, mission horizon; envelope as-of and validity horizon
  • Evidence
    Observation class, Detection links, crosswalk evidence

097. Interfaces between graphs — rulesworkbook tab 07 · Knowledge graph

  • Through a Join
    Source graphs connect only through a Join. Joins connect by nesting or by peering. N graphs need N profiles, not a mapping per pair.
  • No profile, no mapping
    A source graph without a profile has no mapping.
  • No minting
    Profiles and interfaces never mint join nodes.
  • Provenance or no constraint
    A cross-graph fact without asserted-by, as-of, and does not constrain.
  • Absence is unknown
    A fact the other graph does not supply is unknown, not no.
  • Expiry
    An expired interface supplies only unknown.

107. Interfaces between graphs — exchange patternsworkbook tab 07 · Knowledge graph

  • Federated query
    Each graph answers queries against itself; the Join combines answers at query time.
    Fits when
    Data is sensitive or changes fast.
  • Published extract
    Each graph publishes the agreed nodes and edges as files on a schedule.
    Fits when
    A party needs an offline or audit copy.
  • Join-held
    The Join holds only shared identities and cross-graph edges, and points into each source.
    Fits when
    Many parties work one shared case. Not between peers.

118. Gates the mesh will passworkbook tab 07 · Knowledge graph

Each gate names what fails and the invariant it protects.
  • Declared types only
    A node or edge has a type not declared in kg/schema/.
    Invariant
    Mesh rule
  • Envelope before constrains
    A constrains edge comes from a context object without a complete .
    Invariant
    KG-5
  • Exactly six seats
    This Join (the nested Case Join) has a seat other than CYB, ITO, APO, GOV, REG, or CMP.
    Invariant
    KG-2
  • No product join key
    A product ID is used as a join ID, or a join node exists only through a mapping.
    Invariant
    ASM-38
  • Profile before mapping
    A mapping exists for a source graph with no profile.
    Invariant
    ASM-39
  • Complete interface
    An interface connects fewer than two graphs, or lacks an owner, purpose, or expiry.
    Invariant
    ASM-39
  • Crosswalk provenance
    A crosswalk pair has no asserted-by or as-of.
    Invariant
    ASM-39
  • One authority per scope
    Two parties are authoritative for the same scope on one interface.
    Invariant
    ASM-39
  • Expired means unknown
    An expired interface still supplies facts.
    Invariant
    ASM-39

129. Beyond the core — what each area settlesworkbook tab 07 · Knowledge graph

  • Time
    Every fact carries valid time and recorded time. Replay, diff, and trajectory answer what the Join knew at a decision.
    Spec section
    §13
  • Records and provenance
    Every node and edge is a record with asserting party, source graph, , evidence, label, and clocks.
    Spec section
    §14
  • Schema and serialization
    JSON Schema per type, a plain front-matter format, content hashes, and additive-only schema change.
    Spec section
    §15
  • Identity lifecycle
    IDs are opaque and never reused. Merge is same-as, split is derived-from, retirement is a tombstone.
    Spec section
    §16
  • Derivation
    A derived edge names its rule and rule version, and reads as derived, never observed.
    Spec section
    §17
  • Sensitivity and retention
    Every record carries a label and a retain-until date. An interface caps the label that crosses it.
    Spec section
    §18
  • Supply chain
    Every input records producer, version, and content hash. Unsigned inputs are pending. Revoked inputs are suspended. Components, suppliers, concentration, exposure.
    Spec section
    §19
  • Views
    2D, 3D, and 4D are saved queries over kg/, regenerated by any tool.
    Spec section
    §20
  • Partitioning
    By mission horizon, then Case. Never by tool, vendor, or organization chart.
    Spec section
    §21
  • Custody and durability
    A named steward, a handover record, signed commits as the ledger, and no vendor dependency.
    Spec section
    §22
  • Competency questions
    Sixteen questions the graph must answer, kept as regression tests.
    Spec section
    §23
  • Starter kit
    One worked a playbook Case as plain files, with a validator. Placeholder data only.
    Spec section
    §24

1310. Nested and peer graphs — rulesworkbook tab 07 · Knowledge graph

  • Joins are graphs
    A Join is a source graph of kind join. Source graphs connect only through a Join. Joins connect by nesting or by peering.
    Invariant
    §25
  • Nesting
    A child Join publishes a profile to its parent and holds one nested-in edge. The parent maps the child's IDs and never edits its records.
    Invariant
    KG-17
  • Tree
    A Join has at most one parent, and no Join is its own ancestor. Depth is not limited.
    Invariant
    KG-17
  • Qualified IDs
    A join ID belongs to the Join that minted it. Other Joins refer to it as GRAPH::<id>/<join ID> and never rewrite it.
    Invariant
    KG-18
  • Upward unchanged
    Unknown, expiry, pending, and suspended pass upward unchanged. Revoking a child Join suspends everything that came through it.
    Invariant
    KG-15, KG-17
  • Peering
    Joins owned by different organizations connect as equals over a peering interface. Neither one mints or owns identity for the other.
    Invariant
    §25
  • Bilateral identity
    A peer identity match constrains only when both Joins assert it. A one-sided match is a claim and does not constrain.
    Invariant
    KG-19
  • No precedence
    Disagreement between peers is a conflict edge. The interface names one authoritative party per scope.
    Invariant
    §12, §25
  • No join-held between peers
    A peering interface uses federated query or published extract. No single Join holds the shared identity.
    Invariant
    §25
  • No transit
    A fact that arrived over one peering interface does not leave over another. Each peer relationship is agreed directly.
    Invariant
    KG-20
  • Provenance chain
    A fact that crossed a nesting or peering hop names every graph it passed through, origin first.
    Invariant
    KG-21

1410. Nested and peer graphs — gatesworkbook tab 07 · Knowledge graph

  • Nesting is a tree
    A Join has two parents, or a nesting chain returns to its start.
    Invariant
    KG-17
  • Nesting connects Joins
    A nested-in edge touches a graph that is not a Join.
    Invariant
    KG-17
  • Qualified ID resolves
    A qualified ID names a Join that is neither nested with this Join nor peered with it.
    Invariant
    KG-18
  • Peer identity is bilateral
    A peer match marked bilateral is asserted by one side only.
    Invariant
    KG-19
  • Peering excludes join-held
    A peering interface declares join-held, or connects a graph that is not a Join.
    Invariant
    KG-19
  • No transit across peers
    A fact from one peer is shared over another peering interface.
    Invariant
    KG-20
  • Chain after a hop
    A fact from a child or peer Join does not name the graphs it passed through.
    Invariant
    KG-21

1512. Observation classes — crosswalk to OTCS-0020workbook tab 07 · Knowledge graph

The workbook's five classes, mapped to OTCS-0020. A derived edge is configured; it is not a derived state.
  • direct
    Statement
    One instrument samples a quantity. Same : subject, population, window.
  • counted
    Statement
    A figure computed over a counted set. It names its membership rule and that rule's version.
  • adjudicated
    Statement
    A named authority recorded it. The deployment is never its own adjudicator.
  • published
    Statement
    A third party's number. It keeps its publisher, series and vintage wherever it is used.
  • configured
    Statement
    A state read from a calendar, configuration or table, with as-of and validity horizon.
  • Derived edge
    none
    Statement
    A derived edge keeps the class of its inputs and names its rule and rule version. It is not DER.

16Detection identity: the registry's fieldsworkbook tab 23 · Detection registry

The three detection tabs travel as a pattern: a durable identity, a field contract with a lifecycle scope, and a logic lineage with rollback. The deployment's detections stay with it.
The columns · the rows stay with the deployment
  1. Detection key
  2. Detection name/title
  3. Data Analytics Provider detection ID
  4. Description
  5. App
  6. Release version
  7. Logic version
  8. Disabled
  9. Enablement status
  10. Configuration basis
  11. Owner
  12. Evidence link status
  13. Acceptance state
  14. Review date
  15. Created at
  16. Updated at
  17. Modified by
  18. Configuration
  19. Field contract
  20. Relationship map
  21. Migration archive
  22. Version history

17Detection schema: the field contractworkbook tab 25 · Detection schema

56 of 56
Canonical type
Lifecycle scope
  • Detection registry
    Detection key
    Canonical type
    Identifier
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Detection name/title
    Canonical type
    String
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Data Analytics Provider detection ID
    Canonical type
    Identifier
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Description
    Canonical type
    String
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    App
    Canonical type
    Reference
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Release version
    Canonical type
    Version
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Logic version
    Canonical type
    Version
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Disabled
    Canonical type
    Boolean
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Enablement status
    Canonical type
    Enum
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Configuration basis
    Canonical type
    Enum
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Owner
    Canonical type
    Reference
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Evidence link status
    Canonical type
    Enum
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Acceptance state
    Canonical type
    Enum
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Review date
    Canonical type
    Date
    Null rule
    Nullable until reviewed
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Created at
    Canonical type
    Timestamp
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Updated at
    Canonical type
    Timestamp
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection registry
    Modified by
    Canonical type
    Reference
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection configuration
    Scheduling status
    Canonical type
    Enum
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection configuration
    Cron Schedule
    Canonical type
    Cron expression
    Null rule
    Required when scheduled
    Lifecycle scope
    DURABLE
    Retirement
    Never retire
  • Detection configuration
    Earliest Time
    Canonical type
    Data Analytics Provider relative time
    Null rule
    Required
    Lifecycle scope
    DURABLE
    Retirement
    Never retire

18Detection version: logic lineage and rollbackworkbook tab 27 · Detection version

The columns · the rows stay with the deployment
  1. Detection key
  2. Logic version
  3. Effective from
  4. Version status
  5. search-language hash
  6. Supersedes
  7. Platform version ref
  8. Approved by
  9. Notes
  10. Detection registry

Continue · Run it

How to cite
APA 7th ed.

Perkins, C. (2026). One join graph, product-neutral. Kinetic Trust Protocol. https://kinetic-trust-protocol.net/governed-autonomy/knowledge-graph
Plain text

Chris Perkins, "One join graph, product-neutral," Kinetic Trust Protocol, https://kinetic-trust-protocol.net/governed-autonomy/knowledge-graph.
Page created 28 October 2026 · last modified 2026-10-27