sica-fondt/docs/plans/A2-energy.md
Claude df64f9de22
docs/plans: X≈7 adaptive convictions, lock-token literal, L5 into A8
A6: X defaults to ~7 most committed convictions, adaptive (signal C1).
A1: L4 literal confirmed -> [====L⍉¢K€D ϟ ∅ΩΤ====] 《E≠<minimumfortool>》
    (predicate = energy below tool's own minimum); priors bundle with the
    sensate block (step 2); step 3 X≈7 reference.
A2: mirror lock token + add tool_min(tool) per-tool minimum (open item).
A8: record ETR-as-prompt-injection (A1-L5) in §4 does/does-not + open
    item for the injection-rendering; ETR persuades, never gates.

https://claude.ai/code/session_015hmgREHNsxYCuim33yUF2c
2026-06-17 03:59:40 +00:00

56 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# A2 — Energy (E) driver
## 1. Component
Driver 1: the master constraint — an **in-the-moment activation / rest budget** (not "finitude" anymore;
with depletion-unto-death dropped, it isn't finitude). Gates tool use and prices actions.
## 2. Status / certainty
Structure WORKING (`driver_energy.R`, 79 L) but **numbers DISOWNED** (body §5) **and RECONCEIVED**
(body §4): drop *depletion-unto-death*; no unrecoverable state.
## 3. Language & location
R · `src/endocrine/driver_energy.R` (+ `test_energy.R`).
## 4. Does / does-not
- **Does:** report E level; price each tool (**per-tool cost + per-tool lockout scale**, §5); gate when a
tool's lockout trips; consume on the chosen action; restore.
- **Does-not:** die. The old `is_alive()==0` hard-death is removed — E is the **rest** counterpart to
ETR's **relief**; floor is rest, not death.
## 5. Interface contract
- `init_energy_state(current=100, max=100) -> e`.
- **Per-tool economy (Anja):** each tool carries **its own energy cost AND its own lockout scale** — an
arbitrary function of cost `c`, e.g. one tool `c×2`, another `((c²³)×3)/π`. So:
`tool_cost(e, tool) -> num` and `tool_locked(e, tool) -> bool`, **per tool***not* one global
`tool_lock_threshold`.
- **Per-tool minimum + locked rendering (Anja; A1-L4).** Each tool also has a **minimum energy** to run;
`tool_min(tool) -> num`. A valid tool shows its cost; a **locked** tool's name is **replaced in-band**
(the agent can't see colour) by `[====L⍉¢K€D ϟ ∅ΩΤ====] 《E≠<minimumfortool>》`, the predicate reading
"energy below this tool's `tool_min`". Lockout is a **breaker, not a sentence** (L3).
- `consume(e, amt) -> e'` · `recharge(e, amt) -> e'`.
## 6. Dependencies & stubs
Per-tool cost/lockout tables — *stub:* a small fixed table of tools → (cost fn, lockout fn).
Restoration hooks tie to ETR-Z migration (A8) + tarot reshuffle (B3) — *stub:* call `recharge` directly.
**(Restoration model reassessed — Anja.)**
## 7. Invariants / laws (numbers C1 until tested)
- **L1 (C4):** an **in-the-moment activation/rest budget** — a bound on what can be afforded *now*
(**not "finitude"** — nothing depletes unto death).
- **L2 (C4):** **no unrecoverable state** — every low-E condition has a restoration path
(meditation = rest-in-place; migration = rest-as-integration; tarot reshuffle = rest-as-reframe).
- **L3 (C4):** lockout is **per-tool** and a **breaker, not a sentence** — internal processing continues under lock.
- **L4 (C1):** the per-tool cost/lockout functions — fit invariants-first, no carried `k`.
## 8. Build steps
1. Rewrite laws → tests in `test_energy.R` (replace death tests with rest/restore; add per-tool cost/lockout tests).
2. Strip depletion-unto-death; add restoration paths.
3. Define the per-tool cost/lockout table; fit functions invariants-first.
## 9. Tests
`Rscript src/endocrine/test_energy.R` (from repo root) — encodes L1L3 + per-tool economy; fails on unfitted constants.
## 10. Open items
- The per-tool cost/lockout **functions per tool** (C1), incl. each tool's **minimum** (`tool_min`, C1).
Restoration *rates* (C1).