13 · Authoring¶
SMEs do not write Turtle. They describe their domain in conversation with the
authoring agent (horismos author), which drafts an ontology overlay and negotiates
with the verifier until the result is provably well-formed — then the SME signs off on a
rendered summary, never syntax. The runtime's principle applied at design time:
neural proposes, symbolic decides.
Default job, amended 2026-08-24 (PRPs/PRP-007-authoring-agent.md, captain-adopted
bounded-projection pivot): the primary authoring mode is no longer blank-slate drafting
from conversation alone — it is import, align, and overlay: ingest an existing FHIR
profile, terminology subset, PlanDefinition, or a tool/skill's own schema/manifest without
trusting it, deterministically lift whatever structure is already machine-readable (names,
types, cardinalities, allowed sets — no model needed for facts already explicit in
metadata), and let the model propose only the prose-derived mapping (rule conditions,
effects, fallbacks), with every drafted clause linked back to its source text. Blank-slate
drafting (the loop below) remains fully supported for domains with nothing to overlay.
The loop (blank-slate mode)¶
SME: "Patients with heart rate over 120 and chest pain go straight to Immediate."
↓
agent drafts Turtle (classes, rule r1, constraints it can infer)
↓
parse → gate shapes → VERIFY (docs 02, 10 — the same machinery as runtime)
↓
witnesses come back in domain terms:
"No acuity assigned when heartRate ∈ (100, 120] and no Symptom present."
↓
agent asks the SME a domain question — never shows a triple:
"What should happen for heart rates between 100 and 120 without other symptoms?"
↓
SME answers → agent revises → re-verify → … until report.ok
↓
SME reviews the rendered summary:
"IMMEDIATE when heart rate exceeds 120 bpm AND any chest pain is present
— 'Tachycardia with chest pain — immediate track'
URGENT when …"
↓
sign-off → versioned triage.ttl (+ domain-term changelog entry)
The loop (import/align/overlay mode — declared-future, PRP-008 coordination)¶
Owner points the agent at a source: a FHIR profile, a PlanDefinition, a tool JSON
Schema, a repo's SKILL.md/AGENTS.md — every source is hashed, never trusted blindly
↓
deterministic lift: names, types, cardinalities, allowed sets, exit codes, timeouts →
candidate classes, typed arguments, constraints (no model needed here)
↓
agent proposes the prose-derived mapping: workflow steps, horis:requires conditions,
declared effects, fallbacks — each clause source-anchored to the line it came from
↓
parse → gate shapes → VERIFY (+ non-vacuity, PRP-005) (docs 02, 10)
↓
compiler emits a formalization coverage report: formalized / machine-checkable /
test-backed-opaque / prose-only / contradictions — holes are named, never guessed
↓
Owner reviews the rendered summary + source-anchor view + coverage report — never a triple
↓
sign-off → versioned overlay .ttl (+ domain-term changelog + coverage report)
Two hard gates, always, in both modes: the verifier (no unverified draft survives the loop) and the human sign-off (no autonomous deployment, ever).
The agent¶
A ReACT loop (Anthropic tool-use API) — a direct retarget of sigil-lang's proven
horismos code agent and NL-to-Horismos generator (validate → auto-retry refinement),
emitting standard Turtle instead of a bespoke DSL. Its tools:
| Tool | Purpose |
|---|---|
validate_ttl |
Parse + profile check + gate-shape check |
verify_ontology |
Full BDD verification; returns structured witnesses |
render_summary |
Ontology → domain-language rules/workflow rendering |
diff_ontology |
Two versions → domain-term diff ("r1 threshold changed 120→110") |
search_vocab |
Query imported vocabularies ("chest pain" → SNOMED candidates) |
write_draft |
Persist a draft version (never the signed-off path) |
Convergence policy: bounded refinement rounds per SME turn; if verification still fails, the agent surfaces the remaining witnesses as questions rather than looping — unresolvable gaps are the SME's information, not a failure to hide. [DECIDE: round budget — PRP-007]
Vocabulary anchoring¶
When the SME names a concept, the agent searches imported vocabularies and proposes anchors for confirmation:
"I'll add ChestPain as a symptom. SNOMED CT has Chest pain (29857009) — anchor to it? That gives you its 40+ subtypes (crushing, pleuritic, …) automatically."
Confirmed anchors become owl:sameAs; declined ones stay local. The agent never
invents IRIs in external namespaces.
Review surfaces¶
- Rendered rules — the summary above; the only thing the SME approves.
- Rendered diffs — every revision, in domain terms, suitable for change-control records in regulated environments.
- Witness reports — outstanding verification findings, phrased as questions.
- Scenario probes — the SME can ask "what would happen for a 45-year-old with
HR 115 and dizziness?"; the agent runs the draft ontology symbolically (structured
facts, no perception) and shows the proof tree. Dry-running the ontology is the
review of its logic. Amended (2026-08-24): the DoD extends this to include a seeded
subtly-wrong-but-internally-consistent axiom, measuring — not assuming — whether an SME
reviewing only the rendered summary and scenario probes catches it
(
horismos-research-s1/report.md§1.7;PRPs/PRP-007-authoring-agent.md's DoD). - (Import/align mode, declared-future) Source-anchor view, mapping-loss report, and
assumption diff — which drafted clause traces to which line of the imported standard;
what was lost or approximated in the mapping (never silently); and what changed in the
overlay's own assumption manifest (
docs/framework/10-verification.md) between revisions — so a reviewer sees not just "what changed" but "what this overlay now assumes that it didn't before."
The corpus side effect¶
Every authoring session logs (NL description, Turtle draft, verification outcome,
revision, final) tuples — exported through the trace exporter (doc 09) as the
authoring corpus: training data for an ontology-drafting model, distinct from the
runtime trajectory corpus. Both flywheels start turning on day one of real use.
Skills-to-fragment loop and trace-mining (declared-future, PRP-007/PRP-008)¶
Two extensions, captain-adopted alongside the pivot, neither built in v1:
- Capability-fragment compiling: the same ingest → deterministic-lift → model-proposes
→ verify → sign-off loop above, pointed at an existing coding-agent skill/tool instead
of a clinical standard, producing a Capability Fragment — a small overlay attached
to, not replacing, the original package, with the formalization coverage report from the
overlay loop above.
PRPs/PRP-007-authoring-agent.md§"Capability-fragment compiler mode" has the full spec;PRPs/PRP-000-vision-positioning.md§"Comparison" has the positioning against existing harnesses. - Trace-mining as a proposal source: accumulated execution traces (doc 09) may suggest
candidate ontology edits, but only by entering this exact gated loop as a new kind of
draft proposal — never by mutating a signed-off ontology directly. This is a deliberate
rejection of a self-reinforcing ingest-learn-reingest loop (the documented NELL schema-
drift and Cognee-adjacent risk surveyed in
horismos-research-s1/report.md§1.7): Horismos's principle 2 ("traces are output, not logging") stays one-directional at the authoring layer exactly as it is at the runtime layer.
CLI¶
horismos author triage.ttl # start/continue a session
horismos author --review triage.ttl # render summary + outstanding witnesses
horismos author --diff v1.1.0 v1.2.0 # domain-term changelog