Files
organism/elements/astrocyte/appunti/2026-06-06-tripartite_synapse_v2.md
T

703 lines
29 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
include_toc: true
---
# Tripartite Synapse — Scope & Context Aware Pseudocode v2
---
## Conventions
```
SCOPE = { DAY, NIGHT }
CONTEXT = { AP, NOT_AP, bAP, NOT_bAP, CONTINUOUS }
Compartments:
PRE = presynaptic bouton
POST = dendritic spine (postsynapse)
ASTRO = astrocyte
DEND = dendritic branch (segment between soma and spines)
SOMA = cell body / nucleus
Budget pools:
BUD = shared resource pool (one per territory)
Trace:
A variable modified by a behavior that persists beyond
the current context and biases future behaviors.
```
---
## Shared Resource Pools
```
// ── Axonal arbor ──────────────────────────────────────────────────────
BUD axon_vesicle_protein_pool // RIM, Munc13, VGCC subunits for AZ expansion
BUD axon_mitochondria_capacity // ATP ceiling for vesicle release + refill
BUD axon_tagged_boutons // boutons in competition for drifting proteins
// ── Dendritic branch ──────────────────────────────────────────────────
BUD dend_receptor_reserve // local endosomal AMPA pool per branch
BUD dend_actin_machinery // Rac1/RhoA + actin monomers per branch
BUD dend_protein_flux // plasticity proteins flowing from soma
BUD dend_tagged_spines // spines competing for protein flux
BUD dend_mitochondria_capacity // local ATP budget for branch-level operations
BUD dend_mRNA_pool // locally stored mRNAs for rapid translation
// ── Astrocyte territory ───────────────────────────────────────────────
BUD astro_serine_racemase_cap // enzyme ceiling for D-serine synthesis
BUD astro_EAAT_pool // transporter protein for glutamate clearance
BUD astro_ECM_protein_pool // Glypicans, Thrombospondins for sealing
BUD astro_process_extensions // finite perisynaptic processes
BUD astro_ATP_budget // total ATP: clearance + synthesis + motility
BUD astro_lactate_ceiling // hard cap from capillary glucose supply
// ── Soma ──────────────────────────────────────────────────────────────
BUD soma_ATP_budget // mitochondrial capacity of cell body
BUD soma_protein_synthesis_rate // CREB-driven — peaks in NIGHT scope
BUD soma_receptor_synthesis_rate// new AMPA/NMDA subunits per hour
BUD soma_organelle_pool // mitochondria + ribosomes available for shipping
BUD soma_mRNA_transcription_rate// rate of new mRNA production (Arc, BDNF, etc.)
```
---
## Global State Variables
```
// ── PRE: presynaptic bouton ───────────────────────────────────────────
PRE pre_Ca_residual // TRACE: leftover Ca²⁺ between spikes
PRE vesicle_release_prob // P(0.11.0) per docking slot
PRE RRP_pool // readily-releasable vesicle pool
PRE reserve_pool // chained vesicles in deep storage
PRE active_zone_size // SLOW TRACE: docking slot count
PRE RRP_pool_capacity // SLOW TRACE: max RRP
PRE VGCC_clustering // SLOW TRACE: Ca²⁺ channels beneath AZ
// ── POST: dendritic spine ─────────────────────────────────────────────
POST membrane_potential // Vm — local depolarization state
POST NMDA_Mg_block // bool — mechanical clamp on/off
POST post_Ca_amplitude // TRACE: peak [Ca²⁺] rise in spine
POST post_Ca_rise_speed // TRACE: d(Ca)/dt — fast=LTP, slow=LTD
POST spine_tag // TRACE: bool — synaptic tag planted
POST AMPA_count // SLOW TRACE: surface receptors
POST spine_volume // SLOW TRACE: physical spine size
// ── DEND: dendritic branch ────────────────────────────────────────────
DEND branch_voltage // local depolarization propagating from spines
DEND bAP_amplitude // strength of back-propagating AP at this branch
DEND branch_Ca // TRACE: Ca²⁺ in branch shaft (from bAP + spines)
DEND branch_tag // TRACE: bool — branch-level plasticity tag
DEND local_protein_translation // rate of mRNA→protein at branch ribosomes
DEND mitochondria_density // SLOW TRACE: local energy capacity
DEND branch_BDNF_level // TRACE: local BDNF secreted by active spines
// ── SOMA: cell body ───────────────────────────────────────────────────
SOMA membrane_potential // somatic Vm — integrates all dendritic input
SOMA AP_threshold // firing threshold — modulated by neuromodulators
SOMA CREB_phospho // TRACE: bool — transcription factor active
SOMA Arc_mRNA_level // TRACE: activity-regulated mRNA — ships to branches
SOMA BDNF_production_rate // TRACE: neurotrophin synthesis rate
SOMA nuclear_Ca // TRACE: Ca²⁺ in nucleus — gates CREB
SOMA organelle_shipping_queue // queue of mitochondria/ribosomes being sent out
// ── ASTRO: astrocyte ──────────────────────────────────────────────────
ASTRO glutamate_cleft // [glu] in synaptic cleft
ASTRO glutamate_spillover // extrasynaptic [glu] — saturates mGluRs
ASTRO astro_Ca_local // TRACE: IP3-triggered local rise
ASTRO astro_Ca_global // TRACE: soma-wide wave — overload flag
ASTRO D_serine_release // gliotransmitter pulse — NMDA co-agonist
ASTRO D_serine_tonic_level // SLOW TRACE: baseline co-agonist supply
ASTRO perisynaptic_distance // SLOW TRACE: wall distance from synapse
ASTRO ECM_integrity // SLOW TRACE: extracellular matrix density
ASTRO glutamate_clearance_rate // SLOW TRACE: EAAT transporter density
ASTRO lactate_out // fuel export to pre + post + dend
// ── SIG: signaling intermediates ─────────────────────────────────────
SIG mGluR2_3_activation // presynaptic Gi — autoinhibitory brake
SIG mGluR5_activation // astrocytic Gq — IP3→Ca²⁺→D-serine
SIG cAMP_level // TRACE: set by dopamine/NE via Gs
SIG PKA_activity // downstream of cAMP
SIG GluA1_Ser845_primed // TRACE: bool — AMPA insertion primed
SIG DARPP32_phospho // TRACE: bool — LTD phosphatase silenced
SIG CREB_active // TRACE: bool — gene expression enabled
SIG dopamine_level // broadcast: "save" context signal
SIG NE_level // broadcast: arousal / gain signal
SIG ACh_level // broadcast: attention / threshold signal
SIG BDNF_TrkB_signaling // local: branch survival + growth signal
```
---
## Budget Allocation Functions
```
function request_axon_resources(bouton_id, req_AZ):
available = axon_vesicle_protein_pool × tag_priority(bouton_id, axon_tagged_boutons)
granted = min(req_AZ, available)
axon_vesicle_protein_pool -= granted
if granted < req_AZ:
trigger(heterosynaptic_depression, neighbors(bouton_id))
return granted
function request_dend_resources(spine_id, req_AMPA, req_actin):
priority = tag_priority(spine_id, dend_tagged_spines)
g_AMPA = min(req_AMPA, dend_receptor_reserve × priority)
g_actin = min(req_actin, dend_actin_machinery × priority)
dend_receptor_reserve -= g_AMPA
dend_actin_machinery -= g_actin
if g_AMPA < req_AMPA:
queue(spine_id, deficit, dend_protein_flux) // wait for soma delivery
trigger(heterosynaptic_depression, neighbors(spine_id))
return (g_AMPA, g_actin)
function request_astro_resources(syn_id, req_Ds, req_ECM, req_proc):
g_Ds = min(req_Ds, astro_serine_racemase_cap)
g_ECM = min(req_ECM, astro_ECM_protein_pool)
g_proc = min(req_proc, astro_process_extensions)
ATP_cost = compute_ATP(g_Ds, g_ECM, g_proc)
if ATP_cost > astro_ATP_budget: scale_down(g_Ds, g_ECM, g_proc)
astro_serine_racemase_cap -= g_Ds
astro_ECM_protein_pool -= g_ECM
astro_process_extensions -= g_proc
astro_ATP_budget -= ATP_cost
return (g_Ds, g_ECM, g_proc)
function request_soma_resources(req_proteins, req_receptors, req_organelles):
g_prot = min(req_proteins, soma_protein_synthesis_rate)
g_rec = min(req_receptors, soma_receptor_synthesis_rate)
g_org = min(req_organelles, soma_organelle_pool)
ATP_cost = compute_ATP(g_prot, g_rec, g_org)
if ATP_cost > soma_ATP_budget: scale_down(g_prot, g_rec, g_org)
soma_protein_synthesis_rate -= g_prot
soma_receptor_synthesis_rate -= g_rec
soma_organelle_pool -= g_org
soma_ATP_budget -= ATP_cost
return (g_prot, g_rec, g_org)
function replenish_budgets(Δt):
// Axon
axon_vesicle_protein_pool += protein_transport_rate(axon) × Δt
// Dendritic branch
dend_receptor_reserve += soma_receptor_synthesis_rate × delivery_fraction() × Δt
dend_actin_machinery += actin_recovery_rate() × Δt
dend_protein_flux = soma_protein_synthesis_rate
dend_mRNA_pool += soma_mRNA_transcription_rate × Δt
dend_mitochondria_capacity += organelle_delivery_rate() × Δt
// Astrocyte
astro_serine_racemase_cap += enzyme_synthesis_rate() × Δt
astro_ECM_protein_pool += ECM_synthesis_rate() × Δt
astro_process_extensions += process_recovery_rate() × Δt // slow: hours
astro_ATP_budget += glycolysis(astro_lactate_ceiling) × Δt
astro_lactate_ceiling = capillary_glucose_supply() // vascular ceiling
// Soma
soma_protein_synthesis_rate = CREB_driven_expression() // peaks in NIGHT
soma_receptor_synthesis_rate += ribosome_activity() × Δt
soma_organelle_pool += biogenesis_rate() × Δt
soma_ATP_budget += mitochondria_output() × Δt
soma_mRNA_transcription_rate = AP_history_driven(SOMA.AP_rate) // scales with use
```
---
---
# SCOPE: DAY
All fast and intermediate behaviors. Structural variables only READ, not written.
---
## PRE — Presynaptic Bouton
### CONTEXT: AP (action potential arriving)
```
scope DAY | context AP:
// Gate 1: energy budget
if axon_mitochondria_capacity < release_ATP_cost:
suppress(release) // silent bouton — budget exhausted
exit context
// Ca²⁺ dynamics — primary fast trace
pre_Ca_residual += spike_influx(input_freq)
pre_Ca_residual *= decay(τ ≈ 100ms) // TRACE: fades unless spikes keep arriving
// Release — gated by residual trace from prior APs
vesicle_release_prob *= facilitation(pre_Ca_residual)
released = binomial(RRP_pool, vesicle_release_prob)
glutamate_cleft = released × quantal_content
RRP_pool -= released
axon_mitochondria_capacity -= release_ATP_cost
// Overflow sensing — activates mGluR brake (cross-compartment)
glutamate_spillover = extrasynaptic_diffusion(glutamate_cleft)
if glutamate_spillover > spillover_threshold:
mGluR2_3_activation = True
cAMP_level -= Gi_inhibition(adenylyl_cyclase)
vesicle_release_prob -= VGCC_suppression() // autoinhibitory brake
// Fuel consumed — refill gated by lactate supply
RRP_pool refilled by VATPase(astro.lactate_out)
```
### CONTEXT: NOT_AP (between spikes)
```
scope DAY | context NOT_AP:
// Residual Ca²⁺ decays — trace erodes passively
pre_Ca_residual *= decay(τ ≈ 100ms)
// Reserve pool mobilization — intermediate tuning, pool-limited
if input_freq_history > 20Hz:
mobilize(reserve_pool → RRP_pool) // only if reserve_pool > 0
// TRACE: RRP_pool now larger
elif input_freq_history < 5Hz:
vesicle_release_prob *= 0.7 // TRACE: depression accumulates
// Neuromodulator context gate — sets axonal tag if save signal present
if dopamine_level > D1_threshold or NE_level > β_threshold:
cAMP_level += Gs_activation(adenylyl_cyclase)
PKA_activity = proportional_to(cAMP_level)
axon_tagged_boutons.add(bouton_id) // TRACE: tag — competes for axonal proteins
```
---
## POST — Dendritic Spine
### CONTEXT: NOT_bAP (before back-propagating AP — Hebbian anticipation window)
```
scope DAY | context NOT_bAP:
// AMPA current from incoming glutamate
AMPA_current = glutamate_cleft × AMPA_count
membrane_potential += AMPA_current
// NMDA gate: coincidence check with D-serine from astrocyte
if membrane_potential > -40mV and D_serine_release > threshold:
NMDA_Mg_block = False
post_Ca_amplitude += NMDA_influx(glutamate_cleft)
post_Ca_rise_speed = d(post_Ca_amplitude) / dt // TRACE: encodes LTP vs LTD
// TAG PLANTED HERE — before bAP confirms coincidence
// Condition: Ca²⁺ rising, NMDA open, ion channels activated
if post_Ca_amplitude > Ca_TAG_threshold and NMDA_Mg_block == False:
spine_tag = True // TRACE: tag planted in anticipation window
dend_tagged_spines.add(spine_id) // enters competition for drifting proteins
// PKA priming — if neuromodulator context already set
if GluA1_Ser845_primed:
AMPA_insertion_threshold *= 0.7 // easier to anchor receptors later
```
### CONTEXT: bAP (back-propagating action potential arriving)
```
scope DAY | context bAP:
// bAP depolarizes spine — confirms or rejects the tag planted in NOT_bAP
membrane_potential += bAP_depolarization(dend.bAP_amplitude)
// Coincidence validation: was the tag planted just before bAP?
if spine_tag == True and post_Ca_amplitude > Ca_TAG_threshold:
// Confirmed Hebbian coincidence — escalate Ca²⁺
post_Ca_amplitude += bAP_Ca_boost() // TRACE: amplitude now crosses LTP threshold
post_Ca_rise_speed = d(post_Ca_amplitude) / dt
elif spine_tag == False:
// bAP arrived but no prior glutamate signal — no coincidence
// membrane_potential rises transiently but no Ca²⁺ amplification
pass
// Fuel: NaK pump resets membrane — gated by lactate from astrocyte
membrane_potential restored by NaK_ATPase(astro.lactate_out)
soma_ATP_budget -= bAP_propagation_cost
```
---
## DEND — Dendritic Branch
### CONTEXT: CONTINUOUS (branch is always active as integrator)
```
scope DAY | context CONTINUOUS:
// Branch integrates spine activity and propagates bAP
branch_voltage = integrate(POST.membrane_potential, all_spines_on_branch)
bAP_amplitude = propagate_bAP(SOMA.AP_fired, branch_geometry)
// TRACE: bAP_amplitude decays with distance from soma
// Branch Ca²⁺ — driven by bAP and local NMDA spillover
branch_Ca += bAP_Ca_influx(bAP_amplitude)
branch_Ca *= decay(τ ≈ 300ms) // TRACE: slower than spine Ca²⁺
// Branch tag — planted when multiple co-active spines detected
if co_active_spines(branch) > branch_tag_threshold:
branch_tag = True // TRACE: branch-level tag for coordinated plasticity
BDNF_TrkB_signaling += local_BDNF_release(branch_Ca) // TRACE: survival signal
// Local translation — mRNA → protein at branch ribosomes
// Only runs if branch_tag is set and mRNA pool available
if branch_tag and dend_mRNA_pool > 0:
local_protein_translation = translate(dend_mRNA_pool, dend_mitochondria_capacity)
dend_mRNA_pool -= local_protein_translation × cost
dend_protein_flux += local_protein_translation // TRACE: locally produced proteins
// Branch energy budget
dend_mitochondria_capacity -= branch_ATP_cost(branch_voltage, local_protein_translation)
// Intermediate tuning: ACh modulates branch excitability globally
LTP_threshold *= (1 / (1 + ACh_level × mAChR_gain))
```
---
## SOMA — Cell Body
### CONTEXT: AP (somatic action potential fired)
```
scope DAY | context AP:
// Somatic AP triggered when branch_voltage integration crosses threshold
if SOMA.membrane_potential > AP_threshold:
AP_fired = True
// Nuclear Ca²⁺ — key trace for slow-scale gene expression
nuclear_Ca += Ca_influx_from_AP() // TRACE: accumulates with firing rate
nuclear_Ca *= decay(τ ≈ seconds)
// CREB phosphorylation — gated by nuclear Ca²⁺ AND PKA
if nuclear_Ca > Ca_CREB_threshold and PKA_activity > PKA_threshold:
CREB_phospho = True // TRACE: enables gene expression in NIGHT scope
SOMA.Arc_mRNA_level += transcribe(Arc_gene) // TRACE: ships to active branches
SOMA.BDNF_production_rate += transcribe(BDNF_gene)
soma_ATP_budget -= AP_generation_cost
```
### CONTEXT: NOT_AP (between somatic spikes)
```
scope DAY | context NOT_AP:
// Integrate dendritic input — build toward next AP or not
SOMA.membrane_potential = integrate(DEND.branch_voltage, all_branches)
// Ship mRNA to active dendritic branches — tagged branches receive priority
for branch in dend_tagged_spines:
Arc_mRNA_level → ship_to(branch, priority_fraction) // TRACE: Arc arrives at branch
BDNF_production_rate → modulate(branch_BDNF_level)
// Ship organelles to high-demand branches
if soma_organelle_pool > 0:
soma_organelle_queue.add(branches_ranked_by(branch_Ca))
dend_mitochondria_capacity[top_branch] += deliver_organelle()
soma_organelle_pool -= delivery_cost
// Neuromodulator context received — PKA gate set for all compartments
if dopamine_level > D1_threshold or NE_level > β_threshold:
PKA_activity = proportional_to(cAMP_level)
GluA1_Ser845_primed = True // TRACE: primes all tagged spines
DARPP32_phospho = True // TRACE: silences LTD phosphatase
CREB_active = True // TRACE: gene expression gate open
```
---
## ASTRO — Astrocyte
### CONTEXT: CONTINUOUS (astrocyte monitors territory at all times)
```
scope DAY | context CONTINUOUS:
// Clearance — always running, rate limited by EAAT pool and ATP budget
glutamate_cleft -= glutamate_clearance_rate × Δt
astro_ATP_budget -= clearance_ATP_cost(glutamate_clearance_rate)
// Overflow detection — gated by spillover threshold (low-affinity mGluR5)
glutamate_spillover = extrasynaptic_diffusion(glutamate_cleft)
if glutamate_spillover > spillover_threshold:
mGluR5_activation = True
astro_Ca_local += IP3_cascade(PLC) // TRACE: local Ca²⁺ rises
(g_Ds, _, _) = request_astro_resources(syn_id, proportional_to(astro_Ca_local), 0, 0)
D_serine_release += g_Ds // NMDA co-agonist — may be budget-limited
mGluR2_3_activation = True // simultaneously brakes PRE
// Global overload check
astro_Ca_global = soma_wave(astro_Ca_local > OVERLOAD_threshold)
if astro_Ca_global: trigger(shockwave_lockdown)
// Fuel pipeline — hard-capped at vascular ceiling
lactate_out = min(glycolysis_rate(glutamate_clearance_rate), astro_lactate_ceiling)
deliver(lactate_out → PRE, POST, DEND) // all three compartments draw from this
astro_ATP_budget += glycolysis(lactate_out) × Δt
```
---
## Special Case — Shockwave Lockdown (>100Hz, uncoordinated, any scope)
```
scope DAY or NIGHT | context OVERLOAD:
astro_Ca_global = GLOBAL_WAVE
release(GABA, ATP) // emergency — bypasses budget gate
rec_AMPA = POST.mass_internalization()
POST.AMPA_count -= rec_AMPA
dend_receptor_reserve += rec_AMPA // returned to branch reserve
POST.membrane_potential = HYPERPOLARIZED
cluster(PRE.VGCC → beneath_active_zone) // overdrive — signal preserved in chaos
astro_ATP_budget -= emergency_response_cost()
```
---
---
# SCOPE: NIGHT
Structural commit, resource replenishment, consolidation.
All compartments are modulated. Slow variables now WRITTEN.
---
## ALL COMPARTMENTS — Structural Commit
```
scope NIGHT:
// Step 1: replenish all budgets — soma protein synthesis peaks here
replenish_budgets(Δt_night)
// Step 2: process somatic shipping queue — fulfill deferred organelle deliveries
for branch in soma_organelle_queue:
dend_mitochondria_capacity[branch] += deliver_organelle()
soma_organelle_pool -= delivery_cost
// Step 3: evaluate structural commit for each tagged synapse
for each (bouton_id, spine_id, syn_id) where spine_tag == True:
commit_to_structural_change(bouton_id, spine_id, syn_id)
// Step 4: homeostatic downscaling — prune unvalidated potentiations
for each synapse where spine_tag == False and disuse_duration > disuse_threshold:
passive_LTD(synapse)
// Step 5: clear all DAY-scope traces that were not committed
for each expired_tag in dend_tagged_spines + axon_tagged_boutons:
expire_tag(expired_tag)
```
---
## PRE — Structural Commit (NIGHT)
```
scope NIGHT | PRE:
g_AZ = request_axon_resources(bouton_id, AZ_expansion_cost)
// Commit proportional to granted budget
active_zone_size += g_AZ // SLOW TRACE: permanent AZ expansion
RRP_pool_capacity += pool_expansion(active_zone_size)
VGCC_clustering += cluster_beneath_AZ(g_AZ)
vesicle_release_prob += scale_with(g_AZ)
// If partial grant: deficit queued for next NIGHT cycle
if g_AZ < AZ_expansion_cost:
queue(bouton_id, deficit, axon_vesicle_protein_pool)
axon_tagged_boutons.remove(bouton_id)
// LTD branch: resources returned to pool
if LTD_signal:
rec_AZ = docking_slot_removal()
active_zone_size -= rec_AZ
axon_vesicle_protein_pool += rec_AZ // returned for reuse
RRP_pool_capacity -= pool_contraction()
VGCC_clustering -= scatter_VGCCs()
vesicle_release_prob *= 0.6
```
---
## POST — Structural Commit (NIGHT)
```
scope NIGHT | POST:
(g_AMPA, g_actin) = request_dend_resources(spine_id, AMPA_cost, actin_cost)
// Commit proportional to granted budget
activate(CaMKII)
AMPA_count += receptor_insertion(CaMKII, g_AMPA) // SLOW TRACE: permanent receptor gain
spine_volume *= (1 + spine_scale(g_actin)) // SLOW TRACE: spine head enlarged
// Deficit queued for next NIGHT cycle
if g_AMPA < AMPA_cost:
queue(spine_id, deficit, dend_protein_flux)
dend_tagged_spines.remove(spine_id)
spine_tag = False // tag cleared after commit
// LTD branch: resources returned to branch pool
if LTD_signal:
activate(PP1)
rec_AMPA = receptor_internalization(PP1)
AMPA_count -= rec_AMPA
dend_receptor_reserve += rec_AMPA // returned to branch pool
spine_volume *= 0.7
dend_actin_machinery += actin_depolymerization()
```
---
## DEND — Structural Commit (NIGHT)
```
scope NIGHT | DEND:
// Branch receives organelles shipped from soma during NIGHT
dend_mitochondria_capacity += soma_organelle_delivery(branch_id) // SLOW TRACE
// Arc mRNA translated into structural proteins at branch ribosomes
if dend_mRNA_pool > Arc_threshold:
new_proteins = translate(dend_mRNA_pool, dend_mitochondria_capacity)
dend_protein_flux += new_proteins // SLOW TRACE: local supply expanded
dend_mRNA_pool -= translation_cost
// Branch BDNF consolidates active branch architecture
if branch_BDNF_level > BDNF_survival_threshold:
dend_mitochondria_density += BDNF_TrkB_signaling × Δt // SLOW TRACE: branch reinforced
else:
dend_mitochondria_density -= pruning_rate() × Δt // SLOW TRACE: branch weakened
// Branch tag cleared
branch_tag = False
```
---
## SOMA — Structural Commit (NIGHT)
```
scope NIGHT | SOMA:
// CREB drives transcription — highest rate during NIGHT (slow-wave sleep replay)
if CREB_phospho:
soma_protein_synthesis_rate += CREB_driven_expression() // SLOW TRACE
soma_receptor_synthesis_rate += CREB_driven_expression()
soma_mRNA_transcription_rate += transcription_burst()
// Replenish organelle pool — biogenesis peaks during rest
soma_organelle_pool += mitochondria_biogenesis() × Δt // SLOW TRACE
soma_ATP_budget += overnight_mitochondria_recovery() × Δt
// Homeostatic scaling: if overall firing was too high, scale down all synapses
if soma_AP_rate_history > homeostatic_ceiling:
for each synapse:
AMPA_count[synapse] *= homeostatic_scale_down_factor
vesicle_release_prob[synapse] *= homeostatic_scale_down_factor
// Clear CREB trace if no further consolidation needed
if soma_organelle_queue.empty() and dend_tagged_spines.empty():
CREB_phospho = False
CREB_active = False
```
---
## ASTRO — Structural Commit (NIGHT)
```
scope NIGHT | ASTRO:
// Perisynaptic process remodeling — most expensive astrocyte operation
// LTP: walls move IN — seals and insulates the channel
if LTP_signal:
(g_Ds, g_ECM, g_pr) = request_astro_resources(syn_id, Ds_cost, ECM_cost, proc_cost)
perisynaptic_distance -= g_pr // SLOW TRACE: tighter wrap
ECM_integrity += g_ECM // SLOW TRACE: matrix sealed
D_serine_tonic_level += g_Ds // SLOW TRACE: sustained co-agonist
glutamate_clearance_rate *= (1 - clearance_scale(g_pr)) // SLOW TRACE
// LTD: walls move OUT — loosens diffusion barrier, dissolves matrix
if LTD_signal:
rec_ECM = secrete(MMPs)
ECM_integrity -= rec_ECM
astro_ECM_protein_pool += rec_ECM × recycling_fraction // partial recovery
D_serine_tonic_level = 0 // SLOW TRACE: starved
perisynaptic_distance += process_extension()
astro_process_extensions += freed_process // freed for reallocation
glutamate_clearance_rate *= 1.2 // SLOW TRACE
// Replenish astrocyte pools overnight
replenish_budgets(Δt_night)
```
---
## Heterosynaptic Depression — Passive Resource Depletion (any scope)
```
scope DAY or NIGHT | triggered by budget exhaustion:
function heterosynaptic_depression(neighbor_ids):
// No active signal — purely consequence of pool depletion
for n in neighbor_ids:
if n not in dend_tagged_spines and n not in axon_tagged_boutons:
POST.AMPA_count[n] -= passive_depletion_rate()
PRE.vesicle_release_prob[n] -= passive_depletion_rate()
```
---
## Energy Supply Chain — Metabolic Gating (DAY scope, CONTINUOUS)
```
scope DAY | context CONTINUOUS:
function metabolic_loop(Δt):
glucose_uptake = blood_capillary_supply() // vascular hard ceiling
lactate_out = min(glycolysis(glucose_uptake, glutamate_clearance_rate),
astro_lactate_ceiling)
lactate_out *= load_factor(glutamate_clearance_rate)
// Distribute fuel to all three consumer compartments
PRE.RRP_pool refilled by VATPase(lactate_out × pre_fraction)
POST.membrane_potential reset by NaK_ATPase(lactate_out × post_fraction)
DEND.branch_ops powered by lactate_out × dend_fraction
astro_ATP_budget += glycolysis(lactate_out) × Δt
```
---
## Key Asymmetries and Closure Summary
```
// PERISYNAPTIC DISTANCE — amplifies both directions
// LTP: walls IN → clearance_rate ↓, D_serine_tonic ↑ → self-reinforcing
// LTD: walls OUT → clearance_rate ↑, D_serine_tonic = 0 → self-reinforcing
// Cost: astro_process_extensions budget — slow to recover (hours)
// SYNAPTIC TAG — the bridge between DAY and NIGHT
// Planted in DAY (NOT_bAP context) when Ca²⁺ rises before bAP confirms coincidence
// Consumed in NIGHT when structural commit runs and budget is available
// Expires in NIGHT if no save signal arrived during DAY — no structural trace left
// BUDGET CONSERVATION — the system is closed
// LTP draws from shared pools → neighbors passively depressed (heterosynaptic LTD)
// LTD returns resources to pools → neighbors passively enriched
// Net: one synapse's gain is its neighbors' loss, bounded by vascular glucose ceiling
// SLEEP (NIGHT scope) — not passive recovery but active execution
// soma_protein_synthesis_rate peaks → queued deficits fulfilled
// CREB_driven_expression peaks → new structural proteins shipped to tagged branches
// Homeostatic downscaling runs → unvalidated potentiations pruned
// All DAY traces either committed to structure or cleared
```