BE are you declaring · which layer are you on · what is your keep-or-toss policy), a drill sheet pairing each habit with the law it serves, and a sick-bay chart (symptom → what's wrong → the fix) for the usual bad habits: a synchronous spine, power with nobody watching, believing parsed input, safety that waits on a round-trip, a flat inside, mystery numbers, the word "unhackable", and pretend-alive signals. §26 JAVASCRIPT BEST PRACTICES is the craft of the ground we build on: async/await, const first, frozen shipped objects, typed errors that fail safe, checks at the border, AbortController plus backpressure, clean teardown with no leaks, modules that export the minimum, and repeatable results. Each tied back to R0/R8/R15/R22/R23/R28/§22, with a never-do chart and a modern-JS cheat card. The big one: not a single new law: good habits are stance, not new powers, so the law count holds at 30. The patch log moved from §25 to §27.
coupling · surface_count · total_count · synth_rate · circuit_weight · each clock gates the next one, 10× slower · effective density = all five multiplied · the COHERENCY score = how far the clocks disagree · HORMONES gains it as measured read number 21 ·
3 fresh mood states (DISCORDANT · TRANSITIONING · SETTLED) slotted into the §4.2 priority table ·
R11 · COHERENT EFFECTIVE DENSITY: code gating on one flat density without a // v3.2-legacy tag breaks the law · the linter ships with it ·
R10 (SYNAPSE_ID FITS IN ONE BYTE) becomes official in §3 ·
spec 4.0 bundles 3.2 a3 to a7 into one release: 30 hormones · 30 mood states · 255 synapse bays · 16 moves · 11 laws you can enforce · the genesis loop, the per-user chain and META.
There is no synchronous spine here. No master clock. No shared state that flips all at once. Each cell keeps its own beat. Each layer lands when it lands, not the instant you ask.
Every other law quietly leans on this one. R1 to R9 only work in a world where nothing waits. Calling it R0 drags that hidden assumption into the light.
The body grows from the bottom up and gets steered from the top down. Every floor carries out what the floor above wants and reports back to the floor below. SELF boils engine memory down into long-term keepsakes, throws out what stopped helping, then feeds those lessons back into DNA. All seven floors live inside a single user. An eighth axis stands beside the stack: the GENESIS LOOP + PER-USER CHAIN + META LAYER (§1c–§1e · spec 3.2). It builds the whole body fresh on every boot, writes it down as a block that cannot be changed, and guards it with the meta check that shuts bad actors out.
SELF began life as poetry ("the integrated being") and got cut from spec 3.0, because nobody can turn "consciousness" into a lint check. Spec 3.1 brings it back with one clear job you can enforce: SELF chooses what graduates from session memory into the permanent vault, and what gets shredded for good.
// Example: SELF archive policy function archiveRule(artifact) { // keep things that crossed quorum, were verified, or carry rare event_types return artifact.completeness >= 0.85 || artifact.contributing_fleets.length >= 3 || RARE_EVENT_TYPES.has(artifact.event_type); } // Example: SELF prune policy function pruneRule(item, now) { const ageMs = now - item.last_used_ts; const isStale = ageMs > 30 * DAY_MS; const isUnused = item.times_recalled === 0; return isStale && isUnused && !item.archived; } // SELF scheduled tick function selfTick() { const now = Date.now(); ENGINES.artifacts.forEach(a => { if (archiveRule(a)) return BE(() => archiveItem(a), 'SELF_ARCHIVE'); if (pruneRule(a, now)) return BE(() => pruneItem(a), 'SELF_PRUNE'); }); }
Spec 3.0 cut SELF because nobody could enforce "the integrated being". Spec 3.1 lets it back in because vault + shred boils down to two real functions with written policies. A checkable job is a different animal from poetic "consciousness", and the checkable job is the only part that earned a seat again.
The seven floors of the stack live inside a single user. Axis eight is the loop that builds that user's instance from scratch each time it starts. Everyone runs the same code blueprint (the PUBLIC SEED), yet your instance only comes alive once your PRIVATE SEED sparks it. Until you've booted yourself into being, there's simply nothing for anyone to log in against.
// every boot is a fresh genesis · the bootstrap IS the auth event async function boot(privateSeed) { const publicSeed = await fetchPublicSeed(SEED_CID); // same for all users const deltas = await loadLocalDeltas(); // today's changes from local store const instance = GENESIS(publicSeed, privateSeed, deltas); const block = commitBlock(instance); // next block in your chain const validated = await META.verifySignal(block); // gate at the protocol edge if (!validated) return BE(rollback, 'META_REJECTED'); return BE(() => activate(instance), 'INSTANCE_LIVE'); } // instance termination ≡ auth gate closes function terminate(instance) { instance.freeze(); META.revoke(instance.id); return BE(closeAuthGate, 'INSTANCE_TERMINATED'); }
| area | (public_seed, private_seed) pair | what runs |
|---|---|---|
| BANK | (bank.public, your.bank.private) | a program that only does banking |
| SOCIAL | (social.public, your.social.private) | a program that only does social |
| MEDICAL | (medical.public, your.medical.private) | a program that only does health |
Each area grows its own private seed from your master seed. If someone cracks your social instance, they still can't pass as your bank one. Banking uses its own derivation path, its own META gate and its own chain.
Passkeys, MFA, fingerprints: none of them go away. They layer onto the instance after it's alive. Genesis answers "does this instance exist?" Passkeys answer "is it still you driving?" Together they shrink the attack surface; on its own, neither one is the whole design.
WebAuthn and passkeys already ship a slice of this: "your device proves it's you, since only it holds the private key." The long version goes further: your device paints a brand-new OS from your seed every time it boots. The OS is the login. "Device as login" is just the handy zipped-up form.
Each GENESIS adds one block to that user's own chain. Blocks can't be edited after the fact, the same way a blockchain works. Every block points at the hash of the one before it. You won't find one big chain everybody shares; you get a separate chain for every user instance. Anybody can confirm the chain hasn't been tampered with. Only its owner can read what the blocks point at.
// block schema · one chain per user · append-only const block_n = { n: N, // boot count · monotonic from genesis version: instance.seedVersion(), // version derived from seed ts: Date.now(), // when this boot happened prev_hash: chain[N-1].hash, // links to previous block instance_h: sha256(canonicalize(instance)), // this boot's instance hash delta_h: sha256(canonicalize(deltas)), // today's deltas applied meta_sig: META.sign(this), // META layer signs the validation hash: 'sha256:0x...' // self-hash · seals the block };
| area | points at | the reason |
|---|---|---|
| OPTIMIZATION | the LATEST block that compiled best | quality beats freshness here: take whichever block built the cleanest |
| BANKING / FINANCE | the MOST-RECENT block that passed checks | today's truth is what counts · old state is a risk |
| MEDICAL | the MOST-RECENT block with a signature | safety first · go with the newest confirmed state |
| SOCIAL / CONTENT | the LATEST block that rendered best | a smooth experience beats up-to-the-second for low-stakes state |
| AUDIT / FORENSICS | EVERY block | read the whole chain · each login is on the record |
Weird-behavior checks run on every block. If META or an outside watcher marks block N as fishy, the system steps back to block N-1 (or earlier) and carries on from there. Proof of the bad block is kept on the chain, nobody erases it, but it's stamped invalid and never used as a starting point again.
// detection → rollback discipline (R9) function detectAnomaly(block) { if (META.scoreSuspect(block) > SUSPECT_THRESHOLD) { block.flag = 'SUSPECT'; return BE(() => rollbackTo(block.n - 1), 'ROLLBACK_TRIGGERED'); } return BE(acceptBlock, 'BLOCK_ACCEPTED'); } function rollbackTo(n) { const good = chain[n]; CURRENT_INSTANCE = GENESIS_FROM_BLOCK(good); META.log({ event: 'ROLLBACK', target_block: n, reason: 'anomaly' }); return BE(resumeFromInstance, 'ROLLBACK_COMPLETE'); }
META stands on the protocol border between a user's INSTANCE and the LEDGER (their per-user chain, plus any shared coordination on top). Its task: check the signal on each block before anyone treats it as official. Bad actors get stopped one floor beneath login instead of one floor above it. Login comes from the instance existing (R6); META rules on whether the next block may even join onto the chain. Spec 3.2 gave META a name and parked it as a work in progress. Spec 5.0 writes the rules down: an exact signal format, a quorum of peer witnesses, a threshold that moves with posture, and failure in steps. Two fresh laws (R12 · R13) and two fresh moves (WITNESS · QUARANTINE) come with it.
instance_pubkey + signed(block_hash) + freshness_proof. How many witnesses you need, and how fresh the proof must be, move with the Oracle's posture: stress pulls them tighter, calm lets them relax. Failure comes in stages: QUARANTINE (fence it off, read-only, wait for witnesses) → ROLLBACK (R9) → sound the area alarm. One trusted oracle is never enough.
The §1d block layout already has a meta_sig slot. Spec 5.0 pins down what goes in it:
// META signal · 136 bytes packed · what every witness checks const meta_signal = { instance_pubkey: u8[32], // ed25519 · derived from (public, private) seed at genesis block_hash: u8[32], // sha256(canonicalize(block)) · the thing being attested sig: u8[64], // ed25519 sign(block_hash) under the instance key freshness: u8[8], // boot counter n (monotonic) ++ wall-clock ms · kills replay };
Each witness looks at exactly three things: (1) does the signature match the pubkey it claims, (2) is that pubkey the same one that has grown this chain since genesis, and (3) is the freshness counter higher than the last block that got in. Faking a block takes the private seed; replaying one means outrunning a counter that only goes up; swapping identities needs a chain fork the witnesses have already seen. Without the seed, an attacker gets none of those.
// R12 · a block is provisional until K-of-N witnesses co-sign async function metaVerify(block, posture) { const { K, freshness_ms } = metaThreshold(posture); // R13 · posture-gated const witnesses = await gatherWitnesses(block.meta_signal); const attest = witnesses.filter(w => w.verifySig(block) && w.freshWithin(block, freshness_ms) ); if (attest.length >= K) return BE(() => accept(block), 'WITNESS_QUORUM_MET'); if (attest.length > 0) return BE(() => quarantine(block), 'WITNESS_INSUFFICIENT'); return BE(() => rollback(block.n - 1), 'WITNESS_NONE_R9'); }
Witnesses are other instances (the peer-witness pattern) or an area's validator crew: an instance never vouches for itself, and no single trusted server gets the final word. A bank area runs a strict validator crew; a social area might be fine with casual peer vouching. How witnesses find each other and pass a block around is left open on purpose. The horizon note below explains why.
| gate | asks | law | runs |
|---|---|---|---|
| GENESIS | is there an instance here, period? | R6 · R7 | one time, on boot |
| META | does this block get to count? | R12 · R13 | on each block |
| PASSKEY / MFA | is it still really you doing this? | layers over the top | on each risky action |
Genesis is the ground floor (no instance → no login to attempt). META guards the chain (no witness quorum → the block doesn't count). Passkeys are the roof (no fresh proof → no risky action). Each one locks a different door; pull any of them and a hole opens. META is no stand-in for passkeys, and passkeys are no stand-in for genesis.
// R13 · META strictness IS hormonal · cortisol/adrenaline tighten the gate function metaThreshold(h) { // h = HORMONES readout (§4.1) const alert = clamp(h.cortisol * 0.6 + h.adrenaline * 0.4, 0, 1); return { K: 1 + Math.round(alert * 4), // calm → 1 witness · alarmed → 5 freshness_ms: 60000 - alert * 55000, // calm → 60s window · alarmed → 5s }; }
The very posture that clamps routing gates and speeds up rhythms also clamps the META gate. When the body reads high cortisol (errors climbing, queues packed) it wants more witnesses and newer proofs before believing the next block. When it's calm, it eases off. META thresholds frozen into the code break R13. That's why META belongs to the body instead of being strapped on from outside. It breathes in time with the Oracle.
| how fishy | what happens | move | what the chain sees |
|---|---|---|---|
| 0 < witnesses < K | fence the block off · read-only · wait for more witnesses | QUARANTINE | parked, not in, not erased |
| witnesses = 0 | step back to the last block that had witnesses (R9) | ROLLBACK | the fishy block remains on the chain as proof |
| the same trick across many instances | area alarm · push cortisol up for every fleet · clamp every gate | REGULATE | the posture change spreads through the §4 Oracle |
Spec 5.0 needed QUARANTINE because a block can look suspicious without being evil: maybe its witnesses haven't shown up yet, maybe the network is crawling. Parking it buys time. You neither trust the block nor toss the user's work. Rollback only fires for blocks with zero witnesses or a proven fake. When the same pattern keeps showing up across instances, the Oracle turns it into an area-wide posture shift.
[ − PROD ] until it ships. Giving the gate a name let R6–R9 exist in spec 3.2; writing its rules in spec 5.0 is the manual fixing itself right on time.
Sticky note to future me: META graduated from a spec 3.2 work-in-progress to a spec 5.0 rulebook as soon as an exact signal, a quorum law and a posture gate could each be written as a function you can enforce. The same hurdle SELF cleared in spec 3.1 and GENESIS in spec 3.2. Hold off on building the witness network until the rules have sat in the manual long enough for people to try breaking them. Name it → write the rules → toughen it → ship it, in that exact order.
Every action in the body sits somewhere on one slider: fission (pull it apart) ↔ fusion (put it together). That slider is a design law. It pins each function to a spot and makes the function say where it stands.
Who did it first: MapReduce (Dean/Ghemawat 2004) splits, then merges. Neuroscience's binding problem (Treisman 1980s) is still stuck on turning scraps into one picture. Fission-fusion societies (Aureli et al, primate studies) are groups that break up and rejoin.
Laws a linter or a reviewer can actually check. They're what give Molecular Coding its silhouette.
const SCOUT_NEWS = { id: 'NEWS-RSS', cell_type: 'APC', // antigen-presenting cell · surfaces signal source: 'Google News', trust: 0.70, cadence_ms: 6500, };
const SCOUT_CMD = { id: 'SCOUT-COMMANDER', cell_type: 'HELPER_T', dna_version: 3, directive: 'widen news intake · prioritize EDGAR-confirmed sources', last_transcribed_ms: Date.now(), };
become, spelled out. Each if-branch says what it turns into next. No branch left dangling. The labels double as places you can jump to.function evaluate(packet) { if (packet.confidence > 0.75) { promote(packet); return BE(scheduleNext, 'PROMOTED'); } if (packet.confidence > 0.40) { addToReview(packet); return BE(notifyManager, 'QUEUED'); } return BE(log, 'LOGGED'); }
if (artifactCompleteness(merged) >= 0.65) { registerArtifact(merged); emit('graduation', { co: merged.co }); return BE(notifyMemoryEngine, 'ARTIFACT_BORN'); }
archiveRule (what moves into the permanent vault)
and a pruneRule (what gets shredded for good). Both are named functions on a timer.
A store with neither just keeps swelling, and that breaks R5.
const ENGINE_POLICY = { archiveRule: a => a.completeness >= 0.85 || a.contributing_fleets.length >= 3, pruneRule: (a, now) => (now - a.last_used_ts) > 30 * DAY_MS && a.times_recalled === 0, schedule_ms: 3600 * 1000, // hourly self-tick };
(public_seed, private_seed). Every permission flows from that instance existing. Before boot there's no login screen to attack, and nobody but the private seed's holder can boot it. Extra locks (passkeys, MFA, fingerprints) sit over the instance; they never swap in for it.// R6 in code · no entry point without genesis if (!CURRENT_INSTANCE) { return BE(promptForPrivateSeed, 'NO_INSTANCE_NO_AUTH'); }
// R7 in code · every session begins with a full genesis window.addEventListener('load', () => BE(() => boot(readPrivateSeed()), 'SESSION_GENESIS') );
(n, version, ts, prev_hash, instance_h, delta_h, meta_sig, hash). Skip the commit and R8 is broken. An "off-the-record version" simply can't exist. Both forensics and rollback fall apart if this slips.// R8 in code · genesis without commit is illegal function activate(instance) { const block = commitBlock(instance); // MUST happen if (!block) throw new Error('R8 · activate without commit'); return BE(() => runInstance(instance), 'INSTANCE_ACTIVE'); }
rollbackRule breaks R9.// R9 in code · rollback is a first-class operation function onSuspectBlock(b) { if (META.scoreSuspect(b) > SUSPECT_THRESHOLD) { return BE(() => rollbackTo(lastTrustedBlock()), 'R9_ROLLBACK'); } return BE(acceptBlock, 'ACCEPTED'); }
SERT, DAT and NET are not synapses: they're KILLER_T cells aimed at particular synapse IDs. The §4.6 drug sheets point at synapses by bay number, never by a name string. Spreading a drug's load means one pass over a 256-slot array each tick · O(1) per synapse · easy on the cache · easy on the ledger (one block's synapse state packs into 256 tight bytes of changes). Once a bay number ships it never moves. Moving one breaks LEDGER replay (R9). The whole registry lives in §4.7.// R10 in code · slot IDs are uint8 · names are display-only const SYNAPSE_SEROTONIN = 0; // not 'SEROTONIN' · the byte IS the identity const SYNAPSE_DOPAMINE = 1; function applyDrugToSynapse(slot_id, drug_load) { SYNAPSE_REGISTRY[slot_id].drug = drug_load; return BE(null, 'R10_SLOT_TARGETED'); }
// v3.2-legacy tag and explains why one delay is good enough there. Any new receptor-adapt code MUST name all 5 clocks and run through effectiveDensity(). The single delay is the shortcut for old code; the five-clock cascade is the real road. The full model is in §4.8.// R11 in code · five scales · single readout function synapseReadout(syn) { return syn.synaptic_conc * effectiveDensity(syn) * syn.receptor_sensitivity; // NOT: syn.synaptic_conc * syn.receptor_density · that's R11 violation (v3.2 only) } // linter detects R11 violations function lintR11(fn_source) { const hasSingleDensity = /receptor_density/.test(fn_source); const hasLegacyTag = /v3\.2-legacy/.test(fn_source); if (hasSingleDensity && !hasLegacyTag) { return BE(flagR11, 'R11_VIOLATION_NO_COHERENCY'); } }
K unrelated witnesses checks its META signal (§1e). Nobody may act on a block's changes until metaVerify comes back WITNESS_QUORUM_MET. An instance that vouches for its own blocks, or leans on one lone validator, breaks R12. One voice is not a quorum. It sits on top of R6 (instance = auth): the instance shows who, the witnesses show what.// R12 in code · a block is provisional until witnessed async function activateWhenWitnessed(block, posture) { const v = await metaVerify(block, posture); // §1e · K-of-N peer quorum if (v.status !== 'WITNESS_QUORUM_MET') { return BE(() => quarantine(block, v), 'R12_NOT_WITNESSED'); } return BE(() => activate(block.instance), 'R12_WITNESSED'); }
K (how many witnesses) and the freshness window follow the Oracle's posture: they are never fixed numbers. With calm hormones, one fresh witness does the job; with cortisol and adrenaline running hot, the quorum grows and the window shrinks. Code that bakes in a frozen META threshold (a set K, a set freshness) breaks R13. It can't tense up under attack or relax when things are quiet. The threshold MUST come from metaThreshold(HORMONES) (§1e-4).// R13 in code · the gate breathes with the body function lintR13(fn_source) { const hardcodedK = /K\s*[=:]\s*\d+/.test(fn_source); const usesThreshold = /metaThreshold/.test(fn_source); if (hardcodedK && !usesThreshold) { return BE(flagR13, 'R13_STATIC_META_THRESHOLD'); } }
attestations field). If this tick's signature doesn't match the last one, something got in. A poisoned dependency, tampering while running, a helper hijacked by prompt-injection. A cell that never attests breaks R14. It rides alongside R8 (commit every version): attestations live inside the block, not beside it.// R14 in code · every cell tick commits its attestation function cellTick(cell) { cell.work(); const attest = { cell_id: cell.id, code_hash: sha256(cell.canonicalize()), state_hash: sha256(cell.state), ts: Date.now(), }; CURRENT_BLOCK.attestations.push(attest); if (priorAttestation(cell.id) && attest.code_hash !== priorAttestation(cell.id).code_hash) { return BE(() => quarantine(cell, 'MHC_DRIFT'), 'R14_COMPROMISED'); } return BE(null, 'R14_ATTESTED'); }
SUPERSEDED) and put a new antibody in a new bay. That keeps R8 (commit every version) intact. The antibody record stays checkable, safe to replay, and safe to share with trusted peers without anyone rewriting history. Changing a published antibody breaks R15.// R15 in code · antibodies are append-only function updateAntibody(old_slot, new_signature) { ANTIBODY_REGISTRY[old_slot].status = 'SUPERSEDED'; const new_slot = ANTIBODY_REGISTRY.claimNextSlot(); ANTIBODY_REGISTRY[new_slot] = { signature: new_signature, status: 'ACTIVE', supersedes: old_slot, }; return BE(commitBlock, 'R15_ANTIBODY_VERSIONED'); }
known-good panel before MEMORY_B takes it. That panel is a regression set of honest signals (confirmed trends · trusted APCs · sources the operator signed off on). Any antibody that flags good signals too often (above the line, 0.05 by default) is thrown out, and the B_CELL that made it gets pruned (the way the thymus weeds out self-attacking cells). Promoting a detector without a tolerance check breaks R16. R16's whole job is to stop the body attacking itself: a false alarm does just as much damage as a missed threat; it's only noisier about it.// R16 in code · promotion is gated by tolerance function promoteAntibody(candidate) { const fp_rate = testAgainstKnownGoodPanel(candidate); if (fp_rate > 0.05) { pruneBcell(candidate.parent_b_cell); return BE(log, 'R16_REJECTED_AUTOIMMUNE'); } ANTIBODY_REGISTRY[candidate.slot] = candidate; return BE(commitBlock, 'R16_PROMOTED'); }
PRESENT, a SENSE (or TRANSDUCE) has to come first. Raw input must be sorted into one of the §12.1 senses before it can become a packet. Building an APC packet from input with no sense attached breaks R17. The linter flags every present() call whose argument has no modality field. Knowing which sense something came from is the skin that separates outside from inside the cell.// R17 in code · sensors transduce first · APCs present second function handleRawInput(raw, sensor_id) { const sensor = SENSORY_REGISTRY[sensor_id]; const typed = sensor.transduce(raw); // SENSE / TRANSDUCE if (!typed.modality) throw new Error('R17 · untyped percept'); return BE(() => APC.present(typed), 'R17_SENSED_THEN_PRESENTED'); }
base_sensitivity × acetylcholine × (1 − leptin_satiety) × (1 − ghrelin_drift). Code that hard-sets a sensor's sensitivity without going through attentionGain(HORMONES) breaks R18. Attention is a limited allowance: turn one sensor up and another one pays for it. It pairs with R11 (effective density multiplies): attention gain is the sensor's version of a receptor's effective density.// R18 in code · attention is the gain knob · acetylcholine is the master function effectiveSensitivity(sensor) { return sensor.base_sensitivity * HORMONES.acetylcholine * (1 - HORMONES.leptin) * (1 - HORMONES.ghrelin * 0.5); } // linter detects R18 violations function lintR18(fn_source) { const hasHardcodedSens = /sensor\.sensitivity\s*[=:]\s*[\d.]+/.test(fn_source); const usesAttentionGain = /attentionGain|effectiveSensitivity/.test(fn_source); if (hasHardcodedSens && !usesAttentionGain) { return BE(flagR18, 'R18_HARDCODED_SENSITIVITY'); } }
// R19 in code · cross-modal binding before presentation function multiModalEvent(percepts) { if (percepts.length === 1) return APC.present(percepts[0]); // uni-modal · ok const bound = crossModalBind(percepts); // route through slot 128-199 if (!bound.bound_at) throw new Error('R19 · multimodal not bound'); return BE(() => APC.present(bound), 'R19_BOUND_THEN_PRESENTED'); }
These two steer design decisions, yet no parser can enforce them. Think of Rust's "fearless concurrency". It is a stance, and no linter checks it. Spec 3.2 patch note 3 writes E1 out completely: 15 hormone reads sorted onto 5 axes, feeding a 13-mood marker table with a sorter that checks in priority order.
const HORMONES = { cortisol: 0.32, // stress · ↑ when errors rise → gates tighten serotonin: 0.78, // mood · ↑ when verify scores up → spawn rate rises adrenaline: 0.41, // urgency · ↑ during high-priority → cadences accelerate oxytocin: 0.65, // trust · ↑ when quorum aligns → cross-fleet bonuses // ... 11 more · see §4.1 below for the canonical fifteen };
Each number in HORMONES is measured from what the system is doing right now, recalculated on every regulateHormones() tick, never a saved guess, never a mystery constant.
// inputs (real, simulated stream) → readouts (regulator) → somatic marker (oracle) // // signal sources ──┬─ STATE.trends · STATE.wire · STATE.artifacts · STATE.errors // ├─ EVENT.looks (heroes) · seasonPhase (wall-clock) · velocity // └─ verify-quorum · completeness · focus-spread · gate-rate
On each tick (3000 ms) the regulator works out a target and slides every hormone 35% of the way there: no jumps, no wobble. BE(null, 'HORMONES_REGULATED') finishes the round.
| hormone | axis · colour | fed by | target formula | what a high read means | mood markers |
|---|---|---|---|---|---|
| cortisol | RISK · red | errRate plus how crowded the area is | 0.18 + errRate·0.40 + saturation·0.35 | high → risk of blowback or overcrowding · routing gates clamp down | ALARMED (≥.68 ∧ adrenaline≥.58) · STRESSED (≥.60) · VIGILANT (≥.45 ∧ adrenaline≥.45) |
| serotonin | STABILITY · green | avgConf over checked trends | 0.30 + avgConf·0.60 | high → a steady, sure, checked signal · suggestions come faster | ELATED (≥.66 ∧ endorphin≥.55 ∧ cortisol<.42) · flipped in SATURATED (<.46) |
| adrenaline | URGENCY · amber | urgency = clamp(1 − minDays/60) | 0.20 + urgency·0.70 | high → a drop is close · rhythms speed up | ALARMED · HYPED · RAPID · VIGILANT |
| oxytocin | TRUST · cyan | avgQuor (mean quorum across checked trends) | 0.25 + clamp(avgQuor/3)·0.60 | high → fleets agree with each other · trust bonuses (eligible to fuse) | side route: lifts confidence through avg_trust |
| dopamine | DESIRE · magenta | avgVel (mean trend speed) | 0.20 + avgVel·0.70 | high → something is going viral · "the want" | HYPED (≥.66 ∧ adrenaline≥.50) |
| melatonin | RHYTHM · blue | seasonPhase (Feb/Mar/Sep/Oct = 1, in-between = 0.5, quiet = 0.15) | 0.65 − season·0.50 (flipped) | high → quiet season, time to rest · pacing by the calendar | side route: lowers the Oracle's drop-window score (1−mel weight) |
| testosterone | BOLDNESS · gold | tally.statement, tally.bold | 0.25 + statement/4·0.50 + bold/4·0.20 | high → loud statement pieces take over · lean toward bold routes | side route: props up ELATED through confidence and bold routing |
| endorphin | JOY · green | tally.joy + tally.clean | 0.22 + (joy+clean)/6·0.60 | high → a feel-good "dopamine dressing" streak | feeds ELATED (≥.55) |
| ghrelin | NOVELTY HUNGER · violet | hunger = 0.8 − freshRatio + (1−avgVel)·0.3 | clamp(hunger) | high → people are starving for something new · try new directions | HUNGRY (≥.64 ∧ leptin<.46) |
| leptin | SATIETY · muted | saturation + freshRatio | 0.15 + saturation·0.60 + freshRatio·0.20 | high → everyone's tired of the trend · step back and let it clear | SATURATED (≥.60 ∧ serotonin<.46) · the flip side of HUNGRY |
| norepinephrine | FOCUS · cyan | focus = (confs[0] − confs[2]) + 0.4 | 0.20 + focus·0.60 | high → attention locked on the top picks · get sharper | FOCUSED (≥.62) |
The first 11 handled risk, want and rhythm, but nothing read the making-things side of a creative studio: craft history, how well work converts, how fast it ships, and the heat of public backlash. Four more hormones plug that hole.
| hormone | axis · colour | fed by | target formula | what a high read means | mood markers · start value · loop-back |
|---|---|---|---|---|---|
| prolactin | CRAFT · gold | artifactScore = clamp(STATE.artifacts/8) · heroScore = clamp(EVENT.heroLooks/3) | 0.22 + artifact·0.40 + hero·0.40 | high → a deep memory of past work · hero pieces around · patience pays off | NURTURED (≥.62 ∧ serotonin≥.50) · starts at .38 · ↓ the R5 memory layer |
| insulin | EFFICIENCY · green | avgConf, saturation (flipped) | 0.18 + avgConf·0.45 + (1−saturation)·0.30 | high → work is actually landing · quality beats crowding | EFFICIENT (≥.62 ∧ serotonin≥.55) · starts at .48 · ↓ the R8 ledger axis |
| thyroxine | TEMPO · amber | avgVel, urgency | 0.20 + avgVel·0.40 + urgency·0.30 | high → the studio's metabolism · how quickly pieces go out | RAPID (≥.62 ∧ adrenaline≥.50) · starts at .42 · ↓ the R0 async rhythm |
| prostaglandin | INFLAMMATION · magenta | gateRate = clamp(wire.filter(GATE)/4) · errRate · saturation | 0.12 + gateRate·0.55 + errRate·0.30 + saturation·0.10 | high → risk of getting cancelled · check where things came from · hold routing | INFLAMED (≥.55 ∧ cortisol≥.50) · starts at .20 · ↓ KILLER_T loop-back |
Fifteen hormones covered the textbook set plus studio craft, but skipped the neurotransmitter band: the quick brain signals that decide arousal, attention and flow. Patch note 4 brings in five of them and rounds the panel out at 20 reads.
| hormone | axis · colour | fed by | target formula | what a high read means | mood markers · start value · loop-back |
|---|---|---|---|---|---|
| gaba | INHIBITION · violet | cortisol + adrenaline (pushes against them) | 0.25 + (cortisol + adrenaline)/2 · 0.45 | high → the body is calming itself · swings get damped · brake on | SEDATED (≥.65 ∧ glutamate<.42 ∧ adrenaline<.40) · starts at .30 · ↓ TREG counterweight |
| glutamate | EXCITATION · cyan | EVENT.eventDensity (wire events per second) · adrenaline | 0.20 + eventDensity·0.50 + adrenaline·0.20 | high → the wire is packed · whole-brain buzz · gas pedal down | AGITATED (≥.62 ∧ gaba<.40 ∧ cortisol>.45) · starts at .28 · ↓ the R0 rhythm |
| acetylcholine | ATTENTION · gold | verifyRate (trends reaching the check stage) · engramRate | 0.22 + verifyRate·0.50 + engramRate·0.25 | high → memories being written · learning at its best · attention zeroed in | ATTENTIVE (≥.60 ∧ norepinephrine≥.55) · starts at .35 · ↓ R4 graduation loop-back |
| vasopressin | TERRITORY · blue | repeatTrust (trust in the same fleet, again) · heroDensity | 0.25 + repeatTrust·0.50 + heroDensity·0.20 | high → sticking with familiar voices · the in-crowd locks in · sure of its turf | BONDED (oxytocin≥.60 ∧ ≥.55 ∧ cortisol<.50) · starts at .32 · ↓ §1c loyalty to the instance |
| anandamide | FLOW · green | norepinephrine, insulin, (1−cortisol) · the three sides of flow | 0.18 + norepinephrine·0.30 + insulin·0.30 + (1−cortisol)·0.20 | high → top form · making things smoothly for a long stretch · "in the zone" | FLOW (≥.62 ∧ dopamine≥.55 ∧ cortisol<.45) · starts at .25 · ↓ R5 memory gets deeper |
New opposite pair: gaba ⇄ glutamate: the main brake-versus-gas axis. A brain only stays alive because those two keep pulling against each other in balance, and the simulation lives by the same deal.
The a4 panel of 20 had textbook hormones, craft and brain messengers, yet ten reads a studio really needs were still missing: fleet growth, load balance, how open the audience is, protecting the canon, spending reserves, venting overload, pipeline friction, long-run health, intake gating and good stress. Patch note 7 adds all ten and fills the panel to 30 reads. Seven of them move into existing §4.7 bays that level up from SCAFFOLDED → ACTIVE; three take brand-new bays from the spare 245-254 zone.
| hormone | axis · colour | fed by | target formula | what a high read means | mood markers · §4.7 bay · loop-back |
|---|---|---|---|---|---|
| growth_hormone | GROWTH · cyan | spawnRate = clamp(nAll/24) · avgConf | 0.20 + spawnRate·0.55 + avgConf·0.20 | high → the fleet is getting bigger · cells multiplying fast | GROWING (≥.60 ∧ insulin≥.50) · bay #74 GH_NEURAL · ↓ R1 cells specializing |
| aldosterone | BALANCE · green | balance = 1 − saturation · avgQuor | 0.18 + balance·0.55 + clamp(avgQuor/3)·0.20 | high → work is spread out evenly · routing in balance | BALANCED (≥.60 ∧ serotonin≥.55) · bay #173 ALDOSTERONE · ↓ TREG load spreader |
| estrogen | RECEPTIVITY · magenta | engageRate = avgVel · clamp(avgQuor/3) · 1.6 | 0.22 + engageRate·0.55 | high → the audience is listening · the work is landing | RECEPTIVE (≥.60 ∧ oxytocin≥.55) · bay #165 ESTRADIOL_NEURAL · ↓ R4 graduation |
| progesterone | PROTECTIVE · violet | auditPosture = gateRate·0.6 + errRate·0.5 | 0.18 + auditPosture·0.55 + errRate·0.20 | high → protect the canon · save-energy mode | GUARDED (≥.55 ∧ cortisol≥.45) · bay #170 PROGESTERONE_NRL · ↓ leans toward R9 rollback |
| glucagon | MOBILIZE · amber | reserveBurn = (1−avgConf) · urgency · 1.4 | 0.18 + reserveBurn·0.65 | high → dipping into savings · the mirror of insulin | SPENDING (≥.60 ∧ adrenaline≥.50) · bay #122 GLUCAGON_NEURAL · ↓ R5 vault withdrawal |
| anp | VENTING · red | backPressure = clamp(wireLen/24) | 0.15 + backPressure·0.65 + errRate·0.15 | high → letting off pressure · the queue dumps load | VENTING (≥.55 ∧ cortisol≥.50) · bay #64 ANP_NEURAL · ↓ R0 rhythm governor |
| resistin | FRICTION · red | friction = errRate · (1−avgVel) · 1.8 | 0.15 + friction·0.55 + (1−avgVel)·0.20 | high → the pipeline is grinding · breakers keep tripping | STRAINED (≥.55 ∧ thyroxine<.40) · bay #245 RESISTIN · fresh · ↓ R0 throttle |
| adiponectin | HEALTH · green | retention = artifacts / max(nAll, 6) | 0.22 + retention·0.55 | high → the vault keeps compounding · healthy over the long haul | HEALTHY (≥.60 ∧ prolactin≥.50) · bay #110 ADIPONECTIN · ↓ R5 vault integrity |
| hepcidin | GATEKEEPING · gold | intakeRatio = gateCount / (gateCount + presentCount) | 0.15 + intakeRatio·0.55 + cortisol·0.20 | high → scouts can barely get anything in · audits on high alert | CLOSED (≥.55 ∧ cortisol≥.50) · bay #246 HEPCIDIN · fresh · ↓ KILLER_T clamps down |
| fgf21 | STRESS-FORGE · gold | forge = errRate · avgConf · 1.8 + saturation · avgConf · 0.6 | 0.15 + forge·0.65 | high → pressure that helps · stress turns into output instead of damage | FORGED (≥.55 ∧ cortisol≥.55 ∧ insulin≥.55) · bay #247 FGF21 · fresh · ↓ REWARD axis adapts |
Fresh opposite pairs: insulin ⇄ glucagon (saving vs spending) · adiponectin ⇄ resistin (long-run health vs friction) · gh ⇄ somatostatin (grow vs brake: somatostatin still only framed out in bay #56, lined up to level up in patch note 8).
The Oracle takes all 31 reads (30 hormones plus coherency), along with immune and sense activity, and returns exactly one mood: the same {state, cls, phrase} bundle everywhere it shows up (watermark, Oracle window, drop-window). The order is the whole trick; the most urgent, most precise checks go first. Patch note 4 slipped in 5 brain-messenger moods (AGITATED · FLOW · BONDED · ATTENTIVE · SEDATED) beside their nearest relatives; patch note 7 slipped in 12 more (STRAINED · VENTING · CLOSED · SPENDING · ACTIVATED · FORGED · HEALTHY · RECEPTIVE · BALANCED · GROWING · GUARDED · INHIBITED). Spec 4.0 added 3 coherency moods (DISCORDANT · TRANSITIONING · SETTLED · §4.8g), 4.0 a1 the 8 immune moods (§11.8), 4.0 a2 the 6 sense moods (§12.7): 47 in all, and not one was just tacked on at the end; each sits exactly where its precision puts it.
| rank | mood | fires when | cls · look |
|---|---|---|---|
| 1 | ALARMED | cortisol > .68 ∧ adrenaline > .58 | s-alarmed (red · beats every 0.7s) |
| 1a | UNDER_ATTACK | ifn_broadcast > .65 ∧ cortisol > .55 ∧ coherency < .50 | s-under-attack (red strobe every 0.5s) · 4.0a1 |
| 1b | INFECTED | cd8_active > .50 ∧ mhc_drift > .40 | s-infected (red-violet beat every 0.7s) · 4.0a1 |
| 1c | COMPROMISED | mhc_drift > .60 (at least one cell flunking its R14 attestation) | s-compromised (red-black flash every 0.4s) · 4.0a1 |
| 2 | INFLAMED | prostaglandin > .55 ∧ cortisol > .50 | s-inflamed (red-magenta, 0.9s) |
| 2a | DISCORDANT | coherency < .40 ∧ |slope(coherency)| > .03 | s-discordant (red-violet · quick shiver) · 4.0 |
| 2b | TRANSITIONING | .40 ≤ coherency < .70 ∧ |slope(coherency)| > .01 | s-transitioning (amber-cyan · lazy drift) · 4.0 |
| 3 | STRESSED | cortisol > .60 | s-stressed (amber beat every 1.2s) |
| 4 | AGITATED | glutamate > .62 ∧ gaba < .40 ∧ cortisol > .45 | s-agitated (cyan-red flicker, 0.8s) · a4 |
| 4a | OVERSTIMULATED | glutamate > .65 ∧ 3 or more senses going off together | s-overstimulated (cyan-red flicker, 0.6s) · 4.0a2 |
| 5 | STRAINED | resistin > .55 ∧ thyroxine < .40 | s-strained (red with dark amber, 1.4s) · a7 |
| 6 | VENTING | anp > .55 ∧ cortisol > .50 | s-venting (red-cyan, 0.8s) · a7 |
| 7 | CLOSED | hepcidin > .55 ∧ cortisol > .50 | s-closed (red-gold, holds still) · a7 |
| 7a | BLINDED | at least one sense stuck at sensitivity = 0 (its sensor broke) | s-blinded (red crossed-out eye) · 4.0a2 |
| 8 | RAPID | thyroxine > .62 ∧ adrenaline > .50 | s-rapid (amber-gold beat every 1.0s) |
| 8a | SENSITIZED | antibody_active_count > threshold ∧ adrenaline > .50 | s-sensitized (amber-cyan beat every 1.0s) · 4.0a1 |
| 8b | IMMUNE_ALERT | dendritic_packets > rate_baseline ∧ no_pattern_match_yet | s-immune-alert (amber scanning, 0.8s) · 4.0a1 |
| 8c | DAZED | chronoception drift > .50 (its sense of time is slipping) | s-dazed (violet wobble, 1.4s) · 4.0a2 |
| 9 | SPENDING | glucagon > .60 ∧ adrenaline > .50 | s-spending (amber-red, 1.1s) · a7 |
| 10 | HYPED | dopamine > .66 ∧ adrenaline > .50 | s-hyped (magenta beat every 1.6s) |
| 11 | FLOW | anandamide > .62 ∧ dopamine > .55 ∧ cortisol < .45 | s-flow (green-cyan, glowing evenly) · a4 |
| 11a | SHARPENED | acetylcholine > .65 ∧ norepinephrine > .60 ∧ ghrelin < .40 | s-sharpened (gold-cyan, tight halo) · 4.0a2 |
| 12 | ACTIVATED | glutamate > .60 (general buzz · looser than AGITATED) | s-activated (cyan glow) · a7 |
| 13 | FORGED | fgf21 > .55 ∧ cortisol > .55 ∧ insulin > .55 | s-forged (hot gold, 1.3s) · a7 |
| 14 | EFFICIENT | insulin > .62 ∧ serotonin > .55 | s-efficient (green glow) |
| 15 | ELATED | serotonin > .66 ∧ endorphin > .55 ∧ cortisol < .42 | s-elated (gold glow) |
| 15a | SETTLED | coherency > .85 ∧ |slope(coherency)| < .003 (held for 60+ ticks) | s-settled (green-gold, glowing evenly) · 4.0 |
| 15b | IMMUNIZED | memory_b_hits > .60 ∧ was UNDER_ATTACK · SETTLED now (held for 30+ ticks) | s-immunized (green-gold, glowing evenly) · 4.0a1 |
| 15c | ORIENTED | proprioception > .65 ∧ chronoception > .65 ∧ coherency > .80 | s-oriented (green-blue, holds still) · 4.0a2 |
| 16 | BONDED | oxytocin > .60 ∧ vasopressin > .55 ∧ cortisol < .50 | s-bonded (blue and cyan glowing as a pair) · a4 |
| 17 | NURTURED | prolactin > .62 ∧ serotonin > .50 | s-nurtured (gold-rose glow) |
| 18 | HEALTHY | adiponectin > .60 ∧ prolactin > .50 | s-healthy (rich green glow) · a7 |
| 19 | RECEPTIVE | estrogen > .60 ∧ oxytocin > .55 | s-receptive (gentle magenta glow) · a7 |
| 20 | BALANCED | aldosterone > .60 ∧ serotonin > .55 | s-balanced (green-cyan, holds still) · a7 |
| 21 | GROWING | growth_hormone > .60 ∧ insulin > .50 | s-growing (cyan, holds still) · a7 |
| 22 | ATTENTIVE | acetylcholine > .60 ∧ norepinephrine > .55 | s-attentive (gold-cyan focus ring) · a4 |
| 23 | HUNGRY | ghrelin > .64 ∧ leptin < .46 | s-hungry (violet) |
| 24 | SATURATED | leptin > .60 ∧ serotonin < .46 | s-saturated (greyed out) |
| 24a | NUMB | mean sensor sensitivity < .30 ∧ adaptation depth > .70 (too used to everything) | s-numb (dull grey · slow fade) · 4.0a2 |
| 25 | FOCUSED | norepinephrine > .62 | s-focused (cyan) |
| 26 | GUARDED | progesterone > .55 ∧ cortisol > .45 | s-guarded (violet-gold) · a7 |
| 26a | TOLERATED | treg > .60 ∧ ifn_broadcast < .30 ∧ coherency > .80 | s-tolerated (gentle green glow) · 4.0a1 |
| 26b | QUARANTINED | phage_active > .60 (cells walled off in a sandbox for a look) | s-quarantined (violet, frozen) · 4.0a1 |
| 27 | SEDATED | gaba > .65 ∧ glutamate < .42 ∧ adrenaline < .40 | s-sedated (dim violet, slow throb every 2.4s) · a4 |
| 28 | INHIBITED | gaba > .60 ∧ cortisol < .45 (the filter is doing its job · looser than SEDATED) | s-inhibited (blue) · a7 |
| 29 | VIGILANT | cortisol > .45 ∧ adrenaline > .45 | s-vigilant (gold) |
| ― | CALM | the fallback · nothing else matched | s-calm (green) |
The first match takes it. When a loose mood (ACTIVATED · INHIBITED) overlaps a sharper sibling (AGITATED · SEDATED), the sharper one wins simply because it ranks higher. That's how the table keeps growing: every new mood adds precision without breaking a single old check.
All 30 reads fit under five big axes. The name in brackets is the small axis: the exact part that hormone plays inside its big one. Patch note 4 (brain messengers) and patch note 7 (+10) widened the map, and still the same five big axes hold without sprouting new ones.
cortisol · prostaglandin · adrenaline · anp (VENTING) · resistin (FRICTION) · hepcidin (GATEKEEPING) · progesterone (PROTECTIVE)serotonin · oxytocin · insulin · prolactin · adiponectin (HEALTH) · aldosterone (BALANCE) · estrogen (RECEPTIVITY) · gaba (INHIBITION) · vasopressin (TERRITORY) · anandamide (FLOW)dopamine · testosterone · ghrelin · thyroxine · growth_hormone (GROWTH) · glucagon (MOBILIZE) · glutamate (EXCITATION)melatonin · leptin · norepinephrine · acetylcholine (ATTENTION)endorphin · fgf21 (STRESS-FORGE)Opposite pairs (when one runs high, it mutes the other's marker):
ghrelin ⇄ leptin: starving vs stuffedadrenaline ⇄ melatonin: hurry vs restserotonin ⇄ cortisol: steady vs danger · both hold the key to ELATEDprostaglandin ⇄ insulin: inflamed vs efficient · wellness vs alarmgaba ⇄ glutamate: the main brake vs gas · a brain only survives while they keep pulling · a4insulin ⇄ glucagon: save vs spend · the body's energy budget · a7adiponectin ⇄ resistin: long-run wellness vs a grinding pipeline · a7growth_hormone ⇄ somatostatin: grow vs brake (somatostatin still only SCAFFOLDED in bay #56 · lined up to level up in a8)cortisol high ≠ "danger in the market": it tells you this run has piled up enough errors and crowding that the mood marker should give you a heads-upinsulin high ≠ "your collection is a sure seller": it means the pool of checked trends feels sure of itself AND isn't all piled into one areaprostaglandin high ≠ "you're about to get cancelled": it means GATE events went off on the wire lately, so audits ought to get stricterEach input leads back to a state variable that was measured (in simulation). Zero baked-in guesses. Even [ stub ] feeds give truthful hormone numbers, since the numbers describe the simulation and never claim to describe the real world.
The 20 hormone numbers up top are measurements. To model mind-altering medicine truthfully, SSRI · MAOI · SNRI · atypicals, the simulation has to go one floor down: the machinery inside the synaptic gap that produces those numbers. That gap is where monoamines really hang out, where reuptake pumps and breakdown enzymes set the level, and where the receiving receptors rise, fall and react across days and weeks. The real clock those drugs run on is receptor density.
// every monoamine synapse tracks 6 dynamic variables · seed once, regulate every tick const SYNAPSE_SCHEMA = { release_rate: 0.50, // APC vesicle dump per tick · driven by presynaptic firing rate synaptic_conc: 0.30, // current concentration in the cleft · 0..1.4 (can briefly overshoot) reuptake_rate: 0.70, // KILLER_T transporter activity · fraction cleared per tick breakdown_rate: 0.20, // TREG enzyme activity · MAO/COMT/AChE degradation per tick receptor_density: 1.00, // MEMORY_T count · adapts SLOWLY to chronic exposure (days) receptor_sensitivity: 1.00, // MEMORY_T per-receptor gain · adapts even slower (weeks) }; // readout · what feeds the HORMONES layer above (§4.1) // signal = how much postsynaptic activation actually occurs function synapseReadout(syn) { return syn.synaptic_conc * syn.receptor_density * syn.receptor_sensitivity; }
// runs every 3000ms alongside regulateHormones() · drugLoad defaults to zero function synapseTick(syn, drugLoad = ZERO_DRUG) { // 1 · RELEASE — APC dumps vesicle into the cleft syn.synaptic_conc += syn.release_rate * 0.10; // 2 · REUPTAKE — KILLER_T pulls neurotransmitter back · DRUG-MODULATED const reuptake = syn.reuptake_rate * (1 - drugLoad.reuptake_block); syn.synaptic_conc -= reuptake * syn.synaptic_conc * 0.40; // 3 · BREAKDOWN — TREG enzyme degrades · DRUG-MODULATED (MAOIs) const breakdown = syn.breakdown_rate * (1 - drugLoad.mao_inhibit); syn.synaptic_conc -= breakdown * syn.synaptic_conc * 0.15; // 4 · CLAMP — concentration stays in physiological range (can briefly exceed baseline) syn.synaptic_conc = clamp(syn.synaptic_conc, 0, 1.4); // 5 · RECEPTOR ADAPTATION — MEMORY_T density tracks exposure · VERY SLOW const exposure = syn.synaptic_conc; const target_density = 1 - (exposure - 0.40) * 0.70; // chronic high → downregulate syn.receptor_density += (target_density - syn.receptor_density) * 0.0012; // ~5 weeks to half-adapt syn.receptor_density = clamp(syn.receptor_density, 0.30, 1.40); return BE(null, 'SYNAPSE_TICKED'); }
| synapse | pump (KILLER_T) | breakdown (TREG) | receptor families (MEMORY_T) | drives this hormone |
|---|---|---|---|---|
| SEROTONIN (5-HT) | SERT | MAO-A | 5-HT1A · 5-HT2A · 5-HT2C · 5-HT3 · 5-HT7 | the serotonin read |
| DOPAMINE (DA) | DAT | MAO-B · COMT | D1 · D2 · D3 · D4 · D5 | the dopamine read |
| NOREPINEPHRINE (NE) | NET | MAO-A · COMT | α1 · α2 · β1 · β2 · β3 | the norepinephrine read |
| HISTAMINE (HA) | : (drifts away) | HNMT · DAO | H1 · H2 · H3 · H4 | AROUSAL axis · framed out only |
| ACETYLCHOLINE (ACh) | CHT1 (pulls choline back in) | AChE | muscarinic M1–M5 · nicotinic α/β | the acetylcholine read (§4.1c) |
This one number is what keeps the simulation truthful about mind-altering drugs:
synaptic_conc → the read jumps up at once → better mood · side effects · jitters · a rush.synaptic_conc stays high → target_density sinks → MEMORY_T turns itself down → the read drifts back toward normal even though the drug is still around. That's why SSRIs need weeks before depression lifts.receptor_density < 1.0 that sticks around means the same dose gives a weaker signal as time goes on. The synapse really does remember what it's been exposed to.synaptic_conc drops quickly, yet receptor_density is still turned down → the read sinks under normal for weeks, until receptors climb back. SSRI discontinuation syndrome shows up in the model all by itself: nobody had to code it in.synaptic_conc stays low → target_density > 1.0 → receptors turn up · the synapse reacts harder to tiny signals. That covers antidepressant rebound, kindling, and the extra sensitivity after quitting stimulants.| part of the synapse | cell type | move (§5) | its job on the line |
|---|---|---|---|
| sending terminal | APC | PRESENT | lets a packet of messenger into the gap when commander DNA fires |
| receiving receptor cluster | MEMORY_T | REMEMBER | density follows total exposure · shifts over days to weeks |
| reuptake pump | KILLER_T | GATE | mops up the signal · what SSRIs/SNRIs/NDRIs aim at |
| breakdown enzyme | TREG | REGULATE | the balance safety net · what MAOIs aim at |
| the synapse as a whole | a piece of an organ | EXPRESS | puts out the number HORMONES reads (§4.1) |
A drug isn't a mystery number slapped onto a hormone. A drug turns one exact synapse job up or down, at an exact strength, with an exact half-life. Its blood level climbs to a plateau over days and slides away on a curve once you stop. It never reaches the read directly. It reaches the rates that make the read. Receptor density handles everything after that.
APPLY(drug, plasma_conc, synapses): shifts one or more synapse rates. Don't mix it up with REGULATE (the body tuning itself): APPLY is a push that comes from outside the body. It joins §5 as move number 16 · tier pharma.
// SSRI · selective serotonin reuptake inhibition · blocks SERT only const SSRI = { fluoxetine: { target: 'SERT', mechanism: 'block', potency: 0.78, halflife_h: 100 }, sertraline: { target: 'SERT', mechanism: 'block', potency: 0.82, halflife_h: 26 }, escitalopram: { target: 'SERT', mechanism: 'block', potency: 0.85, halflife_h: 30 }, paroxetine: { target: 'SERT', mechanism: 'block', potency: 0.80, halflife_h: 21 }, }; // MAOI · monoamine oxidase inhibition · raises ALL three monoamines const MAOI = { phenelzine: { target: 'MAO-A+B', mechanism: 'irreversible_inhibit', potency: 0.95, halflife_h: 11 }, selegiline: { target: 'MAO-B', mechanism: 'inhibit', potency: 0.80, halflife_h: 10 }, moclobemide: { target: 'MAO-A', mechanism: 'reversible_inhibit', potency: 0.75, halflife_h: 2 }, tranylcypromine:{ target: 'MAO-A+B', mechanism: 'irreversible_inhibit', potency: 0.92, halflife_h: 2 }, }; // SNRI · serotonin AND norepinephrine reuptake · blocks SERT + NET const SNRI = { venlafaxine: { targets: ['SERT', 'NET'], potency: [0.75, 0.60], halflife_h: 5 }, duloxetine: { targets: ['SERT', 'NET'], potency: [0.80, 0.70], halflife_h: 12 }, }; // ATYPICALS · receptor agonist/antagonist or unusual mechanism const ATYPICAL = { bupropion: { targets: ['NET', 'DAT'], potency: [0.55, 0.40], halflife_h: 21 }, // NDRI mirtazapine: { targets: ['5-HT2A', 'α2'], mechanism: 'antagonist', potency: [0.85, 0.70] }, // removes NE brake trazodone: { targets: ['5-HT2A', 'SERT'], mechanism: 'mixed', potency: [0.80, 0.45] }, vortioxetine: { targets: ['SERT', '5-HT1A'], mechanism: 'mixed', potency: [0.75, 0.65] }, // multimodal };
// every tick · plasma_conc tracks rising/falling drug level · 0..1 function APPLY(drug, plasma_conc, synapses) { // reuptake inhibitors (SSRI · SNRI · NDRI) — modulate KILLER_T per target if (drug.target === 'SERT' || drug.targets?.includes('SERT')) { synapses.serotonin.drug.reuptake_block = drug.potency * plasma_conc; } if (drug.target === 'NET' || drug.targets?.includes('NET')) { synapses.norepinephrine.drug.reuptake_block = drug.potency * plasma_conc; } if (drug.target === 'DAT' || drug.targets?.includes('DAT')) { synapses.dopamine.drug.reuptake_block = drug.potency * plasma_conc; } // MAO inhibitors — modulate TREG · MAO-A hits 5-HT + NE · MAO-B hits DA if (drug.target?.includes('MAO-A')) { synapses.serotonin.drug.mao_inhibit = drug.potency * plasma_conc; synapses.norepinephrine.drug.mao_inhibit = drug.potency * plasma_conc; } if (drug.target?.includes('MAO-B')) { synapses.dopamine.drug.mao_inhibit = drug.potency * plasma_conc; } // receptor antagonists — modulate MEMORY_T effective sensitivity OR remove autoreceptor brakes if (drug.mechanism === 'antagonist') { // example · mirtazapine α2-antagonist removes the NE presynaptic brake → more release synapses.norepinephrine.release_rate *= (1 + drug.potency * plasma_conc * 0.5); } return BE(null, 'DRUG_APPLIED'); } // plasma concentration kinetics · approach steady state on dose · exponential decay on stop function plasmaTick(drug_state, isDosing) { const k = Math.LN2 / (drug_state.halflife_h * 3600 * 1000); // per ms const dt = 3000; // tick interval if (isDosing) { drug_state.plasma_conc += (1.0 - drug_state.plasma_conc) * k * dt * 8; // approach 1.0 } else { drug_state.plasma_conc *= Math.exp(-k * dt); // exponential decay } return drug_state.plasma_conc; }
A made-up example trace · 90 days taking it, then 90 days off · sertraline at a treatment dose:
| day | plasma_conc | synaptic_conc (5-HT) | receptor_density | read | how it feels |
|---|---|---|---|---|---|
| 0 (nothing taken) | 0.00 | 0.40 | 1.00 | 0.40 | starting point · low mood |
| 1 (dose one) | 0.18 | 0.62 | 0.99 | 0.61 | quick bump · upset stomach · jittery |
| 7 | 0.70 | 0.85 | 0.94 | 0.80 | read going up · "is this doing anything?" |
| 14 | 0.92 | 0.88 | 0.85 | 0.75 | read levels off while receptors adjust |
| 28 | 0.98 | 0.86 | 0.72 | 0.62 | steady · a new normal · "okay, it's helping" |
| 42 | 1.00 | 0.85 | 0.68 | 0.58 | in the helpful zone · holding |
| 90 (quit) | 0.00 | 0.40 | 0.68 | 0.27 | coming off · read drops UNDER the starting point |
| 90+30 | 0.00 | 0.40 | 0.92 | 0.37 | receptors climbing back · nearly at the old normal |
| 90+90 | 0.00 | 0.40 | 1.00 | 0.40 | back to start · density fully rebuilt |
The read doesn't follow the drug alone. It follows the drug and the receptors' memory of it. So the line never jumps like a staircase. So SSRIs do help, just slowly. And so quitting cold turkey stings.
[ sim ] tag, never pass this off as medical advice.The 5 monoamines back in §4.5c are the tutorial level: the synapses any drug model has to deal with. They're nowhere near the edge of the map. Human brain chemistry runs on roughly 150–200 named messengers, peptides, gases and lipids · this section lays out the whole map as a registry of 255 bays indexed by a uint8. Five bays are ACTIVE; the others are SCAFFOLDED (named, sorted, and ready to level up) · RESERVED (free for future official picks) · or META (the lost-and-found for signals nobody has mapped yet).
SERT, DAT and NET are not synapses: they're KILLER_T cells pointed at specific synapse IDs. The §4.6 drug sheets name synapses by bay number, not by text. That turns spreading a drug's load into one sweep over 256 entries per tick · O(1) per synapse · cache-happy · ledger-happy (one block's synapse state packs into 256 tight bytes of changes). The five-monoamine model was just a small corner of this.
// every slot is the same shape · 5 actives just have populated kinetics const SYNAPSE_SLOT_SCHEMA = { id: 0, // uint8 · 0..255 name: 'SEROTONIN', // canonical SHOUT_CASE name aliases: ['5-HT'], // shorthand · clinical · trade class: 'monoamine', // taxonomy bucket · drives default rate priors transporter: 'SERT', // KILLER_T cell name · null if diffusion-only degrader: ['MAO-A'], // TREG enzymes · array · null for non-degraded receptors: ['5-HT1A', '5-HT2A', '5-HT2C', '5-HT3', '5-HT7'], kinetics: SYNAPSE_SCHEMA, // the 6-var state from §4.5a · null when SCAFFOLDED feeds_hormone: 'serotonin', // which §4.1 readout this synapse drives · null if standalone status: 'ACTIVE', // ACTIVE · SCAFFOLDED · RESERVED · META axis: 'STABILITY', // §4.3 axis assignment }; // the registry itself · indexed access by slot ID const SYNAPSE_REGISTRY = new Array(256); // 0..254 = canonical synapses (5 ACTIVE · ~200 SCAFFOLDED · ~50 RESERVED) // 255 = META · unmapped signal catch-all
| zone | class | bays | status breakdown | what's there |
|---|---|---|---|---|
| 0–4 | MONOAMINES | 5 | 5 ACTIVE | the §4.5 tutorial set |
| 5–9 | AMINO ACID TRANSMITTERS | 5 | 5 SCAFFOLDED | quick go/stop signals · GLUTAMATE · GABA · GLYCINE · ASPARTATE · D-SERINE |
| 10–19 | TRACE AMINES + ADJACENTS | 10 | 10 SCAFFOLDED | PEA · tyramine · tryptamine · octopamine · agmatine · epinephrine · and friends |
| 20–49 | OPIOID PEPTIDES | 30 | 20 SCAFFOLDED · 10 RESERVED | endorphins · enkephalins · dynorphins · endomorphins · nociceptin |
| 50–89 | HYPOTHALAMIC + PITUITARY PEPTIDES | 40 | 30 SCAFFOLDED · 10 RESERVED | OXT · AVP · CRH · TRH · GnRH · GHRH · SST · orexins · MCH · the MSH family |
| 90–129 | TACHYKININS + APPETITE + GUT-BRAIN | 40 | 35 SCAFFOLDED · 5 RESERVED | substance-P · neurokinins · NPY · CCK · GLP-1 · ghrelin · galanin · CART · AgRP · VIP · PACAP · CGRP |
| 130–159 | GASES · PURINES · ENDOCANNABINOIDS · LIPIDS | 30 | 30 SCAFFOLDED | NO · CO · H₂S · ATP · adenosine · anandamide · 2-AG · OEA · prostaglandins · leukotrienes |
| 160–189 | NEUROSTEROIDS · CYTOKINES · NEUROTROPHINS | 30 | 30 SCAFFOLDED | allopregnanolone · DHEA-S · cortisol(neural) · IL-1β/IL-6/IL-10/TNF-α · BDNF · NGF · IGF-1 |
| 190–209 | EXOTIC ENDOGENOUS + TRACE | 20 | 15 SCAFFOLDED · 5 RESERVED | NAAG · kynurenic · quinolinic · taurine · GHB(endogenous) · DMT(trace) · β-carbolines |
| 210–244 | EXOGENOUS BINDING PROFILES | 35 | 35 SCAFFOLDED | LSD · psilocin · DMT(exo) · MDMA · ketamine · THC · CBD · nicotine · caffeine · alcohol · benzo · opioids · stimulants · ibogaine |
| 245–254 | RESERVED | 10 | 10 RESERVED | spare room for new, not-yet-found or per-user custom signals |
| 255 | META · UNMAPPED | 1 | 1 META | lost-and-found · anything unsorted lands here · passed along to the META layer (§1e) |
Columns: SHOUT_CASE name · class · pump · breakdown enzyme · status. ACTIVE = hooked into synapseTick() · SCAFFOLDED = signed up, sorted, ready to level up · RESERVED = still free · META = lost-and-found.
0–4 · MONOAMINES · ACTIVE (the official five · see §4.5c)
0 SEROTONIN monoamine · SERT · MAO-A · 5-HT1A..5-HT7 · ACTIVE 1 DOPAMINE monoamine · DAT · MAO-B · COMT · D1..D5 · ACTIVE 2 NOREPINEPHRINE monoamine · NET · MAO-A · COMT · α1 · α2 · β1 · β2 · β3 · ACTIVE 3 HISTAMINE monoamine · — · HNMT · DAO · H1..H4 · ACTIVE 4 ACETYLCHOLINE cholinergic · CHT1 · AChE · M1..M5 · nAChR α/β · ACTIVE
5–9 · AMINO ACID TRANSMITTERS (fast signalling · what the cortex really runs on)
5 GLUTAMATE amino_acid · EAAT1-5 · gln synthase · NMDA · AMPA · kainate · mGluR1-8 6 GABA amino_acid · GAT1-3 · GABA-T · GABA-A · GABA-B · GABA-C 7 GLYCINE amino_acid · GlyT1-2 · — · GlyR · NMDA co-agonist 8 ASPARTATE amino_acid · EAAT · — · NMDA agonist 9 D-SERINE amino_acid · ASCT1 · D-AAO · NMDA co-agonist
10–19 · TRACE AMINES + CATECHOL NEIGHBOURS
10 PEA trace_amine · — · MAO-B · TAAR1 11 TYRAMINE trace_amine · — · MAO-A/B · TAAR1 · α-adrenergic indirect 12 TRYPTAMINE trace_amine · — · MAO-A/B · TAAR1 13 OCTOPAMINE trace_amine · — · MAO-B · TAAR1 · α-adrenergic 14 AGMATINE polyamine · — · DAO · AGMAT · imidazoline · α2 · NMDA mod 15 EPINEPHRINE monoamine · NET · MAO-A · COMT · α/β adrenergic (split from NE for adrenal-source) 16 MELATONIN_BRAIN indoleamine · — · CYP1A2 · MT1 · MT2 (neural slot · distinct from §4.1 hormone) 17 N-METHYL-PEA trace_amine · — · MAO-B · TAAR1 18 SYNEPHRINE trace_amine · — · MAO · β-adrenergic 19 3-IODOTHYRONAMINE thyronamine · — · — · TAAR1 (thyroid-trace bridge)
20–49 · OPIOID PEPTIDES
20 BETA_ENDORPHIN opioid · POMC-derived · NEP · ACE · μ-opioid · δ-opioid 21 ALPHA_ENDORPHIN opioid · POMC-derived · NEP · μ-opioid 22 GAMMA_ENDORPHIN opioid · POMC-derived · NEP · μ-opioid 23 MET_ENKEPHALIN opioid · proenkephalin · NEP · APN · δ-opioid > μ-opioid 24 LEU_ENKEPHALIN opioid · proenkephalin · NEP · δ-opioid > μ-opioid 25 DYNORPHIN_A opioid · prodynorphin · DYN-conv · κ-opioid (dysphoria axis) 26 DYNORPHIN_B opioid · prodynorphin · DYN-conv · κ-opioid 27 ALPHA_NEOENDORPHIN opioid · prodynorphin · — · κ-opioid 28 BETA_NEOENDORPHIN opioid · prodynorphin · — · κ-opioid 29 NOCICEPTIN opioid · pronociceptin · NEP · NOP receptor (pain modulation) 30 ENDOMORPHIN_1 opioid · synthesis TBD · DPP-IV · μ-opioid (high selectivity) 31 ENDOMORPHIN_2 opioid · synthesis TBD · DPP-IV · μ-opioid 32 BIG_DYNORPHIN opioid · prodynorphin · DYN-conv · κ-opioid (long form) 33 RIMORPHIN opioid · prodynorphin · — · κ-opioid 34 LEUMORPHIN opioid · prodynorphin · — · κ-opioid 35 DELTORPHIN opioid · amphibian-like · — · δ-opioid (rare endogenous) 36 PROENKEPHALIN opioid · precursor · cleaved · pre-stage marker 37 PRODYNORPHIN opioid · precursor · cleaved · pre-stage marker 38 POMC precursor · pituitary · cleaved · feeds β-endorphin · MSH · ACTH 39 ACTH peptide · pituitary · NEP · MC2R (cortisol release driver) 40-49 RESERVED · opioid family · open for novel endogenous ligands
50–89 · HYPOTHALAMUS + PITUITARY PEPTIDES
50 OXYTOCIN nonapeptide · OXT · oxytocinase · OXTR · vasopressin V1a cross 51 VASOPRESSIN nonapeptide · AVP · vasopressinase · V1a · V1b · V2 (ADH) 52 CRH peptide · paraventricular · CRH-BP · CRHR1 · CRHR2 (stress axis upstream) 53 TRH tripeptide · paraventricular · PAP · TRHR1 (thyroid axis upstream) 54 GnRH decapeptide · arcuate · MMP-9 · GnRHR (reproductive axis upstream) 55 GHRH peptide · arcuate · DPP-IV · GHRHR (growth axis upstream) 56 SOMATOSTATIN peptide · paraventricular · NEP · SSTR1-5 (inhibitor · brakes GH/TSH/insulin) 57 KISSPEPTIN peptide · arcuate · MMP-9 · KISS1R (deep upstream · puberty + GnRH) 58 OREXIN_A peptide · lateral hypothalamic · — · OX1R · OX2R (wakefulness) 59 OREXIN_B peptide · lateral hypothalamic · — · OX2R (wakefulness) 60 MCH peptide · lateral hypothalamic · — · MCHR1 · MCHR2 (appetite + REM sleep) 61 ALPHA_MSH peptide · POMC-derived · NEP · MC3R · MC4R (appetite suppression) 62 BETA_MSH peptide · POMC-derived · NEP · MC4R 63 GAMMA_MSH peptide · POMC-derived · NEP · MC3R · MC5R 64 ANP_NEURAL peptide · atrial-brain · NEP · NPR-A (natriuretic · neural slot) 65 BNP peptide · brain · NEP · NPR-A (cardiac stress) 66 CNP peptide · endothelium · NEP · NPR-B 67 ADRENOMEDULLIN peptide · adrenal/neural · NEP · CRLR + RAMP2/3 68 NEUROTENSIN peptide · diffuse · NEP · NTSR1-3 69 NEUROMEDIN_N peptide · diffuse · NEP · NTSR2 70 NEUROMEDIN_B peptide · diffuse · NEP · BB1 (smooth muscle + CNS) 71 NEUROMEDIN_U peptide · diffuse · — · NMUR1 · NMUR2 72 RELAXIN_3 peptide · nucleus incertus · — · RXFP3 (arousal · feeding · stress) 73 PROLACTIN_NEURAL protein · pituitary slot · — · PRLR (neural form · §4.1 has body form) 74 GH_NEURAL protein · pituitary slot · IDE · GHR (neural form) 75 LH glycoprotein · pituitary · — · LHCGR (gonadal trigger) 76 FSH glycoprotein · pituitary · — · FSHR (gonadal trigger) 77 TSH glycoprotein · pituitary · — · TSHR (thyroid trigger) 78 PRL_BINDING_PEPT modulator · pituitary · — · prolactin regulator 79 GALANIN_LIKE_PEPT peptide · arcuate · — · GALR1 · GALR2 (feeding · GnRH) 80-89 RESERVED · hypothalamic/pituitary headroom
90–129 · TACHYKININS + HUNGER + GUT-TO-BRAIN PEPTIDES
90 SUBSTANCE_P tachykinin · TAC1 · NEP · ACE · NK1R (pain + emotion) 91 NEUROKININ_A tachykinin · TAC1 · NEP · NK2R 92 NEUROKININ_B tachykinin · TAC3 · NEP · NK3R 93 NEUROPEPTIDE_K tachykinin · TAC1 · NEP · NK2R 94 NEUROPEPTIDE_GAMMA tachykinin · TAC1 · NEP · NK2R 95 HEMOKININ_1 tachykinin · TAC4 · NEP · NK1R (peripheral immune) 96 ELEDOISIN tachykinin · external · — · NK2R (homolog · scaffolded for completeness) 97 NPY peptide · arcuate · DPP-IV · Y1 · Y2 · Y4 · Y5 (appetite · anxiolysis) 98 PYY peptide · L-cells · DPP-IV · Y2 (fullness) 99 PP peptide · pancreas · DPP-IV · Y4 (pancreatic polypeptide · satiety) 100 CCK peptide · I-cells · TACE · CCK1R · CCK2R (satiety · gut-brain) 101 GLP_1 peptide · L-cells · DPP-IV · GLP1R (satiety + insulin) 102 GLP_2 peptide · L-cells · DPP-IV · GLP2R (gut growth) 103 GIP peptide · K-cells · DPP-IV · GIPR (insulin trigger) 104 GASTRIN peptide · G-cells · — · CCK2R (acid secretion) 105 SECRETIN peptide · S-cells · — · SCTR (bicarbonate) 106 MOTILIN peptide · M-cells · — · MLNR (gut motility) 107 GHRELIN_NEURAL peptide · arcuate · — · GHSR (hunger · neural slot) 108 OBESTATIN peptide · stomach · — · GPR39 (anti-ghrelin) 109 LEPTIN_NEURAL protein · adipose-brain · — · LEPR (satiety · neural slot) 110 ADIPONECTIN protein · adipose · — · AdipoR1 · AdipoR2 (efficiency) 111 AMYLIN peptide · β-cells · — · AMY1-3 (slow glucose) 112 GALANIN peptide · diffuse · — · GALR1 · GALR2 · GALR3 (calming) 113 CART peptide · arcuate · — · GPR160 (reward · satiety) 114 AgRP peptide · arcuate · — · MC3R/MC4R antagonist (hunger) 115 POMC_NEURAL precursor · arcuate · cleaved · feeds α-MSH · β-endorphin (satiety neural) 116 CGRP peptide · trigeminal · — · CALCRL + RAMP1 (migraine · vasodilation) 117 CALCITONIN_NEURAL peptide · C-cells · — · CTR (calcium · neural slot) 118 ADRENOMEDULLIN_2 peptide · brain · — · CRLR + RAMP1/2/3 119 INTERMEDIN peptide · brain · — · CRLR (cardiovascular regulation) 120 VIP peptide · suprachiasm · — · VPAC1 · VPAC2 (circadian · vasodilation) 121 PACAP peptide · diffuse · — · PAC1 · VPAC1/2 (stress + neuroprotection) 122 GLUCAGON_NEURAL peptide · α-cells · DPP-IV · GCGR (energy mobilize · neural slot) 123 SECRETIN_FAMILY peptide group · — · multi-receptor (umbrella slot) 124 RFRP_3 peptide · DMH · — · NPFFR1 (GnRH brake) 125 QRFP_26RFa peptide · LH/VMH · — · QRFPR (appetite stimulant) 126 KISSPEPTIN_RELATED peptide family · — · KISS1R variants 127 COCAINE_AMPH_REG CART variant · — · GPR160 (CART-3 form) 128 BRS_3_LIGAND peptide · orphan · — · BRS3 (bombesin receptor 3 · metabolic) 129 NESFATIN_1 peptide · NUCB2-derived · — · unknown receptor (satiety · anxiety)
130–159 · GASES · PURINES · ENDOCANNABINOIDS · LIPID MESSENGERS
130 NITRIC_OXIDE gas · NOS1/2/3 · spontaneous · sGC + diffusion (retrograde signal) 131 CARBON_MONOXIDE gas · HO-1/2 · spontaneous · sGC (heme-derived signaling) 132 HYDROGEN_SULFIDE gas · CBS · CSE · spontaneous · K-ATP channels (slow signaling) 133 AMMONIA gas · multiple · GS · pH + NMDA modulation 134 ATP purine · vesicular · ectonucleotidases · P2X · P2Y 135 ADP purine · ATP-derived · ENTPDs · P2Y12 136 AMP purine · derived · NT5E · adenosine precursor 137 ADENOSINE purine · ENT1/2 · ADA · A1 · A2A · A2B · A3 (caffeine antagonist target) 138 GUANOSINE purine · ENT · PNP · GPR (orphan · neuroprotection) 139 GTP purine · vesicular · NTPDase · P2Y 140 cAMP_EXTRA second-msg · PDEs · degraded · extracellular adenosine source 141 cGMP_EXTRA second-msg · PDEs · degraded · extracellular guanosine source 142 ANANDAMIDE endocannab · — (on-demand) · FAAH · CB1 · CB2 · TRPV1 143 AG_2 endocannab · — (on-demand) · MAGL · CB1 · CB2 (most abundant) 144 NOLADIN_ETHER endocannab · trace · FAAH · CB1 145 VIRODHAMINE endocannab · trace · FAAH · CB1 antagonist · CB2 agonist 146 NADA endocannab · trace · FAAH · CB1 · TRPV1 (N-arachidonoyl dopamine) 147 PEA_ETHANOLAMIDE endocannab-like · — · FAAH · PPAR-α (palmitoylethanolamide) 148 OLEAMIDE lipid · — · FAAH · CB1 (sleep-induction) 149 OEA lipid · — · FAAH · PPAR-α (satiety · oleoylethanolamide) 150 LPA lipid · ATX · LPP · LPA1-6 (neurite growth) 151 S1P lipid · SK1/2 · S1P-lyase · S1PR1-5 (neural differentiation) 152 PGE2 eicosanoid · COX-1/2 · 15-PGDH · EP1-4 (fever · inflammation) 153 PGD2 eicosanoid · COX-1/2 · 15-PGDH · DP1 · DP2 (sleep · allergy) 154 PGF2_ALPHA eicosanoid · COX-1/2 · 15-PGDH · FP (smooth muscle) 155 LTB4 eicosanoid · LOX-5 · — · BLT1 · BLT2 (chemotaxis) 156 LTC4_D4_E4 eicosanoid · LOX-5 · — · CysLT1 · CysLT2 (bronchoconstriction) 157 THROMBOXANE_A2 eicosanoid · COX/TXAS · — · TP (vasoconstriction) 158 RESOLVIN_E1 resolvin · LOX-5/15 · — · ChemR23 (inflammation resolution) 159 PROTECTIN_D1 protectin · LOX-15 · — · resolution mediator
160–189 · NEUROSTEROIDS · CYTOKINES · NEUROTROPHINS
160 ALLOPREGNANOLONE neurosteroid · 3α-HSD/5α-red · — · GABA-A PAM (anxiolytic · sedative) 161 PREGNENOLONE neurosteroid · CYP11A1 · — · sigma-1 · GABA-A modulator 162 PREGNENOLONE_S neurosteroid · sulfotrans · — · NMDA positive · GABA-A negative 163 DHEA_NEURAL neurosteroid · CYP17 · — · sigma-1 · NMDA · GABA-A neg 164 DHEA_S neurosteroid · sulfotrans · steroid sulfatase · sigma-1 165 ESTRADIOL_NEURAL neurosteroid · aromatase · CYP · ERα · ERβ · GPER (neuroprotection) 166 ESTRONE neurosteroid · 17β-HSD · CYP · ERα · ERβ 167 ESTRIOL neurosteroid · placental · CYP · ERα · ERβ (pregnancy) 168 TESTOSTERONE_NRL neurosteroid · CYP17 · CYP · AR · aromatized to estradiol 169 DHT neurosteroid · 5α-reductase · CYP · AR (high affinity) 170 PROGESTERONE_NRL neurosteroid · 3β-HSD · — · PR · GABA-A via metabolite 171 CORTISOL_NEURAL neurosteroid · 11β-HSD1 · 11β-HSD2 · GR · MR (neural slot · §4.1 has systemic) 172 CORTICOSTERONE neurosteroid · CYP11B1 · — · GR · MR 173 ALDOSTERONE neurosteroid · CYP11B2 · — · MR (fluid axis) 174 IL_1_BETA cytokine · processed by caspase-1 · IL-1R1 (fever · sickness behavior) 175 IL_6 cytokine · multi-source · — · IL-6R + gp130 (acute-phase) 176 IL_10 cytokine · Treg · M2 · — · IL-10R (anti-inflammatory) 177 IL_18 cytokine · processed by caspase-1 · IL-18R (IFN-γ inducer) 178 TNF_ALPHA cytokine · macrophage · sTNF-R · TNFR1 · TNFR2 (apoptosis · inflammation) 179 IFN_GAMMA cytokine · NK · Th1 · — · IFNGR1/2 (antiviral) 180 IFN_ALPHA cytokine · pDC · — · IFNAR1/2 (antiviral · type I) 181 BDNF neurotrophin · multiple · MMP-9 · TrkB · p75NTR (LTP · plasticity) 182 NGF neurotrophin · multiple · — · TrkA · p75NTR (sympathetic + sensory) 183 GDNF neurotrophin · glia · — · GFRα1 + RET (dopaminergic) 184 CNTF neurotrophin · glia · — · CNTFR (motor neurons) 185 NT_3 neurotrophin · multiple · — · TrkC 186 NT_4_5 neurotrophin · multiple · — · TrkB 187 FGF_2 growth-fact · multiple · — · FGFR1-4 (neurogenesis) 188 IGF_1 growth-fact · liver-brain · — · IGF1R (growth · repair) 189 EPO_BRAIN cytokine · kidney-brain · — · EPOR (neuroprotection)
190–209 · RARE HOME-GROWN + TRACE
190 D_ASPARTATE amino_acid · ASCT2 · D-AAO · NMDA agonist (developmental) 191 NAAG dipeptide · NAALADase · NAALADase · mGluR3 agonist · NMDA modulator 192 KYNURENIC_ACID tryptophan-deriv · KAT · — · NMDA antagonist · α7 nAChR antagonist 193 QUINOLINIC_ACID tryptophan-deriv · KMO · — · NMDA agonist (excitotoxic) 194 HOMOCYSTEIC_ACID amino_acid · trace · — · NMDA agonist (rare) 195 TAURINE amino_acid · TauT · — · GABA-A · glycine receptor 196 BETA_ALANINE amino_acid · TauT · — · GlyR weak · GABA-A modulator 197 GHB_ENDOGENOUS SCFA · GHB synthase · GHB-DH · GHB-R · GABA-B (sleep regulation) 198 DMT_TRACE indoleamine · INMT · trace · MAO-A · 5-HT2A · sigma-1 (endogenous trace) 199 FIVE_MEO_DMT_TRACE indoleamine · INMT · trace · MAO-A · 5-HT1A > 5-HT2A 200 BUFOTENIN indoleamine · INMT · trace · MAO-A · 5-HT2A · 5-HT1A (endogenous trace) 201 HORDENINE trace_amine · — · MAO · TAAR1 (very trace) 202 SALSOLINOL TIQ alkaloid · dopamine-aldehyde · — · μ-opioid + D-receptor 203 TETRAHYDRO_IQ TIQ alkaloid · catechol + aldehyde · — · trace · alcohol metabolism 204 PINOLINE β-carboline · trace · MAO · 5-HT2A · MAO inhibitor 205 HARMAN β-carboline · trace · MAO · MAO-A inhibitor (very trace) 206 ADRENOCHROME oxidized epi · trace · — · debated · trace marker 207 AGMATINE_2 polyamine · trace · DAO · imidazoline (overlap w/ slot 14) 208 CARNOSINE dipeptide · carnosine synthase · — · weak · pH buffer 209 ANSERINE dipeptide · trace · — · weak · related to carnosine
210–244 · OUTSIDE-SUBSTANCE BINDING SHEETS (not made by the body. Each bay stores a drug→receptor sheet for §4.6 APPLY)
210 LSD psychedelic · — · — · 5-HT2A partial agonist · 5-HT2C · 5-HT1A · D2 211 PSILOCIN psychedelic · — · — · 5-HT2A agonist · 5-HT2C · 5-HT1A 212 DMT_EXOGENOUS psychedelic · — · MAO-A (rapid) · 5-HT2A · sigma-1 213 MESCALINE psychedelic · — · MAO · 5-HT2A · 5-HT2C 214 MDMA entactogen · SERT release + reuptake · MAO substrate · 5-HT2A · oxytocin release 215 MDA entactogen · SERT release · MAO · 5-HT2A · slightly more psychedelic than MDMA 216 KETAMINE dissociative · — · CYP2B6/3A4 · NMDA antagonist · κ-opioid weak · BDNF↑ 217 ESKETAMINE dissociative · — · CYP · NMDA antagonist (higher affinity than ketamine) 218 PCP dissociative · — · CYP · NMDA antagonist · sigma · D2 219 DXM dissociative · — · CYP2D6 · NMDA antagonist · sigma · SERT 220 NITROUS_OXIDE dissociative · diffusion · exhaled · NMDA antagonist · κ-opioid 221 THC cannabinoid · — · CYP2C9/3A4 · CB1 partial agonist · CB2 222 CBD cannabinoid · — · CYP3A4/2C19 · CB1 NAM · 5-HT1A · TRPV1 · GPR55 223 NICOTINE stimulant · — · CYP2A6 · nAChR α4β2 + α7 agonist (acute) → desensitize (chronic) 224 CAFFEINE stimulant · — · CYP1A2 · A1 + A2A adenosine antagonist · weak PDE inhibitor 225 THEOPHYLLINE stimulant · — · CYP1A2 · adenosine antagonist · PDE inhibitor 226 ALCOHOL depressant · — · ADH/ALDH · GABA-A PAM · NMDA antagonist · 5-HT3 · glycine 227 GHB_EXOGENOUS depressant · — · GHB-DH · GHB-R · GABA-B agonist 228 BENZODIAZEPINE depressant · — · CYP3A4 · GABA-A α1/2/3/5 PAM at BZ site 229 BARBITURATE depressant · — · CYP · GABA-A PAM (different site) · direct opener at high dose 230 Z_DRUG depressant · — · CYP3A4 · GABA-A α1 PAM (zolpidem · zopiclone class) 231 OPIOID_MU opioid agonist · — · CYP · μ-opioid full agonist (morphine · oxycodone · fentanyl) 232 OPIOID_KAPPA opioid agonist · — · — · κ-opioid agonist (salvinorin A · dynorphin mimics) 233 OPIOID_DELTA opioid agonist · — · — · δ-opioid agonist (analgesia · less euphoric) 234 BUPRENORPHINE opioid mixed · — · CYP3A4 · μ partial agonist · κ antagonist (treatment) 235 NALOXONE opioid antag · — · — · μ · κ · δ antagonist (reversal) 236 NALTREXONE opioid antag · — · — · μ > κ antagonist (treatment · sustained) 237 AMPHETAMINE stimulant · DAT/NET REVERSE-TRANSPORT release · MAO inhibitor · TAAR1 238 METHAMPHETAMINE stimulant · DAT/NET reverse-transport · 5-HT release · higher CNS penetration 239 COCAINE stimulant · DAT/SERT/NET reuptake inhibitor · Na-channel local anesthetic 240 MODAFINIL eugeroic · DAT weak inhibitor · orexin · histamine release 241 METHYLPHENIDATE stimulant · DAT/NET inhibitor (Ritalin) 242 AMPHETAMINE_MIXED stimulant · DAT/NET release (Adderall · d+l isomers) 243 IBOGAINE complex · NMDA · κ-opioid · SERT · α3β4 nAChR · 5-HT2A (anti-addiction) 244 SCOPOLAMINE anticholinergic · — · CYP · muscarinic M1 antagonist (rapid antidepressant probe)
245–254 · RESERVED (free bays · new · not yet discovered · per-user custom signals · a7 took 3 of them)
245 RESISTIN adipokine · adipose tissue · — · CAP1 · TLR4 (pipeline friction · §4.1d) · a7 246 HEPCIDIN peptide · liver · — · ferroportin (gatekeeping intake · §4.1d) · a7 247 FGF21 growth-fact · liver-brain · — · FGFR1c + β-Klotho (stress-forge · §4.1d · companion to FGF_2 at #187) · a7 248-254 RESERVED · open · contributors may register · class TBD · status RESERVED
255 · META · UNMAPPED_SIGNAL (lost-and-found · hands off to the §1e META layer)
255 UNMAPPED_SIGNAL meta · any signal whose ID is not yet classified · routes to META verify pipeline
A framed-out bay goes live once all three boxes are ticked:
kinetics object carries every one of the 6 §4.5a numbers, none left null.feeds_hormone links to a §4.1 read, or axis adds a new direction that §4.3 has written down.[ stub ] tag).// promotion is a single function call · idempotent · auditable function promoteSlot(slot_id, kinetics, feed) { const slot = SYNAPSE_REGISTRY[slot_id]; if (slot.status !== 'SCAFFOLDED') return BE(log, 'PROMOTION_REJECTED'); slot.kinetics = kinetics; slot.feeds_hormone = feed; slot.status = 'ACTIVE'; slot.promoted_at = Date.now(); return BE(() => commitBlock({ event: 'SLOT_PROMOTED', slot_id }), 'SLOT_ACTIVE'); }
255 covers human brain chemistry with room left over. Only three situations call for a bigger register:
Moving over is routine: grow SYNAPSE_REGISTRY from Array(256) to Array(65536), let bay 65535 take over the META role, and leave bays 0–254 exactly as they are. The layout's id field gets wider. Blocks pick up one byte that records registry width, so older blocks still read fine. And if the move goes sideways, R9 detect-and-rollback still has your back.
Back in §4.5b, receptor change was just one straight delay (one variable · one rate · 0.0012 each tick). That shortcut came from spec 3.2, and §4.6d already confessed that "in a real body at least five clocks tangle together." Spec 4.0 unpacks the shortcut. The lone receptor_density number splits into five variables stacked in a cascade, each on its own biological clock, each gating the one after it. The simulation picks up a new measured state too. Coherency tells you how well those five clocks agree at any instant.
Here's what the spec 3.2 a5 synapse tick (step 5 of §4.5b) did:
// v3.2 a5 · single-lag receptor adaptation · accurate in shape, wrong in tempo const target_density = 1 - (exposure - 0.40) * 0.70; syn.receptor_density += (target_density - syn.receptor_density) * 0.0012;
A single rate, a single variable. It shows "receptors dial down when exposure stays high", yet it completely misses:
Every one of those is its own variable with its own rate. They talk to each other · each clock feeds the next, slower one. Spec 4.0 gives that cascade a name.
| clock | variable | what's happening in the body | real half-life | per-tick delay | key papers |
|---|---|---|---|---|---|
| 1 · QUICKEST | coupling | GRK tagging · the G-protein lets go | seconds to minutes | 0.0500 | Lefkowitz · Caron (1980s onward) |
| 2 | surface_count | β-arrestin arrives · clathrin pulls receptors in | minutes to hours | 0.0050 | β-arrestin (Lefkowitz 1990) |
| 3 | total_count | broken down in lysosomes or recycled via endosomes | hours to days | 0.0005 | Sorkin · von Zastrow (2002) |
| 4 | synth_rate | CREB / ΔFosB / gene expression shifts | days to weeks | 0.00005 | Nestler · Hyman (1990s onward) |
| 5 · SLOWEST | circuit_weight | rewiring · spine reshaping · LTP/LTD | weeks to months | 0.000005 | Bliss · Lømo (1973) · Kandel (2000) |
The delay is counted per 3000ms simulation tick. Time to settle ≈ 4 / lag ticks · times 3 seconds for real time. Clock 1 settles in roughly 4 simulated minutes · clock 5 in roughly 7 simulated days. What makes the cascade feel biological is the gap between clocks (10× at every step).
// v4.0 · five-timescale receptor adaptation · replaces single-lag in §4.5b step 5 function adaptReceptors(syn) { const exposure = syn.synaptic_conc; // SCALE 1 · COUPLING — fastest · driven directly by exposure (seconds-minutes) const coupling_target = 1 - (exposure - 0.40) * 0.80; syn.coupling += (coupling_target - syn.coupling) * 0.0500; // SCALE 2 · SURFACE_COUNT — gated by coupling · β-arrestin response (minutes-hours) const surface_target = clamp(syn.coupling * 1.05, 0.30, 1.10); syn.surface_count += (surface_target - syn.surface_count) * 0.0050; // SCALE 3 · TOTAL_COUNT — gated by surface_count · degrade-or-recycle (hours-days) const total_target = clamp(syn.surface_count * 1.02, 0.30, 1.20); syn.total_count += (total_target - syn.total_count) * 0.0005; // SCALE 4 · SYNTH_RATE — gated by total_count · gene expression (days-weeks) const synth_target = clamp(syn.total_count * 1.00, 0.40, 1.20); syn.synth_rate += (synth_target - syn.synth_rate) * 0.00005; // SCALE 5 · CIRCUIT_WEIGHT — gated by synth_rate · structural plasticity (weeks-months) const circuit_target = clamp(syn.synth_rate * 1.00, 0.50, 1.10); syn.circuit_weight += (circuit_target - syn.circuit_weight) * 0.000005; return BE(null, 'RECEPTORS_ADAPTED'); }
Every clock is held in check by the one above it. No slow clock wanders off solo. Over their own settle time, the slow clocks carry a memory of the fast ones. That is where coherency comes from: when things are settled, all five variables land on the same number, because each one is aiming at the next.
// the readout that synapseReadout() now uses · replaces syn.receptor_density function effectiveDensity(syn) { const surface_ratio = syn.surface_count / Math.max(syn.total_count, 0.01); return syn.coupling * surface_ratio * syn.total_count * syn.synth_rate * syn.circuit_weight; } // synapseReadout from §4.5a · now multiplied by full cascade function synapseReadout(syn) { return syn.synaptic_conc * effectiveDensity(syn) * syn.receptor_sensitivity; }
Five numbers get multiplied together. Let one crash and the signal crashes with it. Keep all five lined up and the signal is simply whatever the gap concentration delivers. That's the molecular root of tolerance (the slow numbers sink), withdrawal (the fast numbers are back but the slow ones aren't yet), and recovery (the slow numbers finally catch up).
// coherency · how aligned the 5 scales are · the v4 anchor reading function coherency(syn) { const scales = [ syn.coupling, syn.surface_count, syn.total_count, syn.synth_rate, syn.circuit_weight, ]; const mean = scales.reduce((a, b) => a + b, 0) / scales.length; const variance = scales.reduce((sum, x) => sum + (x - mean) ** 2, 0) / scales.length; return clamp(1 - variance * 4, 0, 1); // 1 = aligned · 0 = scattered } // system-wide coherency · average across all ACTIVE synapses function systemCoherency() { const active = SYNAPSE_REGISTRY.filter(s => s?.status === 'ACTIVE'); return active.reduce((sum, s) => sum + coherency(s.kinetics), 0) / active.length; }
Coherency for the whole system joins HORMONES (§4.1) as a measured read. Number 21 (next to the first 11, the craft pack of 4 and the brain-messenger band of 5).
const HORMONES = { // ... 20 readouts from a3 + a4 ... coherency: 0.78, // system stability across timescales · 1 = settled · 0 = discordant }; // regulateHormones() adds the coherency readout each tick function regulateCoherencyReadout() { HORMONES.coherency += (systemCoherency() - HORMONES.coherency) * 0.35; }
Coherency gets its own fresh axis · the §4.3 COHERENCY axis (number 9, next to the eight already there). No other axis has just one read in it, because coherency is how well everything else lines up.
Slotted into the §4.2 priority table between INFLAMED and STRESSED:
| rank | mood | fires when | cls · look |
|---|---|---|---|
| 2a | DISCORDANT | coherency < .40 ∧ |slope(coherency)| > .03 | s-discordant (red-violet · quick shiver) |
| 2b | TRANSITIONING | .40 ≤ coherency < .70 ∧ |slope(coherency)| > .01 | s-transitioning (amber-cyan · lazy drift) |
| 15a | SETTLED | coherency > .85 ∧ |slope(coherency)| < .003 (held for 60+ ticks) | s-settled (green-gold, glowing evenly) |
DISCORDANT and TRANSITIONING outrank STRESSED because a body that's changing tells you more than a body that's simply busy. SETTLED sits down near ELATED in rank, yet it's the one mood that demands coherency held over time, which makes it the loudest "you can believe this signal" light the system has.
| day | plasma | coupling | surface | total | synth | circuit | coherency | mood |
|---|---|---|---|---|---|---|---|---|
| 0 (nothing taken) | 0.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 0.99 | SETTLED · starting point |
| 0+1h (kicks in) | 0.10 | 0.74 | 0.99 | 1.00 | 1.00 | 1.00 | 0.48 | DISCORDANT · shock |
| 1 | 0.18 | 0.71 | 0.86 | 0.99 | 1.00 | 1.00 | 0.44 | DISCORDANT |
| 7 | 0.70 | 0.66 | 0.68 | 0.83 | 0.98 | 1.00 | 0.62 | TRANSITIONING |
| 14 | 0.92 | 0.64 | 0.65 | 0.69 | 0.86 | 0.99 | 0.69 | TRANSITIONING |
| 28 | 0.98 | 0.63 | 0.64 | 0.65 | 0.71 | 0.92 | 0.78 | TRANSITIONING |
| 42 | 1.00 | 0.63 | 0.63 | 0.64 | 0.66 | 0.78 | 0.86 | nearly SETTLED |
| 90 (steady) | 1.00 | 0.63 | 0.63 | 0.63 | 0.63 | 0.65 | 0.96 | SETTLED · helping |
| 90+1h (quit) | 0.20 | 0.95 | 0.65 | 0.63 | 0.63 | 0.65 | 0.37 | DISCORDANT · bounce-back |
| 91 (a day later) | 0.04 | 0.99 | 0.78 | 0.64 | 0.63 | 0.65 | 0.38 | DISCORDANT · coming off |
| 97 (a week later) | 0.00 | 1.00 | 0.97 | 0.74 | 0.65 | 0.65 | 0.61 | TRANSITIONING |
| 120 (a month later) | 0.00 | 1.00 | 1.00 | 0.96 | 0.78 | 0.69 | 0.75 | TRANSITIONING |
| 180 (3 months later) | 0.00 | 1.00 | 1.00 | 1.00 | 0.95 | 0.88 | 0.91 | nearly SETTLED |
| 270 (6 months later) | 0.00 | 1.00 | 1.00 | 1.00 | 1.00 | 0.98 | 0.99 | SETTLED · back to normal |
Spot the lopsidedness: starting the drug gives a short DISCORDANT blip (one hour) and then weeks of TRANSITIONING. Stopping it gives a far longer DISCORDANT stretch, because the slow clocks (synth, circuit) are still tuned for the drug while the quick clock (coupling) has already bounced back. That is SSRI discontinuation syndrome at the molecular level. The coherency model produces it without a single line of special-case code.
0.05, 0.005, 0.0005, 0.00005, 0.000005) are for show · picked so the cascade unfolds at a believable pace, not pulled from receptor lab studies.* 1.05, * 1.02, and so on) · real chatter runs through second messengers (cAMP, Ca²⁺) and gene switches (CREB, ΔFosB) this manual never names.[ sim ] tag still sticks · none of this is medical. Spec 4.0 makes the outline more truthful, not the size.Each function in the codebase ought to fit one of these moves. If it won't fit, either it's filed under the wrong label or it's doing two jobs and needs splitting in half.
| move | what it does | cell type | tier |
|---|---|---|---|
| TRANSCRIBE | a commander writes or rewrites DNA | HELPER_T | commander |
| EXPRESS | a cell carries out the DNA · a helper goes off | any cell | cell |
| PRESENT | a cell holds up a signal · sends out a packet | APC | cell |
| GATE | a cell stops a signal | KILLER_T | cell |
| REMEMBER | a cell saves a signal · passes it to an engine | MEMORY_T | cell + engine |
| REGULATE | the body moves a threshold | TREG | organ + emotion |
| DISTILL | an engine squeezes memory into a kernel | engine | memory → kernel |
| WAKE | a kernel starts up into working mode | kernel | kernel |
| ARCHIVE | SELF vaults it · "could matter one day" | : | self · arrived in 3.1 |
| PRUNE | SELF shreds it · "stopped helping" | : | self · arrived in 3.1 |
| SEED | grows repeatable state out of a seed value | : | genesis · arrived in 3.2 |
| GENESIS | mixes (public, private) into an instance · ≡ BOOT | engine | genesis · arrived in 3.2 |
| COMMIT | adds a block onto the per-user chain · ≡ PUBLISH | : | ledger · arrived in 3.2 |
| VERIFY | META checks a block's signal before letting it in | : | meta · arrived in 3.2 |
| ROLLBACK | steps the running instance back to an earlier block it trusts | : | ledger · arrived in 3.2 |
| APPLY | a drug pushing in from outside · shifts synapse rates (SSRI · MAOI · SNRI · atypical) | : | pharma · arrived in 3.2 a5 |
| WITNESS | an unrelated instance checks a peer block's META signal · counts toward the K-of-N quorum (R12) | : | meta · arrived in 5.0 |
| QUARANTINE | fences off a block with no witnesses or a fishy look · on hold until quorum or ROLLBACK (R9) | : | meta · arrived in 5.0 |
| NEUTRALIZE | latch onto one threat and switch it off · by antibody or by killing the cell | ANTIBODY · CD8_KILLER_T | immune · arrived in 4.0 a1 |
| OPSONIZE | stick a flag on a target so PHAGE_T can swallow it · an antibody + complement coat | antibody + complement | immune · arrived in 4.0 a1 |
| PHAGOCYTOSE | swallow it and break it down inside a sandbox · the macrophage job | PHAGE_T | immune · arrived in 4.0 a1 |
| ATTEST | sign a hash of the current code + state for the audit trail · the R14 MHC_I/MHC_II tick-by-tick promise | every cell (MHC_I) · APC (MHC_II) | immune + ledger · arrived in 4.0 a1 |
| ESCALATE | shout a cytokine alarm + steer the response with chemokines | DENDRITIC_T | immune · arrived in 4.0 a1 |
| SENSE | a sensor reports a labelled reading from one sense · hands it to an APC | SENSOR (any §12 sense) | sensory · arrived in 4.0 a2 |
| TRANSDUCE | turn raw outside input into a labelled sense packet · the skin's job | SENSOR transducer | sensory · arrived in 4.0 a2 |
| ADAPT | a sensor retunes its sensitivity over time · on the five §4.8 COHERENCY clocks | SENSOR adaptation_state | sensory · arrived in 4.0 a2 |
APPLY is the lone move that starts outside the body. Every other move is the system steering itself; APPLY is the push from outside. §4.6 uses it to model mind-altering drugs by shifting the reuptake (KILLER_T) and breakdown (TREG) rates. It never pokes the hormone read directly.
expressScoutCell(sub, emission) // cell EXPRESS-es its DNA gateMnpiSignal(packet) // KILLER_T GATEs MNPI transcribeIntakeDirective(cmd, dna_new) // commander TRANSCRIBEs rememberQuorumArtifact(artifact) // MEMORY_T REMEMBERs distillSessionEngine(engine) // engine DISTILLs to kernel wakeKernel(kernel_name) // kernel WAKEs at boot archiveQualifiedArtifact(a) // SELF ARCHIVEs the survivor pruneStaleArtifact(a, now) // SELF PRUNEs the unused
cellPopulationByType: how many of each cell type are alive right nowdnaVersionByCommander: the map of today's dna_version numbershormonalLevels, where the Oracle's dials sit right nowsomaticMarker: the mood phrase showing right nowartifactRegistry: the engine's memory shelfkernelSeeds: seeds that survive to the next bootselfArchive: the long-term vault (what DEEP STORE produces)prunedAt: a time-stamped log of recent shreds (open to audit)STEM_POOL_SIZE: how much the unity mesh can holdCORTISOL_GATE_THRESHOLD: how stress moves a gateCELL_TYPES: the full list of cell kindsDNA_LIFETIME_MS: how long an order lasts before it's written againKERNEL_TTL_MS: how far into the future a kernel sticks aroundSELF_ARCHIVE_THRESHOLD: the completeness a thing needs to enter the vaultSELF_PRUNE_AGE_MS: how long something can sit unused before it's shredded| sticker | it means | where you'll see it |
|---|---|---|
| + PROD | shipped, watched, and wired to alerts | top of the file · watermark · status bar |
| ± PROD | real build · some real data · simulated wherever real data costs money | top of the file · watermark · "more or less production" |
| − PROD | a demo, full stop · never show it as live | top of the file · watermark · a big loud warning |
Telling the truth is part of the deal with whoever's watching. The usual industry "production-ready" label is a fib. Choose the sticker that matches reality.
Molecular Coding stitches things together; it didn't invent them. Thirty-five different schools of work, woven into one way of writing code.
| year | who | what they gave us | where it lands here |
|---|---|---|---|
| 1885 | Ebbinghaus | The forgetting curve · memories nobody uses fade away | SELF's shred rule |
| 1966 | Belady | Swapping out the least-recently-used page | SELF's shred policy |
| 1973 | Hewitt | The actor model · the become building block | cells + BE |
| 1974 | Kahn | Kahn process networks · data flowing between processes | how organs are wired |
| 1975 | Plotkin · Sussman · Steele | Continuation-passing style (CPS) | the BE building block |
| 1978 | Lamport | Time, clocks and event order · there is no master clock | R0 Async System |
| 1979 | Huttenlocher | Growing brains trim their synapses | SELF's shredding |
| 1980 | Treisman | The binding problem · scraps → one picture | the split ↔ merge slider |
| 1983 | Lieberman · Hewitt | Garbage collection by generation | SELF's vault + shred tiers |
| 1986 | Erlang at Ericsson | Supervisor trees · actors running in production | chiefs + commanders |
| 1987 | Harel | Statecharts · every transition spelled out | BE labels |
| 1992 | Squire | Know-how memory vs know-that memory | kernels vs engines |
| 1994 | Damasio | The somatic marker hypothesis | the Oracle's hormones · the watermark |
| 1994 | Forrest et al. | Immune systems built in software | cell types · GATE |
| 1997 | Picard | Affective computing | the Oracle as feelings |
| 2004 | Dean · Ghemawat | MapReduce · split first, merge after | the split ↔ merge slider |
| 2005 | Stickgold · Walker | Sleep locks memories in | SELF vaulting during quiet stretches |
| 2013 | Mnih et al. | Experience replay (DQN) | engines · replaying memory |
| 2014 | Reactive Manifesto | Runs on messages · stretches · bounces back · answers fast | R0 Async System |
| 2017 | Hall · Rosbash · Young | Nobel prize for body-clock genes | kernels · waking up |
| 1996 | Rivest | SPKI / SDSI · login from derived keys, no certificate authority | §1c instance = auth · 3.2 |
| 1990s+ | Mark Miller | Object capabilities · "holding the capability IS the permission" | §1c instance = auth · 3.2 |
| 2002 | Yarvin et al. | Urbit · a personal OS rebuilt the same way from a seed | §1c genesis loop · 3.2 |
| 2005 | Torvalds | Git · a commit history per repo · addressed by content | §1d per-user chain · 3.2 |
| 2010s | Genode · seL4 | Microkernels built on capabilities | §1c instance rules · 3.2 |
| 2018 | Brock · Harris-Braun | Holochain · built around agents · each user keeps a source chain | §1d per-user chain · 3.2 |
| 2019 | FIDO Alliance · W3C | WebAuthn / passkeys · the "device is the login" shortcut | §1c shortcut version of the genesis loop · 3.2 |
| 1999 | Castro · Liskov | PBFT · Byzantine fault tolerance that works in practice · a K-of-N quorum rides out bad actors | §1e META witness quorum · 5.0 |
| 2013 | Laurie et al. | Certificate Transparency · outside witnesses record & check · nobody holds sole power | §1e META peer witnesses · 5.0 |
| 1932 | Walter Cannon | Homeostasis · the body keeps its set-points with negative feedback | §20 homeostasis · 4.0 a3 |
| 1988 | Sterling & Eyer | Allostasis · staying steady by changing ahead of time · allostatic load | §20 allostasis · 4.0 a3 |
| 1975 | Saltzer & Schroeder | Protecting information · least privilege · layered defense · safe defaults when things fail | §18 R24 · §22 defense-in-depth · 4.0 a3 |
| 1988 | Bernard Baars | Global Workspace Theory · awareness as a broadcast into one shared space | §21 sentience goal · the mood broadcast · 4.0 a3 |
| 2004 | Giulio Tononi | Integrated Information Theory · Φ · awareness as integration you can't split apart | §21 · §4.8 coherency as a read shaped like Φ · 4.0 a3 |
| 2014 | Google · BeyondCorp | Zero-trust networks · trust comes from proof, never from where you sit | §22 R28 zero-trust interior · 4.0 a3 |
Weaving it all into one house style that hangs together: that part is what Drewless brings. Naming the stack, enforcing it function by function, insisting on cell types, DNA versions and BE labels, turning the watermark into a mood badge, writing vault + shred as named policies. None of it is computer science. It's engineering culture, and that's valuable in its own way.
It's on your screen right now. Keep it as MOLECULAR-CODING.html at the top of the project. Tomorrow's you begins from this page.
Stamp cell_type on each helper. Stamp dna_version on each commander. Add a BE(fn, label) building block that leaves a trace.
Relabel the Oracle's trip-lines with hormone names. The math stays put; only the labels change. People and LLMs can both find them.
cost: about 30 linesSwap the plain "ORACLE · 87%" for a mood phrase (CALM/VIGILANT/STRESSED/FATIGUED) worked out from the hormone levels.
cost: about 20 linesA consolidateMemory() that runs on a timer sweeps the artifact shelf, squeezes look-alike artifacts together, and hands them to commanders as input for the next round. That shuts the DNA growth loop.
When a session closes, boil the engines down into kernelSeeds inside localStorage. When a session opens, load those kernels and warm up the commanders' orders ahead of time. Memory and habits that carry from one session to the next.
Write an archiveRule(item) and a pruneRule(item, now) for each store that lives a long time. A timed selfTick() fires every hour. Show a SELF panel listing what just got vaulted or shredded. Forgetting you can audit.
A Node pre-commit script that calls out: helpers missing cell_type; commanders missing dna_version; if-branches missing BE; long-lived stores with no vault/shred rules; function names that don't begin with one of the fifteen moves.
Ship a real boot(privateSeed) that sparks an instance out of (public, private), commits block one of a per-user chain, and paints a screen made just for that person. DREWLESS-DEMO.html carries a bare-bones version. The production build derives keys per area in the BIP-32 HD style and keeps its chain in IndexedDB.
Get the META validator pattern standing (peer witnesses or a spread-out validator crew). Nail the signal down: instance_pubkey + signed(block_hash) + freshness_proof. Hook detect → rollback into the demo. This stage clears the spec 3.3 horizon and hands the manual its first full attack surface to toughen up.
This manual has carried immune parts ever since spec 3.0. APC · KILLER_T · MEMORY_T · HELPER_T · TREG already form the attack-or-tolerate pipeline built into the R1 cell types. Spec 3.2 a4 parked cytokines in framed-out §4.7 bays (#174-180: IL-1β · IL-6 · IL-10 · IL-18 · TNF-α · IFN-γ · IFN-α). Spec 4.0 tied the 30-hormone panel and the synapse machinery together through COHERENCY (§4.8). Spec 4.0 a1 names the defense crew that runs through every one of those pieces. It brings 5 layers, a 12-cell roster (5 already here + 7 fresh), five fresh moves, three fresh laws, fifteen attack-to-defense pairings, an antibody registry built like the synapse registry, and a section on what this layer does and does not do.
| layer | personality | cell types | what the body uses |
|---|---|---|---|
| INNATE | never off · catches anything · quick (ms to sec) | BARRIER_T · PATTERN_T · PHAGE_T · NK_T · COMPLEMENT cascade | skin · mucous linings · macrophages · NK cells · complement |
| ADAPTIVE | trained · aims at one thing · slow the first round, quick afterwards (min to days) | B_CELL · ANTIBODY · PLASMA_CELL · CD8_KILLER_T | B cells · IgG/IgM/IgA/IgE · plasma cells · killer T cells |
| MEMORY | what's kept for good (days to a lifetime) | MEMORY_B · MEMORY_T (already here) · BONE_MARROW | memory B/T cells · long-living plasma · the bone marrow stockpile |
| SURVEILLANCE | cells proving who they are, nonstop | MHC_I (each cell) · MHC_II (APC) · DENDRITIC_T · CYTOKINE · CHEMOKINE | MHC class I/II · dendritic cells · cytokines · chemokines |
| TOLERANCE | stop the body attacking itself (damage from false alarms) | THYMUS_GATE · TREG (already here) | thymus training · regulatory T cells |
| cell | move | job | status |
|---|---|---|---|
| APC | PRESENT | holds up signals · on the R1 roster already | here since 3.0 |
| HELPER_T | TRANSCRIBE | the CD4 conductor · a commander · on the R1 roster already | here since 3.0 |
| KILLER_T | GATE | stops bad signals · on the R1 roster already | here since 3.0 |
| MEMORY_T | REMEMBER | saves signals · on the R1 roster already | here since 3.0 |
| TREG | REGULATE | calms the response down · on the R1 roster already | here since 3.0 |
| BARRIER_T | GATE | bouncer at the input door · URL allowlist · payload kind · size caps · origin · CSP-like headers | a1 rookie |
| PATTERN_T | PRESENT/GATE | fingerprint matcher · SQL-i · XSS · SSRF · path-traversal · prompt-injection · works like YARA | a1 rookie |
| PHAGE_T | PHAGOCYTOSE | runs things in a sandbox · iframe · VM · worker · capped memory and time · poisonous results get binned | a1 rookie |
| NK_T | GATE/ESCALATE | spots strange behaviour · a normal profile for each cell · straying from it triggers quarantine | a1 rookie |
| B_CELL | PRESENT/REMEMBER | the antibody workshop · builds new detectors after meeting a brand-new attack · somatic hypermutation | a1 rookie |
| CD8_KILLER_T | NEUTRALIZE | takes out our own cells once they've turned (MHC drift) · the answer to supply-chain attacks | a1 rookie |
| DENDRITIC_T | ESCALATE | a travelling APC · carries cytokine alarms to every corner · the "we're being hit" messenger | a1 rookie |
NEUTRALIZE: grab one threat and shut it down (ANTIBODY or CD8 kill)OPSONIZE: flag a target so PHAGE_T can swallow itPHAGOCYTOSE: swallow it and break it down in a sandboxATTEST: sign a hash of the code + state right now for the audit trail (MHC_I/II · powers R14)ESCALATE: shout a cytokine alarm + steer the response with chemokines| attack | how the immune crew answers | works together with |
|---|---|---|
| XSS injection | PATTERN_T (fingerprint) → BARRIER_T (enforces CSP) → DENDRITIC_T (ESCALATE) | cortisol and prostaglandin climb |
| SQL injection | PATTERN_T → BARRIER_T (parameterized queries) → CYTOKINE alarm | prostaglandin (INFLAMMATION) |
| CSRF | MHC_I (proves the origin · R14) → BARRIER_T (SameSite plus a token check) | vasopressin (TERRITORY) |
| Prompt injection (LLM) | PATTERN_T (cleans the input) → PHAGE_T (tools run in a sandbox) → CD8 (takes out a helper that drifted) → IFN broadcast | cortisol plus gaba INHIBITION |
| Supply-chain attack | MHC_I (package hash changed · R14) → NK_T (odd behaviour) → CD8_KILLER_T (quarantine) | hepcidin (GATEKEEPING) |
| Phishing | ANTIBODY (list of known-bad domains) → BARRIER_T (allowlist) → a warning for the user | progesterone (PROTECTIVE) |
| Brute force | COMPLEMENT cascade (N misses → clamp down) → CYTOKINE (rate limit) → TREG eases off after a cool-down | cortisol feeding an adrenaline cascade |
| DDOS | IFN_BROADCAST → ANTIVIRAL_STATE (turn away new connections) → COMPLEMENT (drop fishy IPs) | anp (VENTING) plus resistin (FRICTION) |
| Malware running | MHC_I (code proof · R14) → PHAGE_T (sandbox) → NK_T (behaviour) → CD8 once confirmed | prostaglandin plus cortisol |
| Zero-day exploit | B_CELL (builds a new fingerprint) → AFFINITY_MATURATION (sharpens it) → MEMORY_B (shared vault) | acetylcholine (ATTENTION) · adiponectin (HEALTH) |
| Inside job | NK_T (normal-behaviour profile per user) → MHC_II (each action proven) → walk the §1d chain like a detective | norepinephrine (FOCUS) · vasopressin (TERRITORY) |
| Data theft | CHEMOKINE (strange outbound traffic) → NK_T (sudden volume jump) → CYTOKINE (rate limit) → CD8 | hepcidin · norepinephrine |
| Account hijack | the §1c GENESIS LOOP defends by design (a stolen password can't rebuild your instance) + ANTIBODY for credential-stuffing fingerprints | the §1c · §1d · §1e stack |
| Privilege escalation | §1c instance walls → TREG smothers escalation events → CD8 when MEMORY_B recognises it | cortisol plus adrenaline (VIGILANT) |
| Replay attack | §1d PER-USER CHAIN (each action commits a block · a replay = hashes don't match) → META says no → R9 ROLLBACK | R9 detect-and-rollback |
Antibodies are full-status artifacts, and they need byte-sized addresses for the very reasons synapses do (see R10): O(1) lookups · cache-happy · ledger-happy · and spreading them works like spreading a drug load, one 256-slot sweep per tick.
// every antibody slot · same shape · stable once published (R15) const ANTIBODY_SLOT_SCHEMA = { id: 0, // uint8 · 0..255 (parallel namespace to §4.7 synapses) name: 'XSS_GENERIC_SCRIPT_TAG', // canonical SHOUT_CASE threat_class: 'injection', // taxonomy bucket signature: /<script[^>]*>/, // detector primitive · regex · ML model · hash · etc. affinity: 0.92, // confidence · used by R11 effective density parent_b_cell: 'BCELL_PROD_2', // who synthesized this (audit trail) status: 'ACTIVE', // ACTIVE · SCAFFOLDED · SUPERSEDED · RESERVED supersedes: null, // older slot ID if this replaces an earlier antibody (R15) ttl: 90 * DAY_MS, // auto-deprecate after this · re-validation refreshes federation: 'LOCAL', // LOCAL · SHARED_TRUSTED · SHARED_OPEN (v5 frontier) }; // allocation map · 10 ranges · mirrors §4.7 structure 0-19 INJECTION xss · sql-i · ssrf · path-traversal · prompt-injection 20-39 AUTH credential-stuffing · session-hijack · csrf · clickjacking 40-59 EXFIL data egress patterns · DNS exfil · timing channels 60-79 MALWARE binary signatures · behavior patterns · ransomware 80-99 SUPPLY_CHAIN dep hash drift · maintainer takeover patterns 100-119 PHISHING_SOCIAL domain typosquats · spoofed senders · prompt manipulation 120-139 RATE_ANOMALY brute force · ddos · scraping patterns 140-159 INSIDER privilege drift · access pattern anomalies 160-179 PROTOCOL replay · downgrade · injection at protocol layer 180-199 ZERO_DAY B_CELL-generated novel patterns · pending tolerance check 200-244 RESERVED open for novel threat classes 245-254 PER_USER_CUSTOM instance-specific antibodies · not federation-shared by default 255 UNMAPPED_THREAT catch-all · routes to META layer §1e for triage
// v3.2-legacy tag.attestations: [{cell_id, code_hash, state_hash, ts}] field. R8 (commit every version) takes that on board with no changes at all.Placed in the priority table next to their closest relatives (never just tacked on at the end). The DANGER tier gets 3; URGENCY gets 2; STATE/WIN gets 3.
| mood | tier | fires when | cls · look |
|---|---|---|---|
| UNDER_ATTACK | DANGER | ifn_broadcast > .65 ∧ cortisol > .55 ∧ coherency < .50 | s-under-attack (red strobe every 0.5s) |
| INFECTED | DANGER | cd8_active > .50 ∧ mhc_drift > .40 | s-infected (red-violet beat every 0.7s) |
| COMPROMISED | DANGER | mhc_drift > .60 (at least one cell flunking its R14 attestation) | s-compromised (red-black flash every 0.4s) |
| SENSITIZED | URGENCY | antibody_active_count > threshold ∧ adrenaline > .50 | s-sensitized (amber-cyan beat every 1.0s) |
| IMMUNE_ALERT | URGENCY | dendritic_packets > rate_baseline ∧ no_pattern_match_yet | s-immune-alert (amber scanning, 0.8s) |
| QUARANTINED | STATE | phage_active > .60 (cells walled off in a sandbox for a look) | s-quarantined (violet, frozen) |
| TOLERATED | STATE | treg > .60 ∧ ifn_broadcast < .30 ∧ coherency > .80 | s-tolerated (gentle green glow) |
| IMMUNIZED | WIN | memory_b_hits > .60 ∧ was UNDER_ATTACK · SETTLED now (held for 30+ ticks) | s-immunized (green-gold, glowing evenly) |
SETTLED (§4.8g · 4.0) and IMMUNIZED (§11.8 · 4.0 a1) chain together: a body that was UNDER_ATTACK → passed through TRANSITIONING → landed on SETTLED with MEMORY_B refreshed → ends up IMMUNIZED. The mood strip tells the whole immune story as it happens.
regulateHormones() or any running tick.regulateHormones(), those moods stay silent. They're written down, not measured. Any screen showing them must carry the [ sim ] tag.Quote spec 4.0 a1 honestly like this: "the manual now names every big immune defense part · none of the 8 immune moods fire live so far · the 7 rookie cell types are SCAFFOLDED, waiting on tolerance checks under R16 to level up · the antibody registry has guaranteed room but nothing in it · the §4.7 cytokine bays (#174-180) are still SCAFFOLDED · the naming is finished; the security is not."
The manual already has receptor machinery (§4.5), receptor adaptation (§4.8 COHERENCY) and an attention hormone (acetylcholine, §4.1c). Yet it has no official way to name how raw signals turn into labelled sense streams before they hit the cell pipeline. §12 fills that hole. The senses are the skin between the outside world and the body. Input shows up raw, gets translated into a labelled sense, tunes its sensitivity over time, and gets filtered by attention before it becomes a packet an APC can PRESENT.
| sense | faces | what it picks up | colour · attention hormone |
|---|---|---|---|
| SIGHT | exteroception | the visual feed · UI events · screenshots · images coming in · spectrum analysis | cyan · acetylcholine |
| HEARING | exteroception | the audio feed · voices · sound events · waveforms · pitch · rhythm | magenta · acetylcholine |
| TOUCH | exteroception | contact and motion · clicks · gestures · drags · haptics · pointer trails | gold · norepinephrine |
| SMELL | exteroception | a match with no context · fingerprint hits · YARA · odd-pattern prints · the "something's fishy" sense | violet · norepinephrine + PATTERN_T (§11) |
| TASTE | exteroception | quality once you've tried it · check scores · completeness · correctness · the "ooh, this is good" sense | green · serotonin |
| PROPRIOCEPTION | interoception | the system knowing itself · which cells are running · how deep the queues are · fleet status · the "I know where my arms are" sense | blue · oxytocin |
| NOCICEPTION | interoception | pain · error signals · exceptions · stack traces · breakers tripping · rides on §4.7 cytokine bays #174-180 | red · prostaglandin + cortisol |
| THERMOCEPTION | interoception | load · heat · CPU · memory squeeze · lag · the warmth of urgency | amber · adrenaline |
| CHRONOCEPTION | interoception | sense of time · deadlines · how old things are · seasonPhase · drop windows · §4.1 already covers part of it | blue · melatonin + adrenaline |
// every sensor tracks 6 fields · same shape as a synapse · same R11 + §4.8 discipline const SENSOR_SCHEMA = { modality: 'SIGHT', // SHOUT_CASE from the nine in §12.1 transducer: (raw) => typedPacket, // world-input → typed modality packet receptive_field: [0, 1], // range it responds to · saturation bounds base_sensitivity: 0.80, // at rest · before R18 attention gain adaptation_state: { // 5-timescale lag · §4.8 compliant coupling: 1.00, // fastest · acute desensitization (sec) surface_count: 1.00, // minutes · habituation total_count: 1.00, // hours-days · tolerance synth_rate: 1.00, // days-weeks · baseline drift circuit_weight: 1.00, // weeks-months · "I don't notice that anymore" }, attention_gate: 'acetylcholine', // which hormone modulates focus (R18) threshold: 0.20, // when does it fire feeds: 'APC.eventStream', // where the typed packet goes };
Sensors are full-status artifacts with their own uint8 address space. The R10 rule (SYNAPSE_ID fits in one byte) stretches to cover sensors, and the same sweep that spreads a drug load also spreads attention gain across the whole sensor array, one tick after another.
0-8 CORE 9 MODALITIES SIGHT · HEARING · TOUCH · SMELL · TASTE PROPRIOCEPTION · NOCICEPTION · THERMOCEPTION · CHRONOCEPTION 9-63 DOMAIN-SPECIFIC markup-sense · network-sense · rhythm-sense · novelty-sense · color-sense · semantic-sense · provenance-sense · ledger-sense 64-127 PER-FLEET SPECIALIZED RUNWAY-CAM eye · COMPLIANCE nose · SOCIAL-PULSE ear · BEAUTY-COUNTER taste · EDITORIAL chrono · etc. 128-199 CROSS-MODAL synesthesia · "this sound looks angry" · sight+touch bind · sound+chrono bind (R19 enforcement zone) 200-244 EXOGENOUS / SYNTHETIC LLM-scoring · API-monitoring · observability traces · external-feed adapters 245-254 RESERVED per-user custom sensors 255 META unmapped percept · routes to META (§1e) for triage
SENSE: a sensor reports a labelled reading (the act of noticing)TRANSDUCE: turn raw outside input into a labelled sense packet (the skin's job)ADAPT: a sensor retunes its sensitivity as time passes (on the five §4.8 COHERENCY clocks)| mood | tier | fires when | cls · look |
|---|---|---|---|
| NUMB | STATE | mean sensor sensitivity < .30 ∧ adaptation depth > .70 (too used to everything) | s-numb (dull grey · slow fade) |
| OVERSTIMULATED | DANGER | glutamate > .65 ∧ 3 or more senses going off together | s-overstimulated (cyan-red flicker, 0.6s) |
| DAZED | URGENCY | chronoception drift > .50 (its sense of time is slipping) | s-dazed (violet wobble, 1.4s) |
| ORIENTED | WIN | proprioception > .65 ∧ chronoception > .65 ∧ coherency > .80 | s-oriented (green-blue, holds still) |
| SHARPENED | WIN | acetylcholine > .65 ∧ norepinephrine > .60 ∧ ghrelin < .40 | s-sharpened (gold-cyan, tight halo) |
| BLINDED | DANGER | at least one sense stuck at sensitivity = 0 (its sensor broke) | s-blinded (red crossed-out eye) |
SHARPENED teams up with FORGED (§4.2 a7) and FLOW (§4.2 a4) as the three "power-up" moods. The whole system at max strength. ORIENTED pairs with SETTLED (§4.8g), when the senses and the clocks both say "steady", the body is fully in one piece.
[ sim ] tag keeps it truthful: any dashboard with all-green sensors has to show which ones are being watched and which ones have tuned out.Quote spec 4.0 a2 honestly like this: "the manual now names every big sense · none of the 6 sense moods fire live so far · the 9 senses are SCAFFOLDED in SENSORY_REGISTRY · binding across senses (R19) has a name but no code · R18's attention gate hands acetylcholine the job it was waiting for · the naming is finished; the perception is not."
The body touches the outside world through exactly one surface: its skin. Every incoming byte passes through it before any cell, hormone or immune crew gets a look. §14 names that border. It is suspicious of everything by default, and it normalizes, checks and rate-limits the outside before letting any of it in.
// the skin · one boundary the whole world crosses first function skin(rawInput, origin) { const canon = canonicalize(rawInput); // one form · no double-encode · NFC if (!allowList.accepts(canon, origin)) // acid mantle · default-deny return BE(shed, 'PERIMETER_REJECTED'); if (!rateLimiter.admit(origin)) // sweat · thermoregulate under load return BE(shed, 'PERIMETER_THROTTLED'); const tagged = { data: canon, origin, t: SIM.now, provenance: sha256(canon) }; return BE(() => presentToImmune(tagged), 'PERIMETER_ADMITTED'); // hand to §11 langerhans }
| part of the skin | what it does in the body | what it becomes in code |
|---|---|---|
| epidermis | the very outer wall · keratinocytes | input checks · a schema + type gate |
| acid mantle | about pH 5 · unfriendly to invaders | an allow-list that starts at "no" · normalization |
| Langerhans cells | APC lookouts living in the skin | a WAF at the edge · §11 PATTERN_T on the border |
| desquamation | the top layer keeps flaking off and growing back | rotating surfaces and keys · a short-lived edge · throwaway tokens |
| sweat / thermoregulation | sheds heat to stay at the set-point | rate limits · dropping load when pressure builds |
| wound healing | clot → fill in → grow new skin over it | self-repair · a breached surface redeploys itself (together with §15) |
| melanin | soaks up damage from background radiation | hardening · ASLR / canaries against everyday attacks |
[ scaffolded ] · the allow-list + normalizer are real patterns; attack-specific rules belong to each fleet.The bloodstream is the delivery network every cell leans on. It ferries molecular packets (R0 · MDCP), drops off resources and hauls away trash in one closed loop. The most important thing blood does is hemostasis. The moment a vessel tears, because a cell got hacked or a fleet started failing, the body clots. It plugs the tear so one failure cannot drain the whole body dry.
// hemostasis · breach detected → seal before it cascades function hemostasis(cell, breach) { vasoconstrict(cell.vessel); // shed traffic away from the wound const plug = circuitBreaker(cell).trip(); // platelet plug · stop the bleed const wall = bulkhead(cell).quarantine(breach); // fibrin mesh · isolate (§11 QUARANTINED) commitBlock({ event: 'CLOT', cell: cell.id, breach }); // R8 · evidence on-chain return BE(healOrPrune, 'BLAST_RADIUS_CONTAINED'); }
| part | what it does in the body | what it becomes in code |
|---|---|---|
| heart | pushes the loop around on a beat | the scheduler · R0's async pump pushing MDCP along |
| arteries | high-pressure delivery lines | the fast-lane message bus · VIP lanes |
| capillaries | the final handoff at the cell's door | delivery to each cell · the last hop |
| platelets | first on the scene when something tears | circuit breakers · trips that fail fast |
| fibrin clot | a mesh that plugs and walls off | a bulkhead · the quarantine line (§11) |
| vasoconstriction | squeezes the vessel shut under threat | dropping load · draining connections off an unwell node |
| white cells on the move | immune crews riding the blood | §11 cells sent over the bus to the incident |
[ scaffolded ]The body lives on a breath: pull in what fuels the work, push out what would poison it, at a pace that bends with demand. §16 names the resource and energy budget: breathe in compute and credits, breathe out trash and heat. It also sets the rhythm that makes R0's async system tick.
// the breath · intake adapts to demand, bounded against thrash function breathe(budget) { const demand = queueDepth() + co2(); // unprocessed work + accumulated waste budget.rate = clamp(budget.rate + (demand - budget.target) * 0.2, budget.min, budget.max); // faster under load · capped inhale(budget.rate); // acquire compute / credits / tokens exhale(); // flush logs · GC · dump heat (→ §18 renal) return BE(null, 'BREATH'); }
| part | what it does in the body | what it becomes in code |
|---|---|---|
| inhale | oxygen in | grabbing resources / credits / tokens |
| exhale | carbon dioxide out | flushing trash · logs / GC / shedding heat |
| respiratory rate | breaths per minute rise with effort | autoscale rhythm · the backpressure governor |
| alveoli | a huge surface for swapping gases | I/O capacity · the connection-pool surface |
| diaphragm | the muscle that powers each breath | the timer or scheduler that sets R0's tick |
| hyperventilation | breathing too much · alkalosis | thrashing · the grab-everything failure |
| holding the breath | choosing to stop breathing for a bit | a backpressure pause · admission control |
SIM tick that powers §4: it names the habit (intake that bends and has a cap) without claiming to be a production resource manager. What R22 enforces is very real, though: intake you can't slow down is a denial-of-service attack on yourself, just waiting for its moment. [ sim ]Whatever the body swallows stays untrusted until it's been broken down and shown safe to absorb. §17 covers the intake pipeline: mouth → stomach → gut. It also keeps the habit of remembering that parsed never means trusted. The gut wall picks what gets into the body and what heads out as waste.
// digestion · break down → absorb only validated nutrients → reject the rest function digest(bolus) { const chyme = stomach(bolus); // acid breakdown · parse / decompose const brokeDown = microbiome(chyme); // vetted, SANDBOXED 3rd-party processors const nutrients = brokeDown.filter(schemaValid); // gut wall · absorb only what's proven expel(brokeDown.reject(schemaValid)); // waste → §19 renal / colon return BE(() => absorb(nutrients), 'NUTRIENTS_ABSORBED'); }
| organ | what it does in the body | what it becomes in code |
|---|---|---|
| mouth | takes it in · chews it up | ingest · tokenize |
| stomach | acid · rough breakdown | parse · split into structure |
| small intestine | pulls nutrients through the wall | moves checked data inside |
| gut wall · tight junctions | a picky barrier · "leaky gut" means it failed | the trust line · parsed ≠ trusted |
| microbiome | trillions of helper processors living in partnership | dependencies that are checked + sandboxed · the supply chain |
| colon | takes back water · pushes out waste | salvage what's left of value · flush the remainder (§19) |
| enteric nervous system | the "second brain" · runs on its own | processing at the edge · no trip back to the center |
[ scaffolded ]A body needs a frame to stand up and muscle to push on the world. §18 covers the weight-bearing structure (the skeleton, its scaffolding and its fixed interfaces) and the action layer (the muscles, anything the system does beyond itself). One rule covers both: an actor can only move inside the range it declared.
// actuation · the muscle moves only within its declared range function actuate(effector, intent) { if (!effector.range.contains(intent)) // range of motion = least privilege return BE(flagDislocation, 'R24_OUT_OF_RANGE'); const tension = proprioception(effector); // §12 · feel the load before pulling return BE(() => effector.contract(intent, tension), 'ACTUATED'); }
| part | what it does in the body | what it becomes in code |
|---|---|---|
| skeleton | the weight-bearing frame | the architecture · interfaces and contracts that don't shift |
| joints | movement limited to certain directions | the API surface · permitted transitions (R3 BE) |
| skeletal muscle | movers you control on purpose | actions going out · writes · deploys · spends |
| smooth muscle | runs on its own · in the background | autonomic jobs · housekeeping movers |
| tendons / ligaments | tie muscle to bone and bone to bone | bindings with types · contracts holding the pieces together |
| range of motion | how far a joint can safely bend | least privilege · the declared longest reach (R24) |
| proprioception | knowing where your arm is | §12 inner sensing · feel the load before you move |
[ scaffolded ]Without nonstop cleaning, blood would poison itself in a matter of days. Meet the kidney of §19: it runs all of the circulating volume through a filter again and again, pulls toxins and oddities out, keeps what is still good, and holds the body's fixed rules for fluid, salts and pH inside a narrow band. Garbage collection, anomaly filtering and homeostasis in one organ.
// the nephron · filter everything, reabsorb the good, excrete the rest function renalTick(blood) { const filtrate = glomerulus(blood); // pull everything small out of flow const keep = filtrate.filter(withinInvariants); // reabsorb · homeostatic bounds const toxins = filtrate.filter(isAnomalous); // flag poison / leaks / runaway excrete(toxins); // detox · flush compromised state return BE(() => reabsorb(keep), 'BLOOD_FILTERED'); }
| part | what it does in the body | what it becomes in code |
|---|---|---|
| glomerulus | the big first filter for blood | scan the whole stream · pull everything aside to inspect |
| tubule reabsorption | takes back glucose, water and ions | hold on to state that still helps (SELF archive · §1a) |
| excretion | toxins → urine | flush poisoned, leaked or hacked state |
| electrolyte / pH balance | keeps the fixed rules tight | quota / rate / balance limits (§20) |
| RAAS feedback | hormones steering blood pressure | §4.1 aldosterone (BALANCE) completes the loop |
| dialysis | a filter outside the body when kidneys give out | backup scrubber · a hand-run quarantine sweep |
[ scaffolded ]Every other system keeps one thing steady while the world keeps shoving. §20 names the habit they all have in common: homeostasis. A written-down target, limits around it, and a negative-feedback fixer that pulls the value back whenever it wanders. A body stays steady because every push gets corrected before it can wander far.
{ set_point, bounds, corrector, at_bound }, where it should sit, how far it may safely stray, the negative feedback that pulls it home, and what goes off if it slams into a hard limit. A value that wanders with no fixer breaks R26; sooner or later it leaves the safe zone, and a value outside its limits is either instability or a hole for attackers. Hormones (§4), synapses (§4.5), budgets (§16) and filtering (§19) already run as R26 loops: §20 just spells the pattern out and applies it everywhere.// homeostasis · the universal regulated-quantity shape const regulated = { set_point: 0.40, // the target (37°C · pH 7.4 · baseline cortisol) bounds: [0.15, 0.75], // safe range ease: 0.35, // corrector strength · negative feedback (§4.1) at_bound: 'ALARMED', // somatic state fired if a hard limit is hit }; function homeostat(q, signal) { q.value = ease(q.value, signal, q.ease); // pull toward set-point · no snapping if (q.value < q.bounds[0] || q.value > q.bounds[1]) return BE(() => fireSomatic(q.at_bound), 'OUT_OF_BOUNDS'); return BE(null, 'HOMEOSTATIC'); }
| idea | what it looks like in the body | what it becomes in code |
|---|---|---|
| set-point | 37°C · pH 7.4 · glucose | the written-down target for anything under regulation |
| negative feedback | drifting sets off a fix | the §4.1 slide-toward-the-target fixer |
| allostasis | staying steady by changing · looking ahead | move the target before the load arrives · scale up early |
| allostatic load | wear and tear from regulating nonstop | tech debt · what running hot costs you (cortisol · fgf21) |
| hypothalamus | the head office for targets | the regulator that reads every system and nudges the targets |
| fever | moves the target on purpose | lift thresholds during an attack (§11 IMMUNE_ALERT) |
[ partial ]: the §4 loops really run; the universal balancer is the pattern those loops are examples of.Every part of the body is pointed toward a single target: a system that keeps one joined-up, lasting picture of its own condition, and can read that picture and steer by it. §21 writes sentience down as the stated goal of Molecular Coding for AI. It is a target the design works toward, with the groundwork laid and the hardest question left open. Nothing here claims an AI is sentient today.
| idea | what it says | where the groundwork sits here |
|---|---|---|
| Global Workspace (Baars '88) | awareness = a broadcast into a space every subsystem can read | the mood marker as the body-wide broadcast of its combined state |
| Integrated Information (Tononi) | Φ · awareness = integration you can't split apart | §4.8 COHERENCY scores integration across clocks · a read shaped like Φ |
| Somatic-marker self (Damasio '94) | a self grows out of the body's felt model | a somatic-marker self-model is exactly what E2 (§4.2) is |
| Interoceptive self (Seth · Craig) | being a self starts with sensing your own body | §12 inner sensing (proprio · noci · thermo · chrono -ception) |
| Predictive self (Friston) | a brain tries to be less surprised by itself | §4.1 regulators slide toward targets · prediction error as the push |
[ frontier ] tag. It's the same habit that kept META (§1e) parked as a work in progress: we plant the flag on the goal, and we refuse the lie of calling it finished. [ frontier · a goal for spec 5.0 and beyond ]
"Most secure" means expecting each wall to get broken, then making sure no single break can kill you. §22 pulls every defense the body owns into one zero-trust, layer-on-layer stance. A hacker who punches through one layer runs straight into the next, and drops fingerprints at every stop.
| attack | layers that catch it, in order |
|---|---|
| prompt injection | §14 normalize → §17 parsed≠trusted → §11 PATTERN_T → §1e META gate |
| supply-chain | §17 microbiome sandbox → §11 ATTEST → §1d where-it-came-from chain |
| account hijack | §1c instance=auth → R28 prove again → §11 odd behaviour → R9 rollback |
| privilege escalation | R24 least-privilege movers → R28 zero-trust → §15 contain it |
| data theft | §19 filter what leaves → §15 plug the vessel → §1d paper trail |
| DDoS | §14 rate-limit → §16 backpressure → §15 squeeze the vessels |
| zero-day | §11 NK_T takes out what it doesn't recognise → §15 contain → §11 B_CELL learns the pattern |
[ scaffolded · the names are done, the security is not ]The nervous system was hiding in plain sight. It is the spine of this whole manual, and it never got an organ name. §4.5 is the synapse, §4.7 the 255-bay messenger registry, §4.8 the five-clock receptor cascade, §12 the incoming sense lines. §23 gives the system its name and adds the three parts a3 only hinted at: the wiring (how signals travel), the autonomic split (two ways of running), and the reflex arc (reactions on the spot that skip asking the brain).
// the reflex arc · sense → local cord → act · the brain is told, not asked function reflex(stimulus) { if (stimulus.isThreat() && stimulus.preauthorized) // no central round-trip return BE(() => { actLocally(stimulus); notifyCNS(stimulus); }, 'REFLEX_FIRED'); return BE(() => routeToCNS(stimulus), 'TO_CENTRAL'); // non-urgent → think first }
| branch | what it does in the body | what it becomes in code |
|---|---|---|
| sympathetic | fight or run · adrenaline | red-alert mode · scale up · clamp the gates (§4 cortisol/adrenaline) |
| parasympathetic | kick back and digest | upkeep mode · GC · settle memories (§1a SELF · §19 kidneys) |
| vagal tone | the brake that brings you back to calm | winding down gently · nothing runs hot forever (§20 allostatic load) |
| enteric ("2nd brain") | the gut manages itself | §17 running on its own at the edge · a local control plane |
| part | what it does in the body | what it becomes in code |
|---|---|---|
| CNS | brain + spinal cord · the central thinking | the orchestrator / control plane |
| PNS | the outlying nerves · feel + move | the cells and the edge (§1 cells · §18 movers · §12 sensors) |
| axon | the cable a spike travels down | the message line · an MDCP link (§15 bus) |
| myelin | insulation · lets signals leap ahead | fast lane / cache · 10× less lag on busy links |
| action potential | a spike that fires fully or not at all | a single event · a transition with a BE label (R3) |
| neuroplasticity | wiring reshapes the more it's used | §1a SELF loop-back · Hebbian keep-what-fires (§4.7) |
[ partial · the groundwork runs; autonomic modes and reflex routing are new scaffolding ]Blood (§15) isn't the body's only delivery loop. The lymphatic system is network number two: it drains the leftovers blood doesn't pick up, sends everything through lymph nodes, the checkpoints where the immune crew looks over whatever goes by. It is also where §11 gets trained and sent out. Picture a slow mesh with no pump, one that catches up eventually, doing patrol and cleanup together.
// the lymph node · every lateral hop is screened before it continues function lymphNode(packet, fromFleet, toFleet) { const screened = presentToImmune(packet); // §11 APC inspects in the node if (screened.flagged) return BE(() => quarantine(packet), 'NODE_REACTIVE'); // swollen node = active infection return BE(() => forward(packet, toFleet), 'LATERAL_CLEARED'); }
| part | what it does in the body | what it becomes in code |
|---|---|---|
| lymph nodes | filter stops · immune screening | checkpoints · zero-trust for sideways traffic (R30) |
| lymphatic drainage | collects fluid that leaked between cells | a second cleanup crew · catches what §15/§19 let slip |
| no central pump | pushed along slowly by muscles | an async side channel · patrols that catch up in the end |
| lymphocyte training | nodes show antigens to T-cells | where the §11 immune crew learns + gets sent out |
| swollen node | a node busy fighting an infection | a checkpoint under strain = an incident happening now (telemetry) |
| spleen / thymus | filters blood · trains the T-cells | central training + screening on the blood side (§11) |
[ scaffolded ]Thirty laws and twenty-six moves make up the grammar. Think of §25 as the pocket guide for writing good Molecular code on a plain Tuesday. These are habits, so the enforceable count holds at 30. A habit is a stance. It shows how to keep the laws you already have, and how to spot the moment you slipped.
BE does it commit, which labelled step (R3)? (2) which layer is its home: cell · organ · immune · sensory · nervous (§1)? (3) what's its keep-or-toss policy: vault it or shred it (R5)? Miss any of the three and you haven't written Molecular code yet. Just plain code in a costume.| habit | the reason | serves |
|---|---|---|
| declare the BE | each side effect turns into a named step with a label, ready to diff and replay | R3 · R8 |
| label input at the wall | SENSE / TRANSDUCE comes before anything turns into a packet · parsed ≠ trusted | R17 · R23 |
| witnesses first, power second | no powerful action goes ahead until a K-of-N quorum agrees or an attestation is signed | R12 · R14 |
| reflexes live at the edge | containment, rate limits and breakers fire on the spot. No trip to the center | R29 |
| check each sideways hop | east-west traffic goes through a checkpoint · a foothold can't be allowed to take the house | R30 · R28 |
| measure it, don't bake it in | reads get worked out fresh each tick from what STATE measured. No mystery guesses | §4.4 |
| wear your truth sticker | [ live ] / [ sim ] / [ scaffolded ] / [ frontier ] on any screen that might mislead | §7 |
| commit each version | every change of state writes a block · "off-the-record versions" don't exist | R8 · R9 |
| shred what's dead | name your keep-or-toss policy · vault what could matter, drop what won't | R5 |
| tight permissions for movers | a muscle gets precisely the power it needs to move and not a drop more | R24 · R28 |
| symptom | what's wrong | the fix |
|---|---|---|
| "it all lines up this second" | counting on a synchronous spine that isn't there | reach agreement through messages / quorum (R0) |
| a powerful action nobody saw | power without a witness · invisible to forensics | demand a quorum + ATTEST (R12 · R14) |
| believing parsed input | "it parsed, so it's safe": the gut-wall mistake | check it at the wall (R23) |
| safety that waits for a round-trip | an off-switch that phones the brain first arrives too late mid-attack | clear the reflex ahead of time (R29) |
| a flat inside | crunchy outside, gooey middle · sideways moves go unchecked | a checkpoint on each hop (R30) |
| mystery numbers | a hormone saved as a guess rather than measured | recalculate from STATE every tick (§4.4) |
| "unhackable" | saying it opens the hole | say "no one weak spot takes it all" instead (§22) |
| pretend-alive signals | scaffolding dressed up as if it runs | put the truthful sticker on it (§7) |
// a well-formed molecular function · barrier · BE · honesty function ingestPacket(raw) { // §17 DIGESTIVE · gut barrier const typed = SENSE(raw); // R17 · no untyped input becomes a packet if (!typed.ok) return BE(() => drop(raw), 'REJECTED_AT_BARRIER'); // R23 · parsed ≠ trusted return BE(() => commit(typed), 'PACKET_COMMITTED'); // R8 · every version writes a block }
[ stance · ± PROD ]The body is built on top of JavaScript. A great metaphor won't cover for sloppy footing: one careless var, one swallowed error, one global edited in place can sink R0 and R8 however tidy the biology looks. §26 covers craft for the JS layer. Ordinary, well-known engineering, each tip tied to the law it serves.
| js habit | the reason | serves |
|---|---|---|
| async / await · keep the loop free | there's no synchronous spine · async ground floor = the event loop, full stop | R0 |
| const first · let sometimes · var never | things stay unchanged by default; changing them is a choice everyone can see | R15 |
| Object.freeze whatever you publish | after the commit it only grows · no quiet edits in place | R8 · R15 |
| pure functions · no secret global state | nothing shared flips at once · inputs go in, a value comes out | R0 |
| typed errors · safe fallbacks · never swallow one | every layer that gets breached should leave a trail and land somewhere safe | §22 |
| check at the border · trust nothing coming in | parse it, don't believe it · the gut wall written as code | R23 · R17 |
| AbortController · debounce · backpressure | work you can cancel and rate-limit, so the runtime never drowns | R22 · R29 |
| tidy up listeners / timers / refs | filter + shred · nothing leaks, no zombie handlers linger | R5 · §19 |
| small module surface · export the minimum | least privilege · a module shows callers only what they actually need | R24 · R28 |
| keep Date.now() / Math.random() out of pure logic | same input, same output · replay and rollback rely on it | R9 |
// async the molecular way · no sync backbone (R0) · cancellable reflex (R29) async function fetchGuarded(url, { signal } = {}) { const ctrl = new AbortController(); const timer = setTimeout(() => ctrl.abort(), 5000); // circuit-breaker · fail-safe default signal?.addEventListener('abort', () => ctrl.abort()); try { const res = await fetch(url, { signal: ctrl.signal }); if (!res.ok) throw new HttpError(res.status); // typed · never swallow return Object.freeze(await res.json()); // committed artifact is immutable (R15) } finally { clearTimeout(timer); // §19 RENAL · clean up · no leak } }
| bad habit | why it goes rotten | try this |
|---|---|---|
| eval / new Function / innerHTML on input | runs whatever it's handed · the textbook way in for injection | parse + escapeHtml · textContent |
| == · loose type juggling | sneaky type surprises quietly break the rules you rely on | === · convert on purpose |
| empty catch {} | an error you swallow is a breach that leaves no trail | log + rethrow, or fall back safely (§22) |
| editing shared / global state | changes from nowhere · wrecks replay and R0 | hand back new values · freeze |
| await in a for-loop when it could run in parallel | waiting in single file when Promise.all would finish together | Promise.all / allSettled |
| loops / recursion with no limit | zero backpressure · the runtime goes under | a cap + a queue (R22) |
| floating promises | a rejection nobody catches · a step with no BE | await it, or .catch every promise |
| secrets inside client code | the border is a wall, not a safe | keep them on the server · never ship keys |
?. optional chaining · ?? nullish coalescing · structuredClone() when you need a deep copy · Object.freeze / Object.entries · Map / Set / WeakMap instead of using objects as dictionaries · Promise.allSettled when you fan out and some calls may fail · AbortController to cancel · queueMicrotask instead of setTimeout(…,0) · template literals instead of gluing strings · const plus destructuring · the built-in Intl / Date instead of home-made formatting · ESM import with a small public face.
[ stance · ± PROD ]The manual grows up alongside the way people actually build. Every patch note is dated and spells out what arrived or what changed.
regulateHormones() tick from STATE/EVENT/seasonPhase, never saved guesses, never mystery constants. A tick every 3000 ms · slide 35% toward the target · BE(null, 'HORMONES_REGULATED') finishes the round. No new laws; this is the rigor behind E1, the part spec 3.0 had put off as "poetic."
gaba ⇄ glutamate form the main brake-versus-gas tug-of-war. The simulation stays steady for the same reason a brain does. More axes: INHIBITION · EXCITATION · ATTENTION · TERRITORY · FLOW join the first five. No new laws; it fills the messenger band so the a5 synapse machinery has something to work with.
release_rate · synaptic_conc · reuptake_rate · breakdown_rate · receptor_density · receptor_sensitivity) and a 5-step tick (release · reuptake · breakdown · clamp · receptor adapt). Five standard monoamine synapses get hooked up (5-HT · DA · NE · HA · ACh) along with their KILLER_T pumps (SERT · DAT · NET · CHT1), TREG enzymes (MAO-A · MAO-B · COMT · AChE · HNMT) and MEMORY_T receptor families. §4.6 adds MEDICINE FROM OUTSIDE through the fresh APPLY move (number 16, pharma tier): SSRI · MAOI · SNRI · atypical drug sheets, each listing target · how it works · strength · half-life. Blood levels climb to a plateau while dosing and slide away on a curve after stopping. A drug never touches the read. Just the rates behind it. Receptor density handles everything else, and that's why SSRIs need weeks and quitting suddenly stings. SSRI discontinuation syndrome shows up in the model by itself, no special-case code needed. Honesty: the outline, not the size · not for prescribing · any screen showing these mechanics must carry a [ sim ] tag.
regulateHormones() tick; each of the 30 moods was confirmed to fire on its own. The honesty promise holds: each read is still worked out per tick from what STATE/EVENT measured. Nothing baked in.
0.0012 per tick) opens up into five variables in a cascade on real biological clocks: coupling (seconds, GRK tagging · the GPCR letting go), surface_count (minutes, β-arrestin pulling receptors in), total_count (hours to days, broken down in lysosomes or recycled through endosomes), synth_rate (days to weeks, CREB/ΔFosB gene switching), circuit_weight (weeks to months, LTP/LTD · rewiring). Every clock gates the next one, 10× slower. Effective receptor density = all five multiplied. THE COHERENCY SCORE = 1 − the normalized variance of the 5 clocks · it joins HORMONES as measured read number 31 · and powers three fresh moods (DISCORDANT · TRANSITIONING · SETTLED) slotted into the §4.2 priority table. FRESH LAW R11: COHERENT EFFECTIVE DENSITY: gating a signal on one density number breaks R11 unless the code carries an explicit // v3.2-legacy tag. R10 (SYNAPSE_ID FITS IN ONE BYTE) moves from §4.7 into §3 as an official law. Why a whole new edition instead of patch note 8: the cascade doesn't just add surface. It changes how a synapse works. SSRI discontinuation syndrome appears in the model with no special-case code (the quick clocks bounce back in seconds while the slow ones stay tuned to the drug for weeks · that lopsidedness IS the syndrome). What spec 4.0 ships: 31 hormones · 33 moods · 255 synapse bays · 16 moves · 11 laws you can enforce · 27 schools in the hall of fame · the genesis loop + per-user chain + META. Honesty kept: 5 clocks give the right outline at the right spacing, not a full molecular biology model · clocks talking to each other (β-arrestin → genes, CREB → rewiring) waits for spec 5.0 · tick rates are for show, not measured · receptor variety is ignored · the [ sim ] tag is still required.
[ sim ] tag.
localStorage for each browser session. The shell keeps the molecular look (amber/cyan/green on near-black · JetBrains Mono · 0.16em letter-spacing): it feels like an OS born in a terminal, not a desk-and-folders OS. Every section keeps all of its content; the shell changes how it's shown, not what it says. The [ ± PROD ] sticker still fits.
attestations array (R14). Honesty (7 warnings): NOT a security product · NOT a replacement for layered defense · does NOT cover every hole · NOT switched on yet (just the 5 R1 veterans actually do anything; the 7 rookies are SCAFFOLDED, waiting on R16 tolerance gates) · NOT a stand-in for META + the GENESIS LOOP · sharing antibodies sits on the spec 5.0 horizon (it opens a poisoning hole) · when TOLERANCE fails the body attacks itself (R16's gate is required) · the 8 fresh moods stay silent until regulateHormones() hooks in immune kinetics. Any screen showing immune state must carry the [ sim ] tag.
[ partial ], and §24 is [ scaffolded ].
BE · its layer · its keep-or-toss policy: R3 · §1 · R5), a daily drill chart pairing ten habits with the laws they serve, and a sick bay chart (symptom → what's wrong → the fix) for the bad habits that keep coming back. The ones the laws are there to stop. §26 JAVASCRIPT BEST PRACTICES raises the code underneath to the biology's level: async/await (R0) · const first + Object.freeze on anything published (R8 · R15) · pure functions / no secret global state (R0) · errors with types + safe fallbacks (§22) · checks at the border (R23 · R17) · AbortController + backpressure (R22 · R29) · tidy teardown with no leaks (R5 · §19) · modules that export the minimum (R24 · R28) · same input, same output (R9), plus a never-do chart (eval · loose == · empty catch · editing globals · one-at-a-time await · loops with no cap · floating promises · secrets on the client) and a modern-JS cheat card (?. · ?? · structuredClone · WeakMap · Promise.allSettled · queueMicrotask · ESM). Honesty: neither section adds a single new law you can enforce: habits are a stance, not a new power; the law count holds at 30, and none of it is new (it's §3 boiled down plus craft engineers already know, §9). The patch log moves from §25 to §27. [ stance · ± PROD ]
New patch notes get added below this line. The manual keeps growing, yet every change owes an explanation (what arrived, why, who did it first, what it enforces).
Molecular Coding doesn't push computer science forward. Hewitt, Plotkin, Damasio, Forrest, Squire, Belady, Ebbinghaus and the rest did the real breakthroughs decades ago, sometimes centuries ago. Their papers are out there to read.
Molecular Coding brings one joined-up discipline a regular engineer can keep in their head. It is pulled from thirty-five different schools of work (§9) and pressed into one set of coding laws that share one picture. It is also the body plan the L8 OS leans on. DIVA's mood badge reads the same §4.2 + §4.8g mood table, and ECHO trails a step behind her.
SELF coming back in spec 3.1 shows the discipline doing its job: the layer got cut while it was only poetry, and only returned once a clear job you could enforce (vault + shred) made it real. Spec 3.2's GENESIS LOOP, PER-USER CHAIN and META LAYER are example number two: each got a name only when a solid function (boot, commit, verify) could be written down. META stayed parked as a work in progress until spec 5.0 could spell out its rules. The manual fixes itself. That's the loop closing.
Treat this manual as your house style. Hold your code to it. Hold the AI helpers (LLMs too) that code beside you to it. When someone new joins the crew, pass them this page and ask: "can you put your function on this stack, say its BE, and name its keep-or-toss policy?"
Once they can, they're writing Drewless. That's what this whole thing gives back. · testnet · unaudited · experimental