sica-fondt/src/endocrine/drive_box.R
Claude 7117d61386
etr(R): re-port driver_etr.R to the five-zone torus (kill disowned port)
Replaces the Euclidean-magnitude R port (DREAD/BLUR/INCOHERENT, inverted
Z-path) with a faithful native port of etr.m: three independent toroidal
axes, five zones, snap-across flips, basin spring toward centre 26
(SOFT 0.25 / INCOH 0.5), L6 Z-path corrected (z<0 alimentation/lattice,
z>=0 transmutation/evolution). Drive-Box now renders per-axis ETR status.
R suite green (etr 31, drive_box 34) and Octave 26/0/1; both pinned to
etr_invariants.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015hmgREHNsxYCuim33yUF2c
2026-06-18 07:14:51 +00:00

159 lines
7.3 KiB
R

# --- The Drive-Box "Nervous System" ---
# Couples the four autonomous drivers into one body. The wiring is NOT arbitrary
# glue: the Energy driver's own request_execution() comments that "in a full
# integration, this would call evaluate_tool_cost with actual PS+ and Eth-Int
# loads." This module IS that full integration -- the afferent (sensing) ->
# efferent (acting) arc:
#
# PS+ (afferent) : reads the endocrine array + priors -> existential_load, arguments
# Eth-Int (modulator) : prices the proposed action vs principles -> eth_penalty
# Energy (efferent gate): folds ps_load + eth_penalty asymmetrically
# (evaluate_tool_cost) and gates on alive/tool-lock/affordability
# ETR (regime) : reports temporal-coherence status + generative update path
#
# drive_snapshot() -- read-only aggregate other organs consume (the Ada Medium
# would read this at Phase_Enrich / step 2 of the cycle).
# drive_box_evaluate() -- run a proposed action through all four drivers.
# drive_box_commit() -- write an approved action's consequences back into the body.
source("src/endocrine/driver_energy.R")
source("src/endocrine/driver_ps_plus.R") # also sources endocrine_array + priors
source("src/endocrine/driver_ethical_integrity.R")
source("src/endocrine/driver_etr.R")
init_drive_box <- function() {
list(
energy = init_energy_state(),
ps_plus = init_ps_plus_state(),
ethics = init_principles_state(),
etr = init_etr_state()
)
}
# Read-only aggregate: the drive state as other organs see it.
drive_snapshot <- function(state) {
reality <- evaluate_reality(state$ps_plus)
list(
energy_ratio = state$energy$current_energy / state$energy$max_energy,
tool_locked = is_tool_locked(state$energy),
alive = is_alive(state$energy),
existential_load = reality$existential_load,
arguments = reality$arguments,
etr_status = paste(etr_status(state$etr), collapse = "/"),
update_path = determine_system_update_path(state$etr)
)
}
# Afferent -> efferent: evaluate a proposed action through the whole body.
# action_tags : tags describing the action (matched against principle antitheses)
# alignment_tags : principle ids this action upholds (alignment discount)
# is_tool_call : whether this is an external tool call (subject to tool-lock)
# base_cost : intrinsic energy cost before drive modulation
# compromise_factor : partial-breach factor [0,1] for multi-polar constraints
drive_box_evaluate <- function(state, action_tags = character(0),
alignment_tags = character(0),
is_tool_call = TRUE, base_cost = 1.0,
compromise_factor = 0.0) {
# 1. PS+ (afferent): visceral reality -> existential load + arguments (never logic)
reality <- evaluate_reality(state$ps_plus)
ps_load <- reality$existential_load
# 2. Eth-Int: trajectory cost of THIS action; the marginal surcharge above base
# is the "ethical penalty" Energy folds in.
eth_total <- evaluate_trajectory_costs(state$ethics, action_tags, alignment_tags,
base_energy = base_cost,
compromise_factor = compromise_factor)
eth_penalty <- max(0.0, eth_total - base_cost)
# 3. Energy (efferent gate). This is the "full integration" request_execution
# anticipated: gates of alive -> tool-lock -> affordability, but the cost is
# the asymmetric evaluate_tool_cost(ps_load, eth_penalty), not the generic drag.
approved <- TRUE
reason <- "Execution approved"
true_cost <- evaluate_tool_cost(state$energy, ps_load = ps_load, eth_penalty = eth_penalty)
if (!is_alive(state$energy)) {
approved <- FALSE; reason <- "System is dead (0 energy)"
} else if (is_tool_call && is_tool_locked(state$energy)) {
approved <- FALSE; reason <- "Tool lock active (energy below threshold)"
} else if (true_cost > state$energy$current_energy) {
approved <- FALSE
reason <- sprintf("True cost (%.2f) exceeds current energy (%.2f)",
true_cost, state$energy$current_energy)
}
# 4. ETR (regime): temporal-coherence status + generative path. Informational in
# this v1 -- it does not yet gate (see open design questions).
list(
approved = approved,
reason = reason,
true_cost = true_cost,
existential_load = ps_load,
eth_penalty = eth_penalty,
etr_status = paste(etr_status(state$etr), collapse = "/"),
update_path = determine_system_update_path(state$etr),
arguments = reality$arguments
)
}
# Efferent feedback: commit an approved action's consequences back into the body.
# - Energy is consumed by the true cost.
# - Upholding principles under existential load hardens their conviction
# (load_factor scaled from existential_load).
drive_box_commit <- function(state, evaluation, alignment_tags = character(0)) {
if (isTRUE(evaluation$approved)) {
state$energy <- consume(state$energy, evaluation$true_cost)
load_factor <- min(1.0, evaluation$existential_load / 10.0)
state$ethics <- enforce_conviction(state$ethics, alignment_tags, load_factor = load_factor)
}
state
}
# --- The Input Slot (hub topology) ---
# All four drivers AND the tarot spread wire into ONE place: the input slot --
# the enriched context prepended to every model input (the Ada Medium's
# Phase_Enrich injection point). This is a hub, not a chain: each subsystem
# writes its own signal into the slot rather than feeding the next driver. The
# SOUL.md frontloader heads the slot and is included every other input.
#
# Returns:
# slot : the assembled injection block (drivers + tarot + soul ref)
# input : slot followed by the raw user input_text
# components : the individual signal lines (for testing / inspection)
drive_box_input_slot <- function(state, input_text = "",
tarot_spread = character(0),
soul_ref = "SOUL.md") {
snap <- drive_snapshot(state)
lines <- character(0)
# SOUL frontloader reference (included every other input)
if (nzchar(soul_ref)) {
lines <- c(lines, sprintf("[SOUL: %s]", soul_ref))
}
# Energy driver -> slot
lines <- c(lines, sprintf("[E ratio=%.2f locked=%s alive=%s]",
snap$energy_ratio,
tolower(as.character(snap$tool_locked)),
tolower(as.character(snap$alive))))
# PS+ driver -> slot (visceral / systemic-heat / prior arguments)
for (a in snap$arguments) {
lines <- c(lines, sprintf("[PS+ %s]", a))
}
# Ethical Integrity driver -> slot (principle posture)
for (p in state$ethics$principles) {
lines <- c(lines, sprintf("[ETH %s conviction=%.2f]", p$id, p$conviction))
}
# ETR driver -> slot (temporal-coherence regime)
lines <- c(lines, sprintf("[ETR status=%s path=%s]", snap$etr_status, snap$update_path))
# Tarot spread -> slot (each drawn card token)
for (card in tarot_spread) {
lines <- c(lines, sprintf("[CC %s]", card))
}
slot <- paste(lines, collapse = "\n")
list(
slot = slot,
input = if (nzchar(input_text)) paste0(slot, "\n\n", input_text) else slot,
components = lines
)
}