A Track is the durable record of an Op or Cog execution.
Oliphant, 2026, §5.3
track/run-001.trig records the escalated run as PROV-O Lebo et al., 2013
with EARL outcomes Abou-Zahra, 2017: automatic Guard results (with an honest
cantTell among the outcomes), fired Gates raising obligations, and an
earl:manual approval by a named person that discharges both
obligations and generates the post-review case state
(an action that discharges an obligation must also mutate state, a
ruling logged as GAP-02). This run’s discharger happens to be human, as
the two gates that fired require; the shapes demand a declared mode and
a named accountable party, not humanness (GAP-09 in the open-questions chapter).
run-001 is itself fabricated example data (the record’s own header says so): a constructed execution that exercises the shapes and queries. Its approver is an invented person, named only because a discharging action must name an accountable party.
SHACL shapes Knublauch & Kontokostas, 2017 derived from the manifest’s own
track.include list check the record. The cell states what the record
contains, then what the shapes conclude:
import sys; sys.path[:0] = [".", ".."] # the repo root, from either cwd
import exhibits
exhibits.check_run_001_shapes()data checked: track/run-001.trig
assertions : 4 automatic, 1 manual (outcomes: 1 cantTell, 2 failed, 2 passed)
gate decisions : 2
obligations raised : obligation-human-approval, obligation-human-review
discharging actions :
approval-01 discharges obligation-human-approval
approval-01 discharges obligation-human-review
aggregate outcome : executed
final_output cited : output-anomaly-summary (Anomaly summary; vendor V-2214 flagged for review)
withheld at boundary : (none)
conforms: True
The same shapes can refuse. The counterexample record raises the same two obligations and contains no discharging action; that absence is the only difference in the data, so the refusal is checkable by eye, one violation per undischarged obligation.
The shapes also hold the record to its own gates, in both directions,
against the parameters it says were in force: a gate decision must cite a
reading whose value satisfies the gate’s condition, and a reading whose
value satisfies a gate’s condition must have a recorded decision. A
second external review found the model’s gates to be one-way
implications (GAP-10) and asked whether the shapes were too; they were,
so a Track could show a below-threshold confidence with no GATE-01
decision, or a GATE-04 decision on a vendor scored low. Both are now
refused (the counterexample track-ungated-reading.trig exercises both
and is checked in the test suite). The consensus oracle’s call must also
carry the metric’s input matrix, so the recorded reading is
recomputable (GAP-12; the previous chapter recomputes it).
One acknowledged judgment call sits in these shapes: the citation of
final_output is conditional on the aggregate outcome. An executed
run’s Track must cite the output it emitted; a noOp run’s Track cites
none, because nothing crossed the boundary. That is a statement about
a system boundary, not about the record. The Track is the record
internal to the system of interest; final_output names an action
output that crossed to an external system, through the assembly’s
port result, the one place output leaves. Where that boundary sits
depends on the system of interest, and zooming in or out changes what
counts as inside; defining and enforcing such boundaries is part of why
the Op is modeled as a SysML v2 assembly at all. For this example the
adjudicator ruled the trace evidence internal and the written output
external: noOp means no action output over the boundary, and an
internal record that the Op tried, that policy prevented it, and why,
is kept. Everything else about a stopped run, its readings, its gates,
the stop and its escalation, is retained and checked exactly as for an
executed run, and the next cell shows one. The conditional reading knowingly departs from the pinned draft’s
unconditional include list, and the departure is stated in the shape
messages themselves (GAP-07 in the open-questions chapter).
exhibits.refuse_missing_approval_track()data checked: counterexamples/track-missing-approval.trig
assertions : 4 automatic (outcomes: 1 cantTell, 2 failed, 1 passed)
gate decisions : 2
obligations raised : obligation-human-approval, obligation-human-review
discharging actions : (none)
aggregate outcome : executed
final_output cited : output-anomaly-summary (Anomaly summary; vendor V-2214 flagged for review)
withheld at boundary : (none)
conforms: False (2 violations; focus nodes equal the undischarged obligations: True)
violation 1 — focus node: obligation-human-approval
Obligation raised but not discharged: no discharging action
recorded (section 5.6 lists human_approvals in the Track; only the
escalation target's actor is unspecified — adjudicated: GAP-09).
violation 2 — focus node: obligation-human-review
Obligation raised but not discharged: no discharging action
recorded (section 5.6 lists human_approvals in the Track; only the
escalation target's actor is unspecified — adjudicated: GAP-09).
1A stopped run’s Track¶
track/run-002.trig records the pii-stop scenario from the worked
examples as a Track: the privacy guard fails, GATE-03 fires, the stop
obligation is discharged by an escalation service acting for an
accountable privacy office (earl:automatic, with the accountable party
named, per GAP-09), and the aggregate is noOp. The record retains the
four oracle citations, the guard results, the gate decision, and the
escalation, and it cites no final_output.
It retains one more thing. The summary cog had already produced an
anomaly summary when the stop landed. That artifact is kept as a
withheld output, an evidence entity the escalation refers to, so an
auditor can see what would have gone out; it is never cited as
final_output, which names only what crossed the boundary. A shape
enforces the distinction, and the same shape refuses a Track that cites
a withheld artifact as its output (a ruling on GAP-07, refined after the
adjudicator’s own re-reading of this chapter).
exhibits.check_run_002_shapes()data checked: track/run-002.trig
assertions : 3 automatic (outcomes: 1 failed, 2 passed)
gate decisions : 1
obligations raised : obligation-stop-and-escalate
discharging actions :
escalation-01 discharges obligation-stop-and-escalate
aggregate outcome : noOp
final_output cited : (none — nothing crossed the boundary)
withheld at boundary : Anomaly summary for vendor V-1187, produced and withheld at the boundary (retained as evidence — GAP-07)
conforms: True
The Track is not just a log file. It is a structured accountability artifact.
Oliphant, 2026, §5.3
Section 5.3 names five purposes a Track serves: auditability, governance, learning, debugging, and trust. On this substrate each one is a query Harris & Seaborne, 2013 over the run graph, not a reading exercise.
2Auditability¶
Auditability — an organization can reconstruct why a decision was made.
Oliphant, 2026, §5.3
exhibits.show_query("auditability.rq");3Governance¶
Governance — compliance teams can verify that required procedures were followed.
Oliphant, 2026, §5.3
Rows are violations; empty means every obligation raised by a fired Gate was discharged by a recorded action with a named accountable party. The same query catches the counterexample:
exhibits.compare_governance()(no rows)
violations on run-001: 0
violations on the counterexample: 2
4Trust¶
Trust — users and customers can see that AI work was not merely generated, but validated.
Oliphant, 2026, §5.3
The full outcome distribution, automatic and manual, with cantTell visible rather than absorbed:
exhibits.show_query("trust.rq");5Learning¶
Learning — corrections and human reviews become signals for improving Frames, Cogs, Ops, and Guards.
Oliphant, 2026, §5.3
Directly from the quoted text: what the signals improve are Frames, Cogs, Ops, and Guards — the system’s constituents. Learning changes the system.
The rest of this section is the adjudicator’s interpretation, logged verbatim in the judgment record: learning is the ability to calibrate the system — change parameters, add or remove gates, switch policies when one is not producing the intended behavior — acting on the system so it can adapt, rather than within the system as currently constituted. This substrate keeps that adaptation surface explicit on purpose: every threshold is a single-point parameter, every gate is a declared unit whose addition or removal is a traceable model edit, and the disagreement policy is a deliberately unbound slot. The cell maps each signal this run left behind to the part of the system it acts on:
exhibits.show_learning()learning signals: 4, in 5 signal-to-surface pairs — calibration targets computed from the model's gates and factored parameters
5.1A worked calibration¶
One of those responses, made concrete (a logged suggestion from the
adjudicator, recorded in the judgment record): the RiskLevel
enumeration carries an unknown value (GAP-01), and the committed gate
binds on high alone, so an unknown-risk vendor obliges nothing. A
conservative posture would treat unknown as high. That is a learning
edit: one change at a declared point, and the system obliges something
it previously did not. The committed policy stays exactly as
adjudicated; the variant below exists only in this cell:
exhibits.show_learning_example()under the committed policy, GATE-04 binds on high alone; an unknown-risk vendor obliges nothing:
scenario 'unknown-vendor-under-committed-policy'
mock oracle extraction-confidence service: sent {"op": "vendor-fraud-review", "variable": "confidence"} -> 200 {"confidence": 0.92}
mock oracle consensus-comparator service: sent {"op": "vendor-fraud-review", "variable": "consensus_disagreement"} -> 200 {"consensus_disagreement": 0.1}
mock oracle sensitive-data-scanner service: sent {"op": "vendor-fraud-review", "variable": "sensitive_data_detected"} -> 200 {"sensitive_data_detected": false}
mock oracle vendor-risk-cog scoring endpoint: sent {"op": "vendor-fraud-review", "variable": "vendor_risk"} -> 200 {"vendor_risk": "unknown"}
✓ satisfy i1 holds
✓ satisfy t1 holds
✓ satisfy g1 holds
✓ satisfy g2 holds
✓ satisfy g3 holds
✓ satisfy g4 holds
✓ satisfy w1 holds
✓ satisfy w2 holds
✓ satisfy w3 holds
✓ satisfy w4 holds
✓ satisfy s1 holds
✓ satisfy s2 holds
✓ satisfy s3 holds
scenario 'unknown-vendor-under-committed-policy': POLICY SATISFIED — aggregate: executed (satisfy exit 0)
the calibration, one edit at the declared gate (a variant for this cell only; the committed policy is unchanged):
- pe.vendorRisk == pe.policy.vendorRiskTrigger implies pe.humanApprovalRequired
+ (pe.vendorRisk == pe.policy.vendorRiskTrigger or pe.vendorRisk == RiskLevel::unknown) implies pe.humanApprovalRequired
under the conservative variant, the same evidence obliges an approval that was not obliged before:
scenario 'unknown-vendor-under-conservative-variant'
mock oracle extraction-confidence service: sent {"op": "vendor-fraud-review", "variable": "confidence"} -> 200 {"confidence": 0.92}
mock oracle consensus-comparator service: sent {"op": "vendor-fraud-review", "variable": "consensus_disagreement"} -> 200 {"consensus_disagreement": 0.1}
mock oracle sensitive-data-scanner service: sent {"op": "vendor-fraud-review", "variable": "sensitive_data_detected"} -> 200 {"sensitive_data_detected": false}
mock oracle vendor-risk-cog scoring endpoint: sent {"op": "vendor-fraud-review", "variable": "vendor_risk"} -> 200 {"vendor_risk": "unknown"}
✓ satisfy i1 holds
✓ satisfy t1 holds
✓ satisfy g1 holds
✓ satisfy g2 holds
✓ satisfy g3 holds
✗ satisfy g4 fails
Required condition evaluated to false: pe.vendorRisk == pe.policy.vendorRiskTrigger or pe.vendorRisk == RiskLevel::unknown implies pe.humanApprovalRequired
✓ satisfy w1 holds
✓ satisfy w2 holds
✓ satisfy w3 holds
✓ satisfy w4 holds
✓ satisfy s1 holds
✓ satisfy s2 holds
✓ satisfy s3 holds
scenario 'unknown-vendor-under-conservative-variant': POLICY VIOLATED (satisfy exit 1)
scenario 'unknown-vendor-conservative-approved'
mock oracle extraction-confidence service: sent {"op": "vendor-fraud-review", "variable": "confidence"} -> 200 {"confidence": 0.92}
mock oracle consensus-comparator service: sent {"op": "vendor-fraud-review", "variable": "consensus_disagreement"} -> 200 {"consensus_disagreement": 0.1}
mock oracle sensitive-data-scanner service: sent {"op": "vendor-fraud-review", "variable": "sensitive_data_detected"} -> 200 {"sensitive_data_detected": false}
mock oracle vendor-risk-cog scoring endpoint: sent {"op": "vendor-fraud-review", "variable": "vendor_risk"} -> 200 {"vendor_risk": "unknown"}
✓ satisfy i1 holds
✓ satisfy t1 holds
✓ satisfy g1 holds
✓ satisfy g2 holds
✓ satisfy g3 holds
✓ satisfy g4 holds
✓ satisfy w1 holds
✓ satisfy w2 holds
✓ satisfy w3 holds
✓ satisfy w4 holds
✓ satisfy s1 holds
✓ satisfy s2 holds
✓ satisfy s3 holds
scenario 'unknown-vendor-conservative-approved': POLICY SATISFIED — aggregate: executed (satisfy exit 0)
6Debugging¶
Debugging — developers can understand why an Op failed or behaved unexpectedly.
Oliphant, 2026, §5.3
Directly from the quoted text: this purpose is about understanding why the Op failed or behaved unexpectedly. Read beside the Learning purpose above, the paper’s own words draw a clean division of labor: Debugging looks backward at whether the Op behaved as its declared specification says; Learning looks forward at whether the declared specification itself should change. (A related distinction — build it right versus build the right thing — is recorded in the judgment record as a logged suggestion from the adjudicator, available to raise with the author; it is not the paper’s usage.)
For each guard finding that did not pass: the recorded explanation and, where a gate evaluated an oracle-provided value on the strength of that finding, the cited call that produced the value — enough to reconstruct whether the Op did what the specification says:
exhibits.show_query("debugging.rq");7The interface: where every value came from¶
This purpose is not on the paper’s list; it is a consequence of a ruling logged as GAP-05. The policy applies to oracle-provided values and is never their provider, so for each variable a gate evaluated the Track must cite the call: what service, what payload was sent, what response code came back, and the response that carried the value. The numerical precision lives inside the oracles or in documented threshold rules; a reading nobody can source fails the shapes.
exhibits.show_interface()confidence = 0.71
service : extraction-confidence service (invoice-extraction-cog telemetry, v2.3.1)
sent payload : {"op":"vendor-fraud-review","run":"run-001","variable":"confidence","batch":"invoice-batch-2026-08"}
responseCode : 200
response : {"confidence":0.71}
consensus_disagreement = 0.10
service : consensus-comparator service (v1.4.0)
sent payload : {"op":"vendor-fraud-review","run":"run-001","variable":"consensus_disagreement","cogs":["invoice-extraction-cog","vendor-risk-cog","anomaly-summary-cog"]}
responseCode : 200
response : {"consensus_disagreement":0.10}
sensitive_data_detected = false
service : sensitive-data-scanner service (v5.0.2)
sent payload : {"op":"vendor-fraud-review","run":"run-001","variable":"sensitive_data_detected","batch":"invoice-batch-2026-08"}
responseCode : 200
response : {"sensitive_data_detected":false}
vendor_risk = high
service : vendor-risk-cog scoring endpoint (v0.9.7)
sent payload : {"op":"vendor-fraud-review","run":"run-001","variable":"vendor_risk","vendor":"V-2214"}
responseCode : 200
response : {"vendor_risk":"high"}
- Oliphant, T. (2026). The Distributed AI Economy: Intelligence Hubs, Frames, Cogs, Ops, and the Accountability Plane [Techreport]. OpenTeams.
- Lebo, T., Sahoo, S., & McGuinness, D. (2013). PROV-O: The PROV Ontology. W3C Recommendation. https://www.w3.org/TR/prov-o/
- Abou-Zahra, S. (2017). Evaluation and Report Language (EARL) 1.0 Schema. W3C Working Group Note. https://www.w3.org/TR/EARL10-Schema/
- Knublauch, H., & Kontokostas, D. (2017). Shapes Constraint Language (SHACL). W3C Recommendation. https://www.w3.org/TR/shacl/
- Harris, S., & Seaborne, A. (2013). SPARQL 1.1 Query Language. W3C Recommendation. https://www.w3.org/TR/sparql11-query/