Files
organism/elements/neuron/appunti/2026-06-11-tripartite_synapse_v6.md
T
2026-06-11 15:37:33 +02:00

40 KiB
Raw Blame History

Tripartite Synapse — Pseudocode v6

Naming convention: DAY: {component}_budget = combined fast energy + fast consumable materials NIGHT: {component}_energy = ATP for structural assembly {component}_material = slow structural proteins (recoverable after LTD)

Part 1 — Conventions

SCOPE    = { DAY, NIGHT }
CONTEXT  = { AP, NOT_AP, bAP, NOT_bAP, CONTINUOUS }

Variable types:
  FIXED       = externally imposed — does not change during simulation
  VAR         = changes dynamically
  FAST_TRACE  = accumulates and decays within DAY — never reaches NIGHT
                role: biases next behavior within same context
  TAG         = set during DAY, decays slowly, survives to NIGHT
                POST only: CANDIDATE (DAY) → STABLE (DAY) → commit (NIGHT)
  BUDGET      = DAY only: combined fast energy + fast consumable materials
                one variable per component
                replenished continuously during DAY
  ENERGY      = NIGHT only: ATP cost of structural assembly
                replenished overnight
                NOT recoverable after LTD
  MATERIAL    = NIGHT only: slow structural proteins
                replenished by CREB synthesis + transport (hoursdays)
                RECOVERABLE after LTD — returns to shared pools
  STRUCTURE   = slow architectural variable
                READ during DAY, WRITTEN only in NIGHT

Part 2 — Fixed Parameters

// Thresholds
FIXED  Ca_TAG_threshold         // Ca²⁺ sufficient to set post CANDIDATE tag
FIXED  Ca_HIGH                  // LTP-driving Ca²⁺ amplitude
FIXED  Ca_LOW                   // LTD-driving Ca²⁺ amplitude
FIXED  spillover_threshold      // cleft saturation for mGluR activation
FIXED  eligibility_threshold    // minimum fast_trace to be taggable
FIXED  dopamine_threshold       // minimum dopamine for tag stabilization
FIXED  tagging_threshold        // minimum possible_tagging for tag accumulation
FIXED  tag_expiry_threshold     // minimum tag to survive to NIGHT commit
FIXED  homeostatic_ceiling      // max soma firing before global downscale
FIXED  disuse_threshold         // silence duration before passive depotentiation
FIXED  recycling_fraction       // fraction of material recovered after LTD

// Organism-level signals
FIXED  dopamine_level           // VTA broadcast — reward/save signal
FIXED  NE_level                 // locus coeruleus — arousal/gain
FIXED  ACh_level                // basal forebrain — attention/threshold

// Physical constraints
FIXED  vascular_glucose_supply  // hard energy ceiling — astrocyte root
FIXED  branch_geometry          // dendritic topology — affects bAP decay
FIXED  Ca_cooperativity_n       // Hill coefficient for Ca²⁺-driven NT release
FIXED  Ca_half_max_K            // half-maximal Ca²⁺ for NT release

Part 3 — DAY Budget Declarations

// One budget variable per component — covers fast energy AND fast consumables
// Replenished continuously. Consumed by all DAY behaviors.

VAR  astro_budget
     // SOURCE: vascular_glucose_supply → glycolysis (ROOT of all synaptic energy)
     // COVERS: ATP for EAAT glutamate clearance
     //         serine → D-serine synthesis (serine racemase running cost)
     //         lactate production and export to all neuronal components
     //         fast process motility adjustments
     // (combines: astro_ATP + serine_precursor_fast_pool + EAAT_running_cost)

VAR  astro_lactate
     // Fuel exported by astrocyte → feeds pre, post, dend, axon budgets
     // = min(glycolysis(vascular_glucose_supply), astro_budget × export_fraction)
     // Hard cap: vascular_glucose_supply (FIXED)

VAR  pre_budget
     // SOURCE: astro_lactate × pre_fraction (primary)
     // COVERS: ATP for VGCC opening
     //         vesicle fusion (SNARE-mediated)
     //         VATPase refill of vesicles
     //         fast vesicle membrane lipid turnover
     //         synaptotagmin recycling
     // (combines: bouton_ATP + fast_vesicle_consumables)

VAR  post_budget
     // SOURCE: astro_lactate × post_fraction (primary)
     // COVERS: ATP for NaK pump membrane reset
     //         NMDA current handling
     //         AMPA receptor lateral diffusion + rapid recycling
     //         actin monomers for transient spine changes
     //         PKA phosphorylation (minor)
     // (combines: spine_ATP + fast_actin_pool + receptor_recycling_lipids)

VAR  dend_budget
     // SOURCE: astro_lactate × dend_fraction (primary)
     //         soma organelle delivery (minor)
     // COVERS: ATP for bAP propagation along branch
     //         local mRNA translation (ribosome running cost)
     //         fast protein + organelle transport to spines
     //         branch Ca²⁺ handling (SERCA pump)
     //         mRNA consumed by local translation
     // (combines: dend_ATP + fast_mRNA_consumables + local_translation_running_cost)

VAR  soma_budget
     // SOURCE: own mitochondria (self-fueled — independent of astrocyte)
     // COVERS: ATP for AP generation (Na⁺/K⁺ currents + NaK reset)
     //         CREB phosphorylation (minor)
     //         nuclear Ca²⁺ handling
     //         fast signaling molecule turnover
     //         shipping costs for organelle delivery to branches + axon
     // (combines: soma_ATP + fast_signaling_consumables + shipping_running_cost)

VAR  axon_budget
     // SOURCE: soma_budget × axon_fraction (primary)
     //         astro_lactate × axon_astro_fraction (minor, along shaft)
     // COVERS: ATP for AP propagation at each node of Ranvier
     //         kinesin/dynein motor running cost (anterograde transport)
     //         myelin maintenance fast costs
     // (combines: axon_ATP + transport_running_cost)

Part 4 — NIGHT Energy and Material Declarations

// ENERGY: ATP cost of structural assembly — replenished overnight, NOT recoverable
// MATERIAL: slow structural proteins — replenished by CREB + transport, RECOVERABLE

VAR  astro_energy    // NIGHT ATP for process retraction, ECM secretion, racemase upregulation
                     // SOURCE: overnight glycolysis replenishment
                     // NOT recovered after LTD structural reversal
                     // (covers: process_motility_ATP + ECM_secretion_ATP)

VAR  astro_material  // NIGHT slow structural components
                     // SOURCE: astrocyte cell body synthesis (overnight)
                     // CONTAINS: EAAT transporter proteins
                     //           serine racemase enzyme (upregulation)
                     //           ECM proteins (Glypicans, Thrombospondins)
                     //           process cytoskeleton components
                     // RECOVERABLE: partially after LTD (recycling_fraction)
                     // (combines: astro_ECM_pool + racemase_upregulation_proteins
                     //            + EAAT_new_proteins + process_cytoskeleton)

VAR  pre_energy      // NIGHT ATP for active zone scaffold incorporation
                     // SOURCE: replenished from soma overnight delivery
                     // NOT recovered after LTD
                     // (covers: RIM/Munc13_incorporation_ATP + VGCC_clustering_ATP)

VAR  pre_material    // NIGHT slow structural components for bouton
                     // SOURCE: soma_material via axon transport (anterograde)
                     // CONTAINS: RIM, Munc13 (AZ scaffold)
                     //           VGCC subunits
                     //           vesicle membrane proteins (structural pool)
                     //           SNARE proteins (structural pool)
                     // RECOVERABLE: significantly after LTD — proteins return to axonal pool
                     // (combines: AZ_scaffold_proteins + VGCC_subunit_pool)

VAR  post_energy     // NIGHT ATP for CaMKII anchoring, actin polymerization, PSD remodeling
                     // SOURCE: replenished from soma overnight delivery
                     // NOT recovered after LTD
                     // (covers: CaMKII_anchoring_ATP + actin_polymerization_ATP
                     //          + PSD_scaffold_remodeling_ATP)

VAR  post_material   // NIGHT slow structural components for spine
                     // SOURCE: dend_material (branch pool + soma delivery)
                     // CONTAINS: AMPA receptor subunits (GluA1, GluA2)
                     //           PSD scaffold proteins (PSD-95, SHANK, Homer)
                     //           structural actin pool
                     //           CaMKII (structural pool)
                     // RECOVERABLE: significantly — internalized receptors return to
                     //              dendritic reserve pool after LTD
                     // (combines: receptor_reserve + PSD_scaffold_pool + structural_actin)

VAR  dend_energy     // NIGHT ATP for mitochondria incorporation, cytoskeletal reinforcement
                     // SOURCE: soma overnight delivery
                     // NOT recovered after LTD
                     // (covers: mitochondria_incorporation_ATP + cytoskeletal_remodeling_ATP)

VAR  dend_material   // NIGHT slow structural components for branch
                     // SOURCE: soma_material (shipped during DAY NOT_AP + NIGHT)
                     // CONTAINS: Arc mRNA + plasticity mRNAs (structural pool)
                     //           mitochondria (for local energy capacity)
                     //           cytoskeletal proteins (MAP2, tau)
                     //           AMPA subunits in transit to spines
                     // RECOVERABLE: partially — organelles redistributed after branch pruning
                     // (combines: dend_mRNA_structural_pool + organelle_store
                     //            + cytoskeletal_proteins)

VAR  soma_energy     // NIGHT ATP for ribosome biogenesis, ion channel incorporation
                     // SOURCE: own mitochondria overnight
                     // NOT recovered
                     // (covers: ribosome_biogenesis_ATP + channel_incorporation_ATP)

VAR  soma_material   // NIGHT slow structural components produced by soma
                     // SOURCE: CREB-driven synthesis (peaks in NIGHT)
                     // CONTAINS: all structural proteins for downstream components
                     //           mRNA transcripts (Arc, BDNF, receptor subunits)
                     //           organelles (mitochondria, ribosomes)
                     // DISTRIBUTES TO: dend_material + pre_material (via axon)
                     // (combines: CREB_synthesis_output + organelle_biogenesis_output)

VAR  axon_energy     // NIGHT ATP for myelination, microtubule stabilization
                     // SOURCE: soma overnight delivery
                     // NOT recovered
                     // (covers: myelination_ATP + microtubule_stabilization_ATP)

VAR  axon_material   // NIGHT slow structural components for axon
                     // SOURCE: soma_material (motor proteins, myelin components)
                     // CONTAINS: kinesin/dynein motor proteins (structural pool)
                     //           microtubule components
                     //           myelin maintenance proteins
                     // RECOVERABLE: partially after axon structural reduction
                     // (combines: transport_machinery + myelination_proteins)

Part 5 — Structural Variables (Written Only in NIGHT)

VAR  pre_structure   // active zone capacity
                     // RRP_capacity ∝ pre_structure
                     // VGCC_coupling ∝ pre_structure
                     // refill_ceiling ∝ pre_structure

VAR  post_structure  // spine sensitivity capacity
                     // anchoring_slots ∝ post_structure
                     // spine_volume ∝ post_structure
                     // local_reserve_ceiling ∝ post_structure

VAR  dend_structure  // branch transmission and supply capacity
                     // bAP_fidelity ∝ dend_structure × attenuation(position)
                     // translation_ceiling ∝ dend_structure
                     // transport_speed ∝ dend_structure

VAR  soma_structure  // somatic output and production capacity
                     // baseline_threshold ∝ 1/soma_structure
                     // AP_reliability ∝ soma_structure
                     // synthesis_ceiling ∝ soma_structure

VAR  axon_structure  // axonal transmission and transport capacity
                     // propagation_reliability ∝ axon_structure
                     // transport_rate_ceiling ∝ axon_structure

VAR  astro_structure // astrosynaptic environmental capacity — SELF-REINFORCING
                     // perisynaptic_distance ∝ 1/astro_structure
                     // EAAT_density ∝ astro_structure
                     // D_serine_tonic ∝ astro_structure
                     // ECM_integrity ∝ astro_structure

Part 6 — Trace Variables

// Fast traces: DAY only
FAST_TRACE  pre_fast_trace      // residual Ca²⁺ — τ ≈ 100ms
FAST_TRACE  post_fast_trace     // spine Ca²⁺ amplitude × rise_speed — τ ≈ tens of ms
FAST_TRACE  dend_fast_trace     // branch Ca²⁺ integration — τ ≈ 300ms
FAST_TRACE  soma_fast_trace     // nuclear Ca²⁺ — τ ≈ seconds
FAST_TRACE  axon_fast_trace     // AP propagation load — τ ≈ seconds
FAST_TRACE  astro_fast_trace    // perisynaptic Ca²⁺ from mGluR5 — τ ≈ seconds

// Possible tagging: intermediate — τ ≈ seconds to minutes
VAR  pre_possible_tagging
VAR  post_possible_tagging      // POST: CANDIDATE lifetime
VAR  dend_possible_tagging
VAR  soma_possible_tagging
VAR  axon_possible_tagging
VAR  astro_possible_tagging

// Tags: slow, DAY→NIGHT bridge — τ ≈ hours
TAG  pre_tag
TAG  post_tag                   // POST only: CANDIDATE→STABLE before surviving to NIGHT
TAG  dend_tag
TAG  soma_tag
TAG  axon_tag
TAG  astro_tag

SCOPE: DAY

{component}_budget consumed. Traces written and decay. Structures READ only. No {component}_energy or {component}_material used in DAY.

PRE | CONTEXT: AP

scope DAY | context AP:

    // Budget gate
    if pre_budget < AP_release_cost:
        suppress(NT_flux)
        exit context
        // covers: VGCC_ATP + fusion_ATP + fast_vesicle_consumables

    // Fast trace: residual Ca²⁺
    pre_fast_trace += spike_Ca_influx(input_freq)
    pre_fast_trace *= decay(τ = 100ms)
    pre_budget     -= Ca_handling_cost

    // NT flux: Hill function Ca²⁺ drive × RRP level
    Ca_drive    = pre_fast_trace^Ca_cooperativity_n /
                  (Ca_half_max_K^Ca_cooperativity_n + pre_fast_trace^Ca_cooperativity_n)

    if RRP_level > 0:
        NT_flux    = RRP_level × Ca_drive
        glutamate += NT_flux × Δt
        RRP_level -= NT_flux × Δt
        pre_budget -= NT_flux × vesicle_fusion_cost
        // covers: SNARE_ATP + fast_membrane_lipid_turnover

    // RRP refill — rate limited by pre_budget and pre_structure (READ)
    RRP_refill  = min(refill_rate_constant, pre_structure.refill_ceiling)
    RRP_level  += RRP_refill × Δt
    RRP_level   = clamp(RRP_level, 0, pre_structure.RRP_capacity)
    pre_budget -= RRP_refill × VATPase_cost

    // Overflow brake: mGluR2/3 → Gi → VGCC suppression
    if glutamate > spillover_threshold:
        Ca_drive *= mGluR_brake_factor

    // Refuel from astrocyte lactate
    pre_budget += astro_lactate × pre_fraction

PRE | CONTEXT: NOT_AP

scope DAY | context NOT_AP:

    // Fast trace decays
    pre_fast_trace *= decay(τ = 100ms)

    // RRP refills during silence
    RRP_refill  = min(refill_rate_constant, pre_structure.refill_ceiling)
    RRP_level  += RRP_refill × Δt
    RRP_level   = clamp(RRP_level, 0, pre_structure.RRP_capacity)
    pre_budget -= RRP_refill × VATPase_cost

    // Possible tagging: graded, decays
    if pre_fast_trace > eligibility_threshold:
        pre_possible_tagging += pre_fast_trace
    pre_possible_tagging *= decay(τ = seconds)

    // Dopamine decays locally
    dopamine_local *= decay(τ = hundreds_of_ms)

    // Tag: local eligibility AND global validation must coincide
    if dopamine_local > dopamine_threshold and
       pre_possible_tagging > tagging_threshold:
        pre_tag += dopamine_local × pre_possible_tagging
    pre_tag *= decay(τ = hours)
    // pre_budget cost: negligible (PKA is already running from dopamine broadcast)

POST | CONTEXT: NOT_bAP

scope DAY | context NOT_bAP:

    // AMPA current — occupancy of existing slots, gated by post_structure (READ)
    AMPA_current    = glutamate × post_structure.sensitivity
    Vm             += AMPA_current
    post_budget    -= AMPA_current_cost
    // covers: NaK_reset_ATP + fast_receptor_recycling_cost

    // NMDA gate: depolarization + D-serine + glutamate coincidence
    if Vm > Mg_eject_threshold and
       astro_D_serine > D_serine_threshold:
        Ca_influx        = NMDA_Ca_influx(glutamate)
        post_fast_trace += Ca_influx × rise_speed(Ca_influx)
        post_budget     -= NMDA_current_cost
        // covers: NMDA_handling_ATP + fast_actin_transient_cost

    // Fast trace decays
    post_fast_trace *= decay(τ = tens_of_ms)

    // CANDIDATE tag: Ca²⁺ crossed tagging threshold — Hebbian anticipation
    if post_fast_trace > Ca_TAG_threshold:
        post_possible_tagging += post_fast_trace
    post_possible_tagging *= decay(τ = minutes)   // CANDIDATE lifetime
    post_budget -= PKA_phosphorylation_cost        // minor — PKA priming of GluA1-Ser845

    // Refuel
    post_budget += astro_lactate × post_fraction

POST | CONTEXT: bAP

scope DAY | context bAP:

    // bAP arrives — strength set by dend_structure (READ)
    Vm += bAP_depolarization × dend_structure.bAP_fidelity
    post_budget -= bAP_reset_cost
    // covers: NaK_reset_ATP for bAP depolarization

    // Coincidence confirmation: bAP finds CANDIDATE already set
    if post_possible_tagging > Ca_TAG_threshold:
        post_fast_trace += bAP_Ca_boost()
        // supralinear Ca²⁺ summation — trace amplified above Ca_HIGH

    // Dopamine decays locally
    dopamine_local *= decay(τ = hundreds_of_ms)

    // STABLE tag: CANDIDATE stabilized by dopamine within window
    if dopamine_local > dopamine_threshold and
       post_possible_tagging > tagging_threshold:
        post_tag += dopamine_local × post_possible_tagging
    post_tag *= decay(τ = hours)
    // post_budget cost: already covered by PKA_phosphorylation_cost in NOT_bAP

DEND | CONTEXT: CONTINUOUS

scope DAY | context CONTINUOUS:

    // Integrate spines upward
    branch_Vm    = integrate(POST.Vm, all_spines_on_branch)

    // Propagate bAP downward — fidelity from dend_structure (READ)
    bAP_local    = propagate_bAP(SOMA.AP_fired,
                                 dend_structure.bAP_fidelity,
                                 branch_geometry)
    dend_budget -= bAP_propagation_cost
    // covers: NaK_reset_ATP along branch + fast_Ca_handling

    // Fast trace: branch Ca²⁺
    dend_fast_trace += bAP_Ca_influx(bAP_local)
    dend_fast_trace += spine_Ca_spillover(active_spines)
    dend_fast_trace *= decay(τ = 300ms)
    dend_budget     -= branch_Ca_handling_cost

    // Possible tagging
    if dend_fast_trace > eligibility_threshold:
        dend_possible_tagging += dend_fast_trace
    dend_possible_tagging *= decay(τ = seconds)

    // Dopamine decays
    dopamine_local *= decay(τ = hundreds_of_ms)

    // Tag
    if dopamine_local > dopamine_threshold and
       dend_possible_tagging > tagging_threshold:
        dend_tag += dopamine_local × dend_possible_tagging
    dend_tag *= decay(τ = hours)

    // Local translation: runs when tag set, gated by dend_budget
    // uses fast mRNA consumables from dend_budget
    if dend_tag > tag_expiry_threshold and dend_budget > translation_cost:
        local_proteins   = translate(dend_fast_trace)
        dend_budget     -= translation_cost
        // covers: ribosome_running_cost + fast_mRNA_consumed
        // Note: this uses fast mRNA pool (in dend_budget), NOT dend_material
        // dend_material mRNA is the slow structural pool consumed only in NIGHT

    // ACh modulates commit threshold
    commit_threshold *= (1 / (1 + ACh_level × ACh_gain))

    dend_budget -= branch_maintenance_cost
    dend_budget += astro_lactate × dend_fraction

SOMA | CONTEXT: AP

scope DAY | context AP:

    // Firing threshold: structure baseline × adaptation × neuromodulators × refractory
    AP_threshold = soma_structure.baseline_threshold
                   × (1 + adaptation_factor(soma_fast_trace))
                   × neuromod_factor(NE_level, ACh_level)
                   × refractory_factor(time_since_last_AP)

    if branch_Vm > AP_threshold:
        AP_fired = True
        soma_budget -= AP_generation_cost
        // covers: Na⁺/K⁺ current ATP + NaK_reset + fast_signaling_consumables

        // Fast trace: nuclear Ca²⁺
        soma_fast_trace += nuclear_Ca_influx()
        soma_fast_trace *= decay(τ = seconds)

        // Refractory period
        refractory_timer = absolute_refractory_duration

        // Possible tagging
        if soma_fast_trace > eligibility_threshold:
            soma_possible_tagging += soma_fast_trace
        soma_possible_tagging *= decay(τ = seconds)

        // Dopamine decays
        dopamine_local *= decay(τ = hundreds_of_ms)

        // Tag: nuclear Ca²⁺ AND dopamine coincidence
        if dopamine_local > dopamine_threshold and
           soma_possible_tagging > tagging_threshold:
            soma_tag += dopamine_local × soma_possible_tagging
        soma_tag *= decay(τ = hours)
        soma_budget -= CREB_phosphorylation_cost
        // covers: CREB_phospho_ATP (minor fast cost)
        // Note: full CREB-driven synthesis is a NIGHT operation consuming soma_energy

SOMA | CONTEXT: NOT_AP

scope DAY | context NOT_AP:

    // Integrate dendritic inputs
    branch_Vm        = integrate(DEND.branch_Vm, all_branches)
    refractory_timer = max(0, refractory_timer - Δt)
    soma_fast_trace *= decay(τ = seconds)

    // Ship to tagged branches — priority by tag magnitude
    for branch in branches_ranked_by(dend_tag):
        delivery          = min(shipping_fraction × soma_budget,
                                branch_demand(dend_tag))
        dend_budget[branch] += delivery × fuel_fraction
        soma_budget         -= delivery × shipping_cost
        // covers: kinesin_running_cost for fast organelle delivery
        // Note: structural protein shipping (soma_material → dend_material)
        //       happens in NIGHT, not here

    // Ship to axon for bouton running costs
    axon_budget += soma_budget × axon_fuel_fraction
    soma_budget -= soma_budget × axon_fuel_fraction

AXON | CONTEXT: CONTINUOUS

scope DAY | context CONTINUOUS:

    // AP propagation reliability — set by axon_structure (READ)
    propagation_reliability = axon_structure.myelination
                              × (1 - failure_rate(axon_fast_trace))
    APs_delivered = AP_fired × propagation_reliability
    axon_budget  -= AP_propagation_cost × APs_delivered
    // covers: NaK_reset_ATP at nodes + fast_myelin_maintenance

    // Fast trace: propagation load
    axon_fast_trace += APs_delivered
    axon_fast_trace *= decay(τ = seconds)

    // Anterograde transport — delivers running supplies to boutons
    transport_rate   = min(axon_structure.transport_ceiling,
                           axon_budget × transport_fraction)
    pre_budget      += transport_rate × Δt    // boutons receive running fuel
    axon_budget     -= transport_cost × transport_rate × Δt
    // covers: kinesin_ATPase running cost
    // Note: structural pre_material transport (soma_material → pre_material)
    //       happens in NIGHT, not here

    // Possible tagging
    if axon_fast_trace > eligibility_threshold:
        axon_possible_tagging += axon_fast_trace
    axon_possible_tagging *= decay(τ = seconds)

    // Dopamine decays
    dopamine_local *= decay(τ = hundreds_of_ms)

    // Tag
    if dopamine_local > dopamine_threshold and
       axon_possible_tagging > tagging_threshold:
        axon_tag += dopamine_local × axon_possible_tagging
    axon_tag *= decay(τ = hours)

    // Refuel
    axon_budget += soma_budget × axon_fuel_fraction
    axon_budget += astro_lactate × axon_astro_fraction

ASTRO | CONTEXT: CONTINUOUS

scope DAY | context CONTINUOUS:

    // ROOT energy production
    astro_budget += glycolysis(vascular_glucose_supply) × Δt
    // hard cap: vascular_glucose_supply (FIXED)
    // covers: all fast astrocyte operations + lactate export

    // Lactate export to all neuronal components
    astro_lactate = min(astro_budget × lactate_export_fraction,
                        vascular_glucose_supply × max_export_fraction)
    astro_budget -= astro_lactate
    deliver(astro_lactate → pre_budget   × pre_fraction,
                            post_budget  × post_fraction,
                            dend_budget  × dend_fraction,
                            axon_budget  × axon_fraction)

    // Glutamate clearance — rate from astro_structure (READ)
    clearance     = astro_structure.EAAT_density × glutamate × Δt
    glutamate    -= clearance
    astro_budget -= clearance × EAAT_ATP_cost
    // covers: EAAT_cotransport_ATP + NaK_secondary_cost

    // Overflow detection and D-serine release
    if glutamate > spillover_threshold:
        astro_fast_trace += mGluR5_Ca_influx()
        astro_fast_trace *= decay(τ = seconds)

        // D-serine release: budget-limited (serine + synthesis ATP both in budget)
        D_serine_released = min(proportional_to(astro_fast_trace),
                                astro_budget × Ds_fraction)
        astro_budget     -= D_serine_released × Ds_synthesis_cost
        // covers: serine_racemase_ATP + serine_precursor_fast_cost
        astro_D_serine   += D_serine_released

        // Simultaneous presynaptic brake — cross-compartment, no astro budget cost
        Ca_drive_pre     *= mGluR_brake_factor

        // Possible tagging
        if astro_fast_trace > eligibility_threshold:
            astro_possible_tagging += astro_fast_trace
        astro_possible_tagging *= decay(τ = seconds)

        // Dopamine decays
        dopamine_local *= decay(τ = hundreds_of_ms)

        // Tag
        if dopamine_local > dopamine_threshold and
           astro_possible_tagging > tagging_threshold:
            astro_tag += dopamine_local × astro_possible_tagging
        astro_tag *= decay(τ = hours)

    // Tonic D-serine from astro_structure (READ) — baseline supply
    astro_D_serine += astro_structure.D_serine_tonic × Δt
    astro_budget   -= astro_structure.D_serine_tonic × tonic_synthesis_cost
    // covers: constitutive_racemase_ATP + baseline_serine_fast_cost

    // Global overload
    if astro_fast_trace > OVERLOAD_threshold:
        trigger(shockwave_lockdown)

Special Case — Shockwave Lockdown

scope DAY or NIGHT | context OVERLOAD:

    // Emergency — bypasses budget gates
    Vm               = HYPERPOLARIZED
    AMPA_occupancy   = mass_internalization()
    post_budget     -= emergency_reset_cost    // DAY: uses post_budget
    axon_fast_trace += overdrive_cluster()
    astro_budget    -= emergency_cost
    // Note: in NIGHT, uses post_energy if structural receptors affected

SCOPE: NIGHT

{component}_energy and {component}_material used — NOT {component}_budget Structural variables WRITTEN. Tags evaluated and cleared.

Step 1 — Replenish Energy, Material, and Budgets

scope NIGHT | step 1:

    // Astrocyte: replenishes first — fuels everything
    astro_budget   += overnight_glycolysis(vascular_glucose_supply) × Δt_night
    // covers: fast running costs for next DAY
    astro_energy   += overnight_astro_synthesis() × Δt_night
    // covers: process_motility_ATP + ECM_secretion_ATP for structural work
    astro_material += astrocyte_cellbody_synthesis() × Δt_night
    // covers: EAAT proteins + racemase upregulation + ECM proteins + process cytoskeleton

    // Soma: self-fueled, replenishes own energy + produces all structural material
    soma_budget    += overnight_mitochondria_output() × Δt_night
    soma_energy    += overnight_soma_energy_reserve() × Δt_night
    // covers: ribosome_biogenesis_ATP + ion_channel_incorporation_ATP
    soma_material  += CREB_driven_synthesis(soma_tag) × Δt_night
    // peaks based on soma_tag magnitude — this is the production bottleneck
    // covers: all structural proteins + mRNA + organelles for downstream components

    // Distribute soma_material to downstream components
    dend_material  += soma_material × dend_delivery_fraction
    // mRNA + plasticity proteins + organelles shipped to branches
    axon_material  += soma_material × axon_delivery_fraction
    // AZ scaffold proteins + VGCC subunits shipped via anterograde transport
    soma_material  -= (dend_delivery_fraction + axon_delivery_fraction) × soma_material

    // Branch delivers to spines
    post_material  += dend_material × spine_delivery_fraction
    dend_material  -= spine_delivery_fraction × dend_material
    // AMPA subunits + PSD scaffold proteins delivered to spine reserve

    // Axon delivers to boutons
    pre_material   += axon_material × bouton_delivery_fraction
    axon_material  -= bouton_delivery_fraction × axon_material

    // Downstream energy replenishment
    pre_energy     += overnight_pre_energy_replenishment()
    post_energy    += overnight_post_energy_replenishment()
    dend_energy    += overnight_dend_energy_replenishment()
    axon_energy    += overnight_axon_energy_replenishment()
    // all sourced from soma overnight mitochondrial output

Step 2 — Structural Commits (Parallel, Independent)

scope NIGHT | step 2:

    // Coherence bonus: if pre, post, astro all tagged → amplified commit
    all_aligned   = (pre_tag  > tag_expiry_threshold and
                     post_tag > tag_expiry_threshold and
                     astro_tag > tag_expiry_threshold)
    coherence_bonus = all_aligned ? coherence_factor : 1.0

    // ── PRE COMMIT ──────────────────────────────────────────────────
    if pre_tag > tag_expiry_threshold:
        Δpre  = min(AZ_expansion_cost,
                    pre_material,              // material gate
                    pre_energy × pre_fraction) // energy gate
        pre_structure  += Δpre × coherence_bonus   // STRUCTURE WRITTEN
        pre_material   -= Δpre                     // material consumed (RECOVERABLE)
        pre_energy     -= Δpre × assembly_ATP_cost // energy consumed (NOT recoverable)
        if Δpre < AZ_expansion_cost:
            queue(pre_deficit → next NIGHT)

    // ── POST COMMIT ─────────────────────────────────────────────────
    if post_tag > tag_expiry_threshold:
        Δpost = min(AMPA_insertion_cost,
                    post_material,
                    post_energy × post_fraction)
        post_structure  += Δpost × coherence_bonus  // STRUCTURE WRITTEN
        post_material   -= Δpost                    // RECOVERABLE
        post_energy     -= Δpost × assembly_ATP_cost // NOT recoverable
        if Δpost < AMPA_insertion_cost:
            queue(post_deficit → next NIGHT)

    // ── DEND COMMIT ─────────────────────────────────────────────────
    if dend_tag > tag_expiry_threshold:
        Δdend = min(branch_expansion_cost,
                    dend_material,
                    dend_energy × dend_fraction)
        dend_structure  += Δdend × coherence_bonus  // STRUCTURE WRITTEN
        dend_material   -= Δdend                    // RECOVERABLE (partially)
        dend_energy     -= Δdend × assembly_ATP_cost
        if Δdend < branch_expansion_cost:
            queue(dend_deficit → next NIGHT)

    // ── SOMA COMMIT ─────────────────────────────────────────────────
    if soma_tag > tag_expiry_threshold:
        Δsoma = min(soma_expansion_cost,
                    soma_material,
                    soma_energy × soma_fraction)
        soma_structure  += Δsoma               // STRUCTURE WRITTEN
        soma_material   -= Δsoma               // RECOVERABLE (partially)
        soma_energy     -= Δsoma × assembly_ATP_cost

    // ── AXON COMMIT ─────────────────────────────────────────────────
    if axon_tag > tag_expiry_threshold:
        Δaxon = min(axon_expansion_cost,
                    axon_material,
                    axon_energy × axon_fraction)
        axon_structure  += Δaxon               // STRUCTURE WRITTEN
        axon_material   -= Δaxon               // RECOVERABLE (partially)
        axon_energy     -= Δaxon × assembly_ATP_cost
        if Δaxon < axon_expansion_cost:
            queue(axon_deficit → next NIGHT)

    // ── ASTRO COMMIT ────────────────────────────────────────────────
    if astro_tag > tag_expiry_threshold:
        Δastro = min(process_retraction_cost,
                     astro_material,           // ECM proteins + process cytoskeleton
                     astro_energy × astro_fraction)
        astro_structure += Δastro × coherence_bonus  // STRUCTURE WRITTEN — SELF-REINFORCING
        astro_material  -= Δastro                    // RECOVERABLE (recycling_fraction)
        astro_energy    -= Δastro × assembly_ATP_cost
        if Δastro < process_retraction_cost:
            queue(astro_deficit → next NIGHT)

Step 3 — Passive Depotentiation

scope NIGHT | step 3:

    // Potentiation draws material first.
    // Remaining material distributed as maintenance.
    // What cannot be maintained decays passively.
    // No active LTD signal required — depotentiation is resource neglect.

    remaining_material = total_material_pool - material_consumed_by_potentiation
    maintenance_per_synapse = remaining_material × maintenance_fraction
                              / total_synapse_count

    for each synapse:
        // Structural decay — passive, continuous
        pre_structure   -= structural_decay_rate × Δt_night
        post_structure  -= structural_decay_rate × Δt_night
        dend_structure  -= structural_decay_rate × Δt_night
        astro_structure -= structural_decay_rate × Δt_night

        // Maintenance allocation from remaining material
        if maintenance_per_synapse >= maintenance_cost:
            // full maintenance — structure stable
            pre_structure   += maintenance_pre
            post_structure  += maintenance_post
            dend_structure  += maintenance_dend
            astro_structure += maintenance_astro
        else:
            // partial maintenance — structure drifts downward
            // DEPOTENTIATION BY NEGLECT — no signal, no active process
            pre_structure   += maintenance_per_synapse × pre_fraction
            post_structure  += maintenance_per_synapse × post_fraction
            dend_structure  += maintenance_per_synapse × dend_fraction
            astro_structure += maintenance_per_synapse × astro_fraction

    // LTD material recovery: returned to pools, enriches remaining material
    for each synapse where net_structure_change < 0:
        recovered_material = structure_loss × recycling_fraction
        pre_material      += recovered_material × pre_fraction   // AZ proteins recovered
        post_material     += recovered_material × post_fraction  // receptors to reserve
        astro_material    += recovered_material × astro_fraction × recycling_fraction
        // energy is NOT recovered — assembly ATP is gone
        // this asymmetry is why material and energy must stay separate in NIGHT

Step 4 — Homeostatic Scaling

scope NIGHT | step 4:

    if soma_tag > homeostatic_ceiling:
        scale_factor = homeostatic_ceiling / soma_tag
        for each synapse:
            post_structure *= scale_factor      // STRUCTURE WRITTEN
            pre_structure  *= scale_factor      // STRUCTURE WRITTEN
        // scaled-down material returned to pools
        soma_material += sum(structure_reduction) × recycling_fraction
        // energy NOT recovered

Step 5 — Clear All Traces

scope NIGHT | step 5:

    // Fast traces: confirmed zero (decayed during DAY)
    pre_fast_trace = post_fast_trace = dend_fast_trace = 0
    soma_fast_trace = axon_fast_trace = astro_fast_trace = 0

    // Possible tagging: confirmed zero (decayed during DAY)
    pre_possible_tagging = post_possible_tagging = dend_possible_tagging = 0
    soma_possible_tagging = axon_possible_tagging = astro_possible_tagging = 0

    // Tags: cleared after commit, carried forward if above expiry threshold
    if pre_tag   < tag_expiry_threshold: pre_tag   = 0
    if post_tag  < tag_expiry_threshold: post_tag  = 0
    if dend_tag  < tag_expiry_threshold: dend_tag  = 0
    if soma_tag  < tag_expiry_threshold: soma_tag  = 0
    if axon_tag  < tag_expiry_threshold: axon_tag  = 0
    if astro_tag < tag_expiry_threshold: astro_tag = 0

Summary: Energy and Material Flow

DAY — {component}_budget (combined fast energy + fast consumables):

    vascular_glucose_supply (FIXED)
        → astro_budget (glycolysis ROOT)
            → astro_lactate → pre_budget, post_budget, dend_budget, axon_budget
        → soma_budget (own mitochondria — independent root)
            → axon_budget (partial)
            → dend_budget (partial)

NIGHT — {component}_energy (structural assembly ATP, NOT recoverable):

    vascular_glucose_supply (FIXED)
        → astro_energy (overnight glycolysis)
        → soma_energy (overnight mitochondria) → pre_energy, post_energy,
                                                  dend_energy, axon_energy

NIGHT — {component}_material (slow structural proteins, RECOVERABLE):

    soma (CREB synthesis — soma_tag driven)
        → soma_material
            → dend_material → post_material (spine delivery)
            → axon_material → pre_material  (bouton delivery)
    astrocyte cell body (overnight synthesis)
        → astro_material (EAAT + racemase + ECM + process cytoskeleton)

    LTD recovery flows (material only — not energy):
        post LTD → post_material (receptors to dendritic reserve)
        pre LTD  → pre_material  (AZ proteins to axonal pool)
        astro LTD → astro_material (ECM fragments, recycling_fraction)

Flows

Energy flow

VASCULAR SUPPLY
    → ASTROCYTE CELL BODY
        glucose → lactate (glycolysis)
        → astro_budget (local ATP for clearance, D-serine, ECM, process motility)
        → lactate exported to:
            → pre_budget  (ATP for VGCC, vesicle fusion, VATPase)
            → post_budget (ATP for NaK pump, AMPA trafficking, actin)
            → dend_budget (ATP for bAP propagation, local translation)
        
    → SOMA
        soma has own mitochondria — partly self-fueled
        soma_budget (ATP for AP generation, CREB, protein synthesis, shipping)
        → dend_budget top-up (organelle delivery)
        → axon_budget top-up (transport machinery)

Material flow

SOMA
    protein synthesis (CREB-driven, peaks in NIGHT)
    → soma_material (receptors, scaffold proteins, organelles, mRNA)
        → dend_material (branch receives proteins + mRNA from soma)
            → post_material (spine receives receptors + actin from branch)
        → axon_material (boutons receive AZ proteins + VGCCs from soma via axon)
            → pre_material (bouton active zone proteins)

ASTROSYNAPSE
    ECM proteins synthesized in astrocyte cell body
    → astro_material (Glypicans, Thrombospondins, serine for D-serine)
        → cleft environment (ECM sealing, D-serine availability)