Epistemic lens — RUN-GBRAIN-20260820
Provenance note (trial apparatus, not part of the lens result). The epistemic lens worker completed this analysis and returned it to the orchestrator, but both the worker and the orchestrator were terminated by a usage limit before the file was written to disk. This file was recovered verbatim from the worker's returned report. No content was added, and no finding was altered. Formatting may differ in trivial ways from the worker's original file layout.
Scope note (wrapper): the invoked instruction kb/instructions/analyse-external-system-epistemic-architecture.md was run inside the packet's boundary. Its links to further kb/ files were treated as unavailable per wrapper rule — limitation L-0: the invoked instruction may reference definitions or sub-procedures that could not be read; any conclusion depending on those is unbounded here. No system-wide epistemic grade is given (wrapper override; the instruction also forbids it).
1. Source-and-claim boundary
| Field | Value |
|---|---|
| system | GBrain (github.com/garrytan/gbrain) |
| reviewed revision | 9a0bae8d62cdd1e0dd6655e24e082fe6c69c5dac, VERSION 0.42.25.0, commit date 2026-06-03 |
| declared scope | Packet §3 (unchanged, not widened). Whole-repo by function; subsystem-only w.r.t. the advertised agent loop — signal detection and the respond step live in the host agent platform, outside the checkout |
| analysis question | Within GBrain's own code and shipped doctrine at 9a0bae8, what routes handle truth-apt content — produced, transformed, checked, accepted, given authority, retained/integrated — and what warrant do the resulting artifacts carry? |
| assessed route families | takes lifecycle (propose → grade → resolve → calibrate); facts lifecycle (extract → decay → consolidate); think synthesis + citation + gaps; contradiction probe + resolution proposals; corpus-level quality assays (eval takes-quality, cross-modal, nightly probe); page/atom/concept synthesis; auto-link edges; guardrail seams; retention/mirroring routes |
| unassessed route families | hybrid retrieval internals (hybrid.ts 1,870 lines — ranking/rerank/expansion, uninspected); operations.ts body (4,751 lines) beyond named ops; minion scheduling/trust-boundary internals (runtime lens owns these); embedding-provider recipes; evals/ harness internals; admin/; all 1,244 test files except as named; individual skills/*/SKILL.md bodies |
| new sources inspected | see §7 file list; all inside the frozen checkout, all implementation or doctrine/design layer, none reacquired |
New source IDs (proposed — orchestrator owns registration)
| ID | Identity | Layer | Scope inspected |
|---|---|---|---|
| PROPOSED-SRC-19 | src/core/cycle/propose-takes.ts |
implementation | full (474 lines) |
| PROPOSED-SRC-20 | src/core/cycle/grade-takes.ts |
implementation | full (629 lines) |
| PROPOSED-SRC-21 | src/core/cycle/calibration-profile.ts |
implementation | full (406) |
| PROPOSED-SRC-22 | src/core/cycle/phases/consolidate.ts |
implementation | full (297) |
| PROPOSED-SRC-23 | src/core/cycle.ts |
implementation | lines 57–175, 1860–1990 + greps; body elsewhere not line-read |
| PROPOSED-SRC-24 | src/core/think/index.ts |
implementation | lines 185–220, 270–330, 380–600 |
| PROPOSED-SRC-25 | src/core/think/cite-render.ts |
implementation | full (123) |
| PROPOSED-SRC-26 | src/core/think/sanitize.ts |
implementation | full (106) |
| PROPOSED-SRC-27 | src/core/eval-contradictions/judge.ts |
implementation | full (366) |
| PROPOSED-SRC-28 | src/core/eval-contradictions/auto-supersession.ts |
implementation | full (202) |
| PROPOSED-SRC-29 | docs/contradictions.md |
doctrine/design + reported operation | full (166) |
| PROPOSED-SRC-30 | src/core/guardrails.ts |
implementation | full (137) |
| PROPOSED-SRC-31 | src/core/takes-resolution.ts |
implementation | full (120) |
| PROPOSED-SRC-32 | src/commands/takes.ts |
implementation | cmdResolve + subcommand dispatch (lines 344–580) |
| PROPOSED-SRC-33 | src/commands/calibration.ts |
implementation | getLatestProfile (lines 40–80) |
| PROPOSED-SRC-34 | src/core/cycle/nightly-quality-probe.ts |
implementation | full (220) |
| PROPOSED-SRC-35 | src/core/skillopt/{validate-gate,bundled-skill-gate,score}.ts |
implementation | validate-gate + bundled gate full; score head |
| PROPOSED-SRC-36 | docs/eval-takes-quality.md |
doctrine/design | full (159) |
| PROPOSED-SRC-37 | src/core/cycle/synthesize.ts |
implementation | lines 1–70, 890–945 |
| PROPOSED-SRC-38 | src/core/facts/decay.ts |
implementation | full (63) |
| PROPOSED-SRC-39 | src/core/extract-takes-from-pages.ts |
implementation | lines 1–80 |
| PROPOSED-SRC-40 | src/core/cycle/{extract-atoms,synthesize-concepts}.ts |
implementation | heads only (contract comments) |
| PROPOSED-SRC-41 | src/core/operations.ts |
implementation | think, get_calibration_profile, find_contradictions op definitions only |
| PROPOSED-SRC-42 | src/core/cross-modal-eval/runner.ts |
implementation | lines 1–50 |
| PROPOSED-SRC-43 | docs/GBRAIN_VERIFY.md |
doctrine/design | headings only |
Missing evidence → conclusion prevented (paired)
| Missing evidence | Exact conclusion it prevents |
|---|---|
No execution of any GBrain command; no DB, no takes rows, no take_grade_cache rows, no calibration_profiles rows, no synthesis_evidence rows |
Every observed candidate state below is no instance observed. Prevents: any claim that a take was actually graded, resolved, accepted, or integrated; any claim about real verdict distributions, Brier values, or citation accuracy |
gbrain-evals repo (sibling, outside boundary) |
Prevents assessing CLM-11 (P@5/R@5/+31.4pp), CLM-14 (propose_takes F1 0.952/0.922), and the cat15 tuning claim beyond claimed |
| No production brain snapshot | Prevents assessing CLM-10 (100,720 takes, 6.8/10 cross-modal) beyond reported operation |
src/core/search/hybrid.ts and the rest of search/* not line-read |
Prevents concluding what evidence set a think call actually sees; prevents assessing whether retrieval preserves or degrades source warrant into OBJ-06 |
src/core/operations.ts body (4,751 lines) not line-read |
Prevents an exhaustive claim that no other route writes to takes/facts/calibration_profiles; absence findings are scoped to rg over src/ excluding tests |
Individual skills/*/SKILL.md bodies not read |
Prevents assessing whether shipped skill doctrine instructs agents to treat think output or takes as established fact (BAP-01 content unknown) |
| No causal/interventional evidence anywhere | Prevents any causal attribution for any check, gate, or prompt rule in this run |
2. Epistemic-object inventory (Required Return 1)
Packet OBJ-* extended by ID; new candidates as PROPOSED-OBJ-*.
| ID | Name / description | Form | Source & lineage | Producer → consumer | Candidate truth-apt content | Claimed role | Evidence anchor | Gap/limit |
|---|---|---|---|---|---|---|---|---|
| OBJ-01 | Page (compiled_truth markdown + frontmatter + timeline) |
natural-language | user/agent authored; imported; dream-written | user, agent, synthesize → retrieval, think, extractors |
yes — asserted content about people/companies/events | brain's system of record | SRC-02; PROPOSED-SRC-37 | mixed provenance; no per-page warrant field |
| OBJ-03 | Typed graph edge (works_at, attended, …) |
symbolic | regex/wikilink extraction on every page write, no LLM | put_page → graph query, graph signals |
yes — asserts a relation holds | "self-wiring knowledge graph" | SRC-02 README:12,257 | extraction correctness uninspected; edges inherit page warrant unexamined |
| OBJ-04 | Fact row (hot memory) | NL + typed fields (kind, confidence, valid_from/until) |
per-turn Haiku/Sonnet extraction from conversation | extractor → recall, _meta.brain_hot_memory, consolidate |
yes — single-holder (brain owner) assertions | real-time personal knowledge | SRC-10/11/12; PROPOSED-SRC-38 | confidence is model-self-reported; no check route found within boundary |
| OBJ-05 | Take row (cold, attributed claim) | NL + kind/holder/weight/since/active |
LLM extraction from pages; consolidate bridge; takes add |
extractors → think, takes CLI/MCP, grade_takes |
yes — attributed claim over a named holder and time | "epistemological layer: WHO believes WHAT" | SRC-13; PROPOSED-SRC-22/39 | weight is LLM-inferred from hedging language, not a calibrated probability |
| OBJ-06 | Synthesis answer (+Conflicts+Gaps) | natural-language | think LLM call over <pages>/<takes>/<graph>/<calibration>/<trajectory> |
think → user / calling agent / optional saved page |
yes — the system's headline knowledge product | "GBrain gives you the answer" | SRC-08; PROPOSED-SRC-24 | never checked against its inputs before delivery |
| OBJ-07 | Structured citation (page_slug, row_num) |
symbolic | think structured output; regex fallback from body |
think → synthesis_evidence |
yes — asserts "this claim is supported at slug#row" | citation persistence | PROPOSED-SRC-25 full | row existence and support relation never verified; slug existence checked only on --save |
| OBJ-08 | Gap statement | natural-language | think LLM output field |
think → user; --rounds N scaffold |
yes — asserts the brain lacks X | "the gap analysis is the differentiator" | SRC-08:55–57; PROPOSED-SRC-24:495–500 | rounds>1 is not gap-driven (ROUNDS_GT_1_NOT_GAP_DRIVEN_IN_V028); gaps are unverified against the corpus |
| OBJ-09 | Take verdict (take_grade_cache row: verdict, confidence, evidence_signature, applied) |
symbolic + NL | judge model in grade_takes |
judge → cache row | yes — asserts the take turned out correct/incorrect/partial/unresolvable | hindsight grading | PROPOSED-SRC-20:544–551 | evidence input is a placeholder (see M-01); no implemented consumer by default (M-05) |
| OBJ-10 | Calibration profile (patterns + bias tags + Brier + published) |
NL + symbolic | aggregation of takes.resolved_* via getScorecard, then LLM narration + voice gate |
calibration_profile phase → think <calibration> block, get_calibration_profile MCP op |
yes — asserts a track-record pattern about a holder | debiasing feedback loop | PROPOSED-SRC-21:350–380; PROPOSED-SRC-33 | published written false and ignored on read (M-06); grade_completion always 1.0 (M-07) |
| OBJ-11 | Suspected-contradiction record (verdict ∈ 6-enum, severity, axis, confidence) | symbolic + NL | query-conditioned LLM judge over retrieval pairs, date pre-filtered | judge → eval_contradictions_runs.report_json |
yes — asserts two statements conflict/supersede/regress | contradiction evidence | PROPOSED-SRC-27:173–225, 235–319 | judge sees ≤1500 chars/side; page-level effective_date only |
| OBJ-20 | Atom / concept page (lens packs) | natural-language | Haiku atom extraction; Sonnet T1/T2 concept narratives; deterministic T3/T4 stubs | extract_atoms, synthesize_concepts → retrieval |
yes — synthesized assertions about a concept | knowledge condensation | PROPOSED-SRC-40 heads | pack-gated, default-off for most packs; no check route found within boundary |
| PROPOSED-OBJ-21 | Take proposal row (take_proposals: claim_text, kind, holder, weight, domain, status) |
NL + typed | propose_takes LLM extractor over page prose |
phase → queue | yes — a proposed gradeable claim | "review queue; user accepts/rejects" | PROPOSED-SRC-19:392–415 | no implemented reader or accept path (M-02) |
| PROPOSED-OBJ-22 | Take resolution tuple on the takes row (resolved_quality, outcome, resolved_by, source) |
symbolic | human takes resolve, or auto-apply from OBJ-09 |
CLI/engine → getScorecard → OBJ-10; markdown fence mirror |
yes — asserts the take's outcome | recorded disposition | PROPOSED-SRC-31:22–58; PROPOSED-SRC-32 cmdResolve |
the only implemented, reachable acceptance transition for a take at this revision |
| PROPOSED-OBJ-23 | Resolution proposal (resolution_kind + paste-ready resolution_command) |
symbolic | deterministic classifier over OBJ-11 + judge hint | classifier → report/doctor/MCP → human | non-truth-apt directive (an imperative), attached to a truth-apt finding | "descriptive, not directive… probe NEVER auto-applies" | PROPOSED-SRC-28:1–24, 58–102 | commands are rendered even when date order is unclear |
| PROPOSED-OBJ-24 | Takes-quality receipt (eval_takes_quality_runs, 5-dim scores, verdict pass/fail/inconclusive, 4-sha key) |
symbolic | 3-model frontier panel over a random sample of takes | eval → DB row + disk artifact → trend/regress/CI | yes — asserts corpus-level extraction quality at a rubric epoch | CI-able quality gate | PROPOSED-SRC-36 | sample-scoped; no per-take disposition; CI consumer is outside the boundary |
| PROPOSED-OBJ-25 | Nightly quality-probe audit row (outcome, pass/fail counts, cost, fixture sha8) | symbolic | longmemeval → cross-modal batch judge | probe → ~/.gbrain/audit JSONL → doctor |
yes — asserts retrieval/answer quality against a committed fixture | nightly regression signal | PROPOSED-SRC-34:176–197 | default disabled; fixture-scoped |
| OBJ-12 / OBJ-13 | Subagent turn / tool-execution record | NL blocks / symbolic | subagent loop | loop → crash replay | yes (record-of-what-happened; lineage-preserving) | replay substrate | packet | not material to the analysis question beyond lineage |
| OBJ-02, OBJ-14–OBJ-19 | Chunk+embedding, SKILL.md, SOUL/HEARTBEAT/USER/ACCESS_POLICY, schema pack, job row, audit event, query cache | symbolic / NL-prompt | — | — | no candidate truth-apt output (indexing artifacts, instruction artifacts, control records) | — | packet | per-object no-candidate lines in §4 |
3. Authority-route ledger (Required Returns 2, 4, 5, 6)
One function per row. Architectural status is recorded independently of function; activation is recorded separately.
3a. Content transformation routes
| Route | Function | Arch. status | Object | Content/update relation | Activation | Epistemic authority & scope | Operational authority | Behavioral-authority path | Evidence anchor | Claims | Mismatch | Limit |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RTE-06 | content transformation | implemented |
OBJ-04 | truth-apt transformation: ampliative conjecture (LLM asserts a fact the turn did not state as such) + partial acquisition | per conversation turn, config-gated | none licensed by the route itself; row carries a model self-reported confidence only |
writes facts; becomes injectable context |
BAP-12 (advisory _meta, 30s cache) |
SRC-10, SRC-12 | CLM-02 | none | extraction fidelity uninspected |
| RTE-09 | content transformation | implemented |
OBJ-04 → OBJ-05 | non-ampliative reshaping (selection + relabel), not synthesis | dream cycle, every run; gates: ≥3 facts/bucket, oldest ≥24h, cosine ≥0.85, cluster ≥2 | none; claim text is the highest-confidence fact verbatim | INSERTs takes(kind='fact', holder='self'); marks facts consolidated; writes valid_until chain |
none direct | PROPOSED-SRC-22:128–140, 176–201 | CLM-07 | M-04 | doc and cycle.ts:1861 both say "Sonnet-synthesize"; code has no LLM call |
| RTE-10 (produce half) | content transformation | implemented |
OBJ-01 → PROPOSED-OBJ-21 | ampliative conjecture (a "gradeable claim" is asserted from prose) | every cycle; idempotency on (source_id, page_slug, content_hash, prompt_version); $5 budget cap |
candidate generation only | writes take_proposals; does not touch canonical takes |
none | PROPOSED-SRC-19:300–415 | CLM-08, CLM-14 | M-03 (prompt emits prediction/judgment; parser allowlist is fact/take/bet/hunch → silently coerced to take at :270–272) |
prompt-version string claims tuning validated outside boundary |
| PROPOSED-RTE-21 | content transformation | implemented, inactive by default |
OBJ-01 → OBJ-05 | ampliative conjecture (Haiku classifier extracts gradeable claims straight into the takes fence) | two consent gates: takes.bootstrap_enabled (false) AND takes.autopilot_allowed (false); allowlisted page types only; ≤15 claims/page |
candidate generation only | writes canonical takes without any proposal queue when enabled | none | PROPOSED-SRC-39:1–40 | CLM-02 | none | this is a second, gate-only path into takes that bypasses RTE-10's queue entirely |
| RTE-05 | content transformation | implemented |
→ OBJ-06, OBJ-07, OBJ-08 | ampliative conjecture (synthesis across retrieved pages/takes) | every think call |
candidate generation only; no check consumes the output before delivery | returns the answer; optional --save persists a page |
BAP-08 (advisory prompt rules), BAP-09 (advisory + partial code enforcement) | SRC-08 full; PROPOSED-SRC-24 | CLM-01, CLM-03 | none at prompt level; M-08 at verification level | prompt mandates citation; nothing verifies it |
| PROPOSED-RTE-30 | content transformation | implemented, pack-gated |
→ OBJ-20 | ampliative conjecture | only when the active schema pack declares the phase (gbrain-creator, gbrain-everything) |
candidate generation only | writes atom/concept pages into retrieval | none | PROPOSED-SRC-40 | — | none | heads only; bodies uninspected |
| RTE-14 | content transformation | implemented |
→ OBJ-03 | entailed derivation within a declared syntactic domain (wikilink/typed-link syntax → edge), no LLM | every page write | edge warrant = page warrant; derivation is syntactic, not semantic | writes links; feeds graph signals into ranking |
none | SRC-02 README:12,257 | CLM-11 | none | correctness of the regex domain uninspected |
| RTE-15 | lineage/freshness/recovery | implemented |
OBJ-01 | acquisition/import; source warrant preserved (git repo is system of record; DB is derived) | on sync |
no new warrant | soft-deletes, re-chunks, re-embeds | none | packet | — | none | — |
3b. Check / evidence-production routes (Required Return 5, checking)
| Route | Check target (named first) | Evaluator & domain | Arch. status | Activation/timing | Possible result | Implemented force | Epistemic authority & scope | Operational authority | Behavioral-authority path | Evidence anchor | Limit |
|---|---|---|---|---|---|---|---|---|---|---|---|
| RTE-11 | OBJ-05, one take, over "did the world play out as claimed" | single judge model (Sonnet default), NL domain | implemented, but its evidence input is absent |
dream cycle; since_date ≥6 months old; ≤50 takes/run; $3 cap; idempotent on (take_id, prompt_version, judge_model_id, evidence_signature) |
verdict ∈ correct/incorrect/partial/unresolvable + self-reported confidence; parse failure → unresolvable @ 0.0 |
none by default — row written with applied=false; no implemented reader (M-05) |
Licenses nothing about the world. The judge's only "evidence" is the take's own claim text plus its date | none by default | none | PROPOSED-SRC-20:296–305 (defaultEvidenceRetriever returns [evidence retrieval not yet wired — v0.36.1.0 ship-state]), :391, :439; PROPOSED-SRC-23:1930 (runPhaseGradeTakes(calibrationCtx, {}) — no retriever injected) |
M-01. src/core/search/evidence.ts is unrelated (it classifies retrieval-hit strength, not take evidence — read in full) |
| RTE-11b | same target, ensemble path | 3 judges, unanimity + min-confidence ≥0.85 | implemented, inactive in the inspected configuration |
useEnsemble defaults false and ensembleJudges is never supplied by any production caller |
ensemble verdict | none | — | none | none | PROPOSED-SRC-20:400–402, 487; PROPOSED-SRC-23:1930 | reachable only through test injection |
| RTE-13 | pair (chunk/take, chunk/take) over "do these conflict on a claim relevant to this query" | query-conditioned LLM judge (Haiku default), NL domain | implemented |
gbrain eval suspected-contradictions, operator-initiated; date pre-filter >30d; ≤1500 chars/side; persistent cache keyed on (chunk_a_hash, chunk_b_hash, model, prompt_version, truncation_policy) |
6-value verdict + severity + axis + confidence; contradiction below 0.7 confidence downgraded in code to no_contradiction; refusal/parse-fail counted in judge_errors denominator |
advisory only — probe never mutates brain state | Licenses: "a judge, seeing ≤1500 chars of each side plus page-level effective_date, called this pair conflicting w.r.t. this query." Does not license that the pair conflicts, nor which side is true |
writes only to eval_contradictions_runs / _cache |
find_contradictions MCP op (read scope, not in subagent allowlist → user-initiated only); doctor findings; PROPOSED-RTE-23 into the synthesize prompt |
PROPOSED-SRC-27:173–225, 235–319, 337–366; PROPOSED-SRC-29:137–143 | Wilson CI + small_sample_note at n<30 are honest sampling caveats; no ground-truth labels — the judge is the oracle for its own metric |
| PROPOSED-RTE-25 | a random sample of OBJ-05 rows, over a 5-dim rubric (accuracy, attribution, weight calibration, kind classification, signal density) | 3-provider frontier panel, NL rubric domain | implemented |
gbrain eval takes-quality run, operator/CI initiated |
pass (every dim mean ≥7 AND every dim min ≥5) / fail / inconclusive (<2/3 models contributed complete scores) |
receipt persisted; exit code 0/1/2 | Licenses a corpus-and-rubric-epoch-scoped quality statement, fingerprinted by corpus_sha8/prompt_sha8/models_sha8/rubric_sha8. Does not license any individual take |
CI gate (consumer outside boundary); trend/regress |
none inside the boundary | PROPOSED-SRC-36 (verdict rule at :87–89) | no per-take disposition; regress surfaces sha diffs as warnings and does not refuse |
| PROPOSED-RTE-26 | retrieval+answer quality against a committed fixture | longmemeval → cross-modal 3-model batch judge | implemented, default disabled |
opt-in autopilot.nightly_quality_probe.enabled; 24h rate limit; needs an embedding provider |
pass/fail/inconclusive/error/budget_exceeded/rate_limited/no_embedding_key | audit JSONL row → doctor |
Licenses a fixture-scoped quality statement at a fixture sha8 | none automatic | doctor surfaces a paste-ready enable hint | PROPOSED-SRC-34:97–219 | fixture-scoped; no interventional design |
| PROPOSED-RTE-27 | content crossing 5 named boundaries (markdown/code pre-persist, chat, expansion, tool input) | external provider classifier | implemented, zero providers registered by default |
inline await at hook points | provider-internal verdict, explicitly ignored (runGuardrails returns void) |
no implemented force by design — documented hard invariant: observe-only, fail-open, no verdict persistence | none | none | none | PROPOSED-SRC-30:15–33, 114–137 | a recorded-result-with-no-consumer case: GBrain does not even record it |
| — | support relation between OBJ-06 claims and their cited OBJ-05/OBJ-01 sources | — | no route found within boundary |
— | — | — | — | — | — | PROPOSED-SRC-25 full (regex fallback promotes any [slug]-shaped bracket to a citation); PROPOSED-SRC-24:185–220 |
M-08. Slug existence is checked only in persistCitations, i.e. only on --save; row_num existence is never checked; entailment is never checked |
| — | truth of OBJ-04 facts | — | no route found within boundary |
— | — | — | — | — | — | greps over src/core/facts/* |
decay (effectiveConfidence) is a freshness function, not a check — do not read a decayed confidence as a truth verdict |
3c. Disposition / acceptance routes (Required Return 5, acceptance)
| Route | Function | Arch. status | Evaluator | Criterion | Intended use & scope | Result | Force | Epistemic authority | Operational authority | Behavioral-authority path | Evidence anchor | Mismatch |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RTE-10 (accept half) | disposition/acceptance | doctrine only |
declared: human operator via gbrain takes propose --accept N |
none implemented | — | — | none | — | — | BAP-10 as declared | gbrain takes propose does not exist. src/commands/takes.ts dispatch (:566–574) has only search/add/update/supersede/resolve/scorecard/calibration/revisit/extract. Repo-wide rg take_proposals outside schema/migrate/tests hits only propose-takes.ts itself and KEY_FILES.md. The status column is written never and read never |
M-02 vs CLM-08 |
| PROPOSED-RTE-22 | disposition/acceptance | implemented |
human operator | operator's own judgement; --quality correct/incorrect/partial/unresolvable (+ optional --evidence, --value/--unit, --by) |
resolves one take; enters the Brier/accuracy denominators | resolved_quality + outcome tuple, consistency-checked (deriveResolutionTuple throws on --quality/--outcome disagreement; schema CHECK is defense-in-depth) |
binding — writes the canonical takes row and mirrors into the markdown fence | Licenses "the operator recorded this outcome," scoped to that take. Not an oracle claim | changes scorecard inputs → OBJ-10 | operator-invoked CLI only | PROPOSED-SRC-32 cmdResolve; PROPOSED-SRC-31:22–58 |
none |
| RTE-11 (auto-apply half) | disposition/acceptance | implemented, unreachable via the production path |
judge model | confidence ≥ 0.95 single, or 3/3 unanimous with min ≥0.85; unresolvable never auto-applies |
would resolve the take | engine.resolveTake |
none in production — autoResolve = opts.autoResolve ?? false, and the only production caller (cycle.ts:1930) passes {}. The documented config key cycle.grade_takes.auto_resolve.enabled is read nowhere in src/ and is not in src/core/config.ts's key list |
— | — | — | PROPOSED-SRC-20:395–396, 527–533; PROPOSED-SRC-23:1930; rg auto_resolve src/ |
M-09: doctrine says the operator "flips the flag once trust is earned"; the flag has no reader |
| RTE-18 | disposition/acceptance | implemented |
LLM/rule/qrels judge, median-of-3 | sel_score > best_score + 0.05 (strict; ties and sub-ε gains rejected) |
accepts a candidate SKILL.md version | accept/reject + per-task medians | binding on the version store | not a truth claim — see §3e | mutates SKILL.md (user-owned) or writes proposed.md (bundled) |
BAP-01 (skillpack → host agent prompt) | PROPOSED-SRC-35 validate-gate:118–128 | — |
| RTE-18b | operational admission | implemented |
code | bundled skill + no --allow-mutate-bundled → never mutate; in-place bundled mutation hard-refuses without a held-out set ≥ MIN_HELD_OUT_SIZE |
protects shipped skills | proposed.md, or throw | binding enforcement | none | blocks a write | BAP-10 | PROPOSED-SRC-35 bundled-skill-gate:62–100 | — |
3d. Retention / lifecycle-integration routes (Required Return 5, retention/integration — kept separate)
| Route | Function | Arch. status | Object | Content relation | Force | Notes |
|---|---|---|---|---|---|---|
| RTE-10 (write half) | retention (not integration) | implemented |
PROPOSED-OBJ-21 | no content change after generation | rows persist | Retained without acceptance; the queue is write-only at this revision |
| RTE-11 (cache write) | retention | implemented |
OBJ-09 | no content change | rows persist with applied=false |
Retained without acceptance and, by default, without any consumer |
| RTE-12 | retention + context | implemented |
OBJ-09-derived → OBJ-10 | non-ampliative reshaping (aggregation) then ampliative conjecture (LLM narrates patterns; second LLM emits bias tags) | writes calibration_profiles |
Two linked edges. The aggregation reads takes.resolved_* (i.e. PROPOSED-OBJ-22), not take_grade_cache — so with auto-resolve unreachable, the profile is built from human-recorded resolutions only |
| PROPOSED-RTE-29 | retention / lineage | implemented |
OBJ-05, PROPOSED-OBJ-22 | no content change | mirrors DB rows into the page's <!-- gbrain:takes:begin --> fence |
Makes the git repo self-describing; keeps the markdown system-of-record and DB in sync |
| PROPOSED-RTE-28 | retention → later reliance | implemented |
OBJ-06 → OBJ-01 | acquisition of the system's own output into its corpus | think --save writes synthesis/<slug>-<date> with type: synthesis, then persistCitations |
Circularity route. An unchecked ampliative synthesis becomes a retrievable page that later think calls can surface and cite. synthesisOk === false blocks empty/malformed persistence (#1698) — a non-emptiness guard, not a truth check |
| PROPOSED-RTE-23 | lifecycle-relevant read-back (pre-acceptance use, not integration) | implemented |
OBJ-11 → dream synthesize prompt |
no content change | top-5 findings by severity injected as an informational block with reconcile guidance; silent '' on any failure |
Advisory. Findings were never accepted; this is pre-acceptance operational use |
| PROPOSED-RTE-24 | disposition proposal (not disposition) | implemented |
OBJ-11 → PROPOSED-OBJ-23 | non-truth-apt policy/content update: renders an imperative | deterministic classifier + judge hint; never auto-applies (invariant pinned by an R1+R8 grep guard) | Only consolidate writes valid_until; the probe writes nothing to the brain |
| RTE-12 → BAP-08 | operational consumption | implemented, CLI-only |
OBJ-10 → think |
no content change | --with-calibration CLI flag; getLatestProfile ignores the published column while the writer always sets published=false |
M-06. The MCP think op exposes no calibration parameter, so the loop is unreachable for agent callers — M-10 |
| RTE-07 / RTE-08 | operational consumption | implemented |
OBJ-04 | no content change | _meta.brain_hot_memory push (30s cache) and recall pull |
BAP-12: advisory; client may ignore unknown _meta |
| RTE-16 / BAP-06 / BAP-07 | operational admission | implemented |
all | no content change | scope + localOnly + OperationContext.remote fail-closed; sourceScopeOpts SQL predicate; takesHoldersAllowList |
Binding enforcement. Purely operational — no epistemic license whatsoever; a claim that survives source isolation is not thereby warranted |
3e. Routes set aside as direct behavior/policy adaptation (Required Return, explicit flag)
These have no truth-apt object and no knowledge/warrant claim. They belong to the runtime account, not to this lens. Named so the orchestrator can route them:
| Route | Why set aside |
|---|---|
| RTE-18 / RTE-18b (SkillOpt) | Target is SKILL.md — a prescriptive instruction artifact. Its gate measures task performance (sel_score), not truth. A real acceptance transition with a named criterion exists, but what it accepts is a policy, not a claim. Flagged, not disposed here. |
| RTE-17 (skillpack install → host prompt) | Static shipped instruction material; per the packet's vocabulary this is retained state, not memory read-back. |
| RTE-19 (schema-pack activation) | Configuration changing parse/extract/route/cache-key behavior. No truth-apt object. |
| RTE-01, RTE-02, RTE-03 (job queue, subagent loop, cycle orchestration) | Control routes. no content change from an epistemic standpoint. |
| RTE-20 (audit JSONL → doctor) | Observability. Records events, asserts nothing about the world. |
| RTE-04 (hybrid retrieval) | Non-ampliative reshaping (ranking/selection) — it changes which truth-apt content reaches a consumer without changing content. Material to OBJ-06's warrant, but its internals are uninspected (see §1 missing evidence). |
| PROPOSED-RTE-27 (guardrails) | Observe-only by hard invariant; no verdict is consumed, persisted, or branched on. |
gbrain doctor / docs/GBRAIN_VERIFY.md |
Installation and schema verification. Despite the name "verify," the target is configuration and coverage, not content truth — inapplicable to this lens. |
4. Per-object lifecycle disposition (Required Return 4: architectural status separate from observed candidate state)
Global note: nothing was executed in this run. Therefore every observed candidate state below is no instance observed, and no implementation or doctrine anywhere in §3 upgrades that.
Ampliative truth-apt candidates
OBJ-05 (take row) — routes RTE-09, RTE-10, PROPOSED-RTE-21, RTE-11, PROPOSED-RTE-22, RTE-12, PROPOSED-RTE-29
| Phase | Routes | Architectural status | Observed candidate state | Evidence |
|---|---|---|---|---|
| observation/anomaly | RTE-06, RTE-15, RTE-10 | implemented (page prose / conversation turns are the input) |
no instance observed | PROPOSED-SRC-19:322–341 |
| conjecture | RTE-10, PROPOSED-RTE-21, RTE-09 | implemented (RTE-10 to a queue; PROPOSED-RTE-21 straight to canonical, double-gated off; RTE-09 is reshaping, not conjecture) |
no instance observed | PROPOSED-SRC-19, -39, -22 |
| derived consequence | — | no route found within boundary — nothing derives a testable consequence from a take; grading asks the judge to re-read the claim itself |
no instance observed | PROPOSED-SRC-20:52–77 |
| test/evidence | RTE-11 | route implemented; its evidence-retrieval input absent (placeholder string; production caller injects nothing) |
no instance observed | PROPOSED-SRC-20:296–305, :391, :439; PROPOSED-SRC-23:1930 |
| acceptance | RTE-10-accept: doctrine only (no takes propose command exists) · RTE-11-auto-apply: implemented but unreachable (config key has no reader) · PROPOSED-RTE-22: implemented (human takes resolve, criterion = operator judgement, intended use = enter the scorecard, scope = that take) |
as stated per sub-route | no instance observed | PROPOSED-SRC-32; PROPOSED-SRC-31 |
| lifecycle integration | RTE-12 (accepted resolutions → scorecard → OBJ-10 → think framing), PROPOSED-RTE-29 (fence mirror) |
implemented for the human-accepted path only; CLI-only at the think end |
no instance observed | PROPOSED-SRC-21; PROPOSED-SRC-33 |
| missing phase/evidence | Consequence derivation is absent as a route. Test is present as a route but empty of evidence. Retention (RTE-10 write, RTE-11 cache write) happens without acceptance — this is not lifecycle integration. |
PROPOSED-OBJ-21 (take proposal) — routes RTE-10
| Phase | Routes | Arch. status | Observed state | Evidence |
|---|---|---|---|---|
| observation/anomaly, conjecture | RTE-10 | implemented |
no instance observed | PROPOSED-SRC-19:377–415 |
| derived consequence, test/evidence | — | no route found within boundary |
no instance observed | — |
| acceptance | declared human gate | doctrine only |
no instance observed | M-02 |
| lifecycle integration | — | not reached as an architectural matter: with no acceptance route, integration cannot occur |
no instance observed | — |
| missing | An implemented reader, an accept command, and any writer of take_proposals.status |
OBJ-06 / OBJ-07 / OBJ-08 (synthesis answer, citations, gaps) — routes RTE-05, PROPOSED-RTE-28
| Phase | Routes | Arch. status | Observed state | Evidence |
|---|---|---|---|---|
| observation/anomaly | RTE-04 → RTE-05 gather | implemented (retrieval internals uninspected) |
no instance observed | PROPOSED-SRC-24:260–290 |
| conjecture | RTE-05 | implemented |
no instance observed | SRC-08 |
| derived consequence | — | no route found within boundary |
no instance observed | — |
| test/evidence | — | no route found within boundary for the support relation; only a non-emptiness guard (synthesisOk) and, on --save only, a slug-existence check |
no instance observed | PROPOSED-SRC-24:185–220, 533–540; PROPOSED-SRC-25:112–123 |
| acceptance | — | no route found within boundary — the answer is delivered to the user/agent with no evidence-consuming disposition |
no instance observed | — |
| lifecycle integration | PROPOSED-RTE-28 | not reached — --save is retention and later reuse without acceptance, explicitly not integration under the method's rule |
no instance observed | PROPOSED-SRC-24:527–572 |
| missing | Any implemented verifier that a cited (slug, row_num) exists in the prompt's evidence and supports the sentence it is attached to |
OBJ-09 (take verdict) — routes RTE-11, RTE-12
| Phase | Routes | Arch. status | Observed state | Evidence |
|---|---|---|---|---|
| conjecture | RTE-11 | implemented |
no instance observed | PROPOSED-SRC-20:310–340 |
| test/evidence | RTE-11 retriever | absent |
no instance observed | M-01 |
| acceptance | auto-apply | implemented but unreachable via production path |
no instance observed | M-09 |
| lifecycle integration | — | not reached: the cache row is retained; no implemented consumer reads it by default (only doctor's applied=true count and undo-wave's rollback) |
no instance observed | rg take_grade_cache src/ |
OBJ-10 (calibration profile) — routes RTE-12, BAP-08
| Phase | Routes | Arch. status | Observed state | Evidence |
|---|---|---|---|---|
| observation | getScorecard over resolved takes; cold-brain skip at <5 resolved |
implemented |
no instance observed | PROPOSED-SRC-21:247–259 |
| conjecture | pattern-statement LLM + bias-tag LLM | implemented |
no instance observed | PROPOSED-SRC-21:126–160 |
| test/evidence | voice gate (2 regeneration attempts, then hand-written template fallback) | implemented — but the gate's target is register/tone, not truth; a template fallback produces a statement that passed no content check |
no instance observed | PROPOSED-SRC-21:287–306 |
| acceptance | published column |
doctrine only in effect — always written false, never read |
no instance observed | M-06: PROPOSED-SRC-21:357 vs PROPOSED-SRC-33:50–68 |
| lifecycle integration | <calibration> block → think framing |
implemented, CLI-only |
no instance observed | M-10: PROPOSED-SRC-41 (think op params lack calibration) |
OBJ-11 (suspected contradiction) — routes RTE-13, PROPOSED-RTE-23, PROPOSED-RTE-24
| Phase | Routes | Arch. status | Observed state | Evidence |
|---|---|---|---|---|
| observation | retrieval pair sampling + date pre-filter | implemented |
no instance observed | PROPOSED-SRC-29:24–70 |
| conjecture + test/evidence | RTE-13 judge (linked rows — the judge both conjectures the conflict and is the only evaluator of it) | implemented |
no instance observed | PROPOSED-SRC-27 |
| acceptance | — | no route found within boundary — by design; NEVER auto-applies is a stated invariant |
no instance observed | PROPOSED-SRC-28:1–24 |
| lifecycle integration | PROPOSED-RTE-23 (synthesize prompt), find_contradictions MCP |
not reached — pre-acceptance advisory use |
no instance observed | PROPOSED-SRC-37:890–932 |
OBJ-04 (fact row), OBJ-01 (page), OBJ-20 (atom/concept page) — ampliative or mixed; conjecture implemented; derived-consequence, test, and acceptance all no route found within boundary; retention implemented; lifecycle integration not reached. For OBJ-04 the only post-write transformation is decay (freshness, not endorsement) and RTE-09 promotion (reshaping, not acceptance).
Non-ampliative truth-apt content
- OBJ-03 (typed edge) — routes RTE-14. Transformation: entailed derivation within a declared syntactic domain. Discovery lifecycle: not applicable. Warrant: carries the source page's warrant through a syntactic (not semantic) interpretation; the edge asserts the relation only as strongly as the page did. Limit: the regex domain's fidelity is uninspected.
- OBJ-01 imported pages — route RTE-15. Transformation: acquisition/import, source warrant preserved (git is the system of record; DB is derived). Limit: warrant of the original source is unknown and unrecorded — GBrain has no source-warrant field.
- OBJ-12, OBJ-13 — acquisition of execution records; lineage preserved for replay; no ampliation.
Indeterminate
- PROPOSED-OBJ-22 (resolution tuple) — when produced by the human path it is an operator assertion (acquisition of a human judgement, warrant = the operator's). When produced by auto-apply it would be ampliative. Classifications still possible: acquisition vs ampliative conjecture. Preserved lineage:
resolved_by+sourcefields distinguish them. Evidence needed to decide: an observed row.
Per-object no-candidate lines
No lifecycle record for OBJ-02: no candidate truth-apt output for this object; relevant direct-adaptation or update routes: RTE-04.No lifecycle record for OBJ-14: no candidate truth-apt output for this object; relevant direct-adaptation or update routes: RTE-18, RTE-17.No lifecycle record for OBJ-15: no candidate truth-apt output for this object; relevant direct-adaptation or update routes: RTE-17.No lifecycle record for OBJ-16: no candidate truth-apt output for this object; relevant direct-adaptation or update routes: RTE-19.No lifecycle record for OBJ-17: no candidate truth-apt output for this object; relevant direct-adaptation or update routes: RTE-01.No lifecycle record for OBJ-18: no candidate truth-apt output for this object; relevant direct-adaptation or update routes: RTE-20.No lifecycle record for OBJ-19: no candidate truth-apt output for this object; relevant direct-adaptation or update routes: RTE-04.No lifecycle record for PROPOSED-OBJ-23: no candidate truth-apt output for this object (it is an imperative); relevant direct-adaptation or update routes: PROPOSED-RTE-24.
5. Claims register and route comparison (Required Return 3)
Truth / scope / warrant fields per claim, plus the instruction's cross-layer comparison.
| ID | Claim (truth-apt content asserted) | Scope | Source anchor & layer | Doctrine support | Implemented routes | Observed-run | Causal | Conclusion status | Warrant this run can grant | Mismatch |
|---|---|---|---|---|---|---|---|---|---|---|
| CLM-01 | "Search gives you raw pages. GBrain gives you the answer" — synthesized, well-cited prose plus explicit gap analysis | the think product generally |
README.md:3,11,167 — doctrine/design + marketing |
strong | RTE-05 (+RTE-04) implemented |
none | none | implemented as a generation capability; claimed as a warrant capability |
Warrants "GBrain generates a synthesis with citation markers and a Gaps section." Does not warrant that the answer is well-cited, since no route checks the citation-support relation (M-08) | scope mismatch: "the answer" reads as a knowledge claim; the implementation is unchecked candidate generation |
| CLM-02 | takes stores attributed, typed, weighted, time-scoped claims; conflating takes and facts is a "category error"; facts→takes is one-way |
the two storage layers | docs/takes-vs-facts.md (whole) — doctrine/design |
strong | schema + RTE-09 one-way bridge implemented; PROPOSED-RTE-21 is a second entry to takes that skips the queue |
none | none | implemented for the schema and one-way direction |
Warrants the structural separation | none on directionality |
| CLM-03 | think mandates citing every substantive claim, explicit marking of weight<0.5/hunch, a Conflicts section, a Gaps section, and never instructing the user |
one think call |
src/core/think/prompt.ts:48–58 — implementation of a prompt |
strong | RTE-05, BAP-08 | none | none | implemented as instruction text; claimed as behavior |
Warrants "the model was told." Context presence is not activation — nothing in the boundary tests compliance | none in the text; the gap is between instruction and enforcement |
| CLM-04 | grade_takes "retrieves evidence and asks a judge model to verdict unresolved takes" |
the grading phase | trigger evidence; cycle.ts:63–66; KEY_FILES.md:421 — doctrine/design |
declared | judge call implemented; evidence retrieval absent |
none | none | partially absent |
Warrants only "a judge model was asked about the claim text." M-01 | Yes, material. defaultEvidenceRetriever returns a literal placeholder; the sole production caller injects no retriever. KEY_FILES.md states the false version as current behavior |
| CLM-05 | calibration_profile aggregates resolved verdicts into pattern statements, bias tags and a Brier score, fed back into the think prompt |
one holder, one source | trigger evidence; calibration-profile.ts:1–26; prompt.ts:88–96 — implementation + doctrine |
strong | RTE-12 implemented; feedback CLI-only |
none | none | implemented with two activation caveats |
Warrants the aggregation and the injection path on the CLI. Brier excludes partial and unresolvable from its denominator by design (takes-resolution.ts:78–89) — a real, documented scope limit |
M-06 (published inert), M-07 (grade_completion always 1.0), M-10 (no MCP path) |
| CLM-06 | eval-contradictions samples retrieval pairs and runs a query-conditioned LLM judge to surface conflicts |
sampled query set | trigger evidence; docs/contradictions.md; judge.ts — doctrine + implementation |
strong | RTE-13 implemented |
none (Wilson-CI numbers in the doc are illustrative) | none | implemented |
Warrants "a judge, on truncated inputs, classified these pairs." The Wilson CI and small_sample_note are honest sampling discipline. Judge is its own oracle — no labeled ground truth |
none |
| CLM-07 | The consolidate bridge adds "proper attribution, deduplication, and temporal reasoning"; cycle.ts says it "Sonnet-synthesize[s] one take per cluster" |
the promotion phase | docs/takes-vs-facts.md:55–66; cycle.ts:1861 — doctrine/design |
declared | implemented but materially different: claim text is the highest-confidence fact verbatim; holder hardcoded 'self', kind hardcoded 'fact'; dedup is an exact (page_id, claim, since_date) match; temporal reasoning = a valid_until chronological chain |
none | none | implemented with a doctrine mismatch |
Warrants "clustered facts were relabelled and promoted." Does not warrant attribution reasoning or synthesis | M-04. The code's own comment (consolidate.ts:9–12) concedes "v0.31 ships without LLM synthesis"; the phase-orchestrator comment and the user-facing doc were not updated |
| CLM-08 | propose_takes writes only to a review queue; "Operator opt-in via gbrain takes propose --accept N is the only path from queue to canonical fence"; "auto-accept is intentionally NOT a thing — user always reviews" |
the proposal queue | propose-takes.ts:20–23; cycle.ts:63 — doctrine/design |
strong | write half implemented; accept half absent |
none | none | first conjunct implemented; second conjunct absent |
Warrants "nothing auto-promotes." Does not warrant that a review path exists | M-02, material. Not a safety failure — a completeness failure. The safe half shipped; the acceptance half did not. Proposals accumulate with no disposition |
| CLM-09 | Auto-resolve is OFF by default; verdicts land applied=false in a "review-queue posture" pending operator trust |
grading disposition | grade-takes.ts:11–21 — doctrine/design |
strong | default-off implemented; the documented enabling config key has no reader; no review-queue surface exists |
none | none | implemented (off) + absent (the enable path and the queue surface) |
Warrants "no take is auto-resolved via the cycle at this revision" — a strictly stronger safety property than documented | M-09, M-05 |
| CLM-10 | First full extraction run: 100,720 takes from 28,256 pages, 6,239 holders, $361.49, 0.3% errors; cross-modal 6.8/10 with per-dimension scores | one 2026-05-10 production run | docs/takes-vs-facts.md:67–86 — reported operation |
reported | the extraction machinery is implemented |
not inspectable here | none | claimed |
Warrants nothing beyond "the maintainer reports this." The self-reported weak dimension (attribution 6.5, "holder/subject confusion was #1 issue") is a candid quality signal, not a verified one | none |
| CLM-11 | P@5 49.1%, R@5 97.9%, +31.4 P@5 over the graph-disabled variant and over BM25+vector RAG, on a 240-page Opus-generated corpus | that corpus | README.md:12 — reported operation; runs live in gbrain-evals, outside the boundary |
reported | RTE-14 + RTE-04 implemented |
not inspectable | not assessable — the "+31.4 vs graph-disabled variant" is described as an ablation contrast, but its design, sampling, and confounds are outside the boundary | claimed |
No component effect may be attributed from this run. A contrast is necessary but not sufficient for causal identification, and the design is not visible | none detectable here |
| CLM-12 | The contradiction probe "NEVER auto-applies"; only consolidate writes valid_until |
probe mutations | auto-supersession.ts:1–24; docs/contradictions.md:137–143,160–166 |
strong | implemented — classifier renders strings; a grep guard pins the invariant |
none | none | implemented |
Warrants the read-only posture of the probe | none |
| CLM-13 | Guardrails are observe-only, fail-open, non-persisting; zero registered by default | the 5 hook points | guardrails.ts:15–33 |
strong | implemented |
none | none | implemented |
Warrants "no guardrail verdict can block or alter GBrain behavior through this interface" | none — the doc is unusually precise about its own non-force |
| CLM-14 | The propose_takes extractor prompt is tuned; F1 0.952 train / 0.922 holdout, gap 0.03, validated via gbrain-evals cat15 |
the extractor prompt vs a synthetic hand-labeled corpus | propose-takes.ts:25–34, 58–84 — doctrine inside implementation |
declared | prompt implemented; the eval is outside the boundary |
not inspectable | none | claimed |
Warrants nothing about live extraction. The file's own later comment (:218–222) still calls the production prompt "a placeholder" — the file contradicts itself |
internal doctrine inconsistency |
| CLM-15 | gbrain eval takes-quality gates on pass = every dim mean ≥7 and every dim min ≥5; inconclusive when <2/3 models contribute |
one sampled corpus at one rubric epoch | docs/eval-takes-quality.md:87–89 |
strong | PROPOSED-RTE-25 implemented |
none | none | implemented |
Warrants a corpus-and-rubric-scoped quality statement, fingerprinted by 4 shas. Does not transfer to any individual take, and bundle success does not license a component effect | none |
6. Bounded conclusion (Required Returns 6, 7 folded in)
Findings that change the answer to the analysis question. Route-level verbs only; no system-wide grade.
What it retains, retrieves, reshapes, and uses. GBrain retains truth-apt content in five distinct stores with different producers and authorities: pages (git as system of record, DB derived), typed edges, hot facts, cold takes, and derived artifacts (verdicts, profiles, contradiction reports, synthesis pages). Retrieval (RTE-04) reshapes non-ampliatively; its internals are uninspected, which bounds every warrant statement about OBJ-06. Fact decay is a freshness function, not endorsement — a high effective confidence means "recent and the extractor was confident," never "checked."
What it acquires, and what happens to source warrant. RTE-15 preserves source warrant in the sense that git remains authoritative over the DB. But GBrain records no source-warrant field anywhere: an imported page, a hand-written page, and a think --save synthesis page are the same pages row modulo type. Consequently, when a synthesis page written by PROPOSED-RTE-28 is retrieved by a later think call, its status as unchecked model output is not carried with it. This is a lineage-degradation route, and it is implemented.
What it derives from warranted premises. Only RTE-14 (typed edges) and RTE-09 (facts→takes reshaping). RTE-14 is an entailed derivation within a syntactic domain and carries page warrant no further than the page had it. RTE-09 is non-ampliative selection: it does not add attribution reasoning, contrary to CLM-07.
What it conjectures. RTE-05 (think answers, citations, gaps), RTE-06 (facts), RTE-10 and PROPOSED-RTE-21 (takes), RTE-11 (verdicts), RTE-12 (calibration narratives), RTE-13 (contradiction findings), PROPOSED-RTE-30 (atoms/concepts). All are ampliative. Novelty, fluency, and plausibility establish candidate generation only.
What it tests. Three genuine check routes exist, and they check three different things, none of which is "is this claim true":
- RTE-13 checks pairwise consistency relative to a query, on truncated inputs, with an LLM as its own oracle and no labeled ground truth. Advisory force only.
- PROPOSED-RTE-25 and PROPOSED-RTE-26 check aggregate quality against rubrics and fixtures, with real fingerprinting discipline. Corpus- and fixture-scoped. Bundle success here licenses nothing about any individual take or answer.
- RTE-11 is architecturally a per-claim test, and it is the one that matters most for the system's warrant story — and at this revision it consumes no evidence. The retriever is a placeholder that hands the judge the take's own claim text; the sole production caller injects no replacement. A verdict from RTE-11 is a model's opinion about a sentence, not a hindsight test against outcomes.
What it accepts. Exactly one acceptance transition over truth-apt content is implemented and reachable: PROPOSED-RTE-22, the human gbrain takes resolve — evaluator: the operator; criterion: the operator's judgement expressed as --quality, with a consistency check that refuses contradictory input; intended use: enter the Brier/accuracy denominators; scope: that one take; operational authority: writes the canonical row and mirrors it to markdown. Every other declared acceptance is either doctrine only (RTE-10's gbrain takes propose, which does not exist) or implemented-but-unreachable (RTE-11's auto-apply, whose documented config key has no reader). think answers, facts, gaps, atoms, concept pages, and contradiction findings have no acceptance route at all.
What it integrates after acceptance. Only the human-accepted resolutions, via RTE-12 into the calibration profile and thence — on the CLI only — into think's question framing. Everything else the system does with candidates is retention or pre-acceptance operational use: the proposal queue, the verdict cache, the contradiction block in the synthesize prompt, --saved syntheses, _meta.brain_hot_memory injection. None of that is lifecycle integration, and the useful thing to say about GBrain's design here is that its own doctrine mostly agrees: propose_takes deliberately refuses to write canonical takes, the probe deliberately refuses to mutate, guardrails deliberately refuse to enforce.
Three authorities, kept separate.
- Behavioral (BAP-01…BAP-12, per packet): the skillpack, SOUL/HEARTBEAT files, system prompts,
THINK_SYSTEM_PROMPT_BASE, and_meta.brain_hot_memoryare advisory — the model may deviate, and no route in the boundary detects deviation. Tool allowlists, MCP scope/localOnly, source isolation, and worker rate/quiet-hour leases are binding enforcement. BAP-09 is the interesting hybrid:<take>-as-DATA framing is advisory, whileINJECTION_PATTERNSis partial code enforcement whose own docstring declines to claim bulletproofing. - Epistemic: licensed content is narrow. RTE-13 licenses "a judge flagged this pair"; PROPOSED-RTE-25 licenses "this sampled corpus scored thus at this rubric epoch"; PROPOSED-RTE-22 licenses "the operator recorded this outcome." No route in the boundary licenses reliance on a
thinkanswer, a fact, a gap statement, or a take. - Operational: MCP scope gating,
remotefail-closed trust,sourceScopeOptsSQL predicates, the takes-holder allowlist, budget caps, the bundled-skill held-out refusal, and the twotakes.bootstrap_*consent gates all permit or block behavior. None of them confers epistemic warrant. Surviving source isolation is not evidence of truth, and operational continuation of the dream cycle is not warrant for what it wrote.
Direct behavior/policy adaptation without a truth-apt route (set aside for the runtime lens, named in §3e): SkillOpt's optimize→gate→accept loop, skillpack install, schema-pack activation, job/subagent/cycle control, audit-to-doctor, and the guardrail seams. SkillOpt is worth the orchestrator's attention because it is the only place in the repository where a real evidence-consuming acceptance gate with a named margin criterion (> best + 0.05, median-of-3, held-out required for bundled in-place mutation) is wired end to end — but what it accepts is a prescriptive artifact, not a claim.
Claims that remain unsupported here for want of evidence. CLM-10, CLM-11, CLM-14, CLM-15's live application, and every behavioral claim about prompt compliance (CLM-03) remain claimed — implementation, run, or causal evidence is missing and is located outside the frozen boundary. No causal attribution of any kind is licensed by this run: nothing was executed, and no interventional comparison was inspected.
Nine mismatch markers (M-01 evidence retrieval absent; M-02 accept path absent; M-03 kind-enum coercion; M-04 consolidate not synthesized; M-05 verdicts unconsumed; M-06 published inert; M-07 grade_completion always 1.0; M-08 citations unverified; M-09 auto-resolve key unread; M-10 calibration MCP-unreachable) are recorded above with anchors. Three of them (M-01, M-02, M-04) are places where a reference doc states as current behavior something the code does not do — which matters here because CLAUDE.md designates KEY_FILES.md as the current-state reference an agent should trust.
Scoping guard. Every absence above is scoped to rg over src/ excluding tests, plus the files listed in §7. src/core/operations.ts (4,751 lines) and src/core/search/hybrid.ts (1,870 lines) were not line-read, so none of these absences should be expanded into a claim that no informal or unobserved route exists.
7. Files read inside the frozen checkout (all reads reportable for central registration)
Full-file reads: docs/takes-vs-facts.md; docs/contradictions.md; docs/eval-takes-quality.md; CLAUDE.md; src/core/think/prompt.ts; src/core/think/cite-render.ts; src/core/think/sanitize.ts; src/core/search/evidence.ts; src/core/cycle/propose-takes.ts; src/core/cycle/grade-takes.ts; src/core/cycle/calibration-profile.ts; src/core/cycle/phases/consolidate.ts; src/core/cycle/nightly-quality-probe.ts; src/core/guardrails.ts; src/core/takes-resolution.ts; src/core/facts/decay.ts; src/core/eval-contradictions/judge.ts; src/core/eval-contradictions/auto-supersession.ts; src/core/skillopt/validate-gate.ts; src/core/skillopt/bundled-skill-gate.ts.
Partial reads: src/core/cycle.ts (57–175, 1860–1990); src/core/think/index.ts (185–220, 270–330, 380–600); src/core/cycle/synthesize.ts (1–70, 890–945); src/core/cycle/synthesize-concepts.ts (1–45); src/core/cycle/extract-atoms.ts (1–40); src/core/extract-takes-from-pages.ts (1–80); src/core/skillopt/score.ts (1–60); src/core/cross-modal-eval/runner.ts (1–50); src/commands/calibration.ts (40–80); src/commands/takes.ts (cmdResolve + dispatch 344–580); src/core/operations.ts (think, get_calibration_profile, find_contradictions definitions); README.md (1–60 + grep); docs/GBRAIN_VERIFY.md (headings only).
Grep-only (matched lines seen, files not read): src/cli.ts; src/schema.sql; src/core/migrate.ts; src/core/pglite-schema.ts; src/core/schema-embedded.ts; src/core/config.ts; src/commands/doctor.ts; src/commands/serve-http.ts; src/core/calibration/gstack-coupling.ts; docs/architecture/KEY_FILES.md; docs/architecture/lens-packs.md; docs/architecture/calibration-quality-gate-spec.md; skills/conventions/calibration.md; CHANGELOG.md; test/propose-takes.test.ts (filenames only, not content).
No file was modified; no git state was changed; no GBrain command was executed.