SDOB INMOVE LAB · v0.1
STAGE 2 · GO DEFAULT GitHub KO
Surprise-Driven Organic Brain Jeju · Industrial Movement

Attention is computed.
Never listed.

SDOB commits a forecast first, scores surprise (z) against external anchors, and computes attention from that surprise. The LLM is a proposer with no execute rights. Outbound effects run only through allowlisted adapters after an exact-bound gate.

01 // About

A plastic model on fixed computational physics.

SDOB is not a pure brain. Anchors are the SSOT, the surprise ledger is the control signal, and the LLM proposes under that signal. The documents existed before the code. Regression tests outrank the spec.

In one paragraph

Before a consequential act, declare μ, σ, and a rationale. Declaration is a ledger append and cannot be edited later. When actuals arrive, z and a log score are recorded. Attention is computed from surprise, staleness, and stake. High-stake execution opens only when an exact action forecast already exists.

Why two names

The repo label is Surprise-Driven Organic Belief. The system name in the master plan is Surprise-Driven Organic Brain. Belief is the scorable state. Brain is the organ that organizes attention from it. Both are accurate. Neither is a slogan.

NotA chatbot. LLM output is JSON. It has no file, shell, or network capability of its own.
NotA live trading bot. This repository has no KRX panel or live sensor. Reality is not scored before a value arrives.
NotA reward maximizer. Control is prediction error plus stake-weighted surprise, not pure reward.
NotA calendar gate. trigger_met is an evidence manifest. Empty fixture ledgers stay unmet.
02 // Physics

Metaphors that sit on disk.

The control plane is a deterministic core. The execution plane is an LLM proposer plus allowlisted adapters. sdob/core never touches clock, filesystem, random, or network. now is always an argument.

ROM

Immutable truth · humans write

Code only reads. Runtime must not write data/anchors/.

CMOS

Quasi-persistent config

data/cmos.json, data/subjects.json. Human-approved revisions only; the change itself is a forecast.

Ledger

Immutable event log

Append-only JSONL with a seq/hash chain. No edit or delete. To declare is to append.

RAM

Workspace

data/ram/state.json. Disposable. Rebuild from ledger replay. A cache, not SSOT.

CPU

Hybrid

Deterministic core plus an LLM coprocessor. Zero runtime dependencies. Dev dependency: pytest.

Human

Guardian

Writes ROM, approves CMOS, signs checkpoints. Private keys stay outside the repo.

Nine architecture invariants

Tests outrank code. Silent drift is forbidden. Ambiguity becomes the simplest deterministic reading, recorded in docs/DEVIATIONS.md.

01

The ledger is append-only. Complete lines are never removed. Guardian recovery may drop only a trailing fragment.

02

The core does no external I/O. Callers pass observations and now.

03

Time is an argument. No wall-clock inside sdob/core.

04

Gate tokens bind exactly to action_id, payload digest, forecast, and policy revision.

05

RAM is a ledger projection. Delete it and the same inputs replay the same state.

06

LLM output is data (JSON). It is never eval’d as code.

07

Outbound effects require an allowlisted adapter and a durable action_started.

08

Same input, ledger, and now imply the same focus and decision meaning.

09

A tick settles observations before computing expiry. At the grace boundary, observation wins.

# scoring — |z| is attention, raw log score is skill
σ_raw       = max(σ_declared, subject.sigma_floor)
σ_effective = max(σ_raw × sigma_multiplier, subject.sigma_floor)
z           = (actual − μ) / σ
surprise    = |z_effective|
log_score   = 0.5·ln(2πσ²) + 0.5·((actual−μ)/σ)²
03 // Implementation

Documents first. Tests stronger than documents.

Master plan v0.4 (2026-08-20) froze a scratch implementation: zero lines of prior core. Agents copied guide-code golden vectors byte-for-byte, then opened one phase at a time. Rank: regression tests → implementation-spec → guide-code → master-plan.

Phase 0 · Core

Types, events, ledger, engine, scoring

Canonical JSON sdob-json-v1, hash chain, reducer, predict/realize/expire. Golden vectors G-A–G-E. Synthetic scenarios lock overconfidence detection, attention rise, and blinds.

Phase 1 · Control

The tick loop and OrganicAgent

boot → run_once. N-tick simulation with no core I/O. Replay after RAM delete is identical. Fixtures live under data/.

Phase 2 · Execution

ExactActionGate

Untrusted JSON → payload risk → exact action forecast → durable action_started. High-stake stays closed without an LLM-origin forecast. Dummy covers monitor/simulation only.

Phase 3 · Plasticity

RevisionService · CMOS multipliers

Structure changes are ledger events. No writes to CMOS files; in-memory snapshots. Multipliers apply on the next holdout window against a frozen counterfactual.

Phase 4 · MCP

stdio as the product loop; public bind is TLS+auth

Eight public tools for Cursor/Claude. submit_observation is not on the LLM list. Naked 0.0.0.0 is rejected.

Stage 2 · Go default

Operator CLI is Go; Stage 1 is explicit

Default tick / live / run / observe / query / mcp / checkpoint are Go. HMAC rematerialize is --authority python. Stage 1 CLI is not deleted. Four quiet weeks on a calendar are not a gate.

04 // Use

Write what you will get right, before you speak.

SDOB is not “a smarter model.” It is a control plane that is hard to bypass. Other agents, operators, and research loops call a shared surprise/attention service.

USE 01

Agent MCP coprocessor

Attaches over stdio to Cursor and Claude. The model sees predict and get_*. Actuals come from authenticated anchor adapters.

USE 02

Forced prediction before high-stake acts

The gate does not accept “some pending forecast on this subject.” It demands an exact action forecast. Another action’s forecast cannot be reused.

USE 03

Computed attention

Nobody maintains a priority list. Surprise EMA, staleness (normalized by anchor cadence), stake, hysteresis, and blinds produce focus.

USE 04

Calibration watch

Overconfidence (σ declared too small) shows up as σ_ratio. Raw log score is proposer skill; effective score is system quality. Do not average them across units.

USE 05

Session forced-ask — brainette

A miniature of SDOB Forced Prediction. Open uncertainty forces the next task so a session cannot die into idle. It is not a free-form question generator.

USE 06

Human projection

sdob graphify exports Obsidian RAM. Graphify-Labs is an optional operator tool, not a runtime dependency.

USE 07

Research harness

Hybrid control, proper scoring, and PIT calibration on reproducible fixtures. Schema changes have to survive golden vectors.

USE 08

Future anchors (not in this repo)

The design example is an external fix such as anchor.reality.krx_close. Until a sensor exists, only fixture units auto-settle.

USE 09

Shared ledger across agents

Every event and query carries namespace and principal_id. Tenant attention is not mixed. External agents request settlement; they do not inject actuals.

05 // Examples

One local loop.

Python 3.11+. pip install pytest is the only install. --work is required; . is rejected. Commands below use fixture actual=0.0. They are not live sensors.

Monitor → action → settle → checkpoint

# monitor → action → fixture settle (actual=0.0) → checkpoint → graphify
python -m sdob live --data data --work /tmp/sdob \
  --now 2026-08-20T00:00:00.000000Z --deterministic --guardian-key-hex 00

Advance time across N ticks

python -m sdob run --data data --work /tmp/sdob \
  --now 2026-08-20T00:00:00.000000Z --deterministic --ticks 3 --step-seconds 86401

Leave a forecast, then ask attention

python -m sdob boot --data data --work /tmp/sdob --now 2026-08-20T00:00:00.000000Z --deterministic
python -m sdob observe --data data --work /tmp/sdob --now 2026-08-20T00:00:00.000000Z --deterministic --value 2.0
python -m sdob query get_attention --data data --work /tmp/sdob --deterministic --now 2026-08-21T00:00:01.000000Z
python -m sdob query get_calibration --data data --work /tmp/sdob --deterministic --subject subject.example
python -m sdob ledger-verify --data data --work /tmp/sdob

stdio MCP for Cursor / Claude

# create /tmp/sdob with live first. Do not pass --now to MCP (wall-clock).
# predict with the same --now as live is ts_regression.
python -m sdob mcp --data data --work /tmp/sdob --public --deterministic

Eight public tools. Sensor submit is not listed for the LLM.

predict request_settlement get_attention get_calibration get_blinds get_belief get_anchors get_integrity
06 // Stack

Zero runtime dependencies. The math fits the standard library.

Python 3.11+

sdob/core uses dataclasses, json, math, datetime. No numpy, no pydantic. The small surface is the point: a later port can map 1:1.

Go operator path

Scoring, reduce, engine, ledger, gate, tick, MCP, and the agent loop are locked binaries. --impl python is explicit Stage 1.

Files, not a database

JSONL ledger plus JSON config. No DB. An append-only file is the most honest ledger at this scale.

07 // Repository

Code, norms, and recorded deviations in one place.

github.com/deximple/SDOB

Currently a private research repository. Read order: docs/guide-code-v0.1.mddocs/implementation-spec-v0.1.mddocs/master-plan-v0.4.md. Known interpretations D-001–D-049 live in docs/DEVIATIONS.md.

Open GitHub
08 // Honesty

Do not claim a stronger guarantee than you have.

v0.x enforcement is discipline plus tests. Bypass-proof isolation is the Stage 2 three-principal split. This page is an introduction, not a certificate of completion.

Present

Deterministic core, JSONL ledger, golden vectors, ExactActionGate, stdio MCP, Go default CLI, guardian HMAC/ed25519 tools, Graphify RAM export, brainette.

Not yet / not claimed

Public-internet MCP without TLS+auth, trigger_met=true on an empty fixture, KRX live sensors in this repo, live capital wiring, POSIX uid proof by calendar date.