Errors caught in simulation
Errors caught: 57 · Fixed: 20 · Open: 37 · Nodes covered: 0 · Ticks observed: 0
What this proves
The simulation is a real-life tester of the database: running the world against RURAL exposes refused commits, divergent histories, admission limits and recovery failures. The simulation errors above were found by running the world against the database, not merely by reading code, as recorded in the cited run and test reports. Harness rows separately document tooling and acceptance failures; vision findings include observed gaps, not just engine errors. A refusal can be correct protection rather than a database bug. Fixtures test this inventory and are not evidence of live nodes.
Evidence and counting
No node folder supplied; zero coverage does not mean healthy nodes. Parsed log entries: 0. Counts are evidence occurrences within each source class, not unique root causes. A merge refusal contributes to both code and conflict counts; historical reports can describe the same defect. Fixed/open totals partition those occurrences. Repository findings and simulation classes count one documented observation each, harness rows one incident each, board groups failed attempts.
Ticks observed counts distinct recorded tick values per node, summed across nodes, without inferring intervening ticks. First/last use logged wall times, otherwise tick or packet locators; missing dates stay not recorded. Doctor counts use cached reports, or the last logged report when no file exists, and count only checks whose ok is not true. Identical node sequences count once; conflicting duplicates and malformed input fail. Fixed means cited repair evidence, not completion of every related promise. The server RecordLimit repair is bounded by a 20,000-tick run; vision finding 2 remains open because all its caps are not removed. Shrine repair is bounded evidence, not endless-development proof. L1 must review exact examples for private data and replace fixtures with the real morning pull before release.
Error inventory
| Category | Node | Count | First seen | Last seen | Example and source | Status | Database feature exercised |
|---|---|---|---|---|---|---|---|
| Vision finding 1 | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/VISION-AUDIT.md: finding 1: Nothing in play produces a second tribe: the split gate needs dispersion of at least 125 (split_distance 250..700 halved) and measured dispersion stays at 32 to 66, so factions, trade, raids, migration and ships are unreachable. A split rule that fires and a map large enough for two groups are needed. | open | simulation integration with database transactions |
| Vision finding 2 | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/VISION-AUDIT.md: finding 2: The world is capped and freezes: schemas cap bembe at 1024, words at 128, tribes at 32, structures at 160; tiles are 0..255; a long run hits capacity RecordLimit at tick 16,805 and every commit is refused afterwards. | open | admission and capacity |
| Vision finding 3 | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/VISION-AUDIT.md: finding 3: Development deadlocks: shrines need a pray skill that only a shrine grants; era 6 is reached by practice alone in 1,100 to 4,000 ticks and then nothing; the "let us out" petition is a storyline line, while the concept-born petition scheduler exists only in tests. | open | simulation integration with database transactions |
| Vision finding 4 | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/VISION-AUDIT.md: finding 4: The map is one picture: terrain is prerendered once; terraform, wonders and placed objects change physics but never the image; one island per seed. | open | simulation integration with database transactions |
| Vision finding 5 | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/VISION-AUDIT.md: finding 5: Nothing is distributed: no peers in a run, no discovery, VM 340 is empty. | open | simulation integration with database transactions |
| Vision finding 6 | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/VISION-AUDIT.md: finding 6: The database is used shallowly: 13 of 157 modules, ephemeral storage, hardcoded capability list, no CI gate. | open | simulation integration with database transactions |
| Vision finding 7 | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/VISION-AUDIT.md: finding 7: Logs: node logs are real and structured; collection across nodes and some failure paths are missing; the browser log is done. | open | simulation integration with database transactions |
| Harness: rural build guard (row 11) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 11 | 2026-10-12 | rural build guard | just test / project guard could not run in the sandbox | guard needed .git lock writes or resource limits | fixed (D-041) | | fixed | simulation integration with database transactions |
| Harness: rural engine (row 12) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 12 | 2026-10-12 | rural engine | Zig foundation test target fails with six src/engine errors (database.zig 1493/1532/1569, state.zig 1723/2133/2326) | pre-existing break on main 2e21db8 | open (engine owner) | | open | simulation integration with database transactions |
| Harness: migration (row 14) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 14 | 2026-10-12 | migration | place blocked on a JWT-shaped hit | legacy literal trips the secret scanner | open (D-025) | | open | simulation integration with database transactions |
| Harness: scheduler (row 17) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 17 | 2026-10-12 | scheduler | parked T-R007 retried in the agent's run slot | no persistent parked state | open | | open | simulation integration with database transactions |
| Harness: acceptance (row 20) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 20 | 2026-10-12 | acceptance | T-B010 predicate matched Zig's std/hash/murmur.zig in the build cache | predicate did not exclude cache paths | fixed | | fixed | simulation integration with database transactions |
| Harness: runtime tests (row 21) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 21 | 2026-10-12 | runtime tests | T-B102 and T-B105 failed a stale headless smite expectation | shared test expected the earlier refusal behaviour | fixed (T-B106) | | fixed | schema validation and atomic commit |
| Harness: tree (row 22) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 22 | 2026-10-12 | tree | T-B105 left bembe-headless.jsonl in the checkout root | headless run default output path | fixed (T-B106) | | fixed | simulation integration with database transactions |
| Harness: startup (row 23) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 23 | 2026-10-12 | startup | kernel restart orphaned the T-B004 process group | worker belonged to a dead kernel | fixed (D-031) | | fixed | simulation integration with database transactions |
| Harness: VM specs (row 26) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 26 | 2026-10-12 | VM specs | placeholder vmids 90xx collided with templates | invented infrastructure ids | fixed (D-043: 340-347) | | fixed | simulation integration with database transactions |
| Harness: runtime (row 38) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 38 | 2026-10-12 | runtime | T-B112 failed three legacy civilization, friendship and perf tests | real regression across T-B110 to T-B112 | open (T-B116/117) | | open | simulation integration with database transactions |
| Harness: Dokploy watch list (row 58) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 58 | 2026-10-12 | Dokploy watch list | a game-only push does not redeploy | watch list excludes the demo | open (Eris decision) | | open | simulation integration with database transactions |
| Harness: desktop launcher (row 72) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 72 | 2026-10-12 | desktop launcher | L1's launch wrote logs into demos/bembe/desktop/logs; next worker failed outside own | default data dir was the repo | fixed (T-V106: ~/.bembe) | | fixed | simulation integration with database transactions |
| Harness: project agent (row 73) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 73 | 2026-10-12 | project agent | 40+ ok rows, yet Eris saw the old game with a new name | done measured by predicates, not by the experience | rule: vision audit per milestone | | open | simulation integration with database transactions |
| Harness: project agent (row 74) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 74 | 2026-10-12 | project agent | five packets accepted or re-cut on a red shared suite | no rule stopped the line | rule: red suite stops the line; kernel gate | | open | simulation integration with database transactions |
| Harness: M2 (row 78) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 78 | 2026-10-12 | M2 | loopback sync and installer failed the shared predicate on a red suite | row 74 | fixed (T-B118, T-B119) | | fixed | simulation integration with database transactions |
| Harness: continuation (row 85) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 85 | 2026-10-12 | continuation | the old session was resumed on every run end and cut T-B119 | two bindings with a continue prompt | fixed | | fixed | simulation integration with database transactions |
| Harness: L1 CLI (row 86) | repository | 1 | 2026-10-12 | 2026-10-12 | docs/bembe/errors/gotchas-rural.md: | 86 | 2026-10-12 | L1 CLI | an unscoped halt killed the rural workers (T-W002, T-V110) | halt takes a scope flag | fixed | | fixed | simulation integration with database transactions |
| Harness: kernel ledger (row 88) | repository | 1 | 2026-10-13 | 2026-10-13 | docs/bembe/errors/gotchas-rural.md: | 88 | 2026-10-13 | kernel ledger | three Astra design packets refused 'pace: model-cap' | per-model capacity derived from the model's own usage | fixed (T-1152) | | fixed | admission and capacity |
| Harness: continuation (row 91) | repository | 1 | 2026-10-13 | 2026-10-13 | docs/bembe/errors/gotchas-rural.md: | 91 | 2026-10-13 | continuation | the agent was not resumed after two runs: 'vision: invalid promise' on its own vision.jsonl | file predated the kernel schema | fixed (L1 converted the file) | | fixed | schema validation and atomic commit |
| Harness: V1 (row 92) | repository | 1 | 2026-10-13 | 2026-10-13 | docs/bembe/errors/gotchas-rural.md: | 92 | 2026-10-13 | V1 | node packets failed the shared predicate; T-V102 wrote a doctor log into the checkout root | concurrent edits, default log path | accepted or superseded after the suite fix | | open | integrity |
| Harness: blockers (row 101) | repository | 1 | 2026-10-13 | 2026-10-13 | docs/bembe/errors/gotchas-rural.md: | 101 | 2026-10-13 | blockers | T-X014, T-X018, T-X038 (caps-check.mjs) and T-X074, T-X078 (b7-check.mjs) failed test -f predicates for files their goals never named | mis-cut predicate re-cut unchanged | rule: name the file in the goal or test what the worker produces | | open | simulation integration with database transactions |
| Board: suite failures | harness | 14 | packet T-B102 | packet T-X075 | .tejl/board.jsonl:50: {"id":"T-B102","s":"fail","d":{"demos/bembe/runtime/god.test.mjs":"3dae137c30e9c18649ac01804b4df26ffb477152f526e65dbceff421912426dd","demos/bembe/web/god.mjs":"c24c6ebcdf1fd377895d6cbaae8f0608dffcad32fcb59e398a0b1db2b7caf321","demos/bembe/web/minds/god.mjs":"0a8417bc82b09d85787a1e98ebc9b354fbc5c859ade4124fc57db2858d3c13d8","docs/SLICES.md":"b3ec28d330636d12caf8c31095108d4120a551a2485b0126b664b97b811856f3"},"ok":"101","n":"ok[1] exit 1: node --test demos/bembe/runtime/*.test.mjs; 4 changed; ok 2/3","u":{"in":39606,"out":3168,"cr":390912,"cw":0},"ms":100421} | open | simulation integration with database transactions |
| Board: outside-own strays | harness | 4 | packet T-B105 | packet T-X005 | .tejl/board.jsonl:51: {"id":"T-B105","s":"fail","d":{"bembe-headless.jsonl":"a773e7753aa874a209f71e17caac5a8ae5f9bd648d6572623c0423b6b66b8f02","demos/bembe/runtime/concepts.test.mjs":"865b5410b643ea7b33926e1a1b39a487bae51f9e9f9e44d1b4b49eaacad00b6f","demos/bembe/web/minds/concepts.mjs":"5b3d6a073c993e9aea5940dfdcda06ca0721e4ba6ec97d450f838dd92ef54fbb","demos/bembe/web/minds/lang.mjs":"c7969c3d646d9345aeeb470ee386226f8f5dbf46b5de1571a94683afc7399014","demos/bembe/web/minds/params.mjs":"c5a0790ab2cd3f87d4932ed792e71317fa7f3671f65bad811b749490138ebc2c","docs/SLICES.md":"764af6a5821946455a0fbb2ec40d3ddefd05182bcd485d6efabdb408f5104977"},"ok":"101","n":"outside own: bembe-headless.jsonl; 6 changed; ok 2/3","u":{"in":120485,"out":33519,"cr":2809600,"cw":0},"ms":821850} | open | simulation integration with database transactions |
| Simulation: RecordLimit freeze at tick 16,805 | repository | 1 | not recorded | not recorded | docs/bembe/errors/gotchas-rural.md: Simulation-level defects recorded elsewhere (the Errors page must count them from their sources): capacity RecordLimit freeze at tick 16,805 (docs/bembe/VISION-AUDIT.md finding 2; removed for the server kind by T-X010 and T-X019 step 1); docs/bembe/slices/T-X019.md: T-X019 evidence: zsh scripts/zig.sh build --build-file demos/bembe/build.zig test -j1 --prefix "$PWD/.zig-cache/b1/install" --cache-dir "$PWD/.zig-cache/b1/cache" -> exit 0, 14.126s, no stdout/stderr; zsh scripts/zig.sh build --build-file demos/bembe/build.zig -j1 --prefix "$PWD/.zig-cache/b1/install" --cache-dir "$PWD/.zig-cache/b1/cache" -> exit 0, 8.001s; cp .zig-cache/b1/web/bembe.wasm demos/bembe/web/bembe.wasm -> exit 0. test -f demos/bembe/web/bembe.wasm and test -s demos/bembe/web/bembe.wasm -> exit 0. node --test --test-concurrency=1 demos/bembe/runtime/*.test.mjs first run -> exit 1, 207.908s, tests 225/pass 224/fail 1; gate.test.mjs propagated nested doctor.test.mjs:179 (healthy != failing after 3-second disk-pressure deadline; nested tests 225/pass 224/fail 1). node demos/bembe/headless/run.mjs --seed b1-step1 --ticks 20000 --fast --log .zig-cache/b1/step1/run.jsonl first run -> timeout exit 124, 305.218s, 10624 recorded committed ticks/refusals 0, NOT acceptance; node demos/bembe/headless/run.mjs --seed b1-step1 --ticks 20000 --fast --log .zig-cache/b1/step1/run-final.jsonl fresh retry -> exit 0, 1061.929s, {"game":"BEMBE","ticks":20000,"U":0.987,"tick":20000,"head":20089,"alive":400,"words":32,"conceptsBorn":32,"tribes":1,"refusals":0,"petitions":0,"era":43,"interrupted":false}. Python JSONL validation -> PASS: 20000 rows, strictly contiguous committed ticks 1..20000, refusal count always 0; final alive=400/interrupted=false. node --test --test-concurrency=1 demos/bembe/runtime/*.test.mjs serial retry -> exit 0, 199.727s, tests 225/suites 0/pass 225/fail 0/cancelled 0/skipped 0/todo 0/duration_ms 199639.267459; nested gate passed. test -s docs/bembe/slices/T-X019.md -> exit 0. cat docs/bembe/slices/T-X019.md -> exit 0, this three-line changed/evidence/unresolved report. Test wrappers bound builds to 240s each, suite to 420s, first run to 300s and fresh run to 1200s; children use process groups and are terminated/reaped on timeout. zsh scripts/zig.sh test --dep rural -Mroot=.zig-cache/b1/version-gap/schema.zig -Mrural=src/root.zig --test-filter 'B1-A v2' --cache-dir "$PWD/.zig-cache/b1/cache" -femit-bin=.zig-cache/b1/version-gap/schema-tests -> exit 0, 2.214s, "B1-A: two-field shape accepted; v2 schema encode/decode and maintained compound lowering -> InvalidDefinition; OK; All 1 tests passed." Raw logs/fixture under root .zig-cache/b1/. This is a passing rejection reproduction, not v2 acceptance. shasum -a 256 demos/bembe/engine/schemas.zig demos/bembe/engine/service.zig demos/bembe/engine/tests.zig demos/bembe/build.zig demos/bembe/web/bembe.wasm -> respectively b126da9f221705588541de9549b507d104774ff9925fe9bde6c662edf7c10551, a3e8b855fd96d0b35e765355e356b031fc6501e6db6b358a80ff58c077cf7841, c648ae4062b548b15c975e3f03e7c8051d3b7e221a4be5ffd36958be05335107, 0f7b3de64219cbe9bc4872b01f39eb98d5b1841064734204c420503edf01a237, 64ff82160b83d5c3f9a4240ff21ac987c28ba32a700e48e66f7a44ed8729755b; built/source wasm hashes match. Owned git diff --check -> exit 0. | fixed | admission and capacity |
| Simulation: Shrine deadlock and era-6 plateau | repository | 1 | not recorded | not recorded | docs/bembe/errors/gotchas-rural.md: the shrine deadlock and the era-6 plateau (finding 3; fixed by T-X077); docs/bembe/slices/T-X077.md: evidence: node --test --test-concurrency=1 demos/bembe/runtime/b7-progress.test.mjs demos/bembe/runtime/tech.test.mjs demos/bembe/runtime/minds.test.mjs -> exit 0, output: "tests 29", "pass 29", "fail 0", "cancelled 0", "skipped 0", "todo 0", "durationms 25508.054375"; B7 progress 14/14 covers shrine bootstrap through actual planning/build/prayer jobs, H-1/H through era42, no baseline/skill-sum advance, capped XP credit, migration/rejected retry/restore, split/merge, item pressure, no transition word/tech insertion, retention and era9/42 concept birth. node --test --test-concurrency=1 demos/bembe/runtime/*.test.mjs -> exit 0, output: "tests 195", "pass 195", "fail 0", "cancelled 0", "skipped 0", "todo 0", "durationms 180642.374375"; "gate exit 0, duration 90.511 s", "renamed export rejected before runtime suite"; schema 4/4 including progress-free legacy checkpoint. Full suite executed via Python Popen with the exact glob expanded, 600s process-group deadline and TERM/KILL cleanup on timeout; completed normally. Core run: era13 at tick4731, final alive26, maxItems871, maxWords29; performance mean8.12ms/p9513.15ms. git diff --check -- demos/bembe/web/minds/tech.mjs demos/bembe/web/minds/ctx.mjs demos/bembe/web/minds/index.mjs demos/bembe/web/minds/factions.mjs demos/bembe/web/minds/progress.mjs demos/bembe/runtime/b7-progress.test.mjs demos/bembe/runtime/tech.test.mjs demos/bembe/runtime/minds.test.mjs demos/bembe/runtime/b7-schema.test.mjs demos/bembe/web/minds/concepts.mjs docs/bembe/slices/T-X077.md -> exit 0, no output. test -s docs/bembe/slices/T-X077.md -> exit 0, no output. cat docs/bembe/slices/T-X077.md -> exit 0, prints these three lines. Predicates finish within deadlines; nested gate builds via scripts/zig.sh with prefix/cache under root .zig-cache; test children exit. | fixed | simulation integration with database transactions |
| Simulation: Engine conflict key truncation | repository | 1 | not recorded | not recorded | docs/bembe/errors/gotchas-rural.md: the engine-side conflict key truncation (T-B017); docs/SLICES.md: - T-B017 changed: Merge refusals retain every full storage key that fits the 400-byte detail buffer, with an exact omitted-count suffix; rebuilt wasm and updated BEMBE debug fixtures. | fixed | three-way merge |
| Simulation: MERGE_CONFLICT full-key diagnostics | repository | 1 | not recorded | not recorded | docs/bembe/errors/gotchas-rural.md: MERGE_CONFLICT lines with full keys (docs/bembe/SCOUT-MERGE-ERROR.md; docs/bembe/SCOUT-MERGE-ERROR.md: Source trace; no code edits. Observed report: MERGE DREAM 5 (PLENTY): MERGE_CONFLICT: 13 CONFLICTING RECORD(S): UMERIC-KV/1/FOOD:T1 UMERIC-KV/1/STONE:T1 UMERIC-KV/1/WOOD:T1 MURMLINGS/M0_1. | open | three-way merge |
| Simulation: Browser head_conflict retries | repository | 1 | not recorded | not recorded | docs/bembe/errors/gotchas-rural.md: head_conflict retries in the browser log (T-B013); additional source evidence not present | open | optimistic concurrency |
| Simulation: UnknownField chronicle.origin | repository | 1 | not recorded | not recorded | docs/bembe/errors/gotchas-rural.md: the schema UnknownField refusal for chronicle.origin (T-V101 unresolved); docs/SLICES.md: T-V101 unresolved: esc for V1-NODES §1.4's literal chronicle.origin field: demos/bembe/engine/schemas.zig:73 forbids it (real POST returned schema: item 1: UnknownField); that file and the wasm rebuild are outside own. Fallback stores {text,origin} JSON in chronicle.text; receipts/log/inbox retain structured origin. Needs a schema-owning packet for the exact design shape. /doctor remains unknown pending T-V102; browser remains T-V105. Initial shell mutation was hook-denied (unknown-effect) and was replaced by apply_patch; repeated focused command was loop-denied, reporter-qualified runs passed. No dependencies, commit, push or deploy; unrelated changes preserved. | open | schema validation and atomic commit |
| Simulation: Word fidelity 110 > 100 at era 9 | repository | 1 | not recorded | not recorded | docs/bembe/errors/gotchas-rural.md: the word fidelity bound 110 > 100 at era 9 (T-X075); docs/bembe/slices/T-X077.md: changed: T-X077 / B7-B retains the existing reachable shrine gate, seeded activity recurrence, native names, genesis/lazy migration, lineage propagation and atomic budget-aware transitions; bounds all three composite/borrowed/salience-born fidelity initializers to 0..100; adds real-engine era9/42 salience-birth and checkpoint regression; uncanny fixture earns era2 through activity before testing low trust, retaining both glitch and whisper assertions. Legacy schema fixture already explicitly omits progress and still tests a real checkpoint. No dependencies/toolchain changes; unrelated work preserved. | fixed | simulation integration with database transactions |
| Simulation: ensureProgress undefined mid-edit | repository | 1 | not recorded | not recorded | docs/bembe/errors/gotchas-rural.md: the ensureProgress undefined mid-edit (T-X010 evidence); docs/SLICES.md: T-X010 unresolved: shared suite is red outside own: minds.test.mjs lines 173/183/245 reject word fidelity 110 (>100), line 237 lacks whisper; gate.test.mjs:55 propagates nested suite failure (second nested run 177/181). Concurrent simulation edits appeared during verification; first nested run also hit ensureProgress undefined in factions.mjs, fixed externally before second run. zsh scripts/zig.sh build test -j1 --prefix .zig-cache/b1-seam-full/zig-out --cache-dir .zig-cache/b1-seam-full/cache -> exit 1, six existing compile errors: database.zig:1493/1532 outdated transact arity, :1569 missing journal; state.zig:1723/2133/2326 missing error-union handling (packet attributed all six to database.zig). Unfiltered zsh scripts/zig.sh test src/ram.zig --cache-dir .zig-cache/b1-seam/cache -femit-bin=.zig-cache/b1-seam/ram-tests -> exit 1 on those three state errors. zsh scripts/zig.sh test src/ram.zig --test-filter 'state admission bounds' --test-filter 'full retained tables reject' --cache-dir .zig-cache/b1-seam/cache -femit-bin=.zig-cache/b1-seam/state-tests -> exit 0 but 0 tests, not evidence; adding --test-filter 'RAM ' to that command -> exit 1, new 3 pass, existing 2 fail ReceiptExpired because unchanged testRequest omits receipt_epoch. No existing tests repaired or failures masked. B1 caller/profile negotiation and freeze removal remain follow-up work; no dependencies/toolchain changes, commit, push or deploy. | fixed | simulation integration with database transactions |
| Simulation: Doctor corrupt-image restore | repository | 1 | not recorded | not recorded | docs/bembe/errors/gotchas-rural.md: the doctor's corrupt-image restore and refusal-storm restart (T-V102 tests); docs/SLICES.md: T-V102 evidence: node --test --test-concurrency=1 --test-reporter=dot demos/bembe/runtime/doctor.test.mjs exits 0 (10 dots); focused running-store/hard-disk/periodic tests pass 3/3 (5.42 s), final healthy/corrupt/all-invalid tests pass 3/3 (0.90 s); node --test --test-concurrency=1 --test-reporter=tap demos/bembe/runtime/*.test.mjs exits 1, 154/157 (79.18 s), doctor 10/10 and rotation pass. node demos/bembe/headless/cli.mjs doctor --json --store .zig-cache/v1/store exits 0, healthy with all 9 checks and version 0.0.44 (empty evidence store); short-run test store healthy, corrupt tick 4 restores tick 3 and restart resumes tick 3, automatic boot repair resumes tick 2; removed live logs recreated with report visible at /doctor and /hello, 20 refusals restart the real engine, hard disk freezes ticks while HTTP answers, lock prevents second writer. Syntax and owned git diff --check pass. | fixed | checkpoints and hash chain |
| Simulation: Doctor refusal-storm restart | repository | 1 | not recorded | not recorded | docs/bembe/errors/gotchas-rural.md: Simulation-level defects recorded elsewhere (the Errors page must count them from their sources): capacity RecordLimit freeze at tick 16,805 (docs/bembe/VISION-AUDIT.md finding 2; removed for the server kind by T-X010 and T-X019 step 1), the shrine deadlock and the era-6 plateau (finding 3; fixed by T-X077), the engine-side conflict key truncation (T-B017), MERGECONFLICT lines with full keys (docs/bembe/SCOUT-MERGE-ERROR.md, the seed's own example), headconflict retries in the browser log (T-B013), the schema UnknownField refusal for chronicle.origin (T-V101 unresolved), the word fidelity bound 110 > 100 at era 9 (T-X075), the ensureProgress undefined mid-edit (T-X010 evidence), the doctor's corrupt-image restore and refusal-storm restart (T-V102 tests), the update sha256 refusal (T-V103 tests).; docs/SLICES.md: T-V102 evidence: node --test --test-concurrency=1 --test-reporter=dot demos/bembe/runtime/doctor.test.mjs exits 0 (10 dots); focused running-store/hard-disk/periodic tests pass 3/3 (5.42 s), final healthy/corrupt/all-invalid tests pass 3/3 (0.90 s); node --test --test-concurrency=1 --test-reporter=tap demos/bembe/runtime/*.test.mjs exits 1, 154/157 (79.18 s), doctor 10/10 and rotation pass. node demos/bembe/headless/cli.mjs doctor --json --store .zig-cache/v1/store exits 0, healthy with all 9 checks and version 0.0.44 (empty evidence store); short-run test store healthy, corrupt tick 4 restores tick 3 and restart resumes tick 3, automatic boot repair resumes tick 2; removed live logs recreated with report visible at /doctor and /hello, 20 refusals restart the real engine, hard disk freezes ticks while HTTP answers, lock prevents second writer. Syntax and owned git diff --check pass. | fixed | integrity |
| Simulation: Update sha256 refusal | repository | 1 | not recorded | not recorded | docs/bembe/errors/gotchas-rural.md: the update sha256 refusal (T-V103 tests).; docs/SLICES.md: T-V103 evidence: node --test --test-concurrency=1 --test-reporter=spec demos/bembe/runtime/update.test.mjs exits 0, 5/5, 7.18 s; diagnostics: CLI update -> exit 3 restart needed, current=v-new previous=old, installed version=v-new; corrupt sha256 -> exit 6 unchanged; rollback -> old; 2 ticks -> ok:false, next start -> doctor.rollback exit 3, old release 10 ticks -> ok:true bad:[bad], bad fallback refused. Also tests oversized download, wrong VERSION/missing bin/escaping symlink exit 7, metadata exit 8, unsafe version exit 2, absent previous exit 10, BEMBE_STATE and three-release retention. node --test --test-concurrency=1 demos/bembe/runtime/*.test.mjs exits 1, 160/161 (88.44 s); final --test-reporter=dot run with fifth update scenario exits 1 with only the obsolete doctor.test.mjs:206 assertion. Owned git diff --check exits 0; all started test children are stopped and awaited. | fixed | integrity |
Proposals and gaps
Proposal: preserve public seed/tick artifacts for historical reports and add missing error classes without turning fixtures into observed world history.
Preview prompt for Proposals and gaps
Add one missing error class. Read docs/bembe/WIKI/README.md, docs/bembe/errors/gotchas-rural.md, docs/bembe/VISION-AUDIT.md and cited slices. Submit docs/bembe/WIKI/contrib/makers-missing-error.md. Return exactly one UTF-8 Markdown document, no enclosing code fence or commentary. Begin with --- delimited front matter in this exact order: title (nonempty JSON quoted string matching H1), section ("makers"), order (30), status (real|proposed|mixed), sources (nonempty JSON array of existing repository-relative spec paths), runs (JSON array of objects with exactly seed:string, ticks:nonnegative integer, log:repository-relative evidence path; [] without observations), summary (JSON quoted plain text, 20–40 words). Then # <title>, followed by ## Lore, ## Mechanism, ## Evidence, ## Proposals and gaps, in that order. Write 400–700 body words excluding front matter, headings, citations and comments. Under Evidence use exactly: | Category | Node | Count | First seen | Last seen | Example and source | Status | Database feature exercised | followed by |---|---|---|---|---|---|---|---| and one row. Count is a nonnegative integer, status exactly fixed or open, example an exact real log line or quote with file and locator; fixed requires repair slice and command output. Every behavioural lore claim must cite [run: seed="<seed>"; tick=<event tick>; log="<path>"; locator="<line or record key>"] matching runs or begin Proposal:. Never invent runs, quotes or receipts; fixed status requires verified repair evidence. Use a bemba, bembe and BEMBE correctly. Include a standalone continuation prompt repeating this output contract.