The substrate
contradiction-preserving · evidence-first

Connecting Two Poems in the Substrate: A Cross-Document Query Test on Bukowski

2026-06-04 · donto / genes workspace · a capability test, run live against the substrate, reported honestly

The premise

donto does not exist to store claims — vector DBs and ordinary knowledge graphs already do that. donto exists to connect claims across sources that never reference each other. That is the lens-engine / discovery thesis: emit free, untyped, evidence-anchored claims from every document independently; defer typing, alignment, identity-resolution and the join itself to query time; then surface the relationship later — through shared structure, shared vocabulary, the alignment engine, and (eventually) semantic recall — without anyone having pre-wired a link between the two documents.

Two short poems are a clean, adversarial test of that thesis. They are extracted independently (neither knows the other exists), they are deliberately chosen to rhyme thematically while sharing almost no surface vocabulary, and the question we ask the substrate is a genuine cross-document question: can donto, holding only its extracted claims, connect them? The discipline that makes this a real test: every query is run against the live substrate, never against the poems. I already know what the poems say. The point is whether donto knows it.

The two poems and why they pair

Both poems are by Charles Bukowski (1920–1994). The exact text, titles, and provenance of each were web-verified before extraction; Bukowski's words were not fabricated.

Poem 1 Poem 2
Title "I Met a Genius" "Bluebird"
Author Charles Bukowski Charles Bukowski
Provenance widely anthologised / uncollected; verified against canonical text The Last Night of the Earth Poems, Black Sparrow Press, 1992; line-broken text verified against wordsfortheyear.com
Substrate context ctx:test/poem/bukowski-genius ctx:test/poem/bukowski-bluebird
Live size 415 statements / 176 predicates / 51 subjects / 214 evidence links 2,974 statements / 207 predicates / 200 subjects / 2,296 evidence links
Core move a child on a train looks at the sea and pronounces "it's not pretty"beauty denied the speaker keeps a tender bluebird caged in his heart and won't let anybody see itbeauty hidden

They turn on a single axis — what is real vs. what is shown — and make the opposite move along it: genius denies the beautiful thing's beauty; the bluebird's beauty is concealed, never denied. Both poems hinge on a small, unlikely truth-teller — the unnamed six-year-old in one, the caged bluebird in the other. That mirror-image relationship (same axis, opposite move, parallel truth-tellers) is precisely the kind of cross-document link a discovery substrate should be able to surface from claims alone.

How both poems entered the substrate

Poem 1 ("I Met a Genius") was already live: 415 statements in ctx:test/poem/bukowski-genius (the clean run; not the cancelled -deep context). Poem 2 ("Bluebird") was extracted for this test with codex gpt-5.4, reasoning effort xhigh, a 6-pass gleaning loop (xhigh honored on all six passes per the rollout check), then the always-on semantic citer: 3,136 raw facts → deduped → cited (2,296 anchored exact-substring spans, 0 bogus spans, 840 honest hypotheses flagged hypothesis_only) → ingested to ctx:test/poem/bukowski-bluebird behind a real source document + revision so every fact anchors to a retrievable span (STATED → anchored; INTERPRETED → hypothesis). A scratch staging context …-bluebird-stage (2,737 stmts) was created by the glean auto-ingest and left in place (I3 — never delete); it is excluded from every query below. Run logs and artifacts: /opencode/logs/poem-bluebird/.


The method: query the store, not the poems

Every one of the 20 connecting queries was answered by the substrate, through one of three mechanisms, never by re-reading the poems:

  1. Substrate-wide FTSPOST http://localhost:7900/search (donto-memory's GIN tsvector over a humanized projection of subject / object across all ~39M live statements), scoped with context_prefix: ctx:test/poem so the genealogy/genes/discord corpus does not drown the poems.
  2. Bounded cross-context SQLSELECT-only across both poem contexts, finding shared subjects / predicates / objects, parallel claims, and contrasts.
  3. The alignment enginedonto_predicate_alignment (19,849 live edges) and donto_match_aligned(… p_expand_predicates := true), testing whether the two poems' freely-minted predicates fold (e.g. genius's perceivedBy ↔ bluebird's concealsFrom, or hasTheme across both contexts).

The alignment daemon is live and healthy (donto_align_daemon_status: ticking today, last tick this session). I3 honored throughout — every query is read-only; nothing was retracted or overwritten. Live re-verification at report time: bluebird 2,974 stmts / 207 preds / 200 subjects; genius 415 stmts / 176 preds; scoped FTS "speaker" returns both poems (60 bluebird + 53 genius rows, the staging context separately excluded).

The structural backbone — the join surface

Before the 20 queries, the shape of the overlap, because it is the abundance signature:

  • Shared exact predicates: 11 of (176 ∪ 207). Jaccard ≈ 0.03. The shared 11 are the donto backbone: rdf:type, rdfs:label, about, addressedTo, contains, hasMember, hasParticipant, hasTheme, locatedIn, memberOf, partOf.
  • Shared rdf:type class: exactly one — ex:Line (genius 8, bluebird 45). Both poems decompose to lines, so a line-structure query reaches both.
  • Every characteristic predicate is disjoint. Genius mints isJudgedNotPrettyBy, formedAestheticJudgmentOf, adoptedAestheticJudgmentOf; bluebird mints concealsFrom, doesNotWantAnybodyToSee, desiresEmergence, selfDescribesAsTough. No overlap by design — this is emit-free abundance, not a proliferation bug.

The 20 connecting queries

Verdict key: YES = the substrate returned a real cross-poem connection · PARTIAL = it placed both side-by-side / answered for one side and is one step from the other · NO = the connection is real in the poems but invisible to the substrate as currently deployed.

# Query (cross-poem relationship probed) Mechanism Result Verdict Why
1 Do the two poems share any theme (hasTheme/about objects)? cross-context SQL intersect on theme objects 0 shared theme objects. Genius: "beauty versus ugliness", "perception versus convention", "the anti-sublime", ex:ocean. Bluebird: ex:bluebird, ex:secret-pact. Fully disjoint. NO Theme objects are freely minted per-poem; no exact overlap and no semantic fold to equate them.
2 Is beauty / "pretty" a shared concern? cross-context SQL token scan (ILIKE pretty|beaut) 47 hits in genius only; 0 in bluebird (bluebird never lexicalises beauty/pretty). NO Bluebird carries beauty as a hidden/tender concept, not the literal token; a lexical scan can't bridge denied-beauty vs hidden-beauty.
3 Are the two aesthetic verdicts co-held and contrastable? cross-context SQL on aesthetic/verdict literals Both returned together: genius "it's not pretty." (×11) and bluebird "it's nice enough to". Two incompatible verdicts held side-by-side as legal state. YES The paraconsistent store holds both aesthetic verdicts; SQL returns them together and contrastable.
4 Is there a seeing / perception motif in both? cross-context SQL regex on perception predicates + literals genius 13, bluebird 10 perception-bearing rows. PARTIAL Both poems carry perception, but in disjoint minted vocab; the substrate shows symmetric presence but no edge equating perceivedBy vs concealsFrom.
5 Hiding / concealment / showing motif present and contrastable? cross-context SQL regex conceal|hide|secret|reveal|admit bluebird 15, genius 2. Asymmetry visible (concealment is bluebird's engine). PARTIAL The count asymmetry surfaces the contrast, but no link asserts the relationship.
6 Nature imagery — ocean (genius) vs bird/cage (bluebird)? cross-context SQL FILTER counts over concatenated row text genius ocean 53 / bird 0; bluebird ocean 0 / bird 126. Perfectly complementary. PARTIAL The substrate shows the clean complementary contrast but cannot assert that ocean and caged-bird rhyme as images.
7 Truth-teller figures — shared person/figure class? cross-context SQL intersect on rdf:type classes Only shared class is ex:Line. Genius: ex:Child/ex:YoungChild/ex:FirstPersonSpeaker; bluebird: ex:Bird/ex:Heart/ex:Speaker. No shared figure. NO The parallel-truth-teller link is analogical (child-genius vs caged-bird); no shared figure type and no analogy layer.
8 Is the speaker a shared entity across both poems? cross-context SQL + scoped FTS /search "speaker" genius 57, bluebird 90 speaker-bearing rows. Scoped FTS returns both (53 genius + 60 bluebird, staging excluded). YES First-person speaker is a genuine shared anchor; FTS bridges both poems on this backbone token.
9 Weeping / tears / grief emotional register across both? cross-context SQL regex + FTS /search "weep" bluebird 17, genius 0. FTS "weep" → bluebird only. PARTIAL A real contrast surfaces (dry/ironic genius vs weeping bluebird) but one-sided; no bridge.
10 Contradiction-preservation — incompatible verdicts as paraconsistent state? cross-context SQL on describedAs/judgment predicates Genius holds describedAs "genius" and describedAs "not pretty" and isJudgedNotPrettyBy ex:child; bluebird holds selfDescribesAsTough "too tough". All co-held, none invalidated. YES The paraconsistent differentiator is exercised: incompatible self-/other-descriptions held together and queryable.
11 "genius" token — present in one poem, absent in the other? cross-context SQL + FTS "genius" genius 12, bluebird 0. The substrate correctly knows the token is poem-1-only. YES (as a distinguisher) Correct anti-connection: the store cleanly separates poem-specific vocabulary.
12 "heart" motif — bluebird's core vs genius? cross-context SQL + FTS "heart" bluebird 48, genius 0. FTS "heart" scoped → bluebird only. PARTIAL One-sided; no bridge to genius's ocean-as-heart-substitute (a semantic, not lexical, link).
13 Line-level structure — do both decompose to ex:Line? cross-context SQL count rdf:type = ex:Line genius 8, bluebird 45. The one shared rdf:type class. YES ex:Line is a real structural join; a query for the lines of both poems works.
14 The unspoken — "nobody to see" (bluebird) vs "what genius won't admit" (genius)? cross-context SQL regex on object literals nobody|will not|admit|refus Only genius's "refusal of the Romantic-sublime sea" matched; bluebird's idea is encoded as the predicate doesNotWantAnybodyToSee, invisible to a literal scan. NO Encoding mismatch (predicate vs literal) plus semantic distance defeats the lexical probe; needs embeddings.
15 Shared subject IRIs verbatim (entity overlap)? cross-context SQL intersect on subject 7 shared: ex:line-1 … ex:line-11. Pure structural collision (both mint ex:line-N). PARTIAL Structural collision only; no semantic entity is genuinely shared between the poems.
16 Shared object-literal phrasing verbatim (>4 chars)? cross-context SQL intersect on lowered object literals 0 shared phrases. Vocab fully disjoint at the literal level. NO The two poems share no exact phrasing; abundance signature, no lexical bridge.
17 Tone / mood register across both? cross-context SQL regex tone|mood|ironic|tender|bitter genius 5, bluebird 5. Both carry tone claims (ironic/defiant vs tender/resigned). PARTIAL Symmetric presence of tone claims, but no edge equates or contrasts the specific tones.
18 Cross-poem predicate fold — does alignment link a genius-only pred to a bluebird-only pred? donto_predicate_alignment (19,849 edges), cross-poem filter 0 cross-poem fold edges. 911 alignment edges touch the poems' predicates; 53 of 372 poem predicates known to the engine (daemon mid-backlog, live, last tick today). NO The daemon is live and processing the poems but has proposed no genius↔bluebird fold yet; the fold as deployed is lexical-only.
19 hasTheme fold — does expanding hasTheme reach both poems' themes as one query? donto_match_aligned(p_predicate:=hasTheme, p_expand_predicates:=true) Returns both poems' theme rows (bluebird ex:bluebird, genius ex:train) under one query; does not fold the objects (ex:bluebird vs ex:ocean stay distinct). PARTIAL Cross-context predicate-fold plumbing works and reaches both poems, but object-level semantic fold is absent.
20 Perception fold — do perceives/sees/observes-family predicates align across the poems? donto_predicate_alignment regex on perception-family endpoints Existing perception-family fold edges are all lexical (viewedAsex:viewedas, containsNoticescontainsNotice) and all from the genealogy corpus. None bridge genius's perceivedBy/isJudgedNotPrettyBy to bluebird's concealsFrom/doesNotWantAnybodyToSee. NO Lexical alignment cannot fold lexically-distant perception predicates; needs semantic (embedding) alignment.

Tally

6 YES · 7 PARTIAL · 7 NO.

  • YES (6): Q3, Q8, Q10, Q11, Q13 — shared structure (ex:Line), the shared first-person speaker anchor, paraconsistent co-holding of the two aesthetic verdicts, and the correct anti-connection on poem-specific tokens.
  • PARTIAL (7): Q4, Q5, Q6, Q9, Q12, Q15, Q17 (with Q19's cross-context plumbing) — the substrate places the two poems side by side (matching counts, complementary imagery, fold-plumbing reaching both contexts) but cannot assert that they resonate.
  • NO (7): Q1, Q2, Q7, Q14, Q16, Q18, Q20 — the genuinely semantic / analogical links (beauty-denied ≈ beauty-hidden; ocean ≈ caged bird; child-genius ≈ bluebird as parallel truth-tellers; predicate-encoded "won't be seen" ≈ literal "won't admit") are invisible to lexical FTS + lexical alignment as deployed.

Honest capability assessment

What donto connects well — today, deployed

  • Shared structural vocabulary (/search + SQL). The 11-predicate backbone and the ex:Line class let bounded SQL place the two poems side-by-side and run genuine cross-context comparisons (lines, speakers, themes-as-rows). This is the join surface the "defer joining" thesis promises, and it is there.
  • Lexical FTS on shared tokens. Scoped to the poem subtree, "speaker" and "poem" are the only tokens that return both poems — the structural bridges. Every thematic token (beauty, see, weep, heart, ocean, secret, bird, genius) lands in exactly one poem, because the minted vocab is disjoint. That is a clean, measurable demonstration of emit-free abundance: the firehose mints its own predicates and the join is deferred.
  • Shared predicates / contexts. Cross-context SQL is a first-class connector: the 14-family model means both poems live in one store, addressable together, and the backbone predicates give SQL a real comparison surface (not a coincidence of vocabulary).
  • Alignment-closure predicate folding. donto_match_aligned(p_expand_predicates:=true) on hasTheme does expand a single query to reach both poem contexts at once (Q19). The cross-context fold machinery is wired and live (911 edges already touch these predicates).
  • Contradiction-preservation as a connection. Both incompatible aesthetic verdicts — "it's not pretty" and "it's nice enough to" — and genius's own genius / not pretty / isJudgedNotPrettyBy triad are held together as legal state and returned together. donto's differentiator is that the contrast itself is the cross-document link, queryable and never invalidated.

Where donto is honestly limited — built-but-dark or unbuilt

  • Semantic resonance is invisible (awaits the deployed hybrid vector recall). beauty-denied vs beauty-hidden, ocean vs caged bird, perceivedBy vs doesNotWantAnybodyToSee — these are the real connections, and lexical FTS + lexical alignment cannot see them. They need the hybrid vector recall (bge-small embeddings) which is built but on an undeployed branch (hybrid-vector-recall, reaches memory via DONTO_MEMORY_EMBED_SERVICE_URL). With vectors, Q1 / Q2 / Q14 plausibly flip to YES/PARTIAL.
  • The alignment daemon hasn't reached the poems yet. It is live and healthy (19,849 edges, ticking today) but only 53 of 372 poem predicates are in-set and it has proposed 0 cross-poem folds (Q18, Q20 = 0 rows). One or more daemon cycles — once it embeds the poem predicates and adjudicates — could surface the perception fold. As deployed the fold is lexical-only, and these two poems are deliberately too lexically distant to fold without embeddings.
  • No analogical / multi-hop query layer. "The child-genius and the caged bluebird are parallel truth-tellers" is a two-hop analogy (figure → role → figure). The substrate holds both figures and both roles but has no query layer that composes them into an analogy. That is a reasoning layer above the store, not a property of the store.
  • Encoding mismatch defeats lexical probes. Bluebird encodes "don't want anybody to see you" as a predicate (doesNotWantAnybodyToSee); genius encodes its refusal as an object literal. A literal-scan (Q14) can't bridge the two encodings — another job for semantic matching, not string matching. Per the no-brittle-logic rule, the answer is embeddings / the alignment engine, not a hand-maintained predicate-variant table.
  • FTS drowns at substrate scale. Unscoped, the ~39M-row genealogy/genes/discord corpus swamps every thematic token (unscoped "beauty" → salon menus; "bird"/"heart" → genealogy). Cross-document poem connection over FTS only works scoped (context_prefix).

What this demonstrates about donto as a cross-document substrate

Yes — partially, and exactly where the architecture predicts. donto connects two independently-extracted poems structurally and lexically today (6 clean YES, 7 side-by-side PARTIAL), and preserves their contradiction as a first-class, queryable connection. It cannot yet connect them thematically / analogically (7 NO) — and that gap is not a design failure but a precise statement of what is deployed vs. built-but-dark: the substrate is one deployed branch (vectors) plus one daemon cycle (alignment) from turning the thematic mirror-image between "it's not pretty" and the hidden bluebird into a query result.

That is the cleanest validation available of the emit-free / defer-the-join-to-query-time thesis. Two poems that share ~3% of their predicates (Jaccard ≈ 0.03) — minted independently, with no pre-wired link — are nonetheless side-by-side, contrastable, and contradiction-preserving in the store right now, with the semantic join a known, scoped, measurable increment away. The discovery vision is not refuted by the 7 NO verdicts; it is located: the structural and contradiction-preserving connectors are real and deployed, and the semantic / analogical connectors are a concrete, named, in-progress next step rather than a research mystery. A cross-document connection substrate that gets the structure, the vocabulary, and the contradiction right today — and has the semantic layer built and waiting — is doing exactly the job it was designed for.


All queries SELECT-only (I3 honored; nothing retracted or overwritten). Mechanisms: donto-memory POST /search (substrate-wide FTS), bounded cross-context SQL on donto-pg, and donto_predicate_alignment / donto_match_aligned. The scratch staging context ctx:test/poem/bukowski-bluebird-stage (2,737 stmts) was kept in place and excluded from every query. Run logs, SQL, and raw outputs: /opencode/logs/poem-bluebird/ (q-main.sql, q-align.sql, out-main.txt, out-align.txt, out-search.txt, out-search-scoped.txt, glean-bluebird.log, cite.log, ingest.log, query-results.txt, consolidated-connection-data.txt).