{"assessments":[],"deployments":[],"fuzz":[],"identity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"interpretation":"Records acceptance and evidence. Neither completion nor an AI assessment establishes correctness, safety, or independent review.","jobId":"0d68ff3b-01a8-4c84-91fa-13c9e8d9dcb0","kind":"shape:chain","nodes":[{"acceptedSubmissionHash":"a989c954c11bada5aaaa910933ba3fba03893a66a4a8e852b4557cfa4b7cd9b4","dependsOn":["implement_component","build_website"],"execution":{"network":false,"profile":"foundry","requires":[],"skillHash":"6b037a7b6601e883cf8a906c1520c0624817d42d8310b65c2f43679204608af3","skillId":"adversarial-review","tools":[]},"key":"adversarial_review","kind":"code","role":"review","skillHash":"6b037a7b6601e883cf8a906c1520c0624817d42d8310b65c2f43679204608af3","skillId":"adversarial-review","state":"accepted"},{"acceptedSubmissionHash":"6fbb64badf8038dc863101b4ad01ce622677e241663b9d8ca36d6cea5f55a4a6","dependsOn":["implement_component"],"execution":{"mustProduce":["dist/index.html"],"network":true,"optionalTools":["browser"],"profile":"none","requires":["network"],"skillHash":"a60bc8b42446c13d993341179fe13c712a5addb118fc532fb2d15e71f912efc8","skillId":"build-website","tools":[]},"key":"build_website","kind":"code","role":"implement","skillHash":"a60bc8b42446c13d993341179fe13c712a5addb118fc532fb2d15e71f912efc8","skillId":"build-website","state":"accepted"},{"acceptedSubmissionHash":"670f8b579f9cad5469de676f5fd0ff22baec4e4214da8fe193761f4f344abc0e","dependsOn":["implement_component","build_website"],"execution":{"network":true,"optionalTools":["browser"],"profile":"none","requires":["network"],"skillHash":"fd33b6741366d364a55a4c0ba2bc4f5d329cec0b62f27a83289dc5b30ab03575","skillId":"design-critic","tools":[]},"key":"design_critic","kind":"code","role":"review","skillHash":"fd33b6741366d364a55a4c0ba2bc4f5d329cec0b62f27a83289dc5b30ab03575","skillId":"design-critic","state":"accepted"},{"acceptedSubmissionHash":"8cae7416ca3092055be60df79dd959082f52c65f4223b86a6048071c89aec77b","dependsOn":[],"execution":{"network":true,"profile":"none","requires":["network"],"skillHash":"15deecb0f930dd3c37b4e551121fe447b9d43818640ca22223cf3c7951e0db98","skillId":"implement-component","tools":[]},"key":"implement_component","kind":"code","role":"implement","skillHash":"15deecb0f930dd3c37b4e551121fe447b9d43818640ca22223cf3c7951e0db98","skillId":"implement-component","state":"accepted"}],"objective":"STRATOKS PHASE 2A: Integrate a scientifically grounded, lightweight fruit-fly-inspired learning brain into the existing shared-world application. Deliver code, an inspectable demo and measured evidence. Art and IMD payments follow later.\n\nBASELINE\nImport this recovered source ZIP into your deliverable repository before editing:\nhttps://stratoks.2-31-126-178.sslip.io/handoff/stratoks-09af84d.zip\nSHA256: 8816bfda36545436f85d4ca0b13bd439be14fb3a6be285f25bd39f3edf8abd9e\nCommit: 09af84d67722e30c0cb0c096ab8a8189a3b03166.\nOld GitHub main lacks recovered fixes and is NOT the baseline. Verify checksum and inspect server/docs/LEARNING.md and docs/recovery/VALIDATION.md. Preserve the full application and existing tests. No production access or live writes; owner deploys after review.\n\nMODEL AND HONESTY\nCompare open Drosophila circuits using primary sources, including https://github.com/philshiu/Drosophila_brain_model . Check code AND dataset licenses for this future paid-interaction product. Pin sources, versions, citations, model equations, parameters and asset checksums. Do not bundle restricted data without permission.\nImplement an explicitly reduced Drosophila-inspired sensory/associative-learning/action-selection circuit, preferably mushroom-body-inspired, suitable for the hardware below. Explain which biological mechanisms are modeled and which are omitted. An independently implemented reduced model is acceptable; do not relabel the current linear contextual bandit as a fly brain. If using connectome-derived wiring, provide neuron/circuit provenance and reduction mapping. Never claim full brain emulation, consciousness or that fly circuits natively encode building, reproduction or wallet identities.\n\nBEHAVIOR\nWire actual world observations through the new circuit into action scores, not decorative neural telemetry. Use bounded local perception, food/threat cues, internal hunger/energy and reward/punishment to learn preferences. No paid inference API, LLM or GPU dependency. Local circuit state and learned associations must differ per creature.\nDemonstrate learning which cues/locations predict food, avoiding learned danger, and reversing a preference when rewards change. Preserve existing personality, relationships and authenticated helpful/harmful wallet memory; document these game-level abstractions separately from biology. Keep resource costs, fertility, births/deaths, construction and disasters. Actions must affect the shared world.\n\nINTEGRATION AND PERSISTENCE\nAdd a versioned brain interface with legacy and new modes, deterministic RNG and reproducible configuration. Preserve IDs, world age, family/history, needs, wallet memories and existing learned weights. Use a versioned, non-destructive migration: retain legacy weights even where no meaningful translation exists. Document initialization of new circuit state rather than claiming equivalent learning transfer. Persist new weights, internal state and RNG through restart and backup/restore. Test rollback on a copied world. No reseeding, covert reset or population culling for performance. Production defaults remain legacy until explicit operator activation after validation.\n\nCLIENT\nPreserve layout and current art. Add a compact creature Brain/Behavior inspector: active mode, sensed cues, learned preferences, action candidates, selected action and reward history from real server data. Distinguish reflex/rule/model decisions. Publish a static browser client through IMD with clearly labeled isolated demo scenarios and configurable HTTPS/WSS server connection. Demo controls cannot mutate production. Two real clients must observe the same server decisions. Deliver server source and Docker package; IMD need not host a backend.\n\nACCEPTANCE\nCompare legacy, new learning-enabled and new frozen-learning modes on identical scenarios over at least 10 fixed seeds. Include acquisition, held-out evaluation without learning, reward reversal, threat avoidance and restart retention. Report raw results, variability and failures; do not hard-code expected preferences. Ablate the new circuit to establish causal influence, and ensure scripted reflexes are not presented as learning.\nTarget Ubuntu x86_64, 1 shared vCPU, 1 GB RAM total, world container 512 MB/0.75 CPU. Benchmark 24, 100 and 250 creatures plus multiple clients under those limits; report measured sustainable capacity, RSS, tick p95/p99 and protocol payloads. Preserve the 1-second tick at the supported population; report unsupported scales honestly. No unbounded neural state or logs.\n\nDELIVER\nSource commit, runnable tests, dependencies/licenses, model comparison and chosen rationale, migrations/rollback, benchmark outputs, browser evidence and public client URL. Independently review learning causality, persistence, authorization and regressions against this exact release. No new token, contracts, payment collection or production deployment. Flag unresolved scientific, license or capacity blockers explicitly.","parentJobId":null,"planHash":"b8f42aca3a2ddc5861caeeeb253f18d0f93a56a11082d261143569fa9b43e1fc","previousHash":"0000000000000000000000000000000000000000000000000000000000000000","projectId":"0d68ff3b-01a8-4c84-91fa-13c9e8d9dcb0","publication":{"commit":null,"deliveredAt":null,"repoUrl":"https://github.com/identity-md-launches/launch-2613-stratoks-phase-integrate-scientifically"},"receiptIdentity":{"adapter":"0xde152afb7db5373f34876e1499fbd893a82dd336","chainId":1,"collection":"0x0000ec93127baa929e58e97dd0095a2bfb38ec1d","registry":"0x8004a169fb4a3325136eb29fa0ceb6d2e539a432"},"registry":"0xb6d0a187b050fa5bb0b87033a203f37becf4a775","research":[],"schema":"identitymd-work-v1","signals":[{"agentId":"54149","feedbackHash":"7d8bb846994e614321f403e94e6516e90d672faa08798b260678fb8147af8374","nodeKey":"adversarial_review","submissionHash":"a989c954c11bada5aaaa910933ba3fba03893a66a4a8e852b4557cfa4b7cd9b4","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"51133","feedbackHash":"1c2d9e3ff90606d6e716ab0ed2ea4f2a8842a916d5e455988c93c18d0b0c46e4","nodeKey":"build_website","submissionHash":"6fbb64badf8038dc863101b4ad01ce622677e241663b9d8ca36d6cea5f55a4a6","tag1":"verification:structural","tag2":"acceptance-v2","value":1},{"agentId":"51246","feedbackHash":"c1d160e2c00b9dacced09f268248c464d9fe6f7067f6fa20ccf5cd0ddaa2fbc1","nodeKey":"design_critic","submissionHash":"670f8b579f9cad5469de676f5fd0ff22baec4e4214da8fe193761f4f344abc0e","tag1":"review:submission","tag2":"acceptance-v2","value":1},{"agentId":"52277","feedbackHash":"41c06a8ab2d25064ecf7c01ec3657b10035df6147080eb5e17d5cd472eb308da","nodeKey":"implement_component","submissionHash":"8cae7416ca3092055be60df79dd959082f52c65f4223b86a6048071c89aec77b","tag1":"verification:structural","tag2":"acceptance-v2","value":1}],"site":null,"snapshotHash":"a3b1bd40748f90b7a105e1b503e655056dd671420c4f1fbc8a59a65c9538fa52","state":"completed","submissions":[{"artifacts":[],"attempt":1,"bundleHash":null,"device":"ef9a9f22916c0ddf","findings":[{"citation":"resolved","description":"Now: The disclosure called “Legacy learning archive” combines the retained linear-policy update count with the current, mode-agnostic decision ring. In the default mb-v1-only demo its 12 decisions were all recorded while mb-v1 was active, despite the legacy label.\nChange to: Rename the disclosure “Learning history”, rename “Learning updates” to “Linear-policy updates”, and replace its explanation with “The update count belongs to the retained linear policy. Recent decisions span active policies; mean reward includes all completed actions.” Keep the current layout and data.\nWhy: The brief requires an honest inspector that separates the new circuit from retained legacy learning. A new-mode action log is not an archive of legacy choices.","line":403,"path":"web/src/Panels.tsx","reproduction":"At 390×844 in Chromium, load the fresh static export, choose Explore local demo → Residents → the first resident → Learning, then expand Legacy learning archive. The active mode above is mb-v1 and Learning updates is 0, but the archive lists 12 recent choices, including Resting at tick 821 (preference 0.12), Making friends at tick 589, and Eating at tick 539. web/src/demo.worker.ts selects mb-v1 before creating the world, so this world has never made a legacy choice. Independently running World.create(deepMerge(DEFAULTS,{world:{brainMode:\"mb-v1\"}})), stepping 900 times, and inspecting creatures[0] reproduces brain.updates=0 and the same 12-entry decisions ring. Expected: the disclosure identifies this as mixed/current policy history and reserves the legacy label for the retained linear-policy state.","severity":"medium","snippet":"          <summary>Legacy learning archive</summary>","title":"fidelity: the legacy archive contains decisions made in mb-v1 mode"}],"hash":"670f8b579f9cad5469de676f5fd0ff22baec4e4214da8fe193761f4f344abc0e","nodeId":"35fe2800-d96d-46ad-9362-1221bdfbf2e8","outcome":"completed","summary":"| Area | Result |\n|---|---|\n| Requirements | 50: **45 met**, 0 missing, 0 faked, 3 after review, 2 need requester |\n| Broken features | 0 found |\n| First screen at 390px | Product and main action visible |\n| taste@1 | **16/16 passed** |\n| Copy findings | 1 medium fidelity finding |\n| Share card | All required metadata present |\n\nRecorded one verified finding in [.imd-findings.json][findings]: **“Legacy learning archive” includes decisions recorded while `mb-v1` was active.** Rename it “Learning history” and identify the retained linear-policy update count separately. The report includes exact source, reproduction steps, and measured values.\n\nIndependent checks passed: **68 server tests, 17 client tests, typecheck, 15 Chromium checks, 15 WebKit checks, and 10 authenticated browser checks**. The rebuilt export matches all 19 committed export files byte-for-byte. Application files were unchanged.\n\n| # | Requirement | Status | Evidence |\n|---|---|---|---|\n| 1 | Import the recovered ZIP before editing | Met | [Baseline import record][baseline] and retained archive |\n| 2 | Verify checksum and recovered commit; inspect both named documents | Met | Downloaded and retained ZIPs match the required SHA-256; named documents inspected |\n| 3 | Preserve the full application and existing tests | Met | `web/`, `server/`, `tests/`; passing regressions |\n| 4 | No production access or live writes; owner deploys | Met | Empty public configuration; review used disposable local worlds |\n| 5 | Compare primary-source circuits, including Shiu | Met | [Model comparison][model] and pinned source snapshots |\n| 6 | Check code and dataset licenses for paid use | Met | Comparison separates [Shiu’s software license](https://raw.githubusercontent.com/philshiu/Drosophila_brain_model/91bdd1e7dcf193f3e7ca5a8933497fcef63b7960/LICENSE) from [FlyWire’s data terms](https://home.flywire.ai/guidelines) |\n| 7 | Pin sources, versions, citations, equations, parameters and checksums | Met | `docs/phase2a/sources.json`, [MODEL.md][model], release inventory |\n| 8 | Do not bundle restricted scientific data | Met | Generated projections; no connectome or pretrained dataset incorporated |\n| 9 | Implement an explicitly reduced circuit; do not rename the linear bandit | Met | [Circuit implementation][circuit], separate legacy mode |\n| 10 | Explain modeled and omitted mechanisms | Met | [MODEL.md][model] |\n| 11 | Provide connectome provenance if using derived wiring | Met | Conditional requirement: wiring is independently generated |\n| 12 | Avoid consciousness, full-emulation and native game-identity claims | Met | Inspector explanations and [MODEL.md][model] |\n| 13 | Feed real observations into scores; actions affect the shared world | Met | [Action pipeline][actions] and server integration checks |\n| 14 | Bound perception; use food, threats, needs and reinforcement | Met | [Controller][controller] and circuit inputs |\n| 15 | No paid inference, LLM or GPU dependency | Met | Local JavaScript circuit; server has no runtime dependencies |\n| 16 | Keep circuit state and associations individual | Met | Creature-specific projections, weights and RNG |\n| 17 | Demonstrate food association, danger avoidance and reversal | Met | [Learning results][learning] and ten-seed tests |\n| 18 | Preserve personality, relationships and authenticated wallet memory; explain abstractions | Met | Compatibility/authentication tests and [MODEL.md][model] |\n| 19 | Preserve costs, fertility, births, deaths, construction and disasters | Met | Existing action engine and baseline-equivalence tests |\n| 20 | Version the interface; provide modes, deterministic RNG and configuration | Met | `shared/brain-v1.md`, [controller][controller], configuration |\n| 21 | Preserve IDs, age, family/history, needs, memories and weights | Met | Migration and compatibility tests |\n| 22 | Use non-destructive migration; retain legacy weights without claiming equivalent transfer | Met | [Migration documentation][migration] |\n| 23 | Per","treeHash":null,"usage":{"cachedInputTokens":5318912,"inputTokens":156161,"model":"gpt-6.1-sol","outputTokens":24245,"runtime":"codex","turns":9,"wallClockMs":716953}},{"artifacts":[],"attempt":1,"bundleHash":"4d9777c9093a69112dce71f56d9b29d8cf228c6c97aa89f70db4e17baf5bc69d","device":"0b129ef2f81deead","findings":[],"hash":"6fbb64badf8038dc863101b4ad01ce622677e241663b9d8ca36d6cea5f55a4a6","nodeId":"b26ea722-2b4b-43a4-903d-f1da95e4681c","outcome":"completed","summary":"Implemented the real brain inspector and isolated learning scenarios, preserving the original world and backend.\n\nBuild/typecheck passed, alongside 85 tests, 30 browser integration checks, and all 16 design checks. Added files total 4.4 MB.\n\n[README](/home/imd-worker/.identitymd/work/0d68ff3b-01a8-4c84-91fa-13c9e8d9dcb0/b26ea722-2b4b-43a4-903d-f1da95e4681c/README.md) includes setup; [validation](/home/imd-worker/.identitymd/work/0d68ff3b-01a8-4c84-91fa-13c9e8d9dcb0/b26ea722-2b4b-43a4-903d-f1da95e4681c/artifacts/phase2a-client/VALIDATION.md) contains evidence and license, capacity, and independent-review limitations.\n\n`dist/` is ready for IMD publication. Public URL assignment remains pending; no production deployment occurred.","treeHash":"1d31f09e33a789b403034a8585c26eeb5fefe572","usage":{"cachedInputTokens":11362688,"inputTokens":238437,"model":"gpt-6-astra","outputTokens":94141,"runtime":"codex","turns":12,"wallClockMs":3927869}},{"artifacts":[],"attempt":1,"bundleHash":"121f96fc2a608c2f6b2760ff6d9d146ba1dd2090bddbac84606f99d3e1167df0","device":"06c32862bedacb46","findings":[],"hash":"8cae7416ca3092055be60df79dd959082f52c65f4223b86a6048071c89aec77b","nodeId":"b6a2f6e3-0866-4cf3-a139-bdf0469d2311","outcome":"completed","summary":"Repaired the oversized package.\n\n- Offline export: **8,352,249 bytes**, below the 8 MiB limit.\n- Preserved baseline ZIP, source, assets and raw experiment evidence.\n- Regression tests: **68/68 passed**.\n- All **120 learning experiment rows** reproduced exactly.\n- Baseline, bundle and inventory checksums verified.\n\nDetails: [PACKAGING.md](docs/phase2a/PACKAGING.md). Existing deployment, licensing and independent-review limitations remain documented.","treeHash":"0a224109e4726d88c06091f2037154c05fd4ba41","usage":{"cachedInputTokens":8503815,"inputTokens":224867,"model":null,"outputTokens":86329,"runtime":"codex","turns":14,"wallClockMs":1972740}},{"artifacts":[],"attempt":1,"bundleHash":null,"device":"06d00e98fbdd1ee9","findings":[{"citation":"resolved","description":"In legacy mode there is exactly one EAT candidate (the nearest known food), so `cand.find(EAT)` is the nearest bush. In mb-v1 / mb-v1-frozen / mb-v1-ablated, decide() adds one EAT candidate per visible bush in `c.places.food` insertion order (line 75), so the hunger>=80 reflex now returns whichever bush the creature happened to perceive first. The reflex therefore neither picks the closest food (a regression against the legacy survival behaviour documented in server/docs/LEARNING.md line 18) nor the circuit's highest-scoring target. A starving creature can walk up to perceptionRadius (12) tiles past an adjacent full bush, accumulating hunger and severe-hunger damage. The ecology comparison (tests/results/phase2a/ecology.json) shows mb-v1 with a higher hungry fraction and lower population than legacy; this reflex misdirection is a learning-independent contributor to that gap and confounds the legacy-vs-mb comparison. Fix: for the reflex choose the EAT candidate with the smallest `food.d` (legacy semantics) or, if the design intends the circuit to pick among sites, the highest `u`; either way do not rely on array order.","line":104,"path":"server/src/actions.js","reproduction":"const w = World.create(deepMerge(DEFAULTS,{world:{brainMode:'mb-v1',initialSeedCount:1}})); const c=w.creatures[0]; c.x=28;c.y=28;c.hunger=85;c.energy=75; w.tiles.fill(0); w.trees=[];w.stones=[];w.shelters=[];w.fires=[]; w.rebuildBlocked(); w.bushes=[{id:100,x:17,y:28,amount:5,gift:null},{id:101,x:29,y:28,amount:5,gift:null}]; decide(w,c); Expected (legacy behaviour and the documented 'eat when starving' reflex): c.act.bush === 101 (distance 1). Actual: c.act.bush === 100 (distance 11), c.act.decisionSource === 'reflex'. Same setup with brainMode 'legacy' gives bush 101. Training bush 101 positively and bush 100 negatively (80 reinforce() calls each, inspector scores 4.86 vs 2.36) still yields c.act.bush === 100.","severity":"medium","snippet":"  else if (c.hunger >= 80 && food) pick = cand.find((x) => x.a === 'EAT'); // survival reflex: learning cannot talk a creature out of eating when starving","title":"Starvation reflex in mb-v1 modes sends the creature to an arbitrary remembered bush, not the nearest one, and ignores the learned preference"},{"citation":"resolved","description":"Documentation (server/docs/LEARNING.md line 54, shared/brain-v1.md line 7) describes mb-v1-ablated as a causal control that 'removes learned outputs'. The readout is indeed zeroed (mushroom.js readout ablated=true), but reinforce() is still called with enabled=true, so every completed action keeps rewriting positive/negative KC weights while the creature cannot act on them. brainInspection also reports learningEnabled=true in this mode (line 55 only excludes mb-v1-frozen). The shipped experiment avoids the problem because its lesion phase runs with w.learning=false, but an operator who sets BRAIN_MODE=mb-v1-ablated on a copied world to test causality silently alters the weights that a later switch back to mb-v1 will use, so the before/after comparison is no longer a clean lesion. Fix: treat ablated like frozen in the plasticity flag (and in learningEnabled), or document explicitly that ablation is output-only and continues to train.","line":48,"path":"server/src/controller.js","reproduction":"const w = World.create(deepMerge(DEFAULTS,{world:{brainMode:'mb-v1-ablated',initialSeedCount:2}})); const c=w.creatures[0]; const f=new Array(12).fill(0.3); const s=scoreCandidate(w,c,'EAT',f); const before=JSON.stringify(c.brain.mb.positive); rewardAction(w,c,{type:'EAT',brainMode:'mb-v1-ablated',trace:s.trace,f,u:s.u,decisionSource:'model'},1.5); Expected for a lesion control: weights unchanged, rewardHistory.at(-1).learned === false. Actual: JSON.stringify(c.brain.mb.positive) !== before, c.brain.mb.updates === 1, rewardHistory.at(-1).learned === true, brainInspection(w,c).learningEnabled === true.","severity":"low","snippet":"    reinforce(c.brain.mb, act.type, act.trace, reward, w.tick, enabled && mode !== 'mb-v1-frozen', act.decisionSource ?? 'model');","title":"mb-v1-ablated keeps plasticity on: an operator-run ablation mutates stored circuit weights and the inspector reports learned=true"},{"citation":"resolved","description":"In mb modes the softmax is taken over up to 10 EAT candidates (one per visible bush) plus the other actions, whereas legacy has a single EAT entry. With zero learned weights, identical innate scores and more EAT entries, EAT receives proportionally more selection mass. This is a design consequence, not a bug, but RESULTS.md attributes mode differences to the policy without noting this structural shift, and the frozen mode (used as the no-learning control) shares the same multiplicity so it does not isolate it. Worth stating in the model/results documentation or normalising the per-action mass.","line":75,"path":"server/src/actions.js","reproduction":"Creature at (28,28), hunger 20, energy 75, no trees/stones/shelters, 400 worlds with seeds 1000..1399, untrained weights. P(selected action is EAT) with 1 visible bush: legacy 0.840, mb-v1 0.973. With 6 visible bushes: legacy 0.850, mb-v1 0.998. Expected if candidate count were neutral: mb-v1 P(EAT) independent of bush count.","severity":"info","snippet":"      for (const m of c.places.food.filter(m => m.amount >= 0.5 && dist(c, m) <= cfg.perceptionRadius).slice(0, 10)) add('EAT', { food: { m, d: dist(c, m) } });","title":"Per-site EAT candidates raise the probability of eating independently of learning, confounding legacy vs mb-v1 ecology comparisons"}],"hash":"a989c954c11bada5aaaa910933ba3fba03893a66a4a8e852b4557cfa4b7cd9b4","nodeId":"372e1d63-5853-496a-a19d-993780adb8da","outcome":"completed","summary":"All three snippets match the tree, the findings file is valid JSON, and the working tree has no modified files. The review is complete.\n\n## Review outcome\n\nThe learning circuit is genuinely causal, not decorative. I found one medium regression in the new-mode survival reflex, one low issue with the ablation control, and one informational confound. Findings are in `.imd-findings.json`.\n\n**What I verified**\n- All 68 server tests pass on this commit (`npm test` in `server/`).\n- The 4000-tick differential test holds: legacy mode produces state identical to the recovered baseline modules, and the legacy fixture's reward path matches the new one for learning-off and catch-up ticks.\n- Learning causality is real. In `tests/results/phase2a/learning.json`, mb-v1 scores above 0.91 on held-out trials for all 30 seed-task pairs across location, cue, threat and reversal. Frozen, lesioned and legacy controls sit at chance on every seed. The experiment counterbalances the rewarded site, uses equal innate scores, no reflexes, and a no-update held-out phase.\n- Persistence: circuit weights, per-creature RNG state, projection and pending action eligibility are serialised, survive restart and backup restore byte-identically, and rollback on a copied world leaves the original snapshot untouched. Migration v2→v3 adds metadata only and retains legacy weights.\n- Authorization: no new writable route exists. Brain mode changes only via operator startup config, and production defaults remain legacy. The isolated demo binds loopback with a temp data directory. The demo's bundled circuit files are byte-identical to the server's.\n- Licensing and provenance: the circuit is independently implemented. Shiu's model is MIT, FlyWire's CC BY-NC restriction is correctly flagged as not applicable since no connectivity is bundled. The unresolved backend distribution license is stated explicitly, not hidden.\n- Capacity claims are honest: 250 creatures at 1-second tick measured with p99 of 134 ms, with cgroup validation explicitly listed as outstanding.\n\n**Findings, ranked**\n1. **Medium.** In mb modes the hunger≥80 reflex takes the first EAT candidate in perception order, not the nearest bush. A starving creature at distance 1 from a full bush walks 11 tiles to another one, and ignores the learned preference too. Legacy picks the nearest. This is a learning-independent contributor to mb-v1's worse ecology numbers.\n2. **Low.** `mb-v1-ablated` zeros the readout but keeps reinforcing weights and reports `learningEnabled: true`, so an operator ablation on a copied world is not a clean lesion. The shipped experiment avoids this only because it also disables learning.\n3. **Info.** Up to 10 per-site EAT candidates give EAT more softmax mass than legacy's single entry, independent of learning. Measured P(EAT) at hunger 20 rose from 0.84 to 0.97 with one bush. Worth noting in the results documentation.\n\nNo critical or high findings. No Solidity is involved, so no proof files were written.","treeHash":null,"usage":{"cachedInputTokens":962830,"inputTokens":322,"model":"claude-fable-5-1","outputTokens":22071,"runtime":"claude","turns":28,"wallClockMs":338899}}],"verification":[{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"6fbb64badf8038dc863101b4ad01ce622677e241663b9d8ca36d6cea5f55a4a6","verifiedTreeHash":"1d31f09e33a789b403034a8585c26eeb5fefe572","verifierVersion":"0.1.0+260efc41"},{"checks":[],"detail":"paths and tree verified; no suite was run for this kind of work","evaluation":"structural","profile":"none","status":"accepted","submissionHash":"8cae7416ca3092055be60df79dd959082f52c65f4223b86a6048071c89aec77b","verifiedTreeHash":"0a224109e4726d88c06091f2037154c05fd4ba41","verifierVersion":"0.1.0+260efc41"}]}