--- 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.1–1.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 ```