ocbrain v0.4.0 — Learning Quality
ocbrain v0.4.0 — Learning Quality
The dataset is the product, retrieval feedback is the flywheel, and an evaluated
personal model is the destination. v0.4.0 makes those statements enforceable
instead of aspirational.
Retrieval now records the query, runtime, session, and complete served-id set.
Explicit feedback remains the preferred signal; a conservative same-session or
exact-id rule can infer an outcome without pretending it was human feedback.
Repo-scoped source retrieval demotes catalog stubs, ranks explanatory sections
instead of orphan headings, redacts returned text, rejects probable injection,
and attaches a source hash. The private, byte-frozen 100-case benchmark covers
Codex, ChatGPT, Claude Code, and OpenClaw, including negative and injection
probes.
The MCP contract is safe across current provider styles: optional inputs are
required-but-nullable, objects reject unknown keys, and explicit nulls are
stripped once at dispatch. An OpenAI-family caller can now say “unused” instead
of inventing a plausible repo, scope, flag, or limit.
The corpus has a real weights-versus-memory boundary. Every row is classified
as train_voice, train_judgment, train_skill, retrieval_only, or
exclude; unverified persona authors and injection-flagged rows cannot cross
the training boundary. dataset-pack-select creates a deterministic bounded
candidate pool, local grading targets only that pool, and
dataset-pack-finalize keeps a deterministic passing pack. Pilot preparation
refuses to train unless 100% of the final pack has a local grade and the
passing pack contains at least 1,000 skill, 300 authentic voice, and 200
judgment examples. One hundred separately graded voice rows supply the expanded
evaluation without consuming the training minimum. The original twenty
evaluations remain a byte-for-byte sentinel, and the expanded protocol supports
blind base/tuned/Jonathan/frontier comparison.
The prepared training command remains deliberately unexecuted until a human
audits a deterministic stratified 10% of the final three-class pack. Local
grading decides eligibility; it does not manufacture human approval.
The local judge gate uses a separate human label file with named provenance.
Its rubric now preserves the operator's preference for compact editable answers,
requires a useful reason where it matters, rewards quantified uncertainty
without fake precision, and rejects fictional claims whose assumptions are not
made explicit. Human labels and the 90% gate are immutable inputs; the grader is
fixed when it disagrees.
Reliability is tighter too. Dataset miners prepare rows without owning SQLite's
single-writer slot, then commit ordered batches of at most 50 operations or two
seconds. Lock failures and hosted-judge timeouts retry only inside the existing
stage deadline. Stallcheck pages partial/failed/stale runs and judge failure
streaks, and an optional daily pager canary tests the notification path. A
quarantined row can now be released only by an explicitly human actor.
docs/CONTRACT.md is canonical: routine knowledge compilation is autonomous;
ocbrain never executes agent work; and human authority is required for scope
widening, quarantine release, destructive action, and unapproved external
egress.
Dated verification snapshot
On 2026-07-10, the unchanged frozen 100-case retrieval file reached 100/100
top-five relevance on the default local brain. A 1.9 GB online
verification copy also reached 100/100 top-five relevance and 99/100 overall;
the sole miss was one cold query at 1.695 seconds against a 1.5-second latency
budget, not relevance, citation, or scope. Citation and privacy-scope checks
were 100% in both runs.
The dated post-migration instrumented cohort has 21 outcomes for 22 interactive
retrievals (95.5% coverage), above the 70% flywheel gate. This deliberately
excludes background excerpt rendering and does not relabel legacy served rows
to make the historical percentage look better.
The dated copy classified 53,809 rows: 5,477 train_skill, 1,162
train_voice, 935 train_judgment, 5,238 retrieval_only, and 40,997
exclude. Those are raw boundary counts, not a claim that the pilot-v3 pack is
already good enough to train. The deterministic candidate pool contains 2,000
skill, 700 voice, and 400 judgment rows. Voice and judgment are oversampled so
the unchanged local threshold can still produce an exact final training pack
of 1,000 skill, 300 voice, and 200 judgment rows plus 100 separately held-out
voice evaluations; local grading and that corpus gate remain mechanically
visible.
The final live pack cleared that gate exactly: 1,000 skill, 300 voice, and 200
judgment rows, all locally graded and all at or above 0.8. Pilot v3 was prepared
with 100 held-out evaluations, while the original 20-case sentinel remained
byte-for-byte identical. Its manifest still records training_started=false;
the stratified 10% human audit is the next authorization gate.
The local blind judge passed the unchanged eight human labels 8/8 with
gemma4:31b at the fixed 90% gate. The final source suite passed 524 tests.
No corpus text, runtime path, credential, identity id, human response, private
benchmark case, prompt, reference, rating, database, local config, model weight,
or adapter is part of this release.