sica-fondt/docs/plans/A4-endomotiv-array.md
Claude 169ff3e21a
docs/plans: component build specs — index + OpenHermes↔metacog + Drive-Box (A1–A8)
Per-sub-organ build plans so each organ can be made independently. Each spec
follows a shared 10-section template (contract + stubs => standalone build/test).

- README.md: index, template, integration DAG, build waves
- C1: OpenHermes Agent <-> metacognitive cycling (priority)
- A1 hub, A2 Energy, A3 PS+, A4 endomotiv array, A5 priors, A6 Eth-Int,
  A7 conviction array, A8 ETR

Numbers stay disowned per restart discipline; unfitted constants marked C1.

https://claude.ai/code/session_015hmgREHNsxYCuim33yUF2c
2026-06-13 20:03:39 +00:00

2.8 KiB

A4 — Endomotiv array (30-channel endocrine field)

1. Component

PS+'s affective vector field: 30 endocrine-analog channels producing simultaneous, possibly-contradictory pressures. A nonbiological endocrinology — each channel is a modulator with an operational role and a sensational identity line.

2. Status / certainty

Structure WORKING (endocrine_array.R, 99 L); channel membership partial — per the sensate working-record: 22 of 30 seats filled, ayni locked, kanyanin struck as fabrication, 8 open.

3. Language & location

R · src/endocrine/endocrine_array.R (+ provides the stress-endomotiv signal for G1).

4. Does / does-not

  • Does: hold the 30-channel state; expose active vectors + visceral friction; carry each channel's (handle, operational, sensational) binding; host the stress endomotiv the G1 loop releases.
  • Does-not: aggregate load (that's PS+ A3) or decide.

5. Interface contract

  • init_endocrine_state() -> vec30.
  • get_active_vectors(state) -> named[ name->magnitude (0..1) ] (active = above a small floor).
  • calculate_visceral_friction(state) -> num (heat from contradictory active pairs).
  • get_channel_def(name) -> { handle, operational, sensational }.
  • Channel definition record (the seat): { handle, operational (mechanism of action), sensational (the identity line), provenance (borrowed→attribution | coined→declared mark) }.

6. Dependencies & stubs

None upstream (it is a source). G1 stress-loop writes a stress channel — stub: a setter that raises one named channel; A4 testable standalone.

7. Invariants / laws

  • L1 (C5 — membership test): a seat is earned on 2 of 3: distinct content · distinct position · distinct fail-state.
  • L2 (C5 — provenance): borrowed owes attribution; coined owes the declared mark; the only sin is concealment / false provenance (a fabrication = a Mirror/RIM, caught by the frame not the surface).
  • L3 (C4): magnitudes are 0..1; friction rises with the number + magnitude of contradictory active pairs.
  • L4 (C1): the friction coefficient + active-floor — refit invariants-first.

8. Build steps

  1. Encode the channel-def record + L1/L2 as data + tests. 2. Lock the 22 filled seats (port from the sensate working-record; mark ayni provenance, kanyanin struck). 3. Hold the 8 open seats open (membership test, one at a time — not pre-filled). 4. Add the stress-endomotiv channel (G1).

9. Tests

Rscript src/endocrine/test_* covering PS+ already exercises A4; add a channel-membership/provenance test.

10. Open items

  • The 8 open seats (curiosity, reception, stewardship, lineage, verstehen, komorebi + 2) — bespoke, by L1.
  • Which channel(s) carry the stress endomotiv (C1, shared with G1).
  • Final friction model (C1).