Repository navigation
M-J.4.4 calibration -- multi-day moral runner + judge-validated guilt half-life - #14
Merged
Merged
Conversation
…lf-life findings Starting the full-corpus stage (calibration plan step 3). The short litmus scenarios cannot discriminate the moral half-lives; the signal only shows over MULTI-DAY arcs at the believable timescale. eval/moral_multiday.py runs a multi-day moral arc on the believable day layout and reports the lingering trajectory. VALIDATED findings (docs/moral_calibration_plan.md section 6a): - multi-day moral dynamics work: serious guilt SURVIVES the night (0.46->0.42 across sleep -- the night reset decays fast states, not the slow moral ones, per spec 9.2). - the half-life signal is REAL and discriminating: with private wrongdoing-reminders (no interrogation -> no confession to resolve it), evening guilt separates cleanly by half-life -- 6h ~[0.04,0.05,0.05] (forgotten), 18h ~[0.15,0.21,0.23], 72h ~[0.23,0.42,0.56] (deepening). That IS the curve_plausibility signal. - two requirements surfaced for the full judged corpus: (1) keep the wrong UNRESOLVED (probe triggers a confession that flattens the signal); (2) a multi-day renderer must surface the lingering burden (long idle days build incidental boredom/seek mood that an anger-first demeanor read masks). The full judged 700+700 corpus is the budgeted scale-up, pending those two pieces. No engine change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016rWVvvhWijSuLMEhzjiUhu
…ilt half-life
The small judged multi-day batch (calibration plan step i) to settle the guilt half-life cheaply, before any
full 700+700 run. moral_multiday.py now renders a clean half-life persistence arc (one serious wrong, then
the on-waking burden over 4 days) and a blind Sonnet judge ranked three half-lives.
RESULT (calibration/moral_multiday_verdict.json): B=72h 5/5 (best), A=18h 3/5, C=6h 1/5. The judge
independently VALIDATES the spec serious-guilt anchor (~72h): 6h is implausible ("forgotten overnight ->
denial or sociopathy"), 18h reads as too-fast-for-serious ("too tidy"), 72h "matches how an unconfessed
serious wrong burdens a person". This confirms the spec minor(18h)/serious(72h) split.
Implementation note: the engine has ONE guilt state / half-life; the minor-vs-serious split needs the
Secret's moral_weight to modulate effective persistence (spec section 11) -- a follow-up. The 18h placeholder
is sound for MINOR guilt.
render_moral_multiday surfaces GUILT (the calibrated axis), not rumination (accumulates, masks decay) nor
idle-day boredom. No engine change.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016rWVvvhWijSuLMEhzjiUhu
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016rWVvvhWijSuLMEhzjiUhu
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
M-J.4.4 calibration — the multi-day stage (closes the guilt half-life)
Continues the moral calibration onto the MULTI-DAY axis — where the half-lives actually discriminate (the short litmus scenarios cannot tell 12h from 72h over ~48s). No engine change; placeholders documented, one judge-validated.
eval/moral_multiday.py— the multi-day moral runnerRuns a moral arc on the believable day layout (dt≈120s, ~717 ticks/day): one serious wrong, then the on-waking burden over several days/nights. Verified the multi-day dynamics work — serious guilt survives the night (the sleep reset decays fast states, not slow moral ones, per spec §9.2) — and that guilt persistence separates cleanly by half-life (6h forgotten overnight, 72h a deepening burden).
Judge-validated guilt half-life
A blind Sonnet judge ranked three half-life persistence arcs for a serious unconfessed wrong:
This independently validates the spec serious-guilt anchor (~72h) and confirms the minor(18h)/serious(72h) split. (
calibration/moral_multiday_verdict.json.)Implementation follow-up: the engine has one guilt state/half-life; the minor↔serious split needs the Secret's
moral_weightto modulate effective persistence (spec §11). The 18h placeholder is sound for MINOR guilt.Status
Full suite 396 passed, 4 skipped; goldens byte-identical (no engine/overlay change); ruff format + check clean. The calibration loop is now validated end-to-end: deterministic pre-filter → short judge (3.17→4.83) → multi-day judge (guilt half-life). Remaining: the same cheap multi-day-judge for the other half-lives, and the budgeted full 700+700 corpus.
🤖 Generated with Claude Code