sica-fondt/core/docs/plans/A7-conviction-array.md
Claude b6bcab794f
Reorg step 1: consolidate repo under core/, drop the mafiabot label
Mechanical structure-only pass (no document/guide content edits):

- Move src/ichor, src/endocrine, and docs/ into core/; the old top-level
  mafiabot_core/ becomes core/. Everything now lives under a single core/ root.
- Drop the "mafiabot" label from the Ada/Alire crate: core.gpr (project Core),
  alire.toml name = "core"; the generated *_config.* regenerate as core_config.*.
- Repoint build-critical wiring only:
  - .claude/skills/run-sica-fondt/smoke.sh (ponyc + Ada + COBOL paths)
  - core/src/endocrine R source()/runner paths and the test glob
  - .github/workflows/ci.yml (working-directory + gpr name)

Verified green: smoke ALL GREEN (Pony Ichor, Ada core crate + tests, COBOL E1
vault); R endocrine 14/0; Octave ETR 26/0/1.

Deferred (reserved for a less-ephemeral doc/guide pass): docmap.yaml, the guide
files and nested AGENTS.md/README prose + now-stale relative links, SOUL.md, and
the deeper ring/storage restructure.

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

2.6 KiB

A7 — Conviction array (sub-organ of Eth-Int)

1. Component

The lattice Eth-Int reads: the set of active principles with their convictions, semantic-isomorphy tags, and stress-driven shift-rates. The structural self that defines the agent's integrity, and the thing the SAE checks outputs against in the G1 stress loop.

2. Status / certainty

DESIGN-FIRST (extends today's flat principle list in driver_ethical_integrity.R). Tags + shift-rates are new — C2/C1.

3. Language & location

R · new module under src/endocrine/ (e.g. conviction_array.R), consumed by A6.

4. Does / does-not

  • Does: hold principle entries with conviction + isomorphy tags + per-entry shift-rate; expose the top convictions for SAE matching (G1); apply hardening and stress-modulated shift-rate changes.
  • Does-not: evaluate cost (A6 does that) or detect opposition (SAE F2 does); it is the data + its update rules.

5. Interface contract

  • Entry: { id, conviction(0..1), antithesis[], isomorphy_tags[], shift_rate }.
  • top_convictions(array, n) -> [entry] (what SAE matches outputs against, G1 step 2).
  • harden(array, ids, load) -> array' · set_shift_rate(array, delta_from_stress) -> array'.
  • The memory-derivative rule: convictions are computed from memory-weighted entries (per arch §6) — shape = "complex entries with memory-weighted shifting numerics," same family as PS+'s priors stray.

6. Dependencies & stubs

SAE (F2) feeds opposition events; stress endomotiv (A4/G1) feeds shift-rate deltas — stub: call set_shift_rate directly. Memory source (E2) for the derivative — stub: in-memory seed entries.

7. Invariants / laws

  • L1 (C2): every conviction carries ≥1 semantic-isomorphy tag (so SAE can match outputs to it).
  • L2 (C2): under G1 stress, shift-rates increase (convictions move faster — harden or revise).
  • L3 (C3): hardening is bounded (→1.0, diminishing); convictions never exceed [0,1].
  • L4 (C1): the memory-derivative formula (how memory weights produce the live conviction) — undefined.

8. Build steps

  1. Define the entry record + tag vocabulary; encode L1/L3 as tests. 2. Add shift-rate mechanics + the G1 hook (L2). 3. Define the memory-derivative (L4) once E2 storage lands. 4. Migrate A6 to use it.

9. Tests

Rscript src/endocrine/test_conviction_array.R (new) — L1 (tags present), L2 (stress↑ → shift-rate↑), L3 (bounds).

10. Open items

  • Isomorphy tag vocabulary + how SAE matches outputs to it (C2, shared with F2/G1).
  • The memory-derivative formula (C1).
  • Shift-rate response curve to stress (C1).