dontopaper

Standing as a dynamical system steered by reality

donto papers · original research · 2026-06-13 · theory, working draft v1

Abstract. donto attaches to every claim an epistemic standing — in v1 the vector ⟨maturity, corroboration, contradiction-pressure, recency⟩, computed live by the donto_standing SQL function from tables that already exist (claim flags, donto_evidence_link, donto_paraconsistency_density, tx_time). The prevailing reading treats standing as a score: a number you read off a claim. We argue it is better modeled as the state of a controlled dynamical system — a vector field over the claim graph that evolves under a closed feedback loop with reality. The controller is donto_suggest_next_evidence: at each step it ranks the observation that would most move standing (resolve a contradiction, settle an identity, discharge a proof obligation), an agent acquires it, the new evidence lands as a non-destructive claim, and standing re-ranks. This reframing buys three things a static score cannot: a vocabulary for the fixed points of the loop (settled facts — standing stops moving), its limit cycles (perennial disputes — standing oscillates as sources rebut each other forever), and convergence conditions (when does steering actually terminate). We give the formal model, characterize the three regimes, and state the central conjecture: steered acquisition strictly shortens time-to-resolution versus passive accumulation on contested subgraphs, and standing-weighting is the missing ingredient that makes the bitemporal-sheaf transaction-time convergence conjecture true rather than false-in-general. The formalization is new; the controller and standing function are deployed and queryable today; the steering experiment that would establish the headline claim is specified but not yet run — the live genealogy testbed currently carries only 7 argument edges, so the loop is built and barely exercised. That gap is the experiment.


1. The static-score reading, and why it is a category error

donto_standing(statement_id) returns, per claim, the v1 components plus the v2 extensions migration 0166_standing_v2 wired in (source_policy, identity_stability, inference_depth, review_state, downstream_utility). Read naively, this is a richer confidence score: a claim with high corroboration, low contradiction-pressure, recent belief, mature flags is "trustworthy," and you sort answers by it.

That reading misses what standing is for. The canon (DONTO-CANON.md §3) frames donto as three compounding loops — HOLD (extract/anchor/contest), JUDGE (align/identify/review/stand), STEER (rank what would disambiguate → act → measure → re-rank). Standing is the output of JUDGE and the input of STEER. It is not a verdict to be displayed; it is a set-point the system actively drives toward by choosing what to observe next. A score is a noun. Standing, used as the canon intends, is the state variable of a verb.

The consequence: the right questions about standing are not "is this score calibrated?" but the questions you ask of any controlled system — where are its fixed points, does the loop converge, and when does it get stuck in a cycle? Those questions are unanswerable about a number. They are answerable about a vector field with a controller, which is what the deployed pieces already are.


2. The model

2.1 State

Let C be the set of currently-believed claims (donto_statement rows with upper(tx_time) IS NULL). For a claim c, write its standing vector as it stands at transaction-time τ:

σ(c, τ) = ⟨ m(c,τ),  k(c,τ),  p(c,τ),  r(c,τ) ⟩   ∈  ℕ × ℕ × ℝ≥0 × ℝ≥0

with components exactly as donto_standing computes them at time τ:

symbol component source (verified)
m maturity donto_maturity(flags) — the E-level (E0…E2 cap)
k corroboration count(distinct document_id) over donto_evidence_link for the claim's content-hash
p contradiction-pressure conflict_score from donto_paraconsistency_density for the claim's ⟨subject, predicate⟩
r recency (now() − lower(tx_time)) / 86400 days

Because donto never deletes (invariant I3 — supersede, never overwrite), σ(c, τ) is well-defined at every past τ, reconstructable from stored rows. This is the property that makes "standing over time" a real trajectory and not a fiction — the same I3 property the bitemporal sheaf leans on for its time-indexed stalks. A mutable store could report standing now; only a bitemporal, non-destructive store can replay the trajectory.

Over a contested subgraph S ⊆ C (the claims about one disputed subject — e.g. every attestation of one person's birthplace), the state is the field Σ_S(τ) = { σ(c,τ) : c ∈ S }. This is the vector field the title refers to: a standing vector pinned to each node, the whole thing indexed by transaction-time.

2.2 The controller (deployed)

The dynamics are not autonomous diffusion — they are driven by acquisition. The controller is donto_suggest_next_evidence(scope, lens, limit), deployed and queryable today. It enumerates three kinds of action over the scoped subgraph and ranks them by an explicit priority heuristic (read directly off migration 0156_suggest_next_evidence):

contradiction action:  p·100  +  ln(reach+1)·5  +  fetchability_bonus  +  unreviewed_bonus
obligation action:     priority·20  +  ln(reach+1)·5  +  p·50
identity action:       (1 − |conf − 0.5|·2)·80  +  entity_count·5  +  missing_anchor_bonus

Two things matter for the dynamical reading. First, every term is a function of current standing or its inputs: contradiction-pressure p, subject reach (a proxy for how much the subject's standing matters), identity uncertainty (1 − |conf − 0.5|·2, maximized at conf = 0.5 — the controller seeks the most uncertain identity, the textbook active-learning objective). Second, the function already emits an expected_standing_shift per action — it is designed as a controller that predicts the move it makes to the state field, not merely a to-do list.

2.3 The loop

One STEER step is the map Σ_S(τ) → Σ_S(τ'):

1. RANK    a* = argmax_a  priority(a | Σ_S(τ))          ← suggest_next_evidence
2. ACT     fetch the source a* points at                ← agent / human
3. INGEST  land it as a non-destructive claim + evidence_link + (maybe) argument edge   ← I3-safe
4. MEASURE re-evaluate donto_standing over S            ← Σ_S(τ')

Step 3 only ever adds rows (new statement, new evidence link, a rebuts/supports donto_argument edge, a review_decision). It can lower contradiction-pressure (corroboration arrives, donto_paraconsistency_density.conflict_score drops on recompute) or raise it (a fresh dissenting source), and it can raise corroboration and maturity. But it never deletes a prior attestation — so the trajectory of Σ_S is monotone in information even when it is non-monotone in any single component. That asymmetry is the whole reason convergence is subtle, and §4 turns on it.


3. The three regimes

A controlled system is characterized by its long-run behavior. Standing-as-dynamics has exactly three, and each names a thing genealogists and the canon already talk about informally.

3.1 Fixed points — settled facts

Σ_S(τ) is a fixed point when suggest_next_evidence over S returns no action whose expected_standing_shift is non-trivial: corroboration is saturated, contradiction-pressure is ~0, no open donto_proof_obligation, no candidate donto_identity_proposal. The controller has nothing it would acquire because nothing would move standing. This is what "settled" means, made operational: not "we are certain" but "no available observation would change our standing." The subject "Caroline Rose Davis's mother is Kitty" approaches this once the parish-baptism corroboration is in and the alternative readings are explicitly ruled out — standing stops moving because the controller stops proposing.

Crucially, a fixed point is not zero contradiction-pressure in the valid-time sense. Two sources may have disagreed historically; that residue is permanent (I3, and the valid-time of the sheaf paper). The fixed point is in transaction-time: our belief stops moving. This is precisely the sheaf paper's distinction between valid- (permanent) and transaction- (convergent), read through the standing lens — and the link is not incidental, see §5.

3.2 Limit cycles — perennial disputes

A limit cycle is a subgraph where standing never settles: each acquired source rebuts the last, contradiction-pressure oscillates, and suggest_next_evidence keeps proposing the same contradiction action because every new source raises a new conflict instead of resolving one. The signature in the tables: a ⟨subject, predicate⟩ whose donto_paraconsistency_density.distinct_polarities ≥ 2 persists across recomputes while corroboration on no single polarity ever dominates — and a donto_argument neighborhood dense in rebuts with no supersedes ever firing. (Live, rebuts is by far the dominant relation: 2,282 of 2,525 argument edges. Caveat: that ratio is dominated by one synthetic context — ctx:epistemic-sweep alone holds 2,150 edges — so it is a statement about how the substrate is structured to hold conflict, not a measurement of organic dispute. Either way, the machinery to represent a limit cycle exists; whether real corpora exhibit one is §6's experiment.)

The honest point: a paraconsistent substrate does not promise convergence. It promises to hold the dispute. Whether steering converges or cycles is a property of the evidence available in the world, not of donto. Some lineages are genuinely undecidable from surviving records; the loop should detect the cycle and report "perennial: bounded evidence, sources disagree, no acquisition would settle it" rather than thrash. Detecting the limit cycle is itself a deliverable — and one only a store that keeps the whole rebuttal history can compute.

3.3 Convergence to a fixed point — steering's payoff

The interesting regime: the subgraph can be settled by some sequence of acquisitions, and the question is whether the controller reaches the fixed point faster than passively ingesting whatever shows up. This is the headline claim, and §4 states it precisely.


4. Convergence conditions and the central claim

4.1 Why steering should beat passive accumulation

Passive accumulation ingests sources in arrival order; steered acquisition ingests them in suggest_next_evidence priority order. Both reach the same fixed point if the decisive source is eventually acquired — the difference is time-to-resolution: the number of acquisitions until Σ_S first reaches the fixed point.

The intuition is active-learning's: the controller's identity term (1 − |conf − 0.5|·2)·80 and contradiction term p·100 both target maximum-uncertainty observations, which are the ones that most reduce standing variance per acquisition. Under the natural assumption that the decisive source (a marriage certificate naming both spouses' parents — "anchors ~3 generations") exists in the fetch frontier, prioritizing high-contradiction-pressure / maximum-identity-uncertainty actions front-loads the decisive acquisition.

Conjecture (steering speedup). On a contested subgraph that is resolvable (a fixed point is reachable), expected time-to-resolution under suggest_next_evidence-ordered acquisition is strictly less than under arrival-ordered acquisition, with the gap growing in the subgraph's contradiction density p and its identity uncertainty.

Failure mode (named). The conjecture is false when the controller's priority is anti-correlated with which acquisition is actually decisive — e.g. if high contradiction-pressure is generated by an adversarial source flooding low-value rebuttals (the donto_argument rebuts bias becomes an attack surface), the controller chases noise and steering can be slower than passive. This is the standing analogue of the sheaf paper's deceptive-source failure, and it is why §4.2 needs a trust model.

4.2 The condition that rules out the failure: standing-weighting

The failure mode above is exactly an unweighted controller treating every rebuttal as equally informative. The fix is the component v1 deliberately ships and v2 extends: weight contradiction-pressure and corroboration by source standing, so a rebuttal from a low-corroboration, low-maturity, unreviewed source moves the controller less than one from a corroborated, reviewed source. donto_standing already exposes the inputs (corroboration, review_state, downstream_utility); the controller's heuristic does not yet consume source standing — its terms are raw conflict_score and priority. Closing that gap is the concrete next build.

This is the same condition the bitemporal-sheaf paper arrived at from the other side. That paper conjectured transaction-time is non-increasing under monotone evidence accrual, and flagged that it is false in general without a trust model on sources — "you cannot converge on truth without weighting sources." Standing is that trust model. So:

Bridge conjecture. Standing-weighting of the STEER controller is the necessary condition that makes the bitemporal-sheaf transaction- convergence conjecture hold: with source-standing weights, monotone evidence accrual drives transaction- down (belief converges); without them, an adversarial source can raise it without bound. The two papers' open conjectures are the same conjecture viewed as a flow (sheaf) and as a controller (standing).

If true, this unifies the two theory papers under one mechanism and tells the build order: ship standing-weighting in the controller before trusting either convergence claim.


5. Why only donto can pose this

The model needs four things at once, and donto is where they co-exist:

requirement donto provides it verified
standing as a live, multi-component, replayable state donto_standing fn (migrations 0151_standing_v1, 0166_standing_v2) function deployed in donto-pg
a controller that ranks the next observation by expected standing shift donto_suggest_next_evidence fn (migration 0156) function deployed; emits expected_standing_shift
a contradiction-pressure signal to drive the loop donto_paraconsistency_density.conflict_score 235,032 rows, all with distinct_polarities ≥ 2, max conflict_score = 1.00
non-destructive ingest so the trajectory is real, not overwritten invariant I3; supersede-not-delete every component computable at any past tx_time

No collapse-on-conflict store can pose the cycle question (it deleted the losing claim, so there is no oscillation to observe) or the trajectory question (it overwrote the past states). A vector DB has no contradiction-pressure to drive a controller. donto has all four as deployed tables and functions — which is why this is donto's paper to write, and why the experiment is runnable on the live box, not a simulation.


6. The experiment that would establish the headline claim

The genealogy program is the canon's designated testbed: every research loop already ends with a hand-written "decisive next action" list (order this certificate, open that register, test this filiation). That hand-ranking is suggest_next_evidence done by an agent ad hoc. The experiment formalizes it and measures the speedup.

Design. Take three real contested subjects the program already works: the Kitty disambiguation (at least 16 distinct women named some variant of "Kitty" catalogued in genes/native-title/eky-apicals-resources/kittys-disambiguation.md, with explicit anti-merge/merge findings — a textbook identity-resolution loop); Val's Mauritius apex couple (Poitevin × Collinson, research/val-poitevin-collinson-mauritius/); and the Coen-vs-McIvor birthplace contradiction (the canonical worked dispute, also Example B of the bitemporal sheaf paper). For each:

  1. Build the contested subgraph in the substrate — land every attestation as a claim with evidence links, add the rebuts/supports donto_argument edges, recompute donto_paraconsistency_density. (This is the prerequisite that is missing today: genealogy contexts carry only 7 donto_argument edges total — the disputes live in prose, not yet as substrate state. Loading them is step 0.)
  2. Two arms, same fetch frontier. Steered: acquire sources in suggest_next_evidence priority order. Passive: acquire in arrival/chronological order. Both draw from the identical set of fetchable sources.
  3. Measure time-to-resolution = acquisitions until Σ_S reaches a fixed point (controller proposes no non-trivial action), and show the standing shift with receipts — before/after donto_standing per claim, exactly the canon's "show the standing shift" demo.

What each outcome means.

  • Steered < passive on resolvable subjects → the speedup conjecture holds; report the gap vs contradiction density.
  • Steered ≈ passive → steering is not paying off on this corpus; an honest negative — likely the frontier is too small for ordering to matter, or the controller needs standing-weighting (§4.2).
  • A subject where neither arm settles → a detected limit cycle; report it as "perennial: bounded evidence" — itself a result (the substrate correctly recognizes an undecidable lineage instead of forcing a winner).

A sharp negative here (steering doesn't help) is worth more than a vague positive: it would say the controller's ordering is not the bottleneck — acquisition is — which redirects the whole STEER program.


7. Status: proven / conjectured / speculative

  • Deployed / measured (solid). donto_standing and donto_suggest_next_evidence are live functions in donto-pg; standing v1 = ⟨maturity, corroboration, contradiction-pressure, recency⟩ is computable per claim from existing tables; the controller's priority heuristic and expected_standing_shift output are as quoted from migration 0156. Live substrate state (queried 2026-06-13): 2,525 donto_argument edges (2,282 rebuts, but 2,150 of all edges sit in the synthetic ctx:epistemic-sweep), 235,032 donto_paraconsistency_density rows (all distinct_polarities ≥ 2, max conflict_score = 1.00), ~2.8M donto_evidence_link, 1,240 donto_proof_obligation, 169 donto_identity_edge.
  • Conjectured (open, failure mode named). The steering-speedup conjecture (§4.1) and the bridge conjecture that standing-weighting is the necessary condition for transaction- convergence (§4.2). The named failure mode is an adversarial rebuts flood against an unweighted controller — and the controller is unweighted today (its terms use raw conflict_score/priority, not source standing), so closing that gap is a prerequisite to even testing the conjecture honestly.
  • Defined, not yet run (the experiment). The §6 three-subject steered-vs-passive trial. The blocker is concrete and small: genealogy contexts hold only 7 argument edges — the disputes are in prose, not substrate state — so step 0 is loading them. Until then the loop is built and barely exercised; this paper is the spec for exercising it.
  • Speculative (flagged). That the fixed-point / limit-cycle classification of a corpus is itself a historiographic instrument — that the set of subjects which provably limit-cycle (bounded evidence, persistent distinct_polarities ≥ 2) is a map of what the surviving record can and cannot decide. Worth measuring once the subgraphs exist; no claim yet.

See also: the convergence flow this controls, The Bitemporal Sheaf (the bridge conjecture says these two are one mechanism); the empirical lever standing feeds, Answer-Shaping (contradiction-pressure is a shape-routing signal); the full program in the donto research agenda.