Update 2026-06-29-tripartite-synapse_v17.md

This commit is contained in:
2026-07-07 14:44:22 +02:00
parent 7561652e2e
commit cf9f4476f3
@@ -23,7 +23,8 @@
> (6) governing rule: NO actor authorizes its own restructuring — each is PUT IN POSITION by the actor
> above (holds an aggregate it cannot see, opens a window it cannot open). Act locally, consolidate
> hierarchically. Material recycles; ENERGY does not (the arrow of time).
> PENDING: ASTROSYNAPSE night still in the earlier NON_REM/REM form (its own pass — continuous case).
> ASTROSYNAPSE now converted: D-serine = POST gain (not gate) ; astrocyte Ca-spike = territory-coincidence
> broadcast (integrate-and-fire) ; astrosynapse = volume/gain modulator, build⇄release coverage.
---
@@ -474,12 +475,12 @@ and compete; unmaintained ceilings drift down.
```
// PARAMETERS K_AMPA · AMPA_Ca · AMPA_cost · NMDA_cost · bAP_cost · pka_cost · traffic_cost
// req_cost · Mg_eject · Dserine_thr · Ca_STP · Ca_TAG · eCB_thr · drift · baseline
// req_cost · Mg_eject · K_Ds · Ca_STP · Ca_TAG · eCB_thr · drift · baseline
// NO_synth_cost · eCB_synth_cost
// INTERFACE
// EMIT retro_NO (+), retro_eCB () → PRE
// RECEIVE (signals) glutamate ← PRE ; astro_Dserine ← ASTRO ; bAP ← DEND/SOMA ; dopamine
// READ glutamate ; astro_Dserine ; bAP (dend_structure.bAP_fidelity) ; dopamine
// READ glutamate ; astro_Dserine (GAIN, not gate) ; bAP (dend_structure.bAP_fidelity) ; dopamine
// OWN post_structure{slot_ceiling, spine_volume, reserve_ceiling} ; post_budget_ceiling
// SUPPLY astro_lactate[syn] ← ASTRO ; dend_ship_post ← DEND ; post_material ← DEND(NIGHT) ; post_energy ← SOMA(NIGHT)
// EMERGENCY shockwave_lockdown ← ASTRO
@@ -502,8 +503,9 @@ DAY | NOT_bAP: // respond to arrived
a = sat(glutamate, K_AMPA)
AMPA_current = a × AMPA_surface; Vm += AMPA_current; post_budget -= AMPA_cost // SOURCE 1 AMPA
post_fast_trace += AMPA_Ca·AMPA_current
if Vm > Mg_eject and astro_Dserine > Dserine_thr and glutamate > 0: // SOURCE 2 NMDA
post_fast_trace += NMDA_Ca(glutamate)·rise_speed(); post_budget -= NMDA_cost // coincidence #1,2 here
if Vm > Mg_eject and glutamate > 0: // SOURCE 2 NMDA (Mg relieved)
post_fast_trace += NMDA_Ca(glutamate) × sat(astro_Dserine, K_Ds)·rise_speed(); post_budget -= NMDA_cost
// D-serine sets the GAIN (how strongly POST responds), not a coincidence gate — dialed by the astrocyte
retro_NO += NO_emit(post_fast_trace); post_budget -= NO_synth_cost // EMIT + "responsive target"
if Vm > eCB_thr:
retro_eCB += eCB_emit(Vm); post_budget -= eCB_synth_cost // EMIT brake
@@ -571,8 +573,8 @@ NIGHT | replay + measure + prime:
if arrived_glutamate_replay or arrived_replay_AP:
a = sat(glutamate, K_AMPA)
post_fast_trace += AMPA_Ca·(a × AMPA_surface) // SAME AMPA machinery as DAY ACTION
if Vm > Mg_eject and astro_Dserine > Dserine_thr:
post_fast_trace += NMDA_Ca(glutamate) // SAME NMDA machinery
if Vm > Mg_eject:
post_fast_trace += NMDA_Ca(glutamate) × sat(astro_Dserine, K_Ds) // SAME NMDA machinery (D-serine = gain)
if post_budget < traffic_cost: // SAME capacity check → endurance evidence
if post_fast_trace > traj_thr: post_endurance_need += post_fast_trace // SAME trace, fed by replay
post_participation = level(post_fast_trace) // read replayed response as participation
@@ -980,107 +982,114 @@ NIGHT | replay + measure + prime:
> across all of them, just as the NEURON integrates over the soma). The astrosynapse behaves
> locally here; the astrocyte integrates and broadcasts (see CELL ACTORS).
The astrosynapse is the synapse's gatekeeper and energy hub. It clears glutamate, supplies the
D-serine that gates postsynaptic NMDA, and distributes lactate across its territory by demand.
Unlike the others it runs in a single continuous context rather than spiking, and its structure
reshapes the synapse's operating point rather than just its range.
The astrosynapse is the synapse's **modulator** — the third party that tunes all three dimensions
of transmission without performing the deed itself. It clears glutamate (setting how long
transmitter dwells → **timing**), releases D-serine that dials the *gain* of the postsynaptic
response to a given release (**intensity**, via POST's sensitivity — not a coincidence gate but a
volume knob on POST), and its perisynaptic coverage sets spillover and isolation (**space**). Its
one error signal is **spillover**: when PRE outpowers the current coverage, glutamate escapes — the
direct physical sign that this astrosynapse is too small for its presynapse. Spillover coincident
with a real postsynaptic response (read from the eavesdropped retrograde NO) is what it tags; its
absence means the coverage can shrink. It reads the cleft it sits in: glutamate from PRE (spillover),
the retrograde eCB/NO from POST (postsynaptic pressure and success), and — from above — the
ASTROCYTE's territory-wide Ca²⁺ spike, which arrives at ALL the astrocyte's astrosynapses at once
when enough of them were co-active (a territory-scale coincidence broadcast, the astrocytic analog
of the soma's AP).
**During DAY, continuously — the astrosynapse clears, gates, and fuels.** It produces energy at
its cell body (glycolysis from glucose, the system's energy root), then allocates lactate across
its astrosynapses weighted by each one's clearance demand. At each astrosynapse it clears
spillover glutamate (EAAT) and supplies tonic D-serine; when spillover is high it adds a
demand-driven D-serine pulse, brakes nothing of the presynapse directly (the presynaptic brake
is PRE reading its own cleft), deposits its calcium trace, and accumulates a dopamine-gated tag.
A D-serine pulse cut short by low budget while demand was high is endurance evidence; one cut
short by precursor/material exhaustion is a material limit, not endurance. Excess overflow
triggers the protective shockwave lockdown.
**DAY · ACTION — clear + prime.** The defining local deed: take up glutamate (EAAT clearance) and
release D-serine to set POST's gain, biased by the astrocyte's slow priming field and pulsed up by
an arriving territory Ca²⁺ spike. Spillover deposits its Ca²⁺ fast trace.
**DAY · RECOVERY — restock clearance + D-serine capacity**, so it can service the next release (its
recovery speed *is* the synapse's timing resolution).
**DAY · PREPARATION — stock the volume/gain evidence.** Accumulate the tag: how often spillover
occurred coincident with a real postsynaptic response — "this synapse repeatedly outgrew its
coverage on genuine co-activation." Read the descended spike/prime that will bias the next action.
**During NIGHT — the astrosynapse's ceilings are rewritten.** NIGHT raises **structure**
(perisynaptic wrap, EAAT density, tonic D-serine) where a validated tag accumulated and **budget
capacity** where budget-limited synthesis recurred; astro_structure is self-reinforcing in both
directions, so it amplifies whatever trajectory the synapse is already on.
**NIGHT — build ⇄ release coverage.** Build perisynaptic coverage / clearance capacity / tonic
D-serine where the tag stands (repeated spillover → enlarge to clear faster, sharpen timing, contain
spillover — the build cancels the very spillover that signalled it) ⇄ release coverage where no
spillover occurred (over-provisioned → shrink, free material). Astrosynapses compete for the
astrocyte's produced material and energy.
```
// PARAMETERS K_Dserine · Ds_max · Ds_frac · Ds_cost · EAAT_cost · lactate_cost · spillover · overload
// PARAMETERS K_Dserine · Ds_max · Ds_frac · Ds_cost · EAAT_cost · spillover · overload · spike_gain
// INTERFACE
// EMIT astro_lactate[i] → pre/post/dend budgets ; astro_Dserine[i] → POST (gate)
// RECEIVE (signals) glutamate ← PRE (clearance + spillover) ; dopamine
// READ glutamate ; dopamine
// OWN astro_structure{perisynaptic_distance⁻¹, EAAT, Dserine_tonic, ECM} ; astro_budget_ceiling
// SUPPLY glucose (ROOT) ; astro_material, astro_energy ← cell body (NIGHT)
// NOTE ASTRO endurance fires on BUDGET-limited synthesis (got<want via low budget);
// material/precursor-limited synthesis is a material limit, not endurance. Own-state proxy.
// EMIT astro_Dserine[i] → POST (GAIN primer, not a gate) ; astro_localCa[i] → ASTROCYTE (integrated up)
// astro_fatigue, astro_demand → upward
// RECEIVE (signals) glutamate ← PRE (spillover) ; retro_NO, retro_eCB ← POST (eavesdropped) ;
// astro_prime[i] ← ASTROCYTE (slow gain field) ; astro_Ca_spike ← ASTROCYTE (territory broadcast)
// READ glutamate ; retro_NO ; retro_eCB ; astro_prime[i] ; astro_Ca_spike
// OWN astro_structure{coverage, EAAT, Dserine_tonic, ECM} ; astro_budget_ceiling ; astro_fast_trace
// SUPPLY astro_material, astro_energy ← ASTROCYTE (root) ; lactate distributed by ASTROCYTE
// NOTE D-serine is POST's GAIN, dialed by this astrosynapse × the astrocyte's prime/spike.
// Error signal = SPILLOVER (PRE outpowering coverage), tagged when coincident with retro_NO.
// EMERGENCY emits shockwave_lockdown on overload
//
// CONTINUOUS (no spike of its own): each step runs ACTION ⇄ RECOVERY, then PREPARATION, in graded flow.
// RING × CONTEXT: CONTINUOUS — no spike, so ACTION (clear/gate), EVALUATION (tag climb),
// and PREPARATION (allocate/refill/settle) all run each step in the graded flow. The ring
// turns continuously rather than being delimited by discrete events.
DAY | CONTINUOUS: // per astrosynapse i
// PREP: root production, demand weights, lactate allocation (ready the territory)
astro_central_budget += glycolysis(glucose)·Δt
for each i: demand[i] = clearance_load[i] × astro_structure[i].delivery_eff
for each i: astro_territory_demand[i] += demand[i]·Δt // territory-level aggregator (by DAY)
factor = min(1, astro_central_budget / (Σ demand·lactate_cost + ε))
for each i:
astro_lactate[i] = demand[i] × factor; astro_central_budget -= astro_lactate[i]·lactate_cost
// ACTION: clear glutamate, supply tonic D-serine, gate on demand (the defining act)
glutamate[i] -= astro_structure[i].EAAT × glutamate[i]·Δt; astro_central_budget -= clearance·EAAT_cost
astro_Dserine[i] += astro_structure[i].Dserine_tonic × astro_prime[i]·Δt // priming biases the gate (alpha-driven)
if glutamate[i] > spillover:
astro_fast_trace[i] += mGluR_Ca(); astro_fast_trace[i] *= decay(s) // deposit fast trace
// ===== ACTION (clear glutamate + release D-serine = POST's gain; the defining local deed) =====
DAY | CONTINUOUS · action | per astrosynapse i:
glutamate[i] -= astro_structure[i].EAAT × glutamate[i]·Δt; astro_budget[i] -= clearance·EAAT_cost // clear (timing)
gain = astro_structure[i].Dserine_tonic × astro_prime[i] × (1 + spike_gain × astro_Ca_spike) // prime POST gain
astro_Dserine[i] += gain·Δt // → POST (intensity)
if glutamate[i] > spillover: // SPILLOVER = PRE outpowered coverage (error signal)
astro_fast_trace[i] += mGluR_Ca() // deposit Ca fast trace (this action's residue)
want = sat(astro_fast_trace[i], K_Dserine) × Ds_max
got = min(want, astro_central_budget × Ds_frac)
astro_Dserine[i] += got; astro_central_budget -= got·Ds_cost // D-serine pulse → POST gate
if got < want and astro_central_budget low and astro_fast_trace[i] > traj_thr:
got = min(want, astro_budget[i] × Ds_frac)
astro_Dserine[i] += got; astro_budget[i] -= got·Ds_cost // phasic D-serine (extra gain on spillover)
astro_localCa[i] = astro_fast_trace[i] // EMIT own Ca upward → ASTROCYTE integrates
if got < want and astro_budget[i] low and astro_fast_trace[i] > traj_thr:
astro_endurance_need[i] += (want - got) // FUEL-limited synthesis → endurance
// EVAL: strength climb → token for NIGHT
if astro_fast_trace[i] > elig: astro_possible_tag[i] += astro_fast_trace[i]
if astro_fast_trace[i] > overload: emit(shockwave_lockdown) // EMERGENCY
// ===== RECOVERY (restore clearance + D-serine capacity; alter-ego — its speed IS the synapse's timing) =====
DAY | CONTINUOUS · recovery | per astrosynapse i:
astro_budget[i] += refill(astro[i] from lactate ← ASTROCYTE) // restock (contested territory supply)
astro_fast_trace[i] *= decay(s) // Ca relaxes — ready to detect next spillover
// ===== PREPARATION (stock the volume/gain tag; read descended spike/prime; faces the NIGHT) =====
DAY | CONTINUOUS · preparation | per astrosynapse i:
// tag = accumulated spillover COINCIDENT with real postsynaptic response (eavesdropped NO)
if astro_fast_trace[i] > elig and retro_NO > NO_thr:
astro_possible_tag[i] += astro_fast_trace[i] × (1 + retro_NO)·Δt
if dopamine > dop_thr and astro_possible_tag[i] > tag_thr:
astro_tag[i] += dopamine × astro_possible_tag[i]
// DECAY (settle)
// MEDIUM (smin)
astro_possible_tag[i] *= decay(s); astro_endurance_need[i] *= decay(min)
// SLOW (hr)
astro_tag[i] *= decay(hr)
// EMERGENCY
if astro_fast_trace[i] > overload: emit(shockwave_lockdown)
astro_tag[i] += dopamine × astro_possible_tag[i] // token for NIGHT (volume decision)
astro_possible_tag[i] *= decay(s); astro_endurance_need[i] *= decay(min) // MEDIUM
astro_tag[i] *= decay(hr) // SLOW
NIGHT · NON_REM_1 = PREPARATION | produce + distribute + prime: // ROOT: energy production + priming
// PRODUCTION (root): glycolysis + ECM synthesis this cycle, capped by glucose
astro_central_energy += overnight_glycolysis(glucose)·Δt_cycle // energy — NOT recoverable
astro_central_material += astro_cellbody_synth()·Δt_cycle // material — recoverable
night_energy_spent += overnight_glycolysis(glucose)·Δt_cycle
// distribute this cycle's batch across the territory, tag-weighted
W = Σ astro_tag[i] over astro_tag[i] > tag_expiry
for each i with astro_tag[i] > tag_expiry:
w = astro_tag[i]/W
astro_energy[i] += astro_central_energy·w; astro_material[i] += astro_central_material·w
astro_spont_thr[i] = spont_thr_base thr_gain × astro_tag[i] // prime own responsiveness from own tag
astro_central_material += astro_ceiling_shrinkage·recycle // recycle
// ── NIGHT: SAME three categories, subject = the pattern. Astrosynapses compete for the ASTROCYTE's
// produced material/energy (the astrocyte is their root). Build ⇄ release COVERAGE, participation
// from the Ca response to re-evoked spillover. (ACTION ⇄ RECOVERY) × many, then PREPARATION.
NIGHT · REM = EVALUATION | respond to re-evoked glutamate, MEASURE participation (NO dopamine):
for each astrosynapse i:
// when its synapse's pattern re-evokes, spillover glutamate arrives → mGluR Ca response (a PROBE)
if arrived_glutamate_replay[i]:
astro_fast_trace[i] += mGluR_Ca()
astro_participation[i] = level(astro_fast_trace[i]) // high/medium/low = centrality
astro_fast_trace[i] *= decay(s)
NIGHT · NON_REM_2 = ACTION | change the structure (per astrosynapse): // the night's defining deed
for each astrosynapse i:
astro_structure[i] -= decay_rate·Δt_cycle; astro_structure[i] += min(astro_maint[i], maint_cost) // lowering
if astro_tag[i] > tag_expiry and astro_participation[i] ≥ MEDIUM:
// ===== ACTION (build ⇄ release COVERAGE; participation gates direction; tag funds build, persists) =====
NIGHT | build or release | per astrosynapse i:
if astro_tag[i] > tag_expiry and astro_participation[i] ≥ MEDIUM: // BUILD coverage (slice)
Δ = min(slot_batch, astro_material[i], astro_energy[i]·f_cap, astro_tag[i]) × astro_participation[i]
astro_structure[i] += Δ // self-reinforcing both directions
astro_structure[i] += Δ // enlarge coverage → faster clearance, less spillover
astro_material[i] -= Δ; astro_energy[i] -= Δ·assembly_cost; astro_tag[i] -= Δ
if astro_endurance_need[i] > endur_thr:
Δ' = min(cap_batch, astro_material[i]·f_cap, astro_energy[i]·f_cap)
astro_budget_ceiling[i] += Δ'; astro_material[i] -= Δ'
astro_energy[i] -= Δ'·biogenesis_cost; astro_endurance_need[i] -= Δ'
else:
astro_budget_ceiling[i] -= capacity_decay_rate·Δt_cycle; astro_budget_ceiling[i] += min(astro_cap_maint[i], cap_cost)
astro_endurance_need[i] *= decay(slow)
else if astro_participation[i] == LOW: // RELEASE coverage: shed, free material; tag untouched
shed = release_rate × max(astro_structure[i] - homeostatic_floor, 0)
astro_structure[i] -= shed; astro_freed_material[i] += shed·recycle
astro_budget_ceiling[i] -= capacity_decay_rate·Δt_cycle
// else: HOLD
// ===== RECOVERY (acquire material/energy from the ASTROCYTE in CONTENTION with sibling astrosynapses) =====
NIGHT | import + free | per astrosynapse i:
astro_material[i] += astro_alloc[i]·astro_central_material // receive this cycle's share (contested)
astro_energy[i] += astro_alloc[i]·astro_central_energy
astro_material[i] += astro_freed_material[i]; astro_freed_material[i] = 0 // reclaim what release freed
astro_structure[i] += min(astro_maint[i], maint_cost) // hold up what is used
// ===== PREPARATION (REPLAY: respond to re-evoked spillover — SAME mGluR machinery — measure participation) =====
NIGHT | replay + measure | per astrosynapse i:
if arrived_glutamate_replay[i]: // re-evoked spillover arrives (probe)
astro_fast_trace[i] += mGluR_Ca() // SAME mGluR machinery as DAY ACTION
astro_participation[i] = level(astro_fast_trace[i]) // read replayed response as participation
astro_fast_trace[i] *= decay(s); astro_tag[i] *= decay(hr); astro_endurance_need[i] *= decay(slow)
emit(astro_fatigue, astro_demand → upward)
```
@@ -1108,8 +1117,10 @@ DAY or NIGHT | OVERLOAD:
> still stands AND participation ≥ medium, consuming the tag. Roots (SOMA material) additionally
> PRODUCE each cycle. The replay pattern propagates entirely through the DAY PATHWAYS, self-igniting,
> carrying only where every link is primed.
> [ASTROSYNAPSE still shows the earlier NON_REM/REM form — pending its own pass (it is continuous and
> under-described; the three-category cut will be verified there separately).]
> ASTROSYNAPSE is now converted too (all six local components uniform): its ACTION is clear+prime
> (D-serine = POST gain), RECOVERY restocks clearance/D-serine, PREPARATION stocks the volume tag;
> NIGHT builds⇄releases COVERAGE. The ASTROCYTE adds a third role — a regenerative Ca spike that
> integrates astrosynaptic Ca and broadcasts territory-coincidence to all astrosynapses at once.
---
---
@@ -1160,32 +1171,45 @@ CODA | on waking (scope_context → DAY):
## ASTROCYTE
The astrocyte is the territory actor over its astrosynapses — the exact parallel of the neuron,
with two roles the neuron lacks. First, it is the ROOT of synaptic energy and ECM material, and
therefore the system's METABOLIC SENSOR: it accrues territory energy debt and reports it upward as
the fatigue that drives the hypothalamus's DAY/NIGHT switch, and its discharge of that debt during
night is what permits waking. Second, by DAY it PRIMES its territory: reading its own slow calcium
wave (alpha-band), it raises or lowers the D-serine gate and fuel delivery across a field of
synapses — a localized, slow, neuromodulator-like gain signal, biasing which synapses can potentiate.
The astrocyte is the territory actor over its astrosynapses — the parallel of the neuron, with
three roles. First, it is the ROOT of synaptic energy and ECM material, and therefore the system's
METABOLIC SENSOR: it accrues territory energy debt and reports it upward as the fatigue that drives
the hypothalamus's DAY/NIGHT switch, and its discharge of that debt during night permits waking.
Second, it has its own ACTION — a regenerative Ca²⁺ SPIKE: it integrates the local Ca²⁺ emitted by
its astrosynapses, and when the sum crosses threshold it fires a Ca²⁺ wave that reaches ALL its
astrosynapses at once. This is the astrocytic analog of the soma's action potential — an
integrate-and-fire event that detects and broadcasts a TERRITORY-SCALE COINCIDENCE (many synapses
co-active), transiently boosting D-serine gain across the whole territory and marking every
participating astrosynapse. Third, by DAY it PRIMES its territory: reading its own slow calcium
wave (alpha-band), it sets a localized, slow, neuromodulator-like gain field on D-serine —
dialing postsynaptic response strength across a field of synapses.
```
// PARAMETERS (territory reallocation) · alpha_gain
// PARAMETERS (territory reallocation) · alpha_gain · Ca_spike_thr · lactate_cost
// INTERFACE
// EMIT astro_prime[·] (DAY gain field), astro_alloc[·] + rest_permission (NIGHT) astrosynapses
// astro_fatigue → HYPOTHALAMUS (metabolic debt — the switch driver) ; energy+material → territory
// RECEIVE (signals) astrosynapse demand emissions (summed) ; scope_context ; replay_reweight ; glucose
// OWN astro_territory_demand[·] ; astro_slow_Ca (alpha wave) ; astro_central_{energy,material}
// NOTE ROOT of synaptic energy + ECM material; integrate-and-broadcast like the neuron, PLUS
// day-priming (localized neuromodulation) and metabolic sensing (drives the day/night switch).
// EMIT astro_prime[·] (DAY gain field) ; astro_Ca_spike (territory broadcast) ; astro_lactate[·] ;
// astro_alloc[·] + rest_permission (NIGHT) → astrosynapses ; astro_fatigue → HYPOTHALAMUS
// RECEIVE (signals) astro_localCa[·] (integrated up from astrosynapses) ; scope_context ; replay_reweight ; glucose
// OWN astro_integrated_Ca ; astro_slow_Ca (alpha wave) ; astro_central_{energy,material}
// NOTE THREE roles: ROOT (energy+material) · integrate-and-FIRE (Ca spike = territory coincidence) ·
// PRIME (alpha gain field). Metabolic sensor: reports fatigue that drives the day/night switch.
DAY | active:
// TRACE integrate territory-wide emitted demand (aggregator) + own slow Ca wave
for each astrosynapse i: astro_territory_demand[i] += emitted_demand[i]·Δt
// integrate the local Ca emitted by astrosynapses (aggregator) + own slow alpha wave
astro_integrated_Ca += Σ astro_localCa[i]·Δt
astro_slow_Ca = integrate_slow(territory activity) // alpha-band astrocytic calcium
// BEHAVE/EMIT PRIME the territory: alpha-driven localized gain (like neuromodulation, but local)
for each astrosynapse i:
astro_prime[i] = 1 + alpha_gain × astro_slow_Ca // → biases i's D-serine gate + fuel (see ASTROSYNAPSE)
// EMIT report metabolic debt upward — this is the fatigue that drives the DAY/NIGHT switch
// ACTION: regenerative Ca SPIKE when integrated Ca crosses threshold → broadcast to ALL astrosynapses
if astro_integrated_Ca > Ca_spike_thr:
astro_Ca_spike = 1; astro_integrated_Ca = 0 // fire + reset (territory-coincidence event)
// → every astrosynapse reads astro_Ca_spike this step (boosts its D-serine gain; marks its tag)
else:
astro_Ca_spike = 0
// PRIME: alpha-driven localized gain field on D-serine (dials POST response strength territory-wide)
for each astrosynapse i: astro_prime[i] = 1 + alpha_gain × astro_slow_Ca
// SUPPLY: distribute lactate across the territory by clearance demand (day metabolic support)
factor = min(1, astro_central_energy / (Σ clearance_load·lactate_cost + ε))
for each i: astro_lactate[i] = clearance_load[i] × factor; astro_central_energy -= astro_lactate[i]·lactate_cost
// EMIT report metabolic debt upward — the fatigue that drives the DAY/NIGHT switch
astro_fatigue = f(territory energy debt, unmet demand)
NIGHT | cycle: // (within broadcast NIGHT context)
@@ -1193,21 +1217,16 @@ NIGHT | cycle: // (within broadca
astro_central_energy += overnight_glycolysis(glucose)·Δt_cycle // NOT recoverable
astro_central_material += astro_cellbody_synth()·Δt_cycle // recoverable
night_energy_spent += overnight_glycolysis(glucose)·Δt_cycle
// ADJUST reallocation weights across the territory (demand × replay)
for each i: astro_alloc[i] = (astro_territory_demand[i] × replay_reweight[i])
/ Σ(astro_territory_demand × replay_reweight)
// EMIT (broadcast) distribute this cycle's batch + grant restructuring window
for each i:
astro_energy[i] += astro_central_energy·astro_alloc[i]
astro_material[i] += astro_central_material·astro_alloc[i]
rest_permission[i] = TRUE // → each astrosynapse commits itself
// ADJUST allocation weights across the territory (tag × replay) — astrosynapses APPLY these in their RECOVERY
for each i: astro_alloc[i] = (astro_tag[i] × replay_reweight[i]) / Σ(astro_tag × replay_reweight)
rest_permission[i] = TRUE // → each astrosynapse builds/releases itself
// RECOVER reclaim material from decayed astrosynapse ceilings (returned to central pool)
astro_central_material += astro_ceiling_shrinkage·recycle
// discharge: producing + distributing energy repays territory debt → astro_fatigue falls → wake permitted
astro_fatigue -= discharge × astro_central_energy·Δt_cycle
CODA | on waking:
astro_territory_demand[·] = 0
astro_integrated_Ca = 0
```
## HYPOTHALAMUS