Repository navigation
Releases
OntoSmith 0.1.9
What's in 0.1.9
Sentence-level evidence serving is the search default. The INDEX stage now ships a sentence index with every build — every sentence of every chunk, embedded with the build's own embedder and projected as (:Sentence) nodes in the Neo4j store. ontosmith search pools three channels — the direct index, the graph pool, and a beam channel (a pruned two-hop traversal from the question's linked entities) — scores them in two layers, and fills whole units under a 4,000-token budget. Older builds get the same sentence universe built at query time, and the result says so. When sentence serving cannot run, the command falls back to chunk-level hybrid search and names the fallback; the library raises SentenceServingUnavailable instead.
Optional rerank step. With the new rerank extra (pip install ontosmith[rerank]), the merged head is reordered by a local cross-encoder before the fill — no API call. Without the extra the step is inactive and the result says so.
One brand system on every visual surface. The diagrams, site, posters and all four videos are regenerated under the site's brand system — paper mode for documents, stage mode for video — with the serving layer given its full width in the method diagram. Version stamps are gone from the videos and images, and the videos' audio mixes are rebuilt so the music bed sits well under the narration.
Whitepaper corrections. The cost-guardrail sections now match the shipped behavior — spend is always accounted, and a stop-line exists only when a cap is set through ONTOSMITH_MAX_COST_USD — and §5.6 states judging-only per-document costs on a single basis beside the full-run totals. No measured claim changes.
OntoSmith 0.1.8
Added
- Declared value attributes — a schema_front entity entry may
declareattributes: the values a document states about an
entity (an agreement's effective date, a work's release date, a
contract's value), each with a name, one of six closed value
types (date, datetime, number, money, duration, identifier),
and required/multi flags. Declaration shape is validated in one
place, shared by draft validation and setup validation, and
attributes render into proposer guidance only when declared —
a schema that declares none renders and writes exactly as
before. - Deterministic normalization behind a format gate — form is
code's work, never a model's. Money maps symbols and currency
names to ISO 4217 codes and never guesses an unstated currency
(the value is stored incomplete instead); theUS$prefix is
accepted as USD notation. Number splits value and unit and
never converts units. Datetime keeps a stated offset and
otherwise stays naive, and a date-only surface under a datetime
declaration demotes to date. Duration is length only — a
start/end pair is an interval, not a duration, and fails as
one. A candidate that fails the gate is recorded as a format
violation; the judge is never consulted for it. - The judge split for values — a gate-passing candidate goes
to the decisions seat with one question: does the document's
evidence state this value for this entity? Accepted values are
recorded with the normalized typed value and the original
surface beside it. Multi is enforced per value, and a required
attribute's absence is a warning record — the entity stands. - Typed node-property storage — accepted values land on the
graph node as typed properties (attr_<name>, temporal types
converted so range queries work) with the surface beside them,
written as a second pass after the base entity statement,
which is never modified. - Date precision — a date carries its stated precision: a
surface stating only a month or a year ("May 2008", "2008")
normalizes to its reduced-precision ISO form (2008-05, 2008)
with the precision named (day / month / year) instead of
failing or gaining an invented day. The precision is stored
beside the value (attr_<name>_precision), so a range query
reads the value as the period it names. - Attribute lineage classification — in a seeded revision,
adding an attribute or relaxing a requirement is a safe
change; removing an attribute, changing its value type,
strengthening a requirement, or rewriting its definition
needs the structured seed-change record, and validation
flags the change without one.
OntoSmith 0.1.7
Added
- Ontology drafting input: semantic census + document survey — the
draft context now carries the profiler's measured census as lists
(recurring defined terms, the names they bind to, recurring
clause/section headings) and the profile's document survey (head and
tail of each sampled document), so the drafting seat decides about
recurring corpus terrain explicitly instead of never seeing it. - Schema inheritance (seeded revision) — a draft can inherit an
existing pack's schema_front as a seed; validation holds the revision
to the inheritance rules: a dropped type, a dropped signature pair,
or a rewritten inherited definition each needs a structured decision
point recording the reason, and a signature addition rides with its
definition revision or anextend_signaturerecord stating the
existing definition already covers it. A revision may also carry a
hole report naming the families it must address or explicitly leave
open.ontology diffreports the structural difference between two
schemas — a report, never a merge. - Structured boundary declarations — a revision that adds,
re-signs or redefines a relation must declare its boundary with
every relation it shares a signature pair with (declare_boundary:
distinct / includes / included_in); validation rejects an
undeclared boundary (BOUNDARY_UNDECLARED), and a signature
extension must carry the evidence it rests on.
Changed
- Draft modes are explicit — a plain
ontology draftnow composes
fresh from the brief, even when a published pack carries the same
pack id; extending an existing pack is the explicit
draft --from <pack id | schema document>mode, and a named target
that cannot be extended is refused rather than silently degrading
into a fresh composition. Every draft run prints its mode. A
material guide rides the output: a strong warning under 10 documents
of material and a recommendation note at 10–29 documents; the guide
warns, it never blocks. - CLI surface simplified — the lab's measurement commands no
longer dispatch from the unified CLI; they run from their module
entries. The batch create cost-cap flags are removed: the spend
cap's only home is theONTOSMITH_MAX_COST_USDenvironment variable
(unset = no cap; the ledger still records what a run spent).
OntoSmith 0.1.6
OntoSmith 0.1.6
Added
- Multi-draw proposer passes — two profile declarations for the
free-proposer path:proposer_draw_framings(extra passes, each
under its own additional framing) andproposer_complement_draw
(a residual pass: shown the facts the earlier passes extracted,
per chunk, it is asked only for stated facts not yet covered).
Passes union before the guards run once; candidate records carry
their draw index. With neither key declared, the proposer runs
exactly one pass and its prompt is byte-identical to before. - Open-domain pack 0.10.0 — declares the residual pass by
default. Measured on general text (2026-11-02/03): written
records 103 → 234 on a biography, 42 → 75 on a novel excerpt,
192 → 369 on a contract, at roughly double the proposer cost;
hand-extracted gold coverage on the biography rises from 92/158
(single draw) to 127/158. The fiction build's ungrounded-block
share rises (6.3% → 16.7%) and stays inside the guards; no genre
regressed.
Changed
- Product documents no longer state cost figures: the README cost
paragraph, the hands-on §6–§7 figures, and the appendix rate
expectation are removed. A build is priced by its own counted
projection before it runs. docs/connections.md: the Recommended models table drops its
per-seat rationale column.
OntoSmith 0.1.5
OntoSmith 0.1.5
The first-run release: a new user can open the shipped demo with no key and no database, then build a graph from their own text with one command.
What's new
Keyless demo. ontosmith serve with no arguments opens a real pipeline build of Pride and Prejudice — all 58 chapters, 737 triples over 303 entities, every triple carrying its evidence quote, the batch VERIFIED. A banner says what you are looking at and how to build your own.
One-command quickstart. ontosmith quickstart <your-file.txt> builds a graph from your text and serves it. It checks for the file, the API key, and a reachable Neo4j before spending anything, and refuses with the fix printed when one is missing.
Open extraction path. The open-domain pack now passes facts through in the text's own words when no declared relation name fits, instead of dropping them for falling outside a closed list — measured on pilots: novel records 6 → 39, biography 18 → 43, contract 15 → 33.
Extraction cap, measured. The per-chunk proposal cap rises from 25 (inherited from the contract-clause recipe) to 40, set by a three-genre measurement: biography records +64% and entities +66%, contract records +27%, with gate-block rates inside the baseline band on every genre. (A cap of 60 was tested and rejected: unattested proposals reaching the gates rose past the pre-set guardrail.)
Pack resolution fix. Batch creation resolved packs against the code tree and silently ignored a pack placed in the state root (ONTOSMITH_ROOT). Resolution now anchors at the state root: a pack beside your data shadows the shipped one; absent one, the shipped packs bind as before.
Wheel completeness. The wheel now ships every pack file (a directory glob replaces the hand-maintained file list), guarded by a file-tree test — the class of defect that silently dropped pack files in 0.1.4 cannot recur unnoticed. Profile-declared framing keys now take precedence over pack payloads, and batch creation prints the guidance it actually applied.
777 tests passing.
OntoSmith 0.1.4
Added
- Relation declarations — a pack can now ship its
relation coverage as a pinnedrelation_declarations
artefact: per canonical relation, the emission surfaces
that denote it and the orientation each is stated in.
The open-domain pack's table (v1) carries the
S4-declared base plus 14 (name, orientation) pairs and the declared emission vocabulary
with no canonical counterpart (formed from,named after,teacher of,commander of),
and one WRITE canonicalization:parent ofis stored
aschild ofwith endpoints swapped, ending the dual
double-statements.pipeline/relation_map.pyloads
the declaration when the profile declares
relation_declarations_source; profilerelation_map
entries may also carry{canonical, flipped}objects
directly. - Alias retention at WRITE — registry index keys now
fold spaced hyphens (Charles - Édouard≡
Charles-Édouard), so the two attested forms resolve
as variants of one entity and both stay on it (name +
alias) instead of splitting; a merge unions the
incoming entity's aliases rather than dropping them,
and a proposer's declared attested surface (e.g.
GermanforGermany) is retained as an alias of the
endpoint's entity. - Global identity freeze — the identity seat's
frozen decisions now have a corpus-level form.
ontosmith identity-freezegroups per-point
verdicts by the (fragment, candidate) pair: a
unanimous pair freezes to one verdict everywhere,
and a pair decided differently across documents is
promoted to an ambiguous record instead of being
silently overwritten. A profile declares the
freeze asidentity_seat_decisions_global;
ambiguous pairs defer to the rule chain and are
surfaced in the batch'sidentity_ambiguous.jsonl
for the review band. Declaring both decisions
file forms is refused, and a malformed freeze
fails the stage closed.
OntoSmith 0.1.2
Added
- Identity seat seam —
guard_triplesaccepts an
optionalidentity_seat: an injected judge that
decides rule 4's completion question (whether a
fragment mention completes to a longer census name)
per candidate, from a code-computed feature envelope.
The seat answers complete / stand / no opinion; no
opinion defers that candidate to the rule chain. The
default is no seat — the deterministic rule chain,
unchanged. The batch path wires the seat from a
profile key,identity_seat_decisions: a frozen
JSONL file of verdicts an offline judge produced for
the corpus, keyed by document hash. A declared file
that cannot be loaded fails the stage closed, and
the run metrics record the file's hash and how often
the seat was consulted and ruled. The seam is the
measured outcome of the identity-surgery program
(2026-10-30): on a frozen 245-point gold the seat
matched the rules' accuracy with zero
referent-changing completions (the rules made two),
and on fresh documents it completed the legitimate
full names the rule chain refused (4/4 against 0/4)
at the cost of one title misnaming. The probe replay
through this wiring reproduces the measured seat
outcomes byte for byte.
Changed
- Upstream attestation program — the candidate
guard now reads a document the way a reader does:
against the entities the document itself establishes,
not raw strings alone. Attestation is tiered
(verbatim; the document's stipulated aliases —
defined terms and acronym pairs collected into a
per-document registry; punctuation-spacing collapse
for tokenized corpora; a proposer-declared derivation
surface, behind the profile-gated declared-surface
prompt variant). A defined term is an identity
inside its document: the role-word guard fires only
for undefined role nouns, and a defined term with a
stated referent canonicalizes to it. The
theme-presence block is retired in favor of grading:
a verb+preposition proposal whose object attests in
the document but not in its quote is kept with a
theme_gradefor the judge instead of being blocked
wholesale (theme_attest_chunkdeclarations remain
accepted and are subsumed). Identity resolution no
longer rewrites a complete attested name into a
longer name that merely contains it (a city is not
its city council), never resolves into a coordination
surface, and still completes surnames and generational
suffixes. Duplicates are recorded in the blocked
sidecar (duplicate) instead of vanishing uncounted.
Measured on recorded corpora replayed offline
(current guard vs fixed guard, identical inputs):
contract-slice role-word blocks 89 → 19, kept
candidates 4,965 → 5,193; novels theme blocks 626 → 0
(491 graded, the rest attesting in their evidence
window); wiki seat kept-stage recall 0.186 → 0.210. - Documentation polish — the README gains a
worked-examples section (three edges from the
project's own records: a head of government named
inside another article, a novel's character entering
by relation, a contract's defined term as an
identity), and the project site is rebuilt around
the same examples, with the hero graph drawn as an
animated SVG. The Connections recommended-models
table no longer lists the retired GLiNER spotter as
a current seat. No measured claim changes.
Added
-
Open Domain pack 0.5.0: TN-3/4/5 data adopted (RE-TN-1) —
packs/open-domain/tn_table.jsongoes to version 2: the
TN-3 relation groups, TN-4 inverse expansions and TN-5
subsumptions whose code support landed with the scorer
change below are now adopted as data, under registered
evaluation RE-TN-1 (conformance entry DC-6), for the
EXTENDED figure only. Dual reporting is mandatory: the
frozen TN-1/TN-2 figure is always reported beside the
extended one, and the delta is labeled an instrument
change, never a quality gain (on the frozen cap-b records
against gold v1.1.0: kept predictions 273 → 335, proposal
union 301 → 364; baseline hits lost 0, unverified new
hits 0). The pack manifest pins the table as an
in_forceartefact, andverify_cli.load_tablenow
reads the pack-native tn_table format directly, so the
shipped file works with--normalizationas-is. The
extraction payload is unchanged (same sha256 pin). -
Scorer: alias-aware matching + opt-in TN-3/4/5 layers —
match_recordsnow also matches a predicted record under
the attested alias surfaces in its guard-emitted
canonicalizedfield (the guard's identity resolution
rewrites endpoints to one canonical surface; the frozen
scorer matched only the emitted surface, which read the
upstream-attestation fix as a recall regression on the
cap-b replay: 262 vs the old guard's 273 — with alias keys
the same output scores 301). Alias keys are the cross
product of attested subject x object surfaces, mirroring
gold_keys, so a record canonicalized at BOTH endpoints
still matches its gold pair.NormalizationTablegains
three caller-data layers, all default-empty (byte-identical
to the TN-1/TN-2 instrument): TN-3 relation groups, TN-4
inverse expansions, TN-5 subsumptions. Grouping ADDS keys
on both sides — verbatim keys are always retained, so a
group can never break a TN-2 pairing (verified on the
frozen cap-b corpus: baseline hits lost 0; hits beyond the
frozen instrument plus the hand-verified variant set 0).
verify_cli.load_tablereads the new keys. Enabling the
layers as a pack's table is a new registered evaluation
(the open-domain table is frozen; dual reporting per its
effect_reporting rule) — measured on cap-b/gold v1.1.0, the
full stack would read 366 candidate-level hits vs 273
frozen (union 364 vs 301); the table data itself is NOT
adopted here. -
Mention layer, first cut (issue #54) — profile-gated
(mention_layerin setup_config; absent = off, and the
undeclared path is byte-identical). Entities register by
noun surface forms, so facts stated via pronouns, definite
descriptions, or cross-sentence evidence had no citable
path to an entity and drops recorded only a score. With
the layer declared, the free proposer emits per-endpoint
mention spans (verbatim, as they appear in the quote),
mention types (named / pronominal / descriptive), and —
for non-named mentions — a resolution proposal: an
antecedent span, verbatim from the document. The guards
verify both spans with the same discipline as quotes;
an unverifiable span blocks the candidate by name
(mention_missing/mention_span/
mention_antecedent), never silently. GATES judges each
resolution as its own Jev decision before the fact:
clear proceeds, ambiguous (review band) is capped at
Tier-2 review, rejected drops with reason class
resolution_rejected— distinguished from
fact_rejectedin the drop accounting. The quote is
never rewritten; resolution travels as annotation.
Measured (Re-DocRED 40-doc A/B vs the cap-25 recipe,
pre-registered criteria): the first cut does not ship
as a recall feature. Candidate recall was flat
(0.1189 vs 0.1183, with a genuinely different proposed
slice — 46 gold proposed only with the layer on), and
resolution judging behaved as designed (58 clear /
3 rejected / 1 review of 62), but Tier-1 recall fell
to 0.0772 from 0.1066 (paired net −43): the guards
blocked 69 of 257 proposals asmention_missing
because the proposer's mention-field compliance is
unreliable, culling candidates before judging. Raw
Tier-1 precision rose (0.4912 → 0.6038) and cost held
($0.00268/doc vs a $0.00312 ceiling). The layer stays
an experimental opt-in with that measured trade-off;
the full record is in the cap-recall measurement
(Phase 2 section) and issue #54. -
Entity sweep (issue #58) — profile-gated
(entity_sweepin setup_config; absent = off, and
the undeclared path is byte-identical; a non-boolean
value fails closed). An additive second proposal
pass inside CANDIDATES' free-proposer branch: a
deterministic code census names a document's
entities, the ones appearing as no endpoint of any
chunk-pass item become anchors, and each anchor is
re-asked in its own mention view under the chunk
prompt plus one anchor rule and one evidence rule:
every sweep triple must carry a verbatim evidence
span copied from the text, verified by code against
the full document at proposal time — a missing or
unverifiable span voids the proposal before the
guards, counted in the finish record as
evidence_missing. Sweep items pass the
same guards and merge behind the chunk channel —
duplicates and off-anchor items are counted, never
shadowing or replacing chunk provenance — and the
finish record restates the pass (candidates_sweep:
anchors, proposed, duplicates, off-anchor,
evidence_missing, blocked
by reason, shipped Tier-1). Measured on the
pre-registered 8-document density pilot against lab
gold v1.1.0 (issue #58): the pass recovered 33 of
139 never-proposed gold labels at Tier-1 (paired
net +61 Tier-1 over the pilot docs), but the pooled
new-Tier-1 adjudicated precision was 0.676 against
a 0.90 bar and the arm cost $0.02423/doc against a
$0.00375 ceiling — the pilot failed on precision
and cost, the full-corpus run was not licensed, and
the pass stays an experimental opt-in pending a
redesign decision. A pre-registered cut 2
(2026-10-29) made the evidence span load-bearing —
the void fired zero times on the re-run (the
proposer attached a verifying span to all 272
proposals) and precision measured 0.657 against
the same 0.90 bar, so the pilot failed on
precision again; yield and cost passed (P1
35/139, paired net +67, $0.0240/doc against a
re-registered $0.0323 bar), and the sweep line
returns to a close-or-redesign decision. The full
record is in the
cap-recall measurement (Entity sweep sectio...
OntoSmith 0.1.3
Fixed
- Batch creation for a family no pack binds (the
hands-on Track 1 shape) now resolves the core
baseline under the family's profile setup_config and
freezes the merged config into the batch, as
PACK_DESIGN §1.3 specifies. Before this, such a batch
froze nothing and ran on the profile file alone, so
baseline declarations — the identity seat's live
default among them — silently never reached the run. - Missing input files are no longer reported as "is not valid JSON" — the JSON loaders (builder, BYO-schema import, pack payload and role-words artefacts) now distinguish not found / cannot be read / not valid JSON (#49).
Added
- Live identity seat (on by default) — the core
baseline declaresidentity_seat_live, so rule 4's
completion question is judged in-run by the frozen
completion process unless a pack declares it off or
substitutes the frozen decisions file (which
supersedes the live default). For each contested
candidate the pipeline assembles an evidence dossier
from the document deterministically (the fragment's
sentences, the candidate's definition and mentions,
sibling names), scores one fixed claim against it
with the pinned Jev decision model, and combines
the score with the rule chain by fixed zones: a
high score sustains a completion the rules reached,
a low score holds the fragment as written, and the
band between defers to the rule chain. Every
verdict is recorded in the batch's
identity_verdicts.jsonlledger, keyed by the
dossier fingerprint and the process's calibration
id (claim version, thresholds, dossier assembly
version); a re-run reads the ledger instead of
re-judging, so a rebuild reproduces the same
completions even though the underlying scores are
not bit-stable. A single payload declaring both
seat forms is refused at validation, and a seat
whose key is missing when a point is scored fails
the stage closed. Seat costs fold into the stage's
cost accounting, and the run metrics record the
calibration and how often the seat was consulted.
OntoSmith 0.1.1 — ontology import and the first-run serving fix
OntoSmith 0.1.1 — ontology import and the first-run serving fix
An ontology-driven knowledge-graph builder.
0.1.1 adds the third door into a schema — importing an
external ontology — and fixes the first-run serving
gap that a from-scratch verification walk found in
0.1.0. Everything measured in 0.1.0 stands as recorded;
the whitepaper's corrections in this release are
record-keeping, not re-measurement.
Powered by Jev · MIT · Copyright (c) 2026 Dongbum Lee
What ships in 0.1.1
- Ontology import — the BYO-schema door
(ontosmith ontology import). An external OWL/RDF
ontology enters as a mechanically extracted
inventory (every declared class and property with
its IRI, label, definition, and parents) plus a
human-authored scoping spec that accounts for every
scoped concept exactly once — kept, merged, or
flattened; role classes converted to relations;
datatype properties demoted; drops only with stated
reasons. Import emits an ordinary builder draft and
a complete scoping record, and from there nothing
differs: the draft validates, is approved, and
emits through the same gates as a drafted schema. - Pack:
fibo-contracts0.1.0 — FIBO's FND
Agreements module (EDM Council, MIT) imported
through the builder: 88 scoped concepts → 15 entity
types + 13 relation types, with its working papers
inexamples/fibo-import/. Its record is a
coverage account over CUAD, not a quality
measurement; it is emittedemitted_unmeasured,
like every builder pack. - Hands-on Track 4 — the import walked end to
end (fetch → inventory → scope → import → gates →
build) over a 100-contract CUAD subset, verified
from a vanilla environment. - First-run serving fix (issue #48). In 0.1.0 a
build's firstsearchagainst a fresh store
refused by name — the serving schema and the
build's chunk projection existed only behind a
module CLI that a store carried only if someone
had run it by hand. The INDEX stage now ensures
the serving schema and projects the batch's
chunks as part of the stage, andsearch/
serveheal a pre-fix store at open, with no
provider spend. A store that is down still
refuses by name. - Hands-on instruction detail. The candidate-path
choice is stated before any install command;
Neo4j setup no longer implies Docker (a compact
example block plus Neo4j's official installation
guide, with the OntoSmith contract stated as
ours); checkpoints and the predictable refusals
are quoted where they occur. - Whitepaper corrections. Reference citations
corrected to the canonical records (Re-DocRED,
BioRED); the cover status line updated to the
shipped release line; §5.7 names the populations
of its two corrected precisions and declares its
Tier-1-wide figure record data; §3.3–§3.4
describe the fourth pack and the import door.
The quality record
Unchanged in substance from 0.1.0: the full record is
§5 of the project whitepaper (docs/whitepaper.md),
with its scope, method, intervals, and failures, and
python examples/demo/replay_scores.py recomputes
every headline from the shipped appendix files alone
— no API key, no model calls.
Try it without a key
$ pip install ontosmith
$ ontosmith profile examples/corpus --family demo
$ ontosmith inspect examples/triples.jsonl
$ python examples/demo/replay_scores.pyThe hands-on guide (docs/hands-on.md) walks four
tracks: the keyless replay, a live build, designing
a schema with the builder, and — new in 0.1.1 — the
import track.
Known limitations (from the whitepaper, §7)
- Recall is low and enumeration-bound; the shipped
enumeration default is the measured mitigation, not a
cure. - One pre-registered criterion (NONE-loss share) failed
its bar and stands as FAIL in the record. - The graph's retrieval advantage is scope-bound: real
on long documents, measured at exactly zero on short
abstracts — stated that way wherever it is cited. - Numbers are stated for the pinned reference profile;
custom bindings are supported, and their numbers are
the user's to re-measure. - Serving in v1 is deliberately minimal; the fuller
application is later work.
Links
- Whitepaper:
docs/whitepaper.md - Benchmarks index (claim → harness → readout):
benchmarks/README.md - Connections (seats, reference profile, custom
bindings):docs/connections.md - Full changelog:
CHANGELOG.md
OntoSmith 0.1.0 — initial release
OntoSmith 0.1.0 — initial release
An ontology-driven knowledge-graph builder. Design
the ontology first — entity and relation types,
definitions, boundary examples — get it approved, and
build the graph under it: a pipeline that separates
proposing from judging at every step, where models
propose candidates and deterministic gates plus a fitted
decision model (Jev, a pinned component inside
OntoSmith) decide what is true enough to write. Every
written triple carries its evidence span and provenance,
and every build prices itself before it spends.
Powered by Jev · MIT · Copyright (c) 2026 Dongbum Lee
What ships
- The batch pipeline — eight stages (ingest →
roster → candidates → gates → route → write → index →
verify) under a versioned pack, with per-stage state
persisted under the batch: a failed run resumes where
it stopped and never re-spends. A ledger-enforced
stop-line caps every run. - Three domain packs — Open Domain, Bio Medical,
Legal Contract — over the Core baseline (the Core
is the baseline every pack extends, not a domain pack
itself) — each a pinned
manifest plus payload (ontology, extraction framing,
gate and entity-resolution defaults) and a conformance
record of the measurements that adopted it, rejections
included. Domain content lives only in packs, never in
code branches. - The corpus profiler (
ontosmith profile) — a
deterministic census of your corpus (no LLM) whose
claims are scanner-verified and whose decision points
are a human's to approve. - The ontology builder (
ontosmith ontology) —
draft → validate → approve → emit, with fail-closed
validation and human approval bound to the schema
hash; an emitted pack is markedemitted_unmeasured
until a registered measurement adopts it. - The verification tooling (
ontosmith verify) —
raw and audit-corrected precision, ceiling-adjusted
recall, a failure-anatomy census that assigns every
gold item exactly one fate, judge-fitting cells with
pre-registered gates, and counted cost projections. - The connection layer — provider-neutral per-seat
bindings (any OpenAI-compatible endpoint), declared
withontosmith configure(an interactive wizard, or
its fill-in template twin); the measured
reference profile ships as the default preset, and run
records state which binding produced them. Keys are
environment values, never settings. - Serving — hybrid retrieval (vector + lexical +
graph) viaontosmith searchand a sample API
(ontosmith serve: search / entity / neighborhood /
triple-with-evidence) over the graph in Neo4j — the
store holds one graph, the current build's, and
serving answers from it with no scope to specify —
or over the keyless file read-back of a build's
recorded artifacts (lexical + graph arms; the demo
path) — plus a minimal demo app served at/
(search box, triple/evidence inspector, entity report,
click-to-walk neighborhood view).
The quality record
OntoSmith's construction quality is measured, and the
measurement is published — with its scope, its method,
its intervals, and its failures (one pre-registered
criterion failed and is recorded as failed). The full
record is §5 of the project whitepaper
(docs/whitepaper.md). Corrected numbers rest on
machine adjudication under a pre-registered protocol;
they are machine judgments, not a human audit, and not a
corrected gold dataset. The adjudication samples and
verdicts ship in benchmarks/appendix/, and
python examples/demo/replay_scores.py recomputes every
headline of the record from those files alone — no API
key, no model calls, exit non-zero on drift.
Try it without a key
$ pip install ontosmith
$ ontosmith profile examples/corpus --family demo
$ ontosmith inspect examples/triples.jsonl
$ python examples/demo/replay_scores.pyThe hands-on guide (docs/hands-on.md) walks the whole
loop twice: the keyless replay track above, and a live build
track (fetch → profile → counted projection → capped
run → scoring) at roughly $1–2 for the demo subset.
Known limitations (from the whitepaper, §7)
- Recall is low and enumeration-bound; the shipped
enumeration default is the measured mitigation, not a
cure. - One pre-registered criterion (NONE-loss share) failed
its bar and stands as FAIL in the record. - The graph's retrieval advantage is scope-bound: real
on long documents, measured at exactly zero on short
abstracts — stated that way wherever it is cited. - Numbers are stated for the pinned reference profile;
custom bindings are supported, and their numbers are
the user's to re-measure. - Serving in v1 is deliberately minimal; the fuller
application is later work.
Links
- Whitepaper:
docs/whitepaper.md - Benchmarks index (claim → harness → readout):
benchmarks/README.md - Connections (seats, reference profile, custom
bindings):docs/connections.md - Full changelog:
CHANGELOG.md