From 567fb80d8b842a5b1b9b615b46df06ceba849e41 Mon Sep 17 00:00:00 2001 From: ocrampal Date: Sat, 6 Jun 2026 16:49:29 +0200 Subject: [PATCH] Create 2026-06-06-tripartite_synapse_v2.md --- .../2026-06-06-tripartite_synapse_v2.md | 702 ++++++++++++++++++ 1 file changed, 702 insertions(+) create mode 100644 elements/astrocyte/appunti/2026-06-06-tripartite_synapse_v2.md diff --git a/elements/astrocyte/appunti/2026-06-06-tripartite_synapse_v2.md b/elements/astrocyte/appunti/2026-06-06-tripartite_synapse_v2.md new file mode 100644 index 0000000..324c6b3 --- /dev/null +++ b/elements/astrocyte/appunti/2026-06-06-tripartite_synapse_v2.md @@ -0,0 +1,702 @@ +--- +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 +```