v0.43.0 - Entity truth ledger, outcome-aware dream, foresight
Open Second Brain v0.43.0 - Entity truth ledger, outcome-aware dream, foresight
The Brain now knows what is true about an entity RIGHT NOW and learns from what actually happened downstream: an append-only claim ledger folds extracted facts into addressable per-entity aspect slots with superseded history and provenance, contradictions inside the conflict window materialize as ask_user findings instead of silently coexisting, merges can no longer collapse two people's claims into one, quantitative questions are answered by exact-match aggregation that nearby numbers cannot pollute, two agents independently converging on one entity fire a push-mode trigger, apply-evidence carries a downstream outcome that stages regression findings against rules that look confirmed but hurt, failed approaches persist as FTS-recallable dead-ends, inbox signals rank by embedding novelty with zero provider calls, the weekly synthesis nominates the most-developable note of the window, and the foresight fold projects what comes due next - the Brain's first forward-looking surface.
What ships
| Capability | Surface |
|---|---|
Entity claim ledger: sharded append-only JSONL, replayable fold, current value + superseded history per (entity, aspect) slot |
Brain/truth/, o2b brain truth ingest|slots|sweep, MCP brain_truth |
Temporal-structural conflict detection: two values, one slot, 30d window, independent sources, resolution always ask_user |
o2b brain truth conflicts |
Exact-match quantity aggregation: totals sum only exact (entity, action, unit) tuples |
o2b brain truth aggregate, quantity fact family |
| Atomic-fact decomposition: deterministic markdown-structure splitting with an abbreviation guard, optional ledger ingest | o2b brain facts decompose [--ingest] |
| Name-aware merge guard + entity-contamination check | o2b brain merge (entity-guard), deep-synthesis contaminated |
Cross-agent collision detection: push-mode agent_collision triggers with cooldown dedup |
trigger queue, o2b brain truth collisions |
Outcome-tied apply-evidence: success|failure|unknown staging outcome_regressions with a deterministic 0.8 confidence penalty |
o2b brain apply-evidence --outcome, MCP brain_apply_evidence |
| Dead-end registry: negative knowledge as markdown, bounded with archive-on-overflow, FTS-recallable | Brain/dead-ends/, o2b brain dead-end, MCP brain_dead_ends |
| Surprisal novelty sampling over the existing sqlite-vec index | brain_review_candidates.signal_novelty |
| Weekly top-source nomination + foresight projection (recurrence cadences, open commitments, open questions) | weekly synthesis topSource, o2b brain foresight [--write], MCP brain_foresight |
Process wins
- Recall gets a current-truth surface it can trust: one addressable slot answers "what is true now" with the full superseded lineage behind it.
- Nothing auto-resolves: conflicts stage
ask_user, regressions stage a penalty, retirement still walks the existing gates - the operator stays the judge. - Negative knowledge compounds: "avoid X" surfaces beside "prefer Y" with zero search changes because dead-ends are plain markdown.
- Knowledge stops being trapped in the agent that learned it: convergence fires while the work is still happening, not at the next manual diff.
- Bit-identical neutral defaults throughout: a vault without claims, outcomes, dead-ends, or embeddings ranks, dreams, and reports exactly as v0.42.0 - pinned by tests.
Notes
- Suite: 3973 tests pass (510 files), typecheck clean, oxlint baseline preserved, python plugin suite 60/60.
- MCP tool count grows 66 -> 69 (
brain_truth,brain_dead_ends,brain_foresight), all with preview budgets. - The claim ledger follows the proven activation-store discipline: events are authority,
state.jsonis a recomputable cache, sweep is explicit and bounded. extractFacts' span dedup key now uses a\u0000escape instead of a literal NUL byte, sofact-extract.tsdiffs as text again.- Full changelog: https://github.com/itechmeat/open-second-brain/blob/main/CHANGELOG.md
