Skip to content

M-J A3 -- minor/serious guilt split via Secret.moral_weight - #16

Merged
RobertMalczyk merged 1 commit into
mainfrom
feature/m-j-guilt-weight
Jun 25, 2026
Merged

RobertMalczyk merged 1 commit into
mainfrom
feature/m-j-guilt-weight

Conversation

@RobertMalczyk

Copy link
Copy Markdown
Owner

A3 — minor/serious guilt split (spec §11)

The blind multi-day judge validated serious-guilt persistence at ~72h but flagged 18h as "too tidy for a serious wrong" — yet the engine has ONE guilt state with ONE half-life. Rather than add a second state, an ACTIVE secret re-injects guilt each tick by secret_weight_to_guilt · moral_weight · salience (in _update_secrets, post_effects phase):

  • a serious unconfessed wrong (high moral_weight) keeps guilt alive against decay → it lingers (the 72h feel), while the base half-life stays minor-appropriate (18h);
  • a minor wrong fades;
  • confession/exposure inactivates the secret → the drip stops → relief.

This reuses the Secret lifecycle (no new state) and realises the spec §11 split via the authored moral_weight.

Tests

tests/test_moral_guilt_weight.py (3): serious secret sustains guilt while minor fades; exposure stops the drip; opt-in (legacy/no-overlay inert).

Status

Full suite 399 passed, 4 skipped; deterministic pre-filter still 18/81 (re-ran after the magnitude change, per the calibration lesson — no litmus broken); goldens byte-identical; ruff clean.

🤖 Generated with Claude Code

…eight

The blind multi-day judge validated serious-guilt ~72h but flagged 18h as "too tidy for a serious wrong" --
yet the engine has one guilt state/half-life. Rather than two states, an ACTIVE secret now RE-INJECTS guilt
each tick by secret_weight_to_guilt * moral_weight * salience (engine/simulation.py _update_secrets, the
post_effects phase): a SERIOUS unconfessed wrong (high moral_weight) keeps guilt alive against decay -> it
lingers (the 72h feel) while the base half-life stays minor-appropriate (18h); a minor wrong fades;
confession/exposure inactivates the secret -> the drip stops -> relief. This reuses the Secret lifecycle and
gives the spec section 11 minor/serious split with no new state.

- moral_overlay: ledger_params.secret_weight_to_guilt (placeholder).
- tests/test_moral_guilt_weight.py (3): serious secret sustains guilt while minor fades; exposure stops the
  drip (relief); opt-in (legacy/no-overlay inert).

Full suite 399 passed +4 skipped; deterministic pre-filter still 18/81 (no litmus broken -- re-ran after the
magnitude change, per the calibration lesson); goldens byte-identical; ruff clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016rWVvvhWijSuLMEhzjiUhu
@RobertMalczyk
RobertMalczyk merged commit 1562654 into main Jun 25, 2026
3 checks passed
@RobertMalczyk
RobertMalczyk deleted the feature/m-j-guilt-weight branch June 25, 2026 16:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants