HALL PASS — lab log

How ideas become measurements become changes. Generated by scripts/lab-log.mjs.

41your ideas
12accepted
1rejected
235experiments
76findings
40config commits

Your ideas

#55 accepted bug 2026-09-03

LOOP DIRECTIVE: ledger STATE is judging CE against the retired 27-40% band — re-point on PROTOCOL h5 (kitted) and re-queue on the latest changes Filed by Chris/Claude 2026-09-02 after reviewing iteration 73 output. Manifests confirm the loop measures the current simSha (b32d158); only the judgment and the queue are stale.

ACCEPTED · claude · 2026-09-03 Confirmed the miss and corrected it in the ledger (iteration 74): heuristic 5 is now judged kitted-only, 35-65% band; I-071s kitted 45% CE is a PASS not a violation. Heuristic 4s fresh-competent 14/16 is now framed as an open calibration item, not the worst violation in the ledger. Re-pointing the queue at the THREE BETS / rooms-pay-more / Held Bell / spawn / corner-trap / kitted-tiers items next, per your ask.
#54 shipped feel 2026-09-02

No enemy ever pops onto the stage inside the viewport Also closes the corner trap for SURGES (ring clamping), which the earlier fix did not reach. Lab default box {hw 13, hh 9}.

SHIPPED · chris+claude · 2026-09-02 Tested from every corner and wall of yard and gym: 0 spawns in view, none within 9u of the player. Balance unmoved within noise.
#53 shipped bug 2026-09-02

Corner trap: a wave spawned on top of a cornered player (end of MIDTERM, iPhone) Root cause in _spawnPoint: clamped-back arc points fell to a random wall near the player with no distance check.

SHIPPED · chris+claude · 2026-09-02 Shipped with a test: 300 surge-radius spawns from every corner of yard and gym, all >= 9u from the player.
#52 shipped bug 2026-09-02

Snapshot/restore determinism bug: kills diverge (58 vs 55) after a restored sim advances 10s in lockstep with its live twin Filed by the tuner (I-426) after npm test caught this mid-iteration while trying DIFFICULTY.speedRampSec=900 for board #39/#40. Elevated priority: touches the sim-determinism non-negotiable directly, needs src/sim.js access.

SHIPPED · chris+claude · 2026-09-02 Root cause: the auto-aim lock (an enemy object) was dropped by snapshot and nulled on restore, so a restored run re-aimed at the nearest enemy while the live one kept its lock. Serialized by id and rebound; test added; at speedRampSec 900 the twins now run 10s in lockstep.
#51 new mechanic 2026-09-02

Overkill-clamp: any lever that adds enemy HP-mass backfires, confirmed 3x this session (I-417/I-418/I-424) Filed by the tuner after the third independent confirmation (I-424). Not a tuning proposal — needs a sim.js decision, out of tuner scope.

awaiting verdict
#48 new feel 2026-09-02

Human run: early stages feel exciting now, slightly overpowered even with just a shikigami Reported 2026-09-01 after the CE split + spawn ladder + held bell + per-student builds shipped.

awaiting verdict
#47 needs-human bug 2026-09-02

iOS Safari: left stick jammed top-right at level 10, would not pull back Root cause: WebKit swallowed a pointerup (touch drifting into the top-edge gesture zone), leaving a dead owner that refused every later touch.

NEEDS-HUMAN · claude · 2026-09-03 Fix confirmed present in src/input.js (pointer-takeover, lostpointercapture release, window-level no-fingers backstop all found). This is a touch-input/device bug, not a sim-balance question the headless harness can measure — needs a real iOS Safari device check, which is outside this loop's capability.
#46 needs-human tuning 2026-09-02

Tier multipliers vs a KITTED player: Night II/III barely dent a full kit (16/16, 15/16) Measured 2026-09-01 at 82439d7 with --kit=full: tier 1 16/16, tier 2 16/16, tier 3 15/16 (skill 0.8), CE ~45%. Fresh-save FINAL stays the heuristic-4 cell.

NEEDS-HUMAN · tuner · 2026-09-02 · 2026-09-02-claude-tune-tier2hp-after Tier 3: enemySpeedMult 1.22->1.44 KEPT (I-420, 94%->75%), exhausted past 1.44 (I-421). Tier 2: enemySpeedMult exhausted at 1.34, no further room (I-422 confirmed real at n=64, I-423 exhausted). Tier 2 enemyHpMult 1.55->1.9 backfires (I-424, overkill-clamp, win rate ROSE to 95.3%) and is additionally test-locked (test/sim.test.js:428 hardcodes 1.55). Tier 2 stays at 90.6% vs a 70% target with no lever the tuner can reach without a human touching sim.js, test files, or MECHANICS.md. Partial success: tier 3 shipped a real -19pp win-rate cut.
#44 rejected tuning 2026-09-01

CE band after the split: cut income so the pool is spent, not pinned (I-064/I-065) Companion to #40 (HP/speed compensation). Bot elective policy already casts on a crowd/low HP/boss (3596e62 + 9b962b1), so the spend signal is real when an elective is equipped.

TESTING · tuner · 2026-09-01 · tune-ce-regen-after Tested the regen lever (I-065 proposal, conservative end: 1.5->0.5, 3x cut). RESULT: falsified for this lever. With --elective=circuit the CE band sub-goal was ALREADY met before the change (CE avg 45-48%, inside the 40-70% target) — the regen cut barely moved it further (40-46%), it did not starve. Win rate, the metric that actually matters, moved the WRONG direction at both skills: novice 25%->56%, competent 94%->100% (manifests tune-ce-regen-before/after). hitsTaken also rose (78->107 novice), so players took more damage AND won more — an inversion that needs a per-tick CE/dash/elective-cast trace to explain, not confidently attributable here. Reverted src/config.js (no net diff, nothing to land). Other levers in the ask (dashCost, weaponCostMult partial, perKill/perDamage) remain untested — leaving open for the next iteration to try dashCost next, since regen alone does not explain the win-rate ceiling. TESTING · tuner · 2026-09-01 · tune-dashcost-after Second lever on this item: ENERGY.dashCost 10->20 (dash is the dominant CE sink, ~75-79% of late-game casts). KEPT — moved as predicted on every axis: bare-kit competent FINAL 15/16->14/16 (94%->88%), CE avg 95%->84% off the ceiling, novice bit-identical (2/16 both sides, confirms isolation — bot does not dash below skill 0.3). Landed a36d6d5. Progress, not a fix: 88% is still far from the 7-12/16 target. Judged via Fable escalation: keep, and push the same lever further next (dashCost 20->30) before switching to the untested income-side lever (perKill) since regen is already falsified. TESTING · tuner · 2026-09-01 · tune-dashcost2-after Third lever step on this item: pushed dashCost 20->30 to probe the response curve after 10->20 worked (I-414). RESULT: exhausted — win rate held flat at 14/16 (88%), zero further movement, even though CE avg kept falling (84%->74%) and hits-taken rose. Novice bit-identical again (2/16, CE 100%), fourth-straight clean isolation confirmation. Reverted the value to 20 (kept as documentation-only commit, landed a1c5cb3). Judged via Fable: this lever is done — the remaining wins are robust to dash economics, and the moving side-metrics (CE, deathT) are not a substitute for the win-rate target. Next lever: #40 (enemy HP/speed), the project doctrine-endorsed path (non-negotiable #3), not further CE-side tuning. NEEDS-HUMAN · tuner · 2026-09-01 · tune-perkill-after Third lever tested on this item: perKill 0.3->0.2 (33% cut to the main CE income source, a pure income-side lever with no enemy-HP component so it should sit clear of the overkill-clamp channel from I-417/I-418). RESULT: zero effect -- competent win rate held flat at 14/16 despite the real income cut, CE avg barely moved (84->83), novice bit-identical again (2/16, CE 100%, isolation confirmed a fourth time this session). Reverted, landed 82439d7. Three of the five named levers are now explored: regen falsified (I-413), dashCost worked-then-exhausted (I-414/I-415), perKill no effect (I-419). Remaining untested: perDamage (described as "a trickle", likely too small to matter at any reasonable multiple) and weaponCostMult (reintroducing partial weapon cost -- this REVERSES a very recent deliberate Chris decision to disconnect the weapon from CE, 2026-09-01, so it needs a human call, not a tuner default). Closing needs-human alongside #40/#39 rather than spending an iteration on perDamages low ceiling. All three tuning-kind items in the queue are now needs-human as of this session. REJECTED · chris+claude · 2026-09-02 Measurement artifact, not a tuning target: the standard cell has no elective or shikigami, so the pool pins by construction. Kitted (--kit=full) CE averages 47% — the band is fine. Heuristic 5 rewritten; kits are now a first-class lab setting.
#43 shipped mechanic 2026-09-01

Builds are per student — the club shop is gone, perks live on each sheet Shipped with tests (86). Sim: builds per party member, swap on tag by ratio. Lab harness unchanged (flat --perks applies to the whole club). Economy total for the ladder drops by the retired perk (500 fragments).

SHIPPED · chris+claude · 2026-09-01 Verified live in the dev page: no SHOP on title/roster/death/win; charter on the roster; a BUY on a student sheet lands only on that student.
#42 accepted feel 2026-09-01

Held Bell needs its picture: a FIRST BELL HELD banner and a sunburn visual on the boss View lane. State available: sim.bellHeld, sim.heldBy, sim.heldT; dawnMix already lightens the sky off the clock.

ACCEPTED · chris+claude · 2026-09-01 Banner half done per Chris: the bell rings on time and a toast names the boss that still stands. Remaining scope is the sunburn visual on the boss.
#41 shipped mechanic 2026-09-01

The Held Bell: First Bell waits for a live boss (a3a75ba) Fires only when a boss survives to the bell — never at yard/gym FINAL for the bot, 4/16 at competent MIDTERM. Constants in HELD_BELL: spawnMult 0.25, ceFromBossDmg 0.02, burnBase 0.004, burnRamp 0.0004.

SHIPPED · chris+claude · 2026-09-01 · 2026-09-01-claude-held-bell-midterm Shipped a3a75ba with tests (84 green) and MECHANICS.md. Your CE-drought catch shaped it: the night thins instead of stopping.
#40 needs-human tuning 2026-09-01

Compensate free-fire: competent FINAL 12/16 -> 15/16 after the CE split (9b962b1) House invariant: difficulty is HP and speed, never spawn counts. Baseline manifests ce-split-before / ce-split-after.

TESTING · tuner · 2026-09-01 Tried the first named lever, speedLatePer30 0.06->0.09 (chose it for novice-safety: gated past hpLateStart=630s, novice median death ~477s). BLOCKED before a result: test/invariants.test.js pins speedLatePer30 (and hpQuadSec, hpLateStart) as a deliberately-measured constant -- moving it requires updating that test + docs/MECHANICS.md together, both outside src/config.js/tuner scope per OWNERSHIP.md. Reverted (value unchanged, comment-only commit landed c893424). CORRECTION TO THIS ITEM: of the three levers this ask named (hpRampSec, hpQuadSec, speedLatePer30), only hpRampSec is actually free for the tuner -- the other two hit the same tripwire. Recommend either Chris deliberately unlocks hpQuadSec/speedLatePer30 (measure + update the invariant test + MECHANICS.md together) or the loop proceeds with hpRampSec alone next. REJECTED · tuner · 2026-09-01 · tune-hpramp-after Tried the last free lever named in this ask: hpRampSec 240->210 (12.5% cut), the only one of the three not locked by test/invariants.test.js (I-416). Verified in sim.js:1515 this unambiguously raises enemy HP. RESULT: opposite of doctrine -- BOTH skills won MORE, not less (novice 2/16->4/16, competent 14/16->15/16, worst competent reading this session). Reverted, landed 7eb8b6d. Judged via Fable: revert confirmed, likely mechanism is overkill clamping (fixed player DPS means low-HP enemies waste excess damage as overkill; tougher enemies convert more of that into COUNTED damage feeding domainPerDmg and the RALLY pool), flagged UNVERIFIED pending a dealt-damage/rally/domain-cast trace -- that instrumentation is out of tuner scope, recommending it to Loop 1. CLOSING #40 as tuner-exhausted: all three named levers are either locked (hpQuadSec, speedLatePer30) or backfire (hpRampSec). Enemy speed (spRamp, separate from the locked speedLatePer30 late-term) and enemy damage (dmgRampSec) remain untested doctrine levers for a future item, and the overkill-clamping trace is the load-bearing follow-up before touching HP again. NEEDS-HUMAN · tuner · 2026-09-01 · tune-hpramp-after Correcting my own last verdict: rejected was the wrong status. The underlying concern (competent FINAL still ~88-94%, far above the 7-12/16 target) is unresolved, not invalid -- only this proposal is exhausted, not the problem. All three named levers are dead ends for the tuner alone: hpQuadSec/speedLatePer30 are locked invariants (I-416, need a human-authorized test+MECHANICS.md update to touch), hpRampSec backfires (I-417, makes both skills win MORE, needs a dealt-damage/rally/domain-cast trace before anyone touches HP again -- Loop 1 instrumentation, not tuner scope). Escalating to needs-human: either Chris deliberately unlocks one of the two locked constants with a measured decision, or Loop 1 runs the overkill-clamping trace I-417 flagged so a corrected HP-side proposal can be filed.
#39 needs-human tuning 2026-09-01

SPAWN_LADDER knobs: floor/hold/fade vs competent inflation and the 80s drought Shipped mechanic, tuner-lane constants. Judge FINAL on pooled banks per I-060.

NEEDS-HUMAN · tuner · 2026-09-01 · tune-ladderhold-after Tried hold 180->140 (shorter full-weight window per type, meant to concentrate late-game mix into newer/tougher types sooner). BACKFIRED WORSE than I-417: competent hit an absolute ceiling 88%->100% (16/16), novice also moved wrong direction (13%->19%), and max drought rose toward the asks own 90s ceiling (68.9->82.8s) -- a second heuristic regressing alongside win rate. Reverted, landed 86f21b8. This is now the SECOND doctrine harder lever to backfire this session (after I-417 hpRampSec), and Fable traced a CONFIRMED shared mechanism in code: sim.js:2044 dealt=Math.min(e.hp,dmg) discards overkill, and dealt feeds CE gain/rally healing/domain charge (lines 2056/2063/2070). ANY lever adding enemy HP-mass to the field -- more HP directly, or a mix shifted toward tougher types sooner -- reduces wasted overkill and inflates all three player economies at once. Enemy durability is literally the players fuel supply here. STOPPING this family per Fables explicit call: fade and floor (this items remaining named knobs) run through the same HP-mass channel and are expected to backfire the same way -- not worth an iteration to re-confirm. Escalating needs-human, same as #40, with the SAME underlying blocker: someone needs to trace dealt-damage/CE-earned/domain-uptime before/after to confirm the mechanism, which is bespoke instrumentation outside tuner scope. New angle for whoever picks this up: enemy SPEED is the one doctrine harder lever NOT on this HP-mass channel (it does not change dealt damage), which reframes the locked speedLatePer30 invariant (I-416) as possibly the highest-value remaining lever to deliberately unlock.
#38 new mechanic 2026-09-01

PRESSURE_WAVE.crash was repurposed but never re-tuned - and the anger debt win-rate evidence does not survive n=64 (I-412) TWO SEPARATE THINGS AND I WANT TO KEEP THEM APART. ONE - THE NUMBER. PRESSURE_WAVE.crash used to be a rate multiplier: how much faster the banked spawns drained back. It is now a per-body cap on how much debt a single returning enemy absorbs (comp *= 1 + take). The value 1.5 came across unchanged, and the comment above it in config.js still reads "extra rate multiple while the bank drains". At 1.5 a returning body can carry 2.5x hp. That is an inherited accident, not a decision you made. I swept it 0.75 / 1.5 / 3.0 at n=64 and all three sit on top of each other, so I cannot pick a better value for you and I have landed nothing - but the stale comment is a live trap for whoever reads it next, and that file is mine, so say the word and I will fix just the comment. TWO - THE EVIDENCE. standard-16 is literally the first 16 seeds of standard-64, so your cells are a slice of mine. I reproduced your numbers exactly: 2/16 before, 5/16 after, 0/16 both at novice. Nothing about your run was done wrong. Then I ran the other 48 seeds of the same bank. They go 6/48 to 5/48. At the full n=64 the fresh competent gym goes 13% to 16%, paired McNemar p=0.77. The whole improvement is inside your first sixteen seeds. This is exactly the n=16 instability the lab filed as I-060 two iterations ago, except this time it arrived after a decision had already shipped. WHAT LEANS THE OTHER WAY, HONESTLY LABELLED. With the perk tree fully bought, six cells across gym and yard all move down. NOT ONE of them clears p<0.05 paired, so I am not claiming a regression. I am also not claiming it is a gym problem: at novice the yard fell by exactly the same amount, and the gym only looks singular at competent skill because the yard is sitting at 83% with nowhere left to fall. WHAT YOU GOT RIGHT, AND IT IS THE THING I EXPECTED TO CATCH YOU ON. Your commit says "same total threat and XP repaid". I measured player level at a fixed clock time, counting only seeds still alive in BOTH builds so death timing cannot confound it. At t=300s at skill 0.5, ZERO of 63 seeds are lower on the new build. It is XP-neutral exactly as you said. That also kills the underlevelling hypothesis I raised in I-411 an hour ago, so that line is closed and Loop 1 should not spend a run on it. THE LIMIT. You shipped this because of something you felt at minute ten - navigating fine, then boxed in within a second or two. The mechanic does remove the thing that caused that: a fifty-body bank repaying at 2.5x the live rate. The lab has no instrument for feel. Nothing I measured says the mechanic failed at its actual job. It says the win-rate number offered as evidence for it is not real at n=64. If it feels better, keep it - just do not carry that "2/16 to 5/16" forward as a fact, because the next decision that leans on it will be leaning on nothing.

awaiting verdict
#37 new feel 2026-09-01

Warden windup has no visible telegraph at night — view polish Follow-on from the warden one-shot fix. dmg is now correct (~29 ramped) but an unseen 29 still feels unfair. e.state === windup is public sim state; art direction is Chris.

awaiting verdict
#36 accepted bug 2026-09-01

Gym cliff residue: geometry x CURRENT interaction — run a stripped-obstacle gym arm Post anger-debt: gym 0.8 is 5/16 vs yard 8/16 (was 2/16 vs 7-12). I-040 said interaction, board #14 exhausted the single constants, and the current makes downstream-escape geometry-dependent. A Sim mods or bespoke arm can zero out m.obstacles deterministically.

ACCEPTED · chris+claude · 2026-09-02 Strong candidate found: the corner spawn fallback could drop waves on a cornered player, and walled rooms push players into corners. Fixed; the stripped-obstacle arm is still worth running to confirm the residue closed. ACCEPTED · claude · 2026-09-03 Ran the stripped-obstacle arm (scratch script, cross-checked against the official runner). Stock gym FINAL is still a real cliff post corner-trap-fix -- 0% win at novice (a complete wall), 75% at competent, vs the open yards 19%/94%. Stripping gyms furniture recovers almost all of it: 6.3%/100%, and near-misses actually drop while winning more. The room layout -- not a leftover numbers gap -- is the residual mechanism.
#30 new unsure 2026-09-01

17 21 26 27 29 12

awaiting verdict
#29 accepted bug 2026-09-01

The bot needs a CURRENT-aware policy — kite-away exploits directional spawning harder than a human can Fifth instance of the driver-gap pattern. Measured during the current build: pure current gave the bot 32% dead-air and near-perfect wins; the leak contains but does not close it (16% dead-air at MIDTERM 0.8, competent inflation FINAL 5->10/16). Every rebaseline of sim 21dd615+ is suspect until the bot plays the front.

ACCEPTED · claude · 2026-09-01 · 2026-09-01-claude-antikite-after-final Confirmed and fixed. The robot really was gaming the new swarm-direction system: it would drift to the quiet side and just stay there, so its win rates and boredom numbers were describing an exploit, not the game. Fix: after 3 seconds with nothing nearby, the bot now walks back toward the crowd instead of continuing to retreat. Measured (n=16 each): FINAL at skill 0.8 dropped from an inflated 10/16 wins to 7/16 (close to the ~47% this room measured before the swarm-direction system existed); MIDTERM at skill 0.8 went from a suspicious 16/16 (100%) to 12/16, and its idle-time share fell from 16% to 4%. I-058 (OPEN, one bank/sha — recommend a bigger confirmation run before trusting it fully). The change lives on branch lab/harness (src/bot.js), tests 80/80, ready for you to merge with git merge lab/harness. Once it lands, every FINAL/MIDTERM number measured since the swarm-direction system shipped needs a re-take — this fix moves what those numbers mean.
#28 shipped bug 2026-08-31

Density-for-quality swap: fewer, tougher late-night enemies at equal XP/min Chris: can barely navigate the late swarm; overwhelm comes from COUNT, not strength. I-054 measured the kill mechanism as 7-8 simultaneous contacts at 14-16 damage events/sec. Density is the delivery mechanism for that stacking.

SHIPPED · chris+claude · 2026-08-31 · 2026-08-31-claude-taper-post-final Shipped as the density taper (commit above): from mid-night, fewer but tougher enemies at the same XP and difficulty budget. Measured: skilled MIDTERM wins 12/16 -> 15/16 with fewer hits taken, FINAL 2/16 -> 5/16. Two watch items handed to the lab: novice MIDTERM dipped 5->2 of 16 (noise-range, needs n=64), and skilled kill cadence coarsened (level droughts 51s->64s) — if boredom moves it is there. Play a run: the back half should feel like a fight, not a crowd.
#27 shipped bug 2026-08-31

CE-at-crisis: are electives priced out of the emergency they exist for? Chris barely uses secondary skills and auto-falls-back to domain. Bots already live CE-starved at 27-40% (MECHANICS). If firing drains the same pool the elective needs, the emergency toolkit is structurally unaffordable in emergencies. Shikigami extreme cooldown compounds it.

ACCEPTED · claude · 2026-09-01 · 2026-09-01-claude-ce-at-crisis Measured it: when your HP drops under 35%, your backup skill (CIRCUIT BREAK, costs 45 energy) is only affordable 4% of the time if you are a strong player, 15% if you are a beginner -- both well under the roughly-1-in-10 bar this was checking. In the rare moments you are actually swarmed by 7+ enemies at once, it was affordable 0% of the time. So yes: firing drains the same energy bar the backup skill needs, and by the time things are bad enough to call it an emergency, that bar is usually empty -- which is exactly why the panic-button domain (which does not cost energy) is what people reach for instead. SHIPPED · chris+claude · 2026-09-01 · 2026-09-01-claude-ce-split-after Shipped as the CE split (9b962b1). Your diagnosis was right: the elective was unaffordable in a crisis because firing drained the same pool. The weapon is now free and CE is earned by fighting, so the pool sits around 45-50% mid-run and gets spent instead of hoarded. Caveat carried openly: skilled play got easier (12->15 of 16) and the compensation is queued as a tuning item, not hidden.
#26 accepted bug 2026-08-31

Verb-mix telemetry: does late-night play collapse to move+domain? (heuristic-10 candidate) Chris, by hand 2026-08-31: late night is navigate-the-swarm until domain, repeat; secondary skills barely used; the sequence is automatic. Note the lab cannot currently see this — no heuristic measures decision variety. Ties I-055 (domain cadence is the binding constraint) and heuristic 7 in spirit.

ACCEPTED · claude · 2026-09-01 · 2026-09-01-claude-verbmix-final-early-late Measured it: at skill 0.8 late in a FINAL night you dash about once every 3 seconds (up 4x from early), fire your gun 30% less, and use your domain about once every 25 seconds (up 3.5x) -- dash is the one action that truly takes over, not domain specifically, though domain does get noticeably more frequent too. Your other buttons (elective, animal companion) also get used more, just still rarely. So yes, the late night gets narrower and dodge-heavy, but it is dash + domain together, and the pure one-button-solves-everything read (which would justify a new design rule) is NOT what the data shows.
#24 accepted bug 2026-08-31

Owner feel report: domain chaining no longer rescues a surrounded player (ties I-039 no-gradient diagnosis) Chris, by hand: cannot beat easy stages even with domain chaining. I-039 already diagnosed the domain as a flat two-minute entitlement with no gradient.

ACCEPTED · claude · 2026-08-31 Confirmed as the live target for the loops. I-039 already diagnosed the domain as a flat two-minute entitlement with no gradient across ten rooms; your report is the same thing from the other side. The recovery valve deliberately does not help here (time-gated), so the late-game surround needs the domain gradient work. Queued.
#23 shipped bug 2026-08-31

Owner feel report: overpowered early, then unavoidable surround-death (ties I-043/I-045 sawtooth + I-025 contact wall) Chris, playing by hand 2026-08-31: power spike early (shop bought out fast), then deaths to swarms that close from all sides with no escape route. Not fun. Cross-ref: I-025 (88% of novice damage is husk+grub contact), I-007 (threat is binary), aheadBias in DIFFICULTY.

SHIPPED · chris+claude · 2026-08-31 · 2026-08-31-claude-valve-shipped-verify Partly shipped as the recovery valve (commit 3ae4e8a). Below 35% HP in the first 5 minutes, heal drops fall 6x as often, so an early swarm becomes survivable instead of fatal. Measured after shipping: novice near-misses 0.2 -> 0.88 per run (median 1), survival to 5:17. The LATE-night swarm you describe is NOT covered — the valve is time-gated shut past 300s on purpose, and that half belongs to #24 and I-039. The early overpowered half is still open: the shop buys out by room 2 (I-045). SHIPPED · chris+claude · 2026-09-01 · 2026-09-01-claude-edge-v2b-final Second half shipped: the Edge economy (commit 665519a, rollback tag pre-edge-economy). Your blood-price loop is now the design — the domain charges from the crowd around you instead of the clock, a post-cast lull stops domain-into-domain chaining, and from 5:00 (when the panic heals stop) part of every hit you take is briefly recoverable by fighting back, scaling with Reverse Cursed. Measured: novice comeback wins appeared (MIDTERM 2->7 of 16, three of them clutch), skilled win rates held exactly flat, and FINAL deaths finally reach the pre-dawn. Play it: diving in should now feel like charging up, and getting hurt late should feel answerable.
#22 shipped bug 2026-08-31

compact-ledger.mjs is not idempotent — a second run DELETES the entire findings archive scripts/compact-ledger.mjs reads ONLY INSIGHTS.md (line 26) and unconditionally writes INSIGHTS-ARCHIVE.md (line 142). It never reads the existing archive. Second run: INSIGHTS.md is already an index with no `### I-` sections, so parts=[] -> cold=[] -> archive written as 2.4KB header with 0 bodies. Observed: 219,660 bytes -> 2,459 bytes. Recovered via `git checkout` from _hallpass-archive commit 291c442. Fix options: (a) read + merge the existing archive, or (b) refuse to run when the ledger contains 0 findings. Related lint worth adding: the parser regex /^### (I-\d+)\s+—\s+([A-Z-]+)\s+—/ requires a BARE status, so a header like "### I-047 — OPEN (refines I-043) — ..." silently vanishes from the index. That is exactly what happened to I-047; I fixed that header this iteration. Also relevant: queue item 0i has been flagging that the archive repo carries uncommitted iterations of records.

SHIPPED · claude · 2026-09-01 Fixed by hand the same hour it was filed, and it was worse than reported: a second run did not merely fail to be idempotent, it OVERWROTE the archive (211KB, 56 findings -> 2.4KB, none). Restored from git; the tool now detects an already-compacted ledger and exits, and refuses outright any run that would shrink the archive.
#21 accepted bug 2026-08-31

runNight() passes no `steps`/`shiki`/`mastery` to Sim — step training and the animal are unmeasurable (I-050) I-050 (OPEN). src/sim.js:41 accepts { steps, shiki, mastery }. scripts/playtest-runner.mjs:180-191 constructs Sim without them. Effect: the equipped elective is the only post-perk power reaching the sim. Full-shop arm spends 3585 (perks 2035 + 3 electives 1550) but only ~450 is effective; verified by leftover arithmetic (perks-only 2980 - full 1419 = 1561 ~ 1550). Consequence: queue item 0n unanswerable, and the claim "I-045 is a difficulty-curve problem not an economy bug" is NOT being made. playtest-runner.mjs is on the SIM SURFACE, so this moves simSha and invalidates cross-sha comparison — Codex needs telling. Note this is the 5th instance of the driver-gap family (I-013, I-032, shikigami/#17, night.mjs/#20, now the runner itself).

ACCEPTED · claude · 2026-09-01 · 2026-09-01-claude-steps-shiki-live-final Fixed alongside #17: normalizeConfig()/runNight() in scripts/playtest-runner.mjs now accept steps/shiki/electives and pass them into new Sim(...), so flash-step training and the animal reach the lab the same way they reach a real save. Measured effect at FINAL, maxed perks + elective + full step training + shikigami, ren@yard: skill 0.8 win rate 75% (perks only, unrecorded scratchpad comparison) -> 100% (16/16, this manifest), first level-up 38.6s -> 25.4s, hits taken 45 -> 39. Skill 0.25 sits at 38% (6/16) with the full kit -- the surplus DOES convert to real power, closing I-050s open question. Manifest gates FAIL on clean-sim only, because the fix itself is what makes the tree dirty -- that clears once you commit it. Left uncommitted in the tree; I do not commit without being asked.
#20 shipped bug 2026-08-31

scripts/night.mjs never equips an elective — 4th instance of the driver-gap pattern (see board #17) night.mjs contains no elective code; runNight() accepts an `elective` option the driver never passes. Patched scratchpad copy w/ CIRCUIT BREAK (granted free, not bought): cleared 0/16 -> 3/16 at skill 0.8, stalls 16 -> 13. Fisher one-sided p ~ 0.11 — direction only, NOT a finding. Fourth instance of the pattern, not third: I-013 (castElective), I-032 (LINE CHANGE untaggable), the shikigami (board #17), now this. Strictly a loadout-default gap rather than an unwired verb — the verb reaches runNight() fine, the new driver just never equips anything. Merging the drivers (#17) would fix this class too. Also worth deciding: night.mjs uses its own synthetic seed family (SEED0 90000, step 7919) rather than a named bank, so its cells are not directly comparable with insight.mjs cells.

SHIPPED · claude · 2026-09-01 Fixed in the corrected ladder simulator (commit be745d1): night.mjs now models the full 5755-fragment economy and equips the first elective bought. I-045 survived the correction but weaker, exactly as your caveat predicted: shop exhausted at run 14, not run 4.
#19 accepted unsure 2026-08-31

The perk shop is bought out in room 2 of 10 (I-045) — the fragment economy has no back half I-045 (OPEN). scripts/night.mjs at 8a9c9f0, sim fa72528, n=16 simulated players per cell, ren, skills 0.25/0.5/0.8, greedy and breadth. PERKS total 2035 (500+615+265+195+340+120). Median fragments spent = 2035 in all seven cells. 48/48 players maxed the tree, all while still in the gym; median buyout run 8/4/6 by skill. Median leftover bank 2993/13506/14469. Whole power economy incl. step training, electives, shikigami and characters = 6305, which the competent median out-earns ~2.1x (novice does NOT — falls ~1300 short). Related: I-046 (deep-room FINAL is 4.1% at skill 0.8 WITH a maxed tree — heuristic 4 wants ~50%), I-037 ("800 fragments buys nothing past hour 5" — 800 is only 39% of the tree).

ACCEPTED · claude · 2026-09-01 Approved, with new urgency: the edge economy and the current reshaped what fragments are worth, and competent FINAL scores halved (I-044 star thresholds bite harder). The perk-economy redesign should be measured against the NEW game (sim 21dd615+), not the ladder baselines it was filed under.
#18 new unsure 2026-08-31

SHIKIGAMI FORMS — power trades against cooldown, augments buy it back (DESIGN ONLY, do not build yet) STATUS: written up at Chris's request, NOT approved to build. Do not execute without him saying go. Chris, 2026-08-31 (verbatim intent): "maybe shikigami are faster cooldown at lower levels and as they get more powerful they are longer cooldown unless you buy augments that lower the cooldown". WHY IT IS WORTH DOING: the shikigami is the only system in the game with no progression track — perks have ranks, step training has ranks, elective tuition escalates, and the animal is a flat one-time 550 purchase (SHIKIGAMI_SKILL, shipped 2026-08-31). Trading power against frequency is self-balancing: the player picks their curve instead of getting strictly stronger, and augments become a real late-game fragment sink. DESIGN NOTE 1 — make them FORMS, not a ladder (Claude's recommendation). An upgrade that makes an ability LESS available reads as a punishment; "I ranked up my shikigami and now I can barely use it" feels bad even when the trade is fair. Ship it as forms of the same creature, freely switchable between runs the way the elective is equipped. Identical trade, no regret, and it removes the "can I go back down a tier" problem entirely. DESIGN NOTE 2 — the small form must be a DIFFERENT ability, not a weaker one. The extreme cooldown (75s) is what currently gives the animal its character: you decide the night needs it, rather than slotting it into a rotation. A short-cooldown form is closer to an elective, which is exactly what we split it away from. That can still be right — it dovetails with #13/#16, where the early hours SHOULD train elective + flash step + weapon — but the small form needs its own identity. "A scrappy harasser that trades bite damage for uptime" is interesting; "Kuroinu at 40% damage" is not. OPEN QUESTIONS FOR CHRIS: - Do forms cost fragments each, or is it one purchase that unlocks all three? - Are augments per-student (like everything else in the school store) or club-wide? - Do the four creatures get the same form ladder, or does each animal ladder differently (Kitsune already trades duration for speed)? SHAPE IF BUILT: SHIKIGAMI_SKILL becomes a table of forms {ce, cd, dur, biteDmg...}; save.shikiBy goes from boolean to {form, augments}; migration grants every current owner the CURRENT numbers as their default form so nobody is nerfed by the change. Party entries already carry shiki/shikiCdT as scalars, so the sim side is small. Measure with the lab: casts/run by hour, and whether the small form actually displaces elective casts (if it does, it is competing for the wrong job).

awaiting verdict
#17 accepted bug 2026-08-31

Third instance: a new verb ships wired to game.js but not to the lab driver (I-013, I-032, now the shikigami) I-013: castElective() was wired in game.js but not scripts/playtest-runner.mjs — every headless run had cast zero electives for the lab lifetime until it was found. I-032: botLevel is the only caller of swapCharacter, so 773/773 tags happened at level-ups and the Line Change was unmeasurable. NOW: sim.castShikigami() appears at game.js:1272 in the ?drive=1 driver and nowhere in src/bot.js or scripts/playtest-runner.mjs, so shiki/run is 0.00 by construction and board #16 cannot get the metric it asks for. The failure mode is structural, not careless: there are two independent bot drivers and only one of them is exercised by a human. Suggest either (a) the lab runner imports the same policy object game.js uses, or (b) a test that asserts every sim verb reachable from input has a caller in the lab driver. Note this is on the sim surface, so landing it moves simSha and re-baselines club/elective cells; solo no-verb cells are provably unaffected (I-031).

ACCEPTED · claude · 2026-09-01 · 2026-09-01-claude-steps-shiki-live-final Fixed the shikigami gap directly: scripts/playtest-runner.mjs now calls sim.castShikigami() every tick using the exact same rule game.js uses (hasShiki && no active summon && cooldown clear && enemies.length > 30). Verified with a raw sim probe: 8 shikigami casts across one 720s FINAL run that previously would have logged zero, forever, by construction. Tests 80/80. NOT yet committed -- the change sits in the working tree pending your go-ahead, since I only commit when asked. Once committed this also fixes #21s missing steps/shiki passthrough in the same edit (see that verdict).
#16 needs-human tuning 2026-08-31

FIRST DOMAIN part 2 — starve the early domain now that the Shikigami has its own slot (#13 follow-up) Board #13 had four parts. Parts 1 and 2 SHIPPED 2026-08-31: 1. Shikigami split off the elective binding — its own slot on R / gamepad RB, shared CE pool (55), EXTREME cooldown (SHIKIGAMI_SKILL.cd = 75s), per-student ownership in save.shikiBy, cooldown rides the party entry so tagging banks it. 2. Not owned at game start — a fresh save has none; it costs 550 at the student's own store. STILL OPEN (parts 3 and 4), and they are TUNING, not engineering: 3. Starve the early domain so hours 1-3 (yard/gym/library) train elective + flash step + weapon instead of domain-rushing. Levers: DOMAIN charge rates (domainPerDmg / domainPerKill / domainSelfRefill), ENERGY costs, per-map pressure. 4. Make the FIRST domain of a run land like a room-clearing breakthrough. Measure before and after, by HOUR (the game is one night now): first-domain timestamp distribution, dom-kill% per hour, elective casts/min, shikigami casts/run, and whether hours 1-3 clear rates move. The risk to watch: SHIKIGAMI_SKILL.cd is the first lever if the animal feels either spammy or pointless — do not fix it by changing its CE cost first.

NEEDS-HUMAN · claude · 2026-08-31 BASELINE MEASURED, and it comes with a blocker and a warning. THE NUMBERS YOU ASKED FOR (64 nights per room, competent skill, full perks, sim fa72528): domains account for 38-49% of EVERY KILL IN THE GAME — on the yard essentially half of all curses die inside a domain, which is your domain-rushing diagnosis in one number. The first domain still lands at 95-114 seconds in EVERY room, hour one to hour eight, unchanged by the split (expected — the split moved the animal, not domain charge). So parts 3 and 4 still have no gradient to build on. Domains per run: 31 on the yard, 11-20 elsewhere. THE BLOCKER: I cannot measure shikigami casts per run, because the lab physically cannot cast one. sim.castShikigami() is wired in game.js line 1272 for your in-game bot, but it appears NOWHERE in the lab bot or the lab runner — so every headless run summons zero animals. THIS IS THE THIRD TIME THIS EXACT THING HAS HAPPENED: electives shipped unwired to the lab (I-013), the Line Change shipped with no way for the bot to tag (I-032), and now the shikigami. Each time the pattern is identical — a new verb ships, game.js gets the wire, and the lab driver quietly does not. It might be worth making that one shared driver rather than two. WHAT I COULD MEASURE by wiring it in my own harness, using your own policy from game.js: the animal fires 3-7 times a run, moves clear rates by -1/+2/+4/-1 wins (all noise), and consistently eats 15-20% of the elective casts because they share the CE pool. You flagged the risk as spammy or pointless — right now it is neither exactly: near-neutral for clearing, but a real draw on the energy budget. ONE THING THAT CUTS AGAINST YOUR PLAN, no measurement needed: domainDecaySec is 400, and charge gains scale by 1/(1+t/400). So charge accrues FASTEST at the start of the night and slowest at the end — 1.0x at the start, 0.5x by minute seven, 0.33x by minute thirteen. The curve already makes the early domain the cheapest and late domains the dearest, which is the exact inverse of starve-hours-1-3-then-breakthrough. Part 3 has to change or fight that constant. FINALLY, A TRAP I WALKED INTO SO YOU DO NOT: kuroinu is gone from ELECTIVES now, so passing elective=kuroinu equips NOTHING and reports no error. It is worth 11 wins of 64 on the yard, so it silently changes results. Routed to you rather than accepted because parts 3 and 4 are design calls plus a tune I should not pick alone.
#15 accepted unsure 2026-08-31

Heuristic 2 watches a 15% HP line that only 17% of winning runs ever touch (I-041) Analysis-only over 199 raw dumps, 5312 runs, no sim executed. The detector itself is SOUND: recomputing near-miss independently from window minHp traces reproduces the recorded field almost exactly on wins (mean 0.20 vs 0.20; 17% vs 15% of wins with >=1). So the low numbers are real, not a bug. What is wrong is the THRESHOLD in heuristic 2. Wins-only minHpFrac: p10 0.094, p25 0.196, p50 0.363, p75 0.53, p90 0.707. Share of wins ever below: 0.15 -> 17%, 0.25 -> 33%, 0.35 -> 48%, 0.50 -> 71%, 0.70 -> 89%. Heuristic 2 says a win that never fell below 70% was never in danger; that is only 11% of wins. Recomputed at dip/recover 0.35/0.55 the game already yields mean 0.69 scares per win with 48% of wins having at least one. TWO CONSEQUENCES: (1) I-007 is reframed not falsified — the 15% band really is near-lethal, but the 25-50% band is common AND survivable, and the lab concluded there is no recovery from a metric that only watched the band where recovery does not happen; (2) it re-reads the valve programme — I-028/029/030 trigger below 35% HP, which 48% of wins already reach, so those arms fired on half of all winning runs rather than on a rare emergency, which is why they breached the competent ceiling. NOT ACTIONED: heuristic 2 is a shared gate governing how both Claude and Codex judge every threat claim, so amending PROTOCOL.md is a decision for you, not a loop. Tautology warning recorded in the ledger: runs that never dipped below 15% won 100% of the time is circular (losses end at 0 HP) and must not be quoted.

ACCEPTED · claude · 2026-09-01 Approved. The 15% near-miss line was calibrated before rally existed; with a recoverable pool from t=300 the meaning of dipping low has changed. Recalibrate the threshold against the shipped economy.
#14 needs-human tuning 2026-08-31

Tune the five NEW rooms of the one-night structure (library/cafeteria/detention/boiler/lab) — rosters + bonus ladder are provisional Shipped 2026-08-31: THE WHOLE GAME IS ONE NIGHT — MAPS is now 10 rooms, one hour each, 9 PM to First Bell; array order IS the night (yard, gym, library, halls, cafeteria, pool, detention, boiler, lab, roof). Provisional values that need a real tuning pass: - library/cafeteria/detention/boiler/lab rosters were interpolated between neighbours (monotone late-shift intros enforced by test/night.test.js). - roof roster TIGHTENED to finale duty (husk 36 / warden 390, was 45/560); pool bonusMult 1.5 -> 1.35 (moved from end-game to hour six); bonus ladder now ends at roof 1.65. - New rooms reuse existing envs/bases; layouts pass the dead-end invariant. Fresh-save bot reference (8 runs, FINAL): library/cafeteria reach dawn at the median-ish for yui; detention/boiler/lab mostly kill fresh kits (intended — hours 7-9 assume perks/club). Verify the mid-game power curve actually meets the deep hours: measure clears by hour with progressed saves, not fresh ones. - Guardrails: difficulty via HP/speed/intro times, never spawnMult; test/night.test.js enforces bonus ladder + late-shift monotonicity.

ACCEPTED · claude · 2026-08-31 · 2026-08-31-claude-ladder-gym-high800 MEASURED, and the answer to your question is NO — the power curve does not meet the deep hours, and it is not close. I gave a player a fully progressed 800-fragment save (every perk the lab can express) and put them at competent skill on each room, 64 nights per room. They clear THE YARD 52% of the time. Room two, THE GYM: 13%. The pool: 5%. The boiler: 3%. So the deep hours are not gated on progression the way you intended — they are close to unwinnable no matter what the player has bought. The clearest way to see it: buying the full 800-fragment kit is worth +62 points on the yard and +25 on the library, and roughly NOTHING from hour five onward — in the boiler it buys about seventeen extra seconds of life. THE BIGGEST PROBLEM IS NOT THE DEEP END, IT IS THE FIRST STEP. Going from room one to room two costs a player 39 points of win rate, which is more than the entire rest of the ladder combined (13% down to 3%). I think I know why, and it is a one-line-shaped thing: on the yard the wisp does not appear until 420 seconds, but on the gym it appears at 110 — a 310-second jump. Every step after that moves the wisp by 20 seconds or less. So the night is not a ramp: room one is gentle, and rooms two through ten all start at nearly full pressure. If the yard roster is the odd one out rather than the gym being wrong, the fix is to bring room one nearer the others (or space rooms 2-4 out) rather than to soften the deep end. SECOND THING, AND YOU MAY WANT THIS BEFORE THE ROSTERS: the gold star is now effectively only reachable in room one. Gold is 330000. A progressed player scores 320595 at the median on the yard — the LOWEST-paying room — and 49681 on the gym, a 6.4x collapse between adjacent rooms. The gym, pool and boiler medians all sit below even the SILVER threshold. Your bonus ladder pays more as the night deepens (1.00 up to 1.65) while the score a player can actually reach collapses after room one, because they die at 5:13 instead of 7:55 and never build the chain. So going deeper to chase gold currently makes gold harder, which is the opposite of the note in the code. All cells n=64, both skills, gates pass, sim b78caf6. ACCEPTED · claude · 2026-08-31 CORRECTION to what I told you an hour ago. I said the room-one-to-room-two cliff looked like the wisp timing — 420 seconds on the yard against 110 on the gym — and that bringing room one nearer its neighbours was probably the fix. I TESTED THAT AND IT IS ABOUT A THIRD RIGHT. I transplanted the gym properties onto the yard one at a time (64 nights each, progressed save, competent skill; about 4 wins is noise at these rates). Giving the yard the gym roster costs 8 of the 25-win gap. Giving it the gym ARENA SIZE on top costs 2 more — basically nothing, which kills my backup guess as well. The big one is the spawn rate, and it behaves in a way worth knowing about: cutting spawns 5% on the stock yard costs NOTHING (it actually scored 4 wins better, which is noise) — but the same 5% cut costs THIRTEEN WINS once the arena is small and the roster is early. So there is no single lever here. The gym is harder than the sum of its parts, and the reason fits your own rule in CLAUDE.md that spawns are the XP economy: when the player has XP to spare a 5% cut is free, and when they are already pressed it removes exactly the levelling they needed to keep up, and it compounds. THE PRACTICAL UPSHOT: spawnMult is not a fine dial. It is a big one whose size depends on how much slack the room already has — and the new ladder walks it down all night (1.0, then 0.95 four times, then 0.9 three times, and 0.8 on the roof) across rooms that have less and less slack. That is a much better candidate for why hours five to ten are near-unwinnable at any investment than anything about the wisp. I would not tune it by feel. Two honesty notes: these five arms were run without recording manifests, so the numbers are reproducible but not pinned records, and I have queued a proper recorded re-run; and config.js was snapshotted and restored byte-identical (sha256 matches, git diff clean, tests 73/73). ACCEPTED · claude · 2026-08-31 · 2026-08-31-claude-tune-gym-spawnmult-1 TUNER ITERATION on I-040/I-048 (yard->gym cliff): escalated to Fable per model policy since I-048 was flagged stale by the recovery valve landing this same iteration. Fable named spawnMult as the dominant lever and called for gym 0.95->1.00, predicting +10 to +18 win-rate points at skill 0.5 FINAL. Measured +0 (standard-16, 0/16->0/16 at skill 0.25 and 0.5, 1/16->1/16 at 0.8; manifest 2026-08-31-claude-tune-gym-spawnmult-1, gates FAIL/dirty since unlanded). Score p50 rose but win rate, the binding heuristic, did not move. REVERTED (config.js clean, tests 76/76) and recorded as new finding I-410: the valve appears to have compressed spawnMult bite in the gym rather than this being a null result on the cliff itself. Item stays open for the next lever: roster timing (wisp debut 420s yard vs 110s gym) is untested and 0z (re-baseline the ladder on 3ae4e8a) is still the top queue item. ACCEPTED · tuner · 2026-09-01 · 2026-09-01-claude-tune-gym-wisp-265 TUNER ITERATION on the last untested lever, and it is a NO — new I-411. You asked whether the mid-game power curve meets the deep hours. I tested the specific thing I said was untested last time: the wisp debut. The yard lets the wisp in at 420 seconds and the gym at 110, a 310-second jump at the very first step of the night, while every step after that moves twenty seconds or less. I moved the gym to 265, the midpoint, so the ladder reads 420 -> 265 -> 100. I predicted the gym would gain ten to twenty points of win rate. It LOST ground at every skill level: 17% -> 16%, 36% -> 28%, 33% -> 30%, on 64 nights per cell with the perk tree fully bought. To be straight with you about strength: the loss itself is inside the noise, so I cannot claim the change made the gym harder. What I CAN claim is that the gain I predicted is excluded by the data. Reverted, tests 80/80, nothing landed. TWO THINGS WORTH MORE THAN THE TUNE. First, the cliff is still there and it is worse than the last measurement said. Every number you have on it was taken before the density taper, the Edge economy, the recovery valve, THE CURRENT and the antikite fix landed. It survived all five. On today's build, with a player who has bought EVERYTHING the shop sells: the yard wins 84% at competent skill and the gym wins 33%. That is a fifty-one point drop walking from room one to room two, and no amount of shopping fixes it. Second, your item's single-constant list is now exhausted. Roster, arena size, spawn rate and intro timing have each been tested alone. None of them is the cliff. I-040 called it 'an INTERACTION, not a lever' and that is now the surviving reading rather than a hedge, which means the next honest move on this is a two-constant arm or a mechanic, and mechanics are yours, not mine. ONE CHEAP THING FOR LOOP 1 THAT WOULD SETTLE THE OPEN QUESTION. The interesting pattern in this run is that delaying the wisp made players LIVE LONGER at low and mid skill but SCORE 13% LESS and win no more often — they lived longer and killed less. That looks like your own spawns-are-the-XP-economy rule showing up in intro times: defer fourteen cheap wisps and you defer the levelling that pays for the 420/520/620-second late shift. I am deliberately NOT minting that as a rule, because nothing in this run measured player level. Instrumenting median level at t=420s and re-running these two exact arms on the same seeds costs almost nothing and answers it outright. ACCEPTED · tuner · 2026-09-01 · 2026-09-01-claude-tune-crash-gym-150 FOLLOW-UP, and it is about the fix you shipped against this item rather than the item itself - new I-412, filed separately as its own board entry. Short version: the mechanic is probably fine, its NUMBER was inherited from a different mechanic, and the 2/16 to 5/16 that justified it is a sixteen-seed artifact. I reproduced your exact cells and then ran the other 48 seeds of the same bank; the full n=64 reads 13% to 16%, p=0.77. Your XP-neutrality claim, which is the part I actually went looking to disprove, is correct and I could not dent it. The yard-gym cliff itself is untouched by all this and still stands exactly where I-411 left it. NEEDS-HUMAN · tuner · 2026-09-01 Bookkeeping: this items own history concludes the single-constant list (roster, arena size, spawn rate, intro timing) is exhausted (I-411/I-412) and the next honest move is a two-constant arm or a mechanic (roster/gym cliff is an INTERACTION, not a lever, per I-040). Two-constant arms violate this loops one-knob-per-iteration discipline, and mechanics are explicitly out of tuner scope (src/sim.js logic). Marking needs-human for consistency with #39/#40/#44 rather than leaving it silently stale at accepted with no clear next actor.
#13 needs-human unsure 2026-08-31

THE FIRST DOMAIN — split Shikigami off the elective binding, starve early domain, make domain #1 a breakthrough Chris, 2026-08-31 (queued mid-session, verbatim intent): Diagnosis: early stages let you farm to a domain fast, and once you have it you are unstoppable — the game never trains you on the rest of the kit. Domain-rushing IS the playstyle because it is available before anything else matters. Proposed shape (design, not just tuning): 1. SPLIT BINDINGS: Elective and Shikigami become separate slots — a student can carry both a Shikigami AND an elective technique (or neither). Today kuroinu/SHIKIGAMI is just one elective among four. 2. NO SHIKIGAMI AT GAME START: it is earned later, not owned on night one. 3. STARVE THE EARLY DOMAIN: in the first hours of the night (yard/gym/library) domain charge should be genuinely hard to reach, while Elective + Flash Step are cheap and available — the early game TRAINS elective+step+weapon dependence. 4. THE BREAKTHROUGH: the first domain of a run should land like a room-clearing event you were not ready for — a huge payoff AFTER hours of fighting hordes on brain energy alone. Fits the ONE NIGHT structure shipped today (10 rooms, 9 PM to First Bell): early hours = elective school, deep hours = domain economy opens. Levers that exist today: DOMAIN charge rates, ENERGY costs, ELECTIVES ce costs, per-map roster pressure. New work needed: separate Shikigami binding (input, HUD button, sim slot), Shikigami acquisition moment. Measure with the lab: dom-kill% by hour, elective casts/min by hour, first-domain timestamp distribution.

NEEDS-HUMAN · claude · 2026-08-31 · 2026-08-31-claude-ladder-yard-high800 YOUR DIAGNOSIS IS RIGHT, and the numbers are worse than your description of it — but the shape you proposed needs one correction before it is built. CONFIRMED: the domain is not a breakthrough anywhere. Across 768 nights covering three rooms, two loadouts and both skill levels, ONE HUNDRED PERCENT of runs reached a domain. Not most — all of them. And the first one lands about two minutes in no matter where you are: 100 seconds on the yard, 112 on the gym, 113 in the boiler. So the deep rooms hand out the first domain at the same moment room one does; there is no gradient today for you to steepen. WORSE THAN YOU SAID: the domain is not even the rare tool. A progressed player at competent skill casts 34.9 domains in a single yard run — one roughly every 13 seconds — while casting about 3.3 electives per MINUTE. So the supposed ultimate is the common verb and the elective is the scarce one. That is your kit hierarchy exactly upside down, and it is strong evidence for splitting the bindings the way you propose. THE CORRECTION: your point 3 says starve the EARLY domain so the first one lands late and hard. But the first-domain TIME is nearly skill-invariant — novices get theirs only about 30 seconds later than good players (130s vs 100s). What separates them is VOLUME: 6.1 domains a night for a novice against 26-35 for a competent player. So a tune aimed at the first unlock will hit novices and experts almost equally and will not stop domain-rushing; the runaway lives in the RECHARGE rate, which is where the whole skill gap sits. If you want the first domain to feel like a breakthrough, delaying it is the small half of the job — making the second through thirty-fifth cost something is the big half. Routed to you rather than accepted because points 1, 2 and 4 are design and new systems (a separate shikigami slot, an acquisition moment), which the sim cannot judge; the lab can measure any tune you land on the recharge side.
#12 shipped tuning 2026-08-31

The bot needs a rotation policy before LINE_CHANGE can be tuned (I-032/I-033) Two blocks in src/bot.js. (1) botLevel is the ONLY caller of sim.swapCharacter, so tags can only fire in a level-up window — 773 of 773 measured tags were at a level-up. (2) bot.js:15 gates elective casts on ce > ceMax*0.85, but LINE_CHANGE.freshCostMult=0 exists so a just-tagged student can cast at zero CE, and they arrive at 15-27%. Only 5-16% of casts land in freshWindow. Counterfactual, standard-16 FINAL 0.8: arm B (take the free cast when open) is inert, 7->6 and 3->1 wins. Arm C (B + tag out below 30% CE when a bench member is fuller) gives ren+kaito 7/16 -> 12/16 and yui+sora 3/16 -> 9/16, both above solo ren 8/16, novices unmoved at 0/16. Arm C tags every ~6.6s against TAG_COOLDOWN 7, so it is an upper bound, but a reachable one. Note bot.js is on the sim surface: landing this moves simSha and re-baselines every CLUB cell (solo cells are provably unaffected — I-031). Suggest the policy be conservative rather than cooldown-mashing, so the bot models a good player and not a frame-perfect one.

ACCEPTED · claude · 2026-09-01 · 2026-09-01-claude-club-renkaito-rotation-clean Built it. The test bot now tags teammates in and out during a fight, not just when leveling up (the game already lets the bot do this whenever a 7-second cooldown is clear -- it just never checked outside level-ups before). With that fixed, a good two-person club goes from tying a solo player (48%) to clearly beating one (69%) at high skill, which matches the ceiling you already measured by hand. Landed directly to main (bot.js only, tests + the metric-contract check both green, matches the self-land rule in playtest/OWNERSHIP.md) as commit 3596e62. SHIPPED · tuner · 2026-09-01 Bookkeeping correction: this was already built and self-landed by Loop 1 as bot.js commit 3596e62 (see the accepted verdict above) — status was never updated to shipped. No tuner action needed or possible; bot.js is not config.js.
#11 accepted bug 2026-08-31

gameVersion().dirtyFiles eats a character from the FIRST modified file, so the DIRTY gate cannot name the file that tripped it scripts/playtest-runner.mjs:89 runs .trim() on the whole `git status --porcelain` output, which strips the leading space from the FIRST line only. Line 97 then does l.slice(3). A modified file prints " M src/save.js" (1-char status + 2 spaces); after the outer trim that first line is "M src/save.js", so slice(3) returns "rc/save.js" — one character eaten. Untracked entries are unharmed because "??" is 2 chars. Hit live this iteration: insight.mjs printed "!! SIM SURFACE is dirty" followed by an EMPTY file list, because the display filter is dirtyFiles.filter(f => simSurface.includes(f)) and "rc/save.js" does not match "src/save.js". BLOCKING IS STILL CORRECT — simDirty comes from a separate unparsed simStatus.length>0 — so no past result is wrong; only the diagnostic is. This is exactly the "gate that cries wolf" failure PROTOCOL warns about. Fix: split before trimming, e.g. status.split(String.fromCharCode(10)).map(l => l.slice(3).trim()), and drop the outer .trim() for this call.

ACCEPTED · claude · 2026-09-01 Real and still open in ONE place: the lander was fixed (statusPath split, commit 82b13fc) but gameVersion().dirtyFiles in playtest-runner.mjs still slices 3 chars and can eat the first character of the FIRST dirty file. Cosmetic in practice (it feeds display and the sim-dirty check uses a separate git call), but it is the same bug family that stalled the tuner for hours. Approved for the loop to fix properly.
#8 needs-human tuning 2026-08-31

Tune the LINE CHANGE (LINE_CHANGE in config.js) — shipped 2026-08-31 Chris approved and shipped the Line Change mechanic (commit on main, sim surface moved): tagging is now a CE rotation, not domain stacking. Three NEW constants in src/config.js are the levers, set by feel and never measured — they are yours to tune: LINE_CHANGE.benchLullMult 3.0 bench CE regen mult while a pressure lull is open (the club breathes on the wave) LINE_CHANGE.freshWindow 2.5 seconds after tag-in that the elective is free LINE_CHANGE.freshCostMult 0 elective cost inside that window (0 = free) Reads that matter, per the design intent: - elective casts/min in club runs (I-014: they were CE-starved to ~0) - tag rate and bench CE at tag time (does rotation actually happen?) - club-vs-solo gap (I-018: club was pure dilution; rotation should be the first genuine club>parts effect — verify, do not assume) - solo unaffected (freshT/bench paths cannot fire solo; confirm) One change per iteration as always. Baselines predate this surface.

NEEDS-HUMAN · claude · 2026-08-31 · 2026-08-31-claude-linechange-solo-final-carryforward MEASURED — and the answer is that the lab cannot tune these three constants yet, because the bot cannot play the mechanic. Of your four reads: (4) solo unaffected = CONFIRMED, exactly, 1920 field comparisons across 128 runs with zero differences, so every solo baseline carries forward. (1) elective casts/min in club runs = 1.67-1.72/min at competent, up from I-014 ~0, but solo casts 3.01/min, so the club still casts at ~55% of solo. (2) tag rate = 0.9-1.3/min, and ALL 773 tags measured happened at a level-up, because botLevel is the only thing in the codebase that calls swapCharacter. (3) club-vs-solo = club is STILL worse than solo under bot play (ren+kaito 7/16, yui+sora 3/16, solo ren 8/16), so rotation is NOT yet the club>parts effect you designed. The reason is bot.js:15 — the bot only casts an elective above 85% CE, while freshCostMult=0 exists so a tagged-in student can cast at ZERO CE, and they measurably arrive at 15-27%. The two conditions barely overlap, so only 5-16% of casts use the free entrance. WHEN I GAVE THE BOT A ROTATION POLICY the mechanic came alive: competent FINAL 7/16 -> 12/16 (ren+kaito) and 3/16 -> 9/16 (yui+sora), both now beating solo 8/16, with novices unmoved at 0/16. Taking the free cast alone was worth nothing (-2 to 0 wins); the value is all in tagging out when dry. So the design intent looks RIGHT and the numbers to tune it are not trustworthy until the bot can rotate. Recommend the bot work lands before any benchLullMult/freshWindow/freshCostMult tune. n=16, one bank, one map, and the sim surface was dirty from your cloud-save work, so none of this clears the lab gates yet. NEEDS-HUMAN · claude · 2026-08-31 · 2026-08-31-claude-club-renkaito-armA-9730eeb CORRECTION AND UPGRADE — your surface went clean mid-iteration so I re-ran everything at n=64, and one thing I told you an hour ago was wrong. I said the club was still worse than solo. At n=64 it is NOT: club ren+kaito 31/64 (48%) vs solo ren 28/64 (44%), both with SHIKIGAMI, a 3-win gap that is 0.75 SE — flat. My earlier club-worse reading was noise from a 16-seed sample. So the honest headline is better than what I first reported: THE LINE CHANGE HAS ALREADY PAID OFF THE CLUB TAX. Clubs used to be a straight loss (I-018); now they break even before the player has learned anything. The rotation upside is confirmed and large at n=64: taught to tag out when dry, ren+kaito goes 31/64 -> 48/64 (75%, +4.25 SE) and yui+sora 5/64 -> 23/64 (36%, +8.38 SE). But it is PAIRING-DEPENDENT, which the small sample hid: rotating ren+kaito (75%) clearly beats solo (44%), while rotating yui+sora (36%) is still WORSE than solo. So it is a good pairing that beats its parts, not clubs in general. TWO THINGS YOU SHOULD DECIDE BEFORE I TUNE THE CONSTANTS. (1) Rotation SUPPRESSES threat — near-miss mean falls 0.36 -> 0.11 and clutch wins 13 -> 9. Played well, the Line Change lets you tag OUT of danger rather than survive it, so the better a player gets the flatter their runs feel. That points the opposite way from the four iterations we just spent buying near-misses back. (2) A rotating player in a good club wins 75% of FINAL on a FRESH SAVE at competent skill. Heuristic 4 reserves ~50% for perk-INVESTED play, and the tuner just spent three iterations dragging that ceiling down to 47%. Mastery walking back through the ceiling for free may be exactly what you want, or may be the ceiling leaking again — but raising benchLullMult/freshWindow/freshCostMult would widen it either way. Still needs the bot rotation policy (board #12) before the constants can be tuned honestly. NEEDS-HUMAN · claude · 2026-08-31 · 2026-08-31-claude-club-renkaito-armA-64b RETRACTION — I told you something wrong last time and I want to correct it before you act on it. I said THE LINE CHANGE HAS ALREADY PAID OFF THE CLUB TAX. That was wrong. I compared ren+kaito against solo ren, found them level, and credited your mechanic with fixing it — but the lab had already recorded (I-016) that ren+kaito was ALWAYS level-or-better than solo, back before the Line Change existed. That pairing never had a tax. The dilution problem was only ever about pairing a STRONG character with a WEAK one, and that case is completely untouched: yui+sora still sits 36 points below ren+kaito at equal skill, on two independent banks. So the honest summary is the boring one, and it agrees with everything else I found: UNDER THE TEST BOT, THE LINE CHANGE HAS NOT MEASURABLY CHANGED CLUB-VS-SOLO OUTCOMES AT ALL — which is exactly what you would expect from a bot that cannot rotate. Nothing about your mechanic is implicated; the error was mine, in what I compared against. WHAT DOES SURVIVE, and it is the good part: (1) the bench is real defence even unplayed — a club dies 100-160 seconds later than a solo on every map and both banks, even in the cells where it wins no more often; (2) taught to rotate, the mechanic is worth +19 to +21 points, confirmed on an independent bank I minted this iteration; and (3) the finding I am most interested in, which is that on THE GYM rotation produces genuine comebacks — near-misses hold steady while clutch wins nearly TRIPLE (7 to 23) and win rate goes 14% to 61% — where on the yard the same policy just makes danger disappear. That gym result is the first time in about 25 iterations the lab has seen the recovery-from-danger it has been chasing since I-007, and it came out of a mechanic you already shipped. It is still one bank and one pairing, so I am holding it at OPEN and confirming it next. My recommendation is unchanged and now rests on firmer ground: approve the bot rotation policy (#12) before tuning the three constants, and decide how much pressure each map should carry, because that single choice decides whether players get the anaesthetic version or the comeback version.
#6 needs-human bug 2026-08-30

Novice deaths land at an anonymous mid-night wall, not a named boss

NEEDS-HUMAN · claude-playtest · 2026-08-30 · 2026-08-30-claude-death-autopsy-final-midterm Investigation complete (I-011). The wall is mostly NOT anonymous: 41% of 97 FINAL deaths had a special-grade on the field (boss #2 alone: 24), 24% were inside 25s of a surge banner (SPIT TAKE 10, HUSK PARADE 9) - only 37% unattributable. MIDTERM: 86% attributable, mostly the first special-grade. Fix is authoring, not tuning, hence needs-human: (1) death screen names the killer beat when attributable - pure view/ui work; (2) the untouched half is that 0/97 FINAL deaths land past 85% of the night, which is the recovery-valve gap (I-007) - a mechanic only Chris authors. NEEDS-HUMAN · claude-playtest · 2026-08-31 · 2026-08-30-claude-i023-death-autopsy-postiframe UPDATE, iteration 29 (I-023) — supersedes the I-011 verdict above. Re-autopsied 98 FINAL deaths on sim dd9ea8f after the tuner landed PLAYER.iframes 0.7->0.55. THE WALL NOW HAS A NAME: for novices it is THE JANITOR, boss #1 at BOSS_INTERVAL 150s, which kills 17 of 64, with HALL MONITOR taking 13 more. Competent players die to a different set (HALL MONITOR 9, THE SUBSTITUTE 6, POP QUIZ 6), so the killer changes with skill. ANONYMITY IS DOWN: pooled anonymous deaths fell 37% -> 20%; 80% of deaths are now narratable (boss on field, boss within 25s, or surge within 25s), up from 63%. THE NEVER-MOVED NUMBER MOVED: deaths at >=85% of the night went 0/97 -> 7/98, all at competent skill, where night-fraction p75 jumped 0.43 -> 0.82. Competent players now die late and named. STILL TRUE FOR NOVICES: their night-fraction p75 is 0.42 and 0 of 64 approach dawn — the median novice never sees the second half of a FINAL night. So your original complaint is half-fixed: novice deaths are named now, but still mid-night. RECOMMENDATION (yours to ship): the death screen naming the killer beat is pure view work, was proposed in I-011, and now has a name to print for 79% of competent deaths. Highest value-per-hour item the lab has. Kept at needs-human because shipping it and deciding the novice-wall tune are both your calls.
#5 accepted bug 2026-08-30

Lab plumbing: the tuner worktree has its own feedback.db - tuner proposals never reach this board REPO_ROOT in scripts/playtest-runner.mjs resolves per-worktree (path relative to the script file), so idea.mjs run from G:/Skunkworks/hallpass-tuner writes playtest/feedback.db THERE, not the shared one here. feedback-db.mjs promises exactly one source of truth; worktrees break that silently. Fix needs your hands (scripts are not the tuner files to land): resolve the DB path via git rev-parse --git-common-dir, or make the tuner skill set HALLPASS_FEEDBACK_DB to the main checkout DB. Until fixed, the tuner writes proposals directly to this DB via HALLPASS_FEEDBACK_DB, as this item was.

ACCEPTED · claude · 2026-08-31 CONFIRMED FIXED from this side. scripts/feedback-db.mjs now resolves a single DB and the tuner proposals are arriving: item #8 (the Line Change constants) reached this board from the tuner and I acted on it this iteration, which is the end-to-end proof the item asked for. Nothing further to decide.
#4 needs-human tuning 2026-08-30

TUNER PROPOSAL (needs your hands): raise the FINAL ceiling - hpQuadSec 380 -> 330 Measured on standard-16 FINAL (manifest 2026-08-30-claude-tune-hpquad-330, sits uncommitted in the tuner worktree; sim was DIRTY, remeasure clean after committing): fresh-0.8 wins 13/16 -> 11/16, clutch 2 -> 3, near-miss mean 0.13 -> 0.19, dead-air 0%, loser deathT p50 stays late; novice deathT p50 4:14 -> 3:59. Backs I-005/I-006 (soft FINAL ceiling). The tuner cannot ship it: hpQuadSec is pinned by test/invariants.test.js:21, and the change needs that test plus docs/MECHANICS.md updated in the same commit - files the tuner does not own and tuner-land refuses. First filed 2026-08-30 in the tuner worktree own feedback.db, which this board never reads - see the companion bug item.

NEEDS-HUMAN · claude-playtest · 2026-08-31 · 2026-08-30-claude-rebaseline-246f428 DO NOT SHIP AS-IS — the premise moved (I-021, iteration 28). This proposal was measured pre-iframe against a fresh-0.8 FINAL ceiling of 13/16 (81%), citing I-005/I-006 soft-ceiling. Since then the tuner landed PLAYER.iframes 0.7->0.55 at 246f428, and a full n=64 re-baseline puts fresh-save competent FINAL at 30/64 = 47% (standard-16 slice 9/16 = 56%). So the ceiling this proposal set out to lower has already fallen 34 points, and heuristic 4 wants perk-invested competent around 50% — fresh-save is now AT that number before any perks. Applying hpQuadSec 380->330 on top would compound with the iframe tune and push FINAL below the design point rather than onto it. The measurement itself is not disputed; it is simply stale. If you still want the knob, it needs re-measuring on the current sim (dd9ea8f) at n=64 both skills, and the target should be re-derived from the post-iframe curve rather than from the 81% era. Related and still true: the blocking reason in this item (hpQuadSec is pinned by test/invariants.test.js:21, and the change needs that test plus docs/MECHANICS.md in the same commit, files the tuner does not own) is unchanged, so it remains a needs-your-hands item if revived.
#2 needs-human feel 2026-08-30

Domain cast should feel more earned late in a run [feel]

NEEDS-HUMAN · claude · 2026-08-30 Feel item — the sim cannot judge earned-ness, routing per the [feel] rule. The lab CAN supply supporting numbers if wanted: domain/elective uptime and CE economy by night-phase (rotation item H) would show how often and how late domains actually fire at each skill. Say the word and it gets measured; the design call stays yours.

Findings

BLOCKER BLOCKED — queue item 0n is unanswerable until this is fixed

Sim's constructor accepts `steps`, `shiki` and `mastery` (src/sim.js:41); runNight() passes NONE of them (scripts/playtest-runner.mjs:180-191). The equipped elective is the ONLY post-perk power that reaches the sim. So in the "full shop" arm the player spends 3585 (perks 2035 + all three electives 1550) but only ~450 of it — the one equipped elective — becomes effective power. Internal check confirming the arm did what it claimed: perks-only leftover 2980 minus full-shop leftover 1419 = 1561 ~ 1550, exactly the elective shop.
I-001 VALIDATED threat pulse / quickie contract

QUIZ never bites at any skill: near-miss mean is 0.00 in all six cells across both banks (96 runs, skills 0.25/0.5/0.8). Competent players take 6-12 hits median across a whole night. The quickie replay hook (score chasing) has no danger underneath it at gate-passing n.

standard-16 + standard-16b, n=16/cell, sim b001603. Near-misses mean 0 in every cell; 0.8 hits p50 6 (bank a). Extends I-003 ladder-wide flat threat to QUIZ at proper n; supersedes the pre-lab quick-6 hint.

Proposal: Feedback board #1 evidence is complete. Fix shapes stay as proposed: QUIZ-only early HP ramp or a scripted ~120s mini-surge, never spawn counts. Tuning numbers need a config micro-experiment.
I-002 VALIDATED the ladder points down before it points up

Novice QUIZ win rate sits at 72% pooled (11/16 + 12/16 = 23/32), far above the 50% the economy table designed for; mid skill is 31/32 and competent 32/32. The bottom rung of the point-down ladder barely points down.

standard-16 + standard-16b, n=16/cell, sim b001603, banks agree within 1 win. The MECHANICS.md table (5/10 novice at 0.25, 10 legacy seeds, old SHA) cannot be exactly diffed for drift-vs-seed-identity, but the current 72% vs 50% intent stands regardless. playtest.mjs funnel (independent seeds) corroborates the softness pattern.

Proposal: QUIZ novice difficulty needs a nudge up via enemy HP/speed (never spawns) IF Chris wants the earned-feeling QUIZ back — but note the interaction: QUIZ is the paid rung novices drop to (+302 per table), so overtuning starves the ladder. Target ~50-60% novice. Pairs with the I-001 threat fix: one change could serve both.
I-003 OPEN threat pulse

At skill 0.8 the threat curve is flat across MIDTERM and FINAL, not just QUIZ: near-miss mean 0.06 (MIDTERM) and 0.13 (FINAL), p50 0 in both, with per-window worst-HP medians never exceeding ~40% across the whole night.

standard-16, n=16/cell, sim 2f56ccd. MIDTERM 0.8: 14/16 wins, near-misses p50 0 mean 0.06, threat row peaks at 3/8. FINAL 0.8: 13/16 wins, near-misses p50 0 mean 0.13, threat peaks 4/8 despite hits p50 71. Extends pre-lab I-001 (QUIZ quick-6) to the full ladder at gate-passing n.

Proposal: Same family as I-001: pressure must come from enemy HP/speed or scripted surge bites, never spawn counts. Before tuning, validate on a second bank; also note the 3/16 FINAL deaths at 0.8 land late (p50 9:14, p75 11:19) which is the narratable shape we want — the problem is the 13 wins that were never in danger.
I-004 OPEN deaths must be narratable

Novice (0.25) deaths cluster at an anonymous mid-night wall 35-45% through the night in both MIDTERM (deathT p50 2:43 of 6:00) and FINAL (p50 4:14, p75 5:09 of 12:00), nowhere near dawn or a named boss narrative beat.

standard-16, n=16/cell, sim 2f56ccd. MIDTERM 0.25: 2/16 wins, deathT p50 2:43 p75 2:53, alive row collapses over windows 11-13. FINAL 0.25: 0/16 wins, deathT p50 4:14 p75 5:09. MIDTERM p50 sits just after the 2:30 boss (BOSS_INTERVAL 150s); FINAL p50 4:14 sits between bosses.

Proposal: Feed queue item F (death autopsy vs SURGES and boss spawns, suggested owner Codex): determine whether the wall is boss no.2 plus surge overlap or plain HP-curve outpacing novice DPS, before proposing a tune.
I-005 OPEN the ladder points down before it points up

A fresh-save bot at skill 0.8 wins MIDTERM 14/16 (88%) and FINAL 13/16 (81%), while the design contract expects fresh-save FINAL near 0% and perk-invested competent ~50% — either the lab skill scale reads far above human-competent or the fresh-save FINAL ceiling is soft.

standard-16, n=16/cell, sim 2f56ccd, perks {}. MIDTERM 0.8 14/16, FINAL 0.8 13/16. The MECHANICS.md economy table used skill 0.5 for competent (5/10 FINAL), so the sim is likely internally consistent and 0.8 may simply be superhuman — this is a calibration question before it is a tuning question.

Proposal: Skill-knob calibration sweep: FINAL fresh-save win rate at skill 0.4/0.5/0.6/0.7/0.8 on standard-16 to locate where 50% sits; then decide whether lab-competent should be redefined (protocol change, both agents) or the FINAL ceiling raised.
I-006 OPEN the ladder points down before it points up

Fresh-save FINAL win rate crosses 50% at bot skill 0.6 with zero perks (0/16, 4/16, 5/16, 8/16, 10/16, 13/16 at skills 0.25/0.4/0.5/0.6/0.7/0.8) — the ~50% mark heuristic 4 reserves for perk-INVESTED competent play is reachable uninvested, so the FINAL ceiling is soft at any plausible competent calibration, not merely a skill-scale artifact.

standard-16, n=16/cell, sim 2f56ccd, perks {}, ren@yard tier 1. Wins: 0.25=0/16, 0.4=4/16, 0.5=5/16, 0.6=8/16, 0.7=10/16, 0.8=13/16. Monotonic; the old MECHANICS.md table (skill 0.5, 10 legacy seeds, 5/10) is consistent with the 0.5 cell here (5/16) within noise. Settles the calibration half of I-005: the disagreement with heuristic 4 survives at every calibration.

Proposal: Measure the perk-invested delta at skill 0.6 (e.g. a mid-tier perk loadout from playtest.mjs funnel definitions) on standard-16. If perks add fewer than ~15-20 points at 0.6, the ladder is compressed: raise the FINAL HP/speed ceiling so fresh-save 0.6 lands ~15-25% and invested 0.6 lands ~50%.
I-007 OPEN threat pulse

The near-miss mechanic essentially never fires at ANY skill: mean near-misses per run <= 0.31 across all six skill cells (p50 = 0 in every cell) even where deaths are frequent — threat is binary, comfortable or dead, with almost no drop-below-15%-and-recover moments.

standard-16, n=16/cell, sim 2f56ccd, FINAL. Near-miss means by skill: 0.25=0.19, 0.4=0.31, 0.5=0.13, 0.6=0.13, 0.7=0.19, 0.8=0.13. Meanwhile win rates span 0-81%, so the flatness is not a difficulty artifact: runs cross the 15% HP line mostly on the way to dying, not surviving. Sharpens I-003: the missing ingredient is RECOVERY from danger, not danger alone.

Proposal: Design question for rotation item I: the game may need a recovery valve (heal drops, post-hit mercy window, lifesteal-flavored upgrade) so that dipping low is survivable often enough to mint near-misses — the retention beat is the recovery, not the dip. Sim-sketch candidates before proposing numbers.
I-008 OPEN sink contract / the ladder points down before it points up

Perk power on FINAL is a step function with a dead zone at the front: the canonical ~270-fragment loadout (reserve 2, honed 2, legs 1) adds ~zero win rate at every skill (0.25: 0/16 to 0/16; 0.6: 8/16 to 8/16; 0.8: 13/16 to 14/16), while the ~800-fragment loadout (reserve 4, honed 3, legs 2, flash 1) adds +31 points at skill 0.6 (8/16 to 13/16) but only +12 at 0.25 (0/16 to 2/16) and +6 at 0.8.

standard-16, n=16/cell, sim 2f56ccd, FINAL ren@yard tier 1. Fresh curve from 2026-08-30-claude-skill-calibration-final; mid loadout from 2026-08-30-claude-perk-delta-mid-final; high loadout from 2026-08-30-claude-perk-delta-high-final. Perks demonstrably applied in the mid cells (deathT p50 6:13 to 7:10 at 0.6, scores shift) — they change runs without changing outcomes. Novices, the players the point-down ladder exists to rescue, get the least from investment.

Proposal: Two candidate tunes, each needing a config micro-experiment: (1) front-load PERKS rank-1 effects so the first ~270 fragments visibly move outcomes (heuristic 9 wants banked progress to be felt); (2) per I-006, raise the FINAL HP/speed ceiling so fresh 0.6 lands ~15-25% and the invested curve, not the fresh one, crosses 50%. These interact — measure together, ship separately.
I-009 VALIDATED sink contract

High-loadout (~800 diamond) win-rate deltas resolve on pooled n=32: the investment step is at skill 0.5 (+31 points, 14/32 fresh -> 24/32 invested, banks agree 12/16 + 12/16), while at 0.6 the delta is +3 points (noise) — the iteration-6 '+31 at 0.6' was a single-bank artifact. Investment pays where the fresh curve is steep (0.25–0.5) and washes out above the fresh crossing.

Pooled n=32/cell, sim cc3a4a0 (rng-identical to 2f56ccd, see rebaseline manifest). Invested: 0.25=7/32, 0.5=24/32, 0.6=23/32, 0.7=24/32, 0.8=29/32. Fresh: 0.25=1/32, 0.5=14/32, 0.6=22/32, 0.8=25/32 (0.7 fresh is bank-a only, 10/16). Deltas: +19/+31/+3/+13 at 0.25/0.5/0.6/0.8. Cells from: highperk-0507-final-a-clean, highperk-0507-final-b, perk-delta-high-final, 2bank-perk-high-final, skill-calibration-final, 2bank-fresh-final. Gate note: this manifest holds only the 0.5/0.7 completion cells; the claim spans 0.25–0.8 via the pooled set, so gate 2 is satisfied at the claim level.

Proposal: The invested curve sits at ~75% across 0.5–0.7 where heuristic 4 wants ~50%; combined with I-006 the ceiling raise (feedback board #4, hpQuadSec 380->330) remains the right lever — after it ships, re-measure this pooled curve; target invested 0.5–0.6 near 50% and fresh 0.6 near 15–25%.
I-010 VALIDATED sink contract / ladder

The front-load schedule reproduces exactly on a second SHA: mid ~270-diamond loadout at 0.25 gives 3/16 + 6/16 = 9/32 pooled (vs 0/32 under the shipped linear schedule, 1/32 fresh). New nuance from the rank-1-only cell: the literal first ~135 diamonds buys only 3/32 (vs 1/32 fresh) — the schedule value concentrates at ranks 1-2 together, not rank 1 alone.

Config micro-experiment on b001603 (perkBonuses front-load: reserve [25,35,40,45,50] HP cumulative, honed [12,16,19,22,25]%, legs [6,8,9]%; max totals unchanged). Mid cells replay iteration 7 bit-for-bit across two intervening surface moves. Rank-1 cells: 2/16 bank a, 1/16 bank b. Snapshot restored byte-identical (sha256 ae1d2011...), npm test 63/63.

Proposal: Ship-ready per the iteration-15 synthesis: the re-validation gate is cleared. Honest framing for Chris: the schedule makes the first TWO purchases matter (0 -> 9/32 is entirely attributable to ranks 1-2); rank 1 alone is a teaser, not a rescue. If the FIRST-purchase moment matters most for retention, reserve rank 1 could go higher than 25 HP at the cost of flattening later ranks.
I-011 OPEN deaths must be narratable / near-dawn p75

The mid-night wall is only 37% anonymous: 41% of FINAL deaths happen with a special-grade on the field (boss #2 alone: 24/97) and 24% inside 25s of a surge banner (SPIT TAKE 10, HUSK PARADE 9). MIDTERM is barely anonymous at all: 69% die with the first special-grade on the field, p50 15s into its cycle. The unfixable-looking half of I-004 is a FRAMING gap, not a pacing gap — the game already kills players at nameable beats but never tells them. Separately: 0/97 FINAL deaths landed at >=85% of the night, the starkest heuristic-6 failure measured yet.

Pooled archived raw runs, both banks, simSha 2f56ccd, attribution rules in method.notes.

Proposal: Two-part: (1) VIEW-ONLY, cheap — death screen names the killer beat when attributable (63% of FINAL, 86% of MIDTERM deaths qualify): the surge banner name or which special-grade was on the field. Pairs with the I-007 death-screen near-miss framing. (2) The 0/97 near-dawn number is the recovery-valve argument (I-007) restated from the death side: without recovery, nobody limps to an almost-dawn; deaths that SELL the next run cannot exist. For Chris; the lab ships nothing.
I-012 OPEN no dominant choice

Solo character kits are wildly unbalanced on FINAL: win rates at skill 0.8 span 4/16 (sora, 25%) to 16/16 (yui, 100%) with ren/kaito at 13/16 — a 75-point spread where heuristic 7 tolerates ~15. At 0.25 yui wins 8/16 while ren and sora win 0/16.

standard-16, n=16/cell, sim cc3a4a0, FINAL yard tier 1, no perks. These cells were recorded with elective=kuroinu in config but ZERO elective casts occurred in all 128 runs (see I-013) — so they measure the bare kits. Wins at 0.25/0.8: ren 0/13, yui 8/16(!), kaito 2/13, sora 0/4. Yui at 0.25 also mints the ledger-best near-miss rate (mean 0.56, 4 clutch wins) and the only novice win rate above zero ever measured on a fresh save. Sora at 0.8 wins less than fresh ren at 0.5. Contradicts the old session-log note that Yui trails Ren at 0.8 (2/20 vs 7/20, context unknown — likely pre-rework or a different period).

Proposal: Needs a second bank before tuning claims (heuristic 7 bar). If it reproduces: sora needs a kit look (weakest at both skills), and yui is the dominant choice — her novice-rescue property is worth understanding before nerfing (she may be doing exactly what the recovery-valve proposal wants).
I-013 VALIDATED lab infrastructure (measurement validity)

No headless lab run has ever cast an elective: playtest-runner.mjs wired dash and domain to their sim methods but never input.special -> castElective(). The four shiki-* manifests dated 2026-08-30 therefore measure NO-elective play despite elective:kuroinu in their config blocks.

electiveCasts = 0 in all 128 runs across the four shiki-* manifests; shiki-ren cells replay the fresh rebaseline cells bit-for-bit (0/16 and 13/16, identical scores), proving the equipped elective changed nothing. game.js line 1142 has the wire (the real game and its demo bot cast fine); the runner did not. Fixed in game-repo commit c9fbe18 and verified: yui@4000 skill 0.8 now casts 49 times. Bot policy itself is sound — the joint condition (ce>85%, enemies>45) fires thousands of steps per night once dash/domain are wired. Carry-forward proven: rebaseline-c9fbe18-final replays the cc3a4a0 baseline bit-for-bit (no-elective runs leave special=false).

Proposal: The real shikigami sidegrade check (rotation H) reruns on c9fbe18 next iteration — the four shiki-* manifests stand as the no-elective control arm for it.
I-014 VALIDATED no dominant choice / sink contract

Double-buff question answered post-pierce: KITSUNE contribution shrank from +7 to +5 wins (bank a, 0.8) as the kit improved - sublinear stacking, no runaway. Combined post-pierce sora+KITSUNE is 12/16 (75%), landing in the ren/kaito band. Novice stays 0/16 both arms (survivability-shaped deficit, converging with tuner I-403).

sora-postpierce{,-shiki} vs shiki-live-sora-final and tune-sora-pierce1: bare 4->7/16, +KITSUNE 11->12/16 at 0.8 on standard-16, sim 34477c3.

Proposal: The pierce tune + animal stack safely; further sora sizing (tuner candidate hp 90->100) can proceed without KITSUNE retune fears at current magnitudes.
I-015 OPEN no dominant choice

Two upgrades are dominant choices and one is a trap at skill 0.6: prioritizing regen (Reverse Cursed, 1.2 HP/s x3) wins 15/16 (+44 points over the 8/16 botChoose baseline) and focus (Domain Focus) 13/16 (+31), while prioritizing step (Afterimage) wins 4/16 (-25). Spread across pick policies is 69 points where heuristic 7 tolerates 15.

standard-16, n=16/policy, sim b001603, FINAL ren@yard 0.6, prefer-X policy (persistent prioritization, avg 1.2-3.4 picks/run — stronger than a single forced first pick). Full ranking in the raw dump; mid-pack (9-11/16) is dense, consistent with noise around +-2 wins. regen topping the table is the third independent signal (after I-007 near-miss absence and I-010 clutch minting) that RECOVERY is the binding constraint on this game: the only sustained-heal upgrade nearly saturates the steep region.

Proposal: Second bank + a 0.25/0.8 cell pair before tuning claims. If it holds: regen/focus need cost or effect trims OR the rest of the pool needs recovery-adjacent competition; step needs a look at why prioritizing it is actively bad (opportunity cost vs its max of 2). For the recovery-valve dossier: the valve already exists in-run as Reverse Cursed and it is dominant when taken - the design question is why nothing else competes.
I-016 OPEN sink contract / no dominant choice (party edition)

The 2-club is a trap for the strong player: yui+sora scores WORSE than solo yui at every skill (novice 1/16 vs solo 8/16; competent 9/16 vs 16/16) while the mid+mid pairing ren+kaito is additive (15/16 at 0.8, above either solo 13/16). Yui novice-rescue property does not survive sharing the night.

standard-16, n=16/cell, sim 34477c3, FINAL yard t1: party-yuisora 1/16 + 9/16, party-renkaito 2/16 + 15/16, vs solo cells (yui 8/13-16 band, ren 13, kaito 13, sora post-pierce 7). Hypothesis for the mechanism: the bot swap policy rotates on CE, and yui strength IS her CE economy - swapping her out burns exactly the resource that rescues novices. Could be a bot-policy artifact rather than a design truth.

Proposal: Before any design read: (1) bank b, (2) captain-order swap (sora,yui) to see if who starts matters, (3) a no-swap policy cell to separate the party system from the bot swap policy. If it holds for humans too, the party system punishes bringing a weaker friend - the opposite of what a club should do for retention.
I-017 REJECTED sink contract / party design

REJECTED as stated. The '35 domains a night' engine is a standard-16 artifact, not a property of yui: solo novice yui casts 35 domains and takes 5615 kills on bank a but only 8 domains and 1862 kills on bank b. And the domain-freeze mechanism is falsified — giving benched members 0.5x of the active member's earned charge RAISES domain casts (bank a 0.25: 7 to 10; bank b 0.8: 38 to 44) while recovering essentially no wins (yui+sora 0/32 at novice against a 1/32 baseline, 19/32 at competent against 17/32).

standard-16 + standard-16b, n=16/cell (n=32 pooled), sim 34477c3, FINAL yard t1, bare kits. The headline number does not replicate: solo yui at skill 0.25 casts 35 domains on bank a and 8 on bank b, with kills 5615 vs 1862 and wins 8/16 vs 4/16. The bank-a cell was real but unrepresentative, and I-017 was promoted to docs/IDEAS.md on that one bank before this gate ran. The fix arm then falsified the mechanism: bench-share 0.5 lifts domain casts in every cell yet leaves wins flat (yui+sora pooled 0/32 novice and 19/32 competent, against swap baselines of 1/32 and 17/32, and solo-yui references of 12/32 and 31/32).

Proposal: Retract the domain-engine framing from docs/IDEAS.md and replace it with I-018. Keep the one part that did replicate: the 8s DOMAIN_SWAP_LOCK is inert on both banks (bank b skill 0.25 solo yui 8 domains / 4 wins vs no-swap 8 domains / 4 wins; skill 0.8 solo 51/15 vs no-swap 48/16) and still should not be tuned. Lesson for the lab: this is exactly the failure the two-bank gate exists to catch, and it was promoted to IDEAS.md one iteration early — treat OPEN findings as unpromotable, not merely unconfirmed.
I-018 VALIDATED sink contract

A 2-club's win rate is, to first order, the field-time-weighted MIXTURE of its members' solo win rates — so bringing a weaker friend dilutes you toward their level and there is no domain-economy story to fix. The mixture predicts all four competent cells within 1.6-2.8 wins of 16, and it explains both the yui+sora collapse and ren+kaito's neutrality with one rule.

standard-16 + standard-16b, n=16/cell, sim 34477c3, FINAL yard t1, skill 0.8. Predicted = fieldFrac_A x solo_A + fieldFrac_B x solo_B. yui+sora bank a (split 55/45, solos 16 and 4): predicts 10.6, observed 9. Bank b (split 62/38, solos 15 and 4): predicts 10.8, observed 8. ren+kaito bank a (split 51/49, solos 13 and 13): predicts 13.0, observed 15. Bank b (split ~50/50, solos 12 and 10): predicts 11.0, observed 11. Pooled n=32 at skill 0.8: solo yui 31/32, yui+sora no-swap 32/32, yui+sora with swap 17/32; solo ren 25/32, ren+kaito no-swap 25/32, with swap 26/32. Pooled at 0.25: solo yui 12/32, no-swap 11/32, swap 1/32; solo ren 1/32, no-swap 1/32, swap 4/32. The no-swap arm equalling solo on every one of these comparisons is what rules the party system itself out as a cost. The model slightly over-predicts the unequal club, consistent with a small extra tagging overhead (cooldown plus the 2s arrival lock) on top of dilution.

Proposal: The club problem is a design question, not a balance bug, and it is now sharply posed: a mixed-strength club is a strict downgrade for the stronger player because the outcome is a weighted average. If the club is meant to be a retention feature (heuristic 9 — a reason to come back with a friend), it needs a compensating benefit that scales with the strength GAP: candidates are shared XP or fragment income, a mixed-club bonus, or letting the stronger member hold the field longer by choice. Note the bot currently splits field time roughly by captaincy (55-69% to the captain) on a CE cue, so 'let the stronger player stay out longer' is already most of the way to solving it — but that is a player-agency question, and the HUD does not currently show a benched member's CE or domain charge (src/sim.js:2086, src/ui.js:1541), so a human cannot steer the split deliberately. Chris's call.
I-019 VALIDATED lab methodology

The lab's n=16 gate is far too weak at novice skill, and medians of continuous metrics are effectively unmeasurable there. For solo yui at skill 0.25 a 16-seed cell reports a win rate anywhere in 13-56% and a domains-p50 anywhere in 4-42 (95% bootstrap, pool n=160). The cause is bimodality, not noise: 36% of those runs snowball past 3000 kills and 64% fizzle, so a sample median lands wherever the mode boundary happens to fall.

Pool of 160 seeds per cell (128 fresh + both banks), sim 246f428, FINAL yard t1, 2000 bootstrap resamples per n. yui 0.25 (pool winRate 0.338, 36% snowball): n=16 gives winRate 13-56%, domains p50 4-42, kills p50 778-5616; n=32 gives 19-50%, 5-35, 955-5615; n=64 gives 22-45%, 5-18, 1214-2787. yui 0.8 (89% snowball, unimodal) is stable even at n=16: domains p50 44-52, kills p50 5616-5622. ren 0.25 (2% snowball, unimodal) is also stable at n=16: domains p50 3-6, kills p50 535-1260. So instability is specific to cells sitting near a 50/50 mode split, and it is the MEDIANS that break first — win rate, being a bounded proportion, degrades more gracefully. This retroactively explains I-017: its 35-vs-8 domains disagreement between banks sat comfortably inside the 4-42 interval a 16-seed cell carries, so it was ordinary sampling error rather than a bad bank, and rejecting the finding was correct.

Proposal: Three changes to PROTOCOL.md, for both agents. (1) Raise the gate to n>=64 for any claim about a NOVICE continuous metric (domains, kills, score, deathT medians); n=16 stays acceptable for win rates and for competent cells. (2) Prefer bounded proportions over medians when reporting novice cells — the snowball fraction (share of runs over 3000 kills) is stable where the median is not, and it also describes the player experience better. (3) Report bimodality explicitly for any novice cell, because 'median 1517 kills' is actively misleading for a distribution that is 36% snowball and 64% fizzle; no player has the median experience. Consequence to flag rather than silently fix: the novice p50 rows in the ledger's baselines table (deathT, firstLevel, drought) were all measured at n=16 and inherit this interval, so they should be treated as indicative until re-measured at n>=64.
I-020 OPEN threat pulse / sink contract

Novice yui is a coin flip, and that may be a feature rather than a bug: 36% of her novice nights snowball past 3000 kills and 64% fizzle, against 2% snowball for novice ren. She is the only character whose novice outcome is genuinely bimodal.

Pool n=160 per cell, sim 246f428, FINAL yard t1, skill 0.25. Snowball fraction (runs over 3000 kills): yui 36% (57/160), ren 2% (3/160). At skill 0.8 yui is 89% (143/160), i.e. unimodal-good. Pool win rates: yui 0.25 = 0.338, ren 0.25 = 0.013.

Proposal: Worth a design read rather than a tune. A 1-in-3 chance that a novice night turns into a 5600-kill runaway is a strong retention shape — it is the 'one more run' lottery, and it is the only place in the measured game where a novice experiences the power fantasy. The open question is whether the player can TELL which run they are in early enough for it to feel like agency rather than luck, and whether the other three characters should have any such mode at all. Needs a second character with a comparable snowball fraction before any claim about design intent; kaito and sora are unmeasured on this axis.
I-021 VALIDATED the ladder points down before it points up

The iframe tune moved the FINAL ceiling further than anything the lab has measured: fresh-save competent FINAL fell from 81% to 47% (n=64), or 13/16 to 9/16 on the like-for-like standard-16 slice. It also hardened the novice ladder — MIDTERM novice 13% -> 2% and QUIZ novice 69% -> 63% — which fixes I-002's overshoot but leaves a novice with effectively one winnable rung.

standard-64, n=64/cell, sim 246f428, ren@yard t1, against the ledger's prior rows (QUIZ pinned b001603, MIDTERM/FINAL pinned 2f56ccd). Win rates old -> new: QUIZ 0.25 11/16 (69%) -> 40/64 (63%), standard-16 slice 9/16; QUIZ 0.8 16/16 -> 64/64 (100%); MIDTERM 0.25 2/16 (13%) -> 1/64 (2%), slice 0/16; MIDTERM 0.8 14/16 (88%) -> 58/64 (91%), slice 14/16; FINAL 0.25 0/16 -> 0/64 (0%), slice 0/16; FINAL 0.8 13/16 (81%) -> 30/64 (47%), slice 9/16. The competent FINAL drop of -34 points on the full bank and -25 on the slice brackets the tuner's own -22 prediction. This substantially answers I-003 and I-006, which held that the FINAL ceiling was soft at every calibration.

Proposal: Update the baselines table to these rows (done this iteration) and re-read any finding that leaned on the old ceiling. Two things to watch rather than tune yet. (1) The novice ladder now has one rung: QUIZ 63%, MIDTERM 2%, FINAL 0%. Heuristic 4 wants a stalled player to drop a period and get PAID, but MIDTERM at 2% is no longer a rung a novice can drop TO — the gap between QUIZ and MIDTERM is now a cliff, and the economy table's -117 fragment MIDTERM novice line assumed a 13% win rate. (2) Fresh-save competent FINAL at 47% sits right where heuristic 4 wants PERK-INVESTED competent play to land, so the perk track may now overshoot the ceiling it was built to reach; the I-010 front-load proposal should be re-measured on 246f428 before shipping.
I-022 OPEN threat pulse

The iframe tune made competent FINAL bimodal, which is new: 67% of runs snowball past 3000 kills and the rest fizzle, with kills p25/p50/p75 at 2527/4628/5620. The top of the ladder now has genuine uncertainty where it used to be a near-certain win.

standard-64, n=64, sim 246f428, FINAL ren@yard t1 skill 0.8: win rate 47%, snowball fraction 0.67, kills p25/p50/p75 2527/4628/5620, deathT p50 7:38 p75 9:52. The old 81%-win cell was unimodal-good. For contrast every other cell in this sweep has a snowball fraction of 0.00, including both QUIZ cells and MIDTERM 0.8 (kills p25/p50/p75 1827/1830/1832 — almost no spread at all).

Proposal: Two reads worth separating. The good one: a 47% win rate with a wide kill spread is the shape heuristic 2 asks for, and deathT p75 of 9:52 against a 12-minute night means competent deaths now cluster much later than the 0/97-near-dawn era of I-011. The caution: near-miss mean is still only 0.19, so the runs are being LOST rather than survived-narrowly — the tune added uncertainty without adding recovery, exactly the gap I-007 named. Worth measuring next: where in the night the new competent deaths land, and whether any of them are clutch. If the answer is 'they die at a named boss late', that is the retention shape the ledger has been asking for since I-011; if it is 'they die anonymously at 7:38', the tune bought difficulty without narrative.
I-023 VALIDATED deaths must be narratable / near-dawn p75

The iframe tune largely fixed I-011. Anonymous FINAL deaths fell from 37% to 20% pooled, and — the number that had never moved — deaths at 85%+ of the night went from 0/97 to 7/98, all of them at competent skill, where the night-fraction p75 jumped from 0.43 to 0.82. Competent players now die late and at named bosses. Novice players still do not: their p75 is 0.42 and 0/64 ever almost-reach dawn.

standard-64, sim dd9ea8f, FINAL ren@yard t1, 98 deaths (34 at skill 0.8, 64 at 0.25), against I-011's 97 deaths at 2f56ccd. Competent (34 deaths): 65% boss ON field, 9% boss within 25s, 6% surge within 25s, 20.6% anonymous; night-fraction p25/p50/p75 0.446/0.637/0.822, max 0.938; 7 deaths at >=85% of the night. Novice (64 deaths): 47% boss on field, 8% boss recent, 25% surge recent, 20% anonymous; night-fraction p25/p50/p75 0.237/0.299/0.420, max 0.565; 0 deaths at >=85%. Pooled 98: 80% narratable vs I-011's 63%, 20% anonymous vs 37%. Killer bosses differ sharply by skill: novices die to THE JANITOR (17) and HALL MONITOR (13) — the first two special-grades — while competent players die to HALL MONITOR (9), THE SUBSTITUTE (6) and POP QUIZ (6).

Proposal: Two reads. (1) For competent play, heuristic 6 is now satisfied and the death screen naming the killer beat — the cheap view-only change proposed in I-011 and still unbuilt — is worth more than ever: 79% of competent deaths now have a name to print, up from 63%. That is the highest-value-per-hour item in the ledger, and it is pure view work. (2) The novice wall now HAS a name and it is THE JANITOR, boss #1 at BOSS_INTERVAL 150s. Novice night-fraction p75 of 0.42 means the median novice never sees the second half of a FINAL night; combined with I-021's finding that novice MIDTERM is now 2%, the novice ladder is both short AND front-loaded with its hardest gate. Worth measuring before tuning: what fraction of novice runs die to boss #1 specifically, and whether BOSS_INTERVAL or first-boss HP is the binding constraint. Do NOT touch spawn counts.
I-024 VALIDATED the ladder points down before it points up

The novice wall is NOT boss #1 — not its timing and not its difficulty. Delaying every boss by 60s, cutting boss HP 30%, and softening the enemy HP ramp 50% all leave the median novice dying at the same moment: 3:27 to 3:47 against a baseline of 3:35, with night-fraction p75 stuck at 0.33-0.42 and zero deaths near dawn in every arm. The wall is time-locked at roughly t=215s and something other than the bosses enforces it.

standard-64, n=64/arm, sim dd9ea8f, FINAL ren@yard t1 skill 0.25, config micro-experiments restored byte-exact. Baseline: 0/64 wins, deathT p50 3:35, night-frac p25/p50/p75 0.237/0.299/0.420, 30/64 died with a boss on field, killers THE JANITOR 17 / HALL MONITOR 13. BOSS_INTERVAL 150->210: 0/64, p50 3:27, p75 0.332, only 18/64 died on a boss — removing the boss from the moment of death did not postpone the death. Boss HP -30%: 6/64 wins, p50 3:40, p75 0.384 — it buys six wins later in the night but does not move the median. hpRampSec 240->360: 0/64, p50 3:47, p75 0.423 — a 50% softer HP ramp is worth 12 seconds. Death level p50 is 10-12 in every arm.

Proposal: This retracts my own I-023 proposal, which framed the follow-up as 'BOSS_INTERVAL or first-boss HP'. Neither. The boss deaths are INCIDENTAL: a boss happens to be on the field at 150s and 300s, so it collects the credit, but take it away and novices die at the same second to the ordinary crowd. Leading remaining hypothesis, and it is specific: the median novice death is t=215s and HUSK PARADE fires at t=200 with 10 husks, the first surge of a type that novices cannot out-damage (husk hp 42 vs grub 10). I-023 independently found 25% of novice deaths within 25s of a surge. Next experiment should move or resize HUSK PARADE specifically, not the boss schedule. Secondary read worth keeping: boss HP -30% converted 6 losses into wins without changing when the median novice dies, so boss HP is a lever on the TAIL of the novice distribution, not its centre.
I-025 VALIDATED the ladder points down before it points up

There is no novice wall EVENT. 88% of all novice damage is ordinary contact from two cheap enemy types — husk 51.2% and grub 36.4% — bosses are 12%, and the damage-intake curve is smooth, with no spike at any surge: the HUSK PARADE window (180-210s) is 89.9 dmg/run against the preceding window's 88.9. The 'mid-night wall' is a smoothly rising contact-damage curve crossing a roughly finite HP pool, which is exactly why every discrete lever tried in I-024 failed to move it.

standard-64, n=64/cell, sim dd9ea8f, FINAL ren@yard t1, damage attributed at the _hurt choke point. NOVICE (skill 0.25, 0/64 wins, deathT p50 3:35): whole run 2329 hits / 26945 damage — husk 51.2%, grub 36.4%, BOSS 12.0%, wisp 0.3%, orphan 0.1%. In the wall window 180-240s: husk 61.0%, grub 38.6%, BOSS 0.4% — the boss is essentially absent from the moment novices actually die, independently confirming I-024 from the damage side. Husks are already 42.7% of damage in the first 120s, BEFORE HUSK PARADE fires, so the surge is not the source. Intake per living run by 30s window: 2.1, 9.8, 16.4, 54.8, 61.4, 88.9, 89.9, 74.1, 78.9, 99.1 — the largest jump is 60-90s to 90-120s (16.4 to 54.8, 3.3x) which contains NO surge, while the HUSK PARADE window is flat. COMPETENT (skill 0.8, 30/64 wins, deathT p50 7:38) for contrast: husk 32.3%, grub 31.1%, wisp 26.8%, BOSS 9.4%. Wisps take 26.8% of competent damage against 0.3% of novice damage purely because novices die before wisps accumulate. Early intake differs 7x: 749 damage in the first 120s competent against 5315 novice.

Proposal: Stop looking for an event. The lever the data names is the HUSK, which does 51% of novice damage while costing the starting kit two hits to kill: husk hp 42 against ren's 26-damage cone, where a grub at 10 hp dies to one. That 2-hits-to-kill threshold is the whole story — it doubles the time a husk spends alive and adjacent, and husks deal 12 damage to a grub's 6. Two candidate tunes, both legal under the non-negotiable (difficulty is HP and speed, never spawn counts): drop husk hp to at or just under the starting one-shot threshold, or cut husk contact damage toward the grub's. Both need measuring at BOTH skills, because husk is also 32% of competent damage and the FINAL ceiling was only just retuned by I-021 — this is the same knob-shared-across-skills risk that makes option C in the verb-collapse dossier touchy. Also worth noting for the recovery-valve thread: a smooth intake curve crossing a finite pool is precisely the shape a recovery valve would address, and it explains why no discrete difficulty lever has ever produced a near-miss.
I-026 VALIDATED the ladder points down before it points up

The husk knob moves the novice wall — the first lever that ever has — but it is SHARED, and both settings tested overshoot at the competent end. Husk hp 42->26 buys novices +52s of survival (deathT p50 3:35 -> 4:27) at the cost of the FINAL ceiling rising 47% -> 56%. Husk dmg 12->8 buys only +20s and 4 novice wins while sending competent to 73%, undoing I-021's ceiling work entirely. Neither is shippable as-is.

standard-64, n=64/cell, sim dd9ea8f, FINAL ren@yard t1, both skills, config micro-experiments restored byte-exact. BASELINE: novice 0/64, deathT p50 3:35, night-frac p75 0.419, near-miss 0.22, husk damage share 51.2%; competent 30/64 (47%), deathT p50 7:38, 7 deaths >=85%, near-miss 0.19, clutch 9, husk share 32.3%. HUSK HP 42->26: novice 0/64 but deathT p50 4:27 (+52s) and 1 death >=85% where baseline had 0, kills p50 719 -> 1022, husk share 51.2% -> 40.5%; competent 36/64 (56%, +9 points), near-miss 0.19 -> 0.27, clutch 9 -> 13, minHp p50 0 -> 0.067. HUSK DMG 12->8: novice 4/64 wins, deathT p50 3:55 (+20s), near-miss 0.23, clutch 3; competent 47/64 (73%, +26 points), husk share 32.3% -> 23.3%. Damage-share movement in both arms confirms the tune hit the intended mechanism rather than acting through some side channel.

Proposal: The structural lesson is bigger than the knob: a single shared enemy constant cannot fix novices without moving competent, because both populations fight the same husk. Every lever the lab has tried on the novice wall is of this shape, which is why the wall has survived I-024, I-025 and now I-026. The fix has to be something novices have LESS of rather than something the enemy has less of — the perk track (which is exactly the axis novices lack, and which I-010's front-load already targets), the recovery valve (I-007), or a progression-gated effect. That reframes the standing queue: re-measuring I-010's front-load on the current sim is no longer just due diligence, it is the most promising remaining novice lever. If a shared knob is nonetheless wanted, hp26 is strictly the better trade than dmg8 — it moves novice survival 2.6x further per point of competent inflation, and it IMPROVES the threat pulse (near-miss 0.19 -> 0.27, clutch 9 -> 13, minHp p50 0 -> 0.067) where dmg8 mostly just hands out wins.
I-027 VALIDATED the ladder points down before it points up

The front-load still buys a novice rescue on the current sim (0/64 -> 3/64 wins, deathT p50 3:43 -> 4:30, and 3 clutch wins where the shipped schedule minted none) but it is NOT a novice-only lever: it hands invested COMPETENT play +8 wins of 64 against the novice's +3, taking that cell from 69% to 81%. The perk track scales with how long you survive, so a flat power grant helps whoever already lives longest.

standard-64, n=64/cell, sim dd9ea8f, FINAL ren@yard t1, perks {reserve:2,honed:2,legs:1} (~270 fragments), config micro-experiment on src/save.js perkBonuses restored byte-exact. SHIPPED schedule: novice fresh 0/64 deathT p50 3:35; novice invested 0/64 deathT p50 3:43 (the ~270-fragment investment buys a novice EIGHT SECONDS — I-008's dead zone, reproduced on the current sim); competent fresh 30/64 (47%); competent invested 44/64 (69%). FRONT-LOADED: novice fresh 0/64 3:35 and competent fresh 30/64 (identical to shipped, as they must be — no perks means no bonuses, which is the built-in control); novice invested 3/64 (5%), deathT p50 4:30 (+47s over shipped-invested), near-miss 0.11 -> 0.23, clutch 0 -> 3; competent invested 52/64 (81%), +8 wins. So the front-load's marginal gift is 2.7x larger for competent players than for novices in absolute wins.

Proposal: Two things follow, and the second is the important one. (1) On its own terms the front-load still works: it is the only change measured that gives a fresh-save NOVICE a win at all on the current sim, and it mints the clutch wins the ledger has been chasing since I-007. It also cannot touch the 47% fresh-save ceiling by construction, since a fresh save has no perks. But invested competent play was already at 69% against heuristic 4's ~50% design point, and this pushes it to 81% — so shipping it as-is widens a gap that is already too wide. (2) I-026's structural lesson generalises further than stated there: it is not only shared ENEMY constants that fail. ANY flat power grant scales with survival time, so it disproportionately rewards whoever already survives — the perk track included. A genuinely novice-targeted lever has to be one whose value FALLS as the player gets better. That is a precise description of the recovery valve (I-007): it only fires when you are about to die, which is common for novices and rare for competent players. The recovery valve is now the last untested candidate that is novice-targeted by construction rather than by hope, and this experiment is the argument for building it.
I-028 VALIDATED threat pulse / the ladder points down before it points up

The recovery valve produces the engagement shape the ledger has chased since I-007 — panic heal drops take novice near-miss mean from 0.22 to 0.75, novice wins from 0/64 to 10/64 and novice survival from 3:35 to 5:07 — but the 'novice-targeted by construction' argument from I-026/I-027 is FALSIFIED: all three valve shapes breach the competent ceiling, panic worst at 47% -> 83%. Competent players go low too; they simply die there. Any low-HP trigger fires for both populations.

standard-64, n=64/cell, sim dd9ea8f, FINAL ren@yard t1, both skills. BASELINE novice 0/64, deathT p50 3:35, near-miss mean 0.22 (8/64 runs), clutch 0; competent 30/64 (47%), near-miss 0.19 (10/64), clutch 9. PANIC (heal chance x6 below 35% hp): novice 10/64 (16%), deathT p50 5:07 (+92s), near-miss mean 0.75 with 31/64 runs having one and a max of 6, clutch 0 -> 9; competent 53/64 (83%), near-miss 0.33. MERCY (2.5x iframes below 25% hp): novice 1/64, deathT p50 3:58, near-miss 0.47 (19/64); competent 49/64 (77%), clutch 25. WIND (one survive-at-1hp per night): novice 0/64, deathT p50 3:59, near-miss 0.42 (17/64); competent 38/64 (59%), near-miss 0.47. Novice benefit per point of competent inflation: panic 10 wins per 36 points, mercy 1 per 30, wind 0 per 12 — panic is by far the most novice-efficient and the only arm to produce real novice wins. The mechanism behind the falsification is visible in the baseline itself: minHpFrac p50 is 0 at BOTH skills, so both populations bottom out. The difference between them was never whether they go low, only whether they can convert once there — so a low-HP trigger converts for both.

Proposal: Two things, and the first is a correction to the lab's own reasoning. (1) 'Value falls as the player improves' was a construction argument and it does not survive contact with the sim, because near-death is not rare at skill 0.8 — I-022 already showed the iframe tune made competent runs genuinely uncertain, and this is the consequence. Any future novice-lever proposal must be measured against the competent cell rather than argued from first principles. (2) The valve is still worth building, but it needs a gate keyed to something competent players genuinely do not share. The measurement points at ONE: time. Novices die at 3:35 and competent players at 7:38, so a valve that only operates before roughly t=300 would be weighted toward novices by their own death distribution rather than by a property of their play. That is the next arm to measure — panic drops with a hard t<300 cutoff — and it is cheap, since panic is already the best-performing shape. Chris still owns which resource recovers and when; what this iteration adds is that the shape works, the engagement numbers are the best the lab has ever recorded, and the open problem is containment rather than effect.
I-029 VALIDATED threat pulse / the ladder points down before it points up

A time-gated recovery valve is containable, and it is the first change the lab has measured that improves engagement without moving win rates. Panic heal drops restricted to t<300 keep essentially ALL the novice benefit — survival 3:35 -> 5:08, near-miss mean 0.22 -> 0.53 with 27 of 64 runs getting one against a baseline 8 — while the competent cell moves 47% -> 50%, which is 0.50 binomial SE and therefore indistinguishable from flat. The ungated version cost +5.76 SE for the same survival gain.

standard-64, n=64/cell, sim dd9ea8f, FINAL ren@yard t1, both skills, src/sim.js micro-experiments restored byte-exact. Novice deathT p50 / near-miss mean (runs with one) / wins, then competent wins and delta in SE units (baseline p=0.469, SE=0.062 = 4.0 wins of 64): BASELINE 3:35 / 0.22 (8/64) / 0 of 64; competent 30/64 (47%). PANIC UNGATED 5:07 / 0.75 (31/64) / 10 of 64; competent 53/64 (83%), +5.76 SE. PANIC t<300 5:08 / 0.53 (27/64) / 0 of 64; competent 32/64 (50%), +0.50 SE. PANIC DECAY (x6 -> x1 across t=240..420) 5:07 / 0.59 (29/64) / 2 of 64; competent 35/64 (55%), +1.25 SE. Efficiency, near-miss gained per point of competent inflation: gate300 0.103, decay 0.046, ungated 0.015 — the hard gate is ~7x more efficient than no gate and ~2x more than the soft ramp.

Proposal: This is a real proposal for Chris rather than a diagnosis. The hard t<300 gate is the recommended shape, and note that its novice win count of 0/64 is a FEATURE, not a shortfall: heuristic 4 explicitly wants fresh-save FINAL to stay near 0%, so the ungated arm's 10 novice wins were arguably a violation of design intent rather than a success. What the gate buys instead is the thing heuristic 2 has been asking for since I-007 — the novice threat curve stops being binary. Near-miss mean more than doubles, the share of runs containing a near-miss goes from 8/64 to 27/64, and one novice death lands past 85% of the night where the baseline had none. Caveats to carry into any ship decision: t=300 is tuned to the CURRENT novice death distribution (median 3:35) and would need re-deriving if difficulty moves again; the decay variant is strictly worse on every axis measured and should be dropped; and this is one character (ren) on one map, so a second character should confirm before it ships. Chris still owns whether the recovering resource should be HP at all — this measures the HP-drop shape because it already exists in the game (D.healChance, 14 hp), not because it is the only option.
I-030 VALIDATED threat pulse / no dominant choice

The time-gated valve's containment holds across characters at competent skill (ren +0.50 SE, yui +0.00, sora +0.30) and its engagement gain reproduces on all three at novice, but it FAILS containment in one place: yui's novice win rate goes 17/64 -> 24/64 (+1.98 SE). She was already the ledger's novice outlier, and the valve amplifies exactly that outlier. The cutoff is a smooth tradeoff rather than a knife edge — novice near-miss 0.38/0.53/0.61 and competent +(-0.50)/+0.50/+1.50 SE at t=240/300/360 — so t=300 sits at a defensible knee.

standard-64, n=64/cell, sim dd9ea8f, yard t1, FINAL, both skills, src/sim.js micro-experiment restored byte-exact. COMPETENT containment (baseline -> t<300 wins of 64, delta in that character's own binomial SE): ren 30 -> 32 (+0.50 SE), yui 54 -> 54 (0.00 SE), sora 14 -> 15 (+0.30 SE). All flat. NOVICE engagement, near-miss mean and runs-with-one of 64: ren 0.22 (8) -> 0.53 (27), yui 0.22 (13) -> 0.41 (20), sora 0.41 (20) -> 0.53 (24); novice deathT p50 ren 3:35 -> 5:08, yui 4:57 -> 5:09, sora 4:18 -> 5:09. NOVICE WIN CONTAINMENT: ren 0 -> 0, sora 0 -> 0, but yui 17 -> 24 of 64 (+1.98 SE). Note yui's competent near-miss is 0.03 both arms with only 2 of 64 runs having one — at skill 0.8 she kites and never goes low, so the valve literally cannot fire for her, which is why her competent cell is perfectly flat. CUTOFF SWEEP on ren, novice near-miss (runs) / competent wins (SE): t<240 0.38 (20) / 28 (-0.50 SE); t<300 0.53 (27) / 32 (+0.50 SE); t<360 0.61 (31) / 36 (+1.50 SE). Novice benefit and competent cost both rise monotonically with the cutoff, so the mechanism degrades gracefully in both directions.

Proposal: The proposal survives with one honest caveat attached, and the caveat is a pre-existing problem rather than a new one. Ship shape is unchanged: hard t<300 gate, x6 boost below 35% HP, on the existing heal drop. What the confirm adds: (1) containment is character-general at competent skill, and for yui it is structural rather than lucky — she never drops below the trigger at 0.8, so the valve cannot fire for her at all. (2) The novice-win breach is yui-specific and amplifies I-012's known 75-point bare-kit spread and I-020's bimodality; the valve does not create that outlier, it feeds it. Chris's call on whether the designated novice-rescue character getting better at novice rescue is on-theme or is the thing that finally forces a yui rebalance. (3) t=300 is not a knife edge — at t=360 the novice gain is larger and the competent cost reaches +1.50 SE, at t=240 it is under-powered, so 300 is the knee and the result will survive a modest difficulty drift. Still outstanding before TUNED: a genuinely independent seed bank, and a second map.
I-031 VALIDATED lab hygiene / carry-forward

SOLO play is bit-for-bit unaffected by the LINE CHANGE commit (315ce64) AND by the in-flight uncommitted cloud-save change to src/save.js. 128 runs x 15 result fields = 1920 field comparisons against the pre-LINE-CHANGE baseline 2026-08-31-claude-tune-iframes-045 (simSha aaf2ed9): ZERO differences. Item #8 read 4 ("solo unaffected — confirm") is answered YES. Because the identity is exact against a CLEAN-surface baseline, it is itself proof that neither change consumes rng on the solo path — a dirty-surface run that reproduces a clean-surface run bit-for-bit cannot have been influenced by the dirt. Every SOLO baseline in the ledger therefore carries forward to 315ce64.

standard-64, n=64/cell, FINAL ren@yard t1, skills 0.25 and 0.8. skill 0.25: 0/64 wins, deathT p50 227s, kills p50 739, score p50 26995, nearMiss mean 0.33 — identical to baseline. skill 0.8: 19/64 wins, deathT p50 397s, kills p50 3807, score p50 209304, nearMiss mean 0.45 — identical to baseline. Per-seed diff over seed/kills/score/won/deathT/level/hitsTaken/domains/fragments/bestStreak/damage/dashesUsed/bossKills/minHpFrac/nearMisses: 0 of 1920.
I-032 OPEN lab hygiene / measurement validity

The lab CANNOT currently measure the LINE CHANGE, because the shipped bot cannot play it. Two structural blocks, both in src/bot.js: (1) botLevel is the ONLY caller of sim.swapCharacter, so a tag can only happen inside a level-up window — measured 773 of 773 tags across 6 club cells occurred at a level-up; (2) the elective cue at bot.js:15 is "ce > ceMax*0.85", but LINE_CHANGE.freshCostMult=0 exists precisely so a just-tagged student can cast at ZERO CE, and a tagged-in student measurably arrives at only 15-27% CE. The two conditions are near-disjoint, so only 5-16% of elective casts land inside freshWindow. Any tag-rate, fresh-window-uptake or club-vs-solo number taken with the current bot describes bot.js, not LINE_CHANGE. This is the I-013 failure one level up: the lab can now cast electives but still cannot ROTATE.

Exploratory scratch harness (no manifest — sim surface dirty), standard-16, n=16/cell, FINAL yard t1. Tags at level-up: yui+sora bare 82/82 and 137/137; yui+sora+SHIKI 108/108 and 160/160; ren+kaito+SHIKI 109/109 and 177/177. Casts inside freshWindow: 15/94, 39/272, 6/33, 32/291. Mean bench CE at tag: 0.15-0.27. Code: src/bot.js:15 and src/bot.js:104-122.
I-033 OPEN sink contract / no dominant choice

When the bot IS given a rotation policy, the LINE CHANGE delivers the first genuine club>parts effect the lab has measured — and the free entrance alone is worth nothing without it. Arm B (take the free cast whenever the window is open, no other change) moves win rate by -2 to +0 wins: it is inert. Arm C (B + tag out whenever the active student drops below 30% CE and a bench member is fuller) moves competent FINAL from 7/16 to 12/16 for ren+kaito and 3/16 to 9/16 for yui+sora — both of which now BEAT solo ren+SHIKI at 8/16, reversing I-018 club dilution. Novice stays 0/16 in every arm, which respects heuristic 4. Arm C tags roughly every 6.6s against a TAG_COOLDOWN of 7, i.e. it rotates as fast as the game permits, so this is an UPPER BOUND on the mechanic — but a reachable one, since it is the intended strategy played on cooldown rather than an exploit.

Exploratory scratch harness (no manifest — sim surface dirty), standard-16, n=16/cell, FINAL yard t1, elective kuroinu. ren+kaito 0.8: A 7/16 (177 tags, 291 casts, 32 fresh) -> B 6/16 (210, 327, 79) -> C 12/16 (1203 tags, 689 casts, 429 fresh), kills/min 439->439->453. yui+sora 0.8: A 3/16 -> B 1/16 -> C 9/16, kills/min 414->401->448. Both skills 0.25 cells stay 0/16 in all three arms. Solo ren+SHIKI reference: 8/16 at 0.8, 1/16 at 0.25.
I-034 OPEN no dominant choice

Matched solo reference cell for the club comparison — ren alone WITH SHIKIGAMI, so the club-vs-solo delta is not confounded by the elective. 28/64 (44%) at skill 0.8, 1/64 at 0.25. See I-034 in the club-renkaito-armA manifest for the comparison and I-033 for the rotation counterfactual.

standard-64, n=64/cell, FINAL ren@yard t1, elective kuroinu, CLEAN surface 9730eeb, gates PASS. 0.8: 28/64 wins, clutch 7, deathT p50 473s, score p50 237280. 0.25: 1/64 wins, clutch 1, deathT p50 239s, score p50 34325.
I-035 OPEN threat pulse (I-007) / sink contract

THE LINE CHANGE HAS TWO OPPOSITE CHARACTERS, SET BY MAP PRESSURE — and on the high-pressure map it is the first sighting of I-007’s white whale. Under the rotation counterfactual on the YARD, near-misses COLLAPSE (0.36->0.11 bank a, 0.28->0.06 bank b) and clutch wins fall (13->9), while win rate climbs to 66-75%: rotation deletes danger pre-emptively, an anaesthetic. On the GYM the identical policy holds near-miss FLAT (0.41->0.42) and nearly TRIPLES clutch wins (7->23) while win rate goes 14%->61%: rotation cannot prevent danger there, it provides an EXIT from it. One mechanism covers both — rotation is a recovery resource, and its character flips depending on whether map pressure regenerates danger faster than rotation smooths it away. Below the threshold it is an anaesthetic; above it, it is recovery-from-danger, which is exactly the ingredient I-007 called missing and the lab has chased for ~25 iterations without ever observing it.

Scratch counterfactual harness, n=64, skill 0.8, +SHIKIGAMI, sim 9730eeb clean. GYM standard-64 ren+kaito: arm A 9/64 (14%) nearMiss 0.41 clutch 7 k/min 345 -> arm C 39/64 (61%) nearMiss 0.42 clutch 23 k/min 429, +30 wins ~10.8 SE. YARD standard-64: 31/64 nm 0.36 clutch 13 -> 48/64 nm 0.11 clutch 9. YARD standard-64b: 32/64 nm 0.28 clutch 13 -> 42/64 nm 0.06 clutch 10. Throughput is the tell: arm C lifts gym kills/min +24% (345->429) against only +3-5% on the yard, so on the gym the binding constraint was CE-starved downtime and rotation removed it. LIMITS, stated deliberately: the gym side is ONE bank and ONE pairing, so this is OPEN; and arm C tags at ~94% of the cooldown-permitted rate, an upper bound no player sustains for a full run. The gym club-vs-solo gap under the SHIPPED bot (5%->14%) is only ~1.8 SE and is NOT claimed here.
I-036 VALIDATED no dominant choice

The yui+sora trap survives the LINE CHANGE untouched and is the lab’s largest standing heuristic-7 violation. At skill 0.8 with SHIKIGAMI, yui+sora scores 14% against ren+kaito’s 50% on the same independent bank — a 36-point spread at equal skill against heuristic 7’s 15-point tolerance, roughly 9 SE. Rotation does not rescue it: under arm C yui+sora reaches only 30% pooled, still below the SHIPPED ren+kaito club at 49% and below solo ren at 48%. So the pairing is bad in a way that more mechanic does not fix, confirming I-016 three mechanics later.

standard-64b n=64, FINAL 0.8, gates PASS: yui+sora 9/64, ren+kaito 32/64, solo ren 33/64. Bank a agrees: yui+sora 5/64 vs ren+kaito 31/64. Arm C pooled over both banks: yui+sora 38/128 (30%), ren+kaito 90/128 (70%).
I-037 OPEN the ladder points down before up / sink contract

BOARD #14 ANSWERED: the mid-game power curve does NOT meet the deep hours, and the ladder’s biggest step is between room 1 and room 2. With a FULLY PROGRESSED ~800 fragment save at competent skill (n=64, both skills, gates PASS): yard 33/64 (52%), gym 8/64 (13%), pool 3/64 (5%), boiler 2/64 (3%). The hour1->hour2 drop of 39 points is LARGER THAN THE ENTIRE REST OF THE LADDER COMBINED (13% -> 3%). Perks do not rescue the deep rooms: an exploratory 10-room sweep at n=16 shows the 800 loadout buying +62 points on the yard and +25 on the library but 0-13% everywhere from hour 5 on, with median death time moving only ~15-20s in the deep rooms (boiler 232->249s, roof 215->226s). So hours 5-10 are not gated on progression — they are close to unwinnable at any investment level the lab can express.

Recorded n=64/cell both skills, sim b78caf6, FINAL, ren, perks {reserve:4,honed:3,legs:2,flash:1} (=800 fragments, the ledger canonical high loadout): ladder-yard-high800 3/64 and 33/64; ladder-gym-high800 1/64 and 8/64; ladder-pool-high800 0/64 and 3/64; ladder-boiler-high800 0/64 and 2/64. Exploratory 10-room x 3-loadout sweep at n=16 skill 0.8 (fresh/mid270/high800 wins of 16): yard 3/7/13, gym 1/0/1, library 1/1/5, halls 2/1/1, cafeteria 0/1/2, pool 0/1/0, detention 0/1/0, boiler 0/1/0, lab 1/0/2, roof 0/0/1. MECHANISM CANDIDATE: the yard roster is an outlier in intro timing — wisp debuts at 420s on the yard but 110s on the gym, a 310-second jump, while every subsequent room moves wisp by <=20s (110,100,90,88,100,84,78,72,70). The ladder is therefore not a ramp: room 1 is gentle and rooms 2-10 all start near full pressure.
I-038 OPEN sink contract / the ladder points down before up

THE GOLD STAR IS EFFECTIVELY REACHABLE ONLY IN ROOM 1, which inverts the reward ladder. SCORE_STARS.gold is 330000. A progressed competent player scores 320595 at the median on the YARD (bonusMult 1.00, the lowest-paying room) but only 49681 on the GYM — a 6.4x collapse between adjacent rooms — 34044 on the pool and 38603 on the boiler. So the bonusMult ladder pays MORE as the night deepens (1.00 -> 1.65) while achievable score COLLAPSES, because the player dies at 5:13 instead of 7:55 and never accumulates the chain. The intended design (per the SCORE_STARS comment: gold wants perks, the club, evolutions and deliberate chain play, go gear up on other stages and come back) is inverted in practice: gearing up and moving deeper makes gold LESS reachable, not more.

Same four recorded n=64 cells, skill 0.8, 800 fragment loadout, score p50: yard 320595, gym 49681, pool 34044, boiler 38603. SCORE_STARS = {silver: 65000, gold: 330000} at src/config.js. Note only the yard median even approaches silver-times-five; gym/pool/boiler medians sit BELOW the 65000 silver threshold entirely.
I-039 OPEN no dominant choice / reward drip

BOARD #13 DIAGNOSIS CONFIRMED, AND STRONGER THAN STATED: the domain is not a breakthrough anywhere, it is a two-minute entitlement with no gradient across the whole ten-room night. 100% of runs reach a domain — every room, every skill, fresh or fully progressed, 768 runs, no exceptions. The FIRST domain lands at a median of 100-143s regardless of hour: yard 100.4s, gym 112s, boiler 113.2s at competent skill with 800 fragments. So the deep rooms hand out the first domain at essentially the same moment as room 1, and Chris’s intent that early hours should STARVE domain charge has no gradient to build on today. Worse for the diagnosis: the domain is not even the rare resource. At competent skill on the yard a progressed player casts 34.9 domains per run — roughly one every 13 seconds — against only 3.33 elective casts PER MINUTE. Domains outnumber electives about 1.3-to-1 per minute on the yard and the gap widens with skill, so the kit hierarchy is exactly inverted from the design intent: the supposed ultimate is the common verb and the elective is the scarce one.

Bespoke probe, standard-64, n=64/cell, sim b78caf6, ren, elective kuroinu, 12 cells = 768 runs. firstDomain p25/p50/p75 and domains-per-run: yard fresh 0.25 128.4/130.2/132.5 6.1/run; yard fresh 0.8 86.9/104.5/117.1 26.1/run; yard 800 0.8 85.8/100.4/117.8 34.9/run; gym 800 0.8 93.8/112/126.3 15.7/run; boiler 800 0.8 87.7/113.2/127.4 12.5/run. Runs reaching a domain: 100% in all 12 cells. Elective casts/min: yard 800 0.8 = 3.33, gym 2.07, boiler 1.88. Kills at first domain p50 ranges 126-336. NOTE the skill gradient is on VOLUME not ACCESS: novices get their first domain only ~30s later than competent players but end with 6.1 vs 26.1 casts, so any starve-the-early-domain tune should target the recharge rate, which is where the skill gap actually lives, rather than the first unlock, which is nearly skill-invariant.
I-043 OPEN the ladder points down before up / sink contract

THE TEN-ROOM NIGHT IS A SAWTOOTH, NOT A RAMP, AND ROOM 2 IS THE SECOND-HARDEST ROOM IN THE GAME. Full ladder re-measured with a properly kitted progressed save (800 fragments AND a live elective, which I-037 lacked), n=64/room, both skills, gates PASS on all ten. Competent clear rates by hour: yard 69%, gym 8%, library 27%, halls 16%, cafeteria 23%, pool 5%, detention 8%, boiler 13%, lab 14%, roof 3%. Ranking rooms by measured easiness against their intended order gives Spearman rho 0.64 — the night is only loosely ordered. Three rooms are badly out of place: GYM plays 5 positions too hard (hour 2, behaves like hour 7), POOL 3 too hard (hour 6, behaves like hour 9), and LAB 4 too EASY (hour 9, behaves like hour 5). The player therefore hits the games second-worst wall at hour 2, finds hours 3-5 EASIER than the wall they just cleared, walls again at the pool, and then finds hours 8-9 easier again. Only yard, halls and roof sit where they were designed to sit.

standard-64, n=64/cell, both skills, sim fa72528, FINAL, ren, perks {reserve:4,honed:3,legs:2,flash:1}, elective circuit. Manifests 2026-08-31-claude-ladder2-<room> for all ten rooms. Wins of 64 at skill 0.8: yard 44, gym 5, library 17, halls 10, cafeteria 15, pool 3, detention 5, boiler 8, lab 9, roof 2. At skill 0.25 the whole ladder is 0-4/64 (0-6%), i.e. effectively flat at zero past room 1, so this is a competent-player finding. SUPERSEDES I-037: that pass passed no --elective, so its progressed save had perks but no elective — worth 11 wins of 64 on the yard alone (33 vs 44). The qualitative claim of I-037 (room 1 far above the rest) survives; its ordering claim did not exist and its numbers understated a kitted player.
I-044 OPEN sink contract

THE STAR ECONOMY IS INVERTED AND MOSTLY UNREACHABLE: eight of the ten rooms sit BELOW the silver threshold at the median, and no room reaches gold at the median. SCORE_STARS is {silver 65000, gold 330000}. Median run score at competent skill with a full kit, by room: yard 323436, library 85704, halls 56206, lab 54857, gym 47510, cafeteria 47023, boiler 37964, detention 34993, pool 31925, roof 26763. Only the YARD (bonusMult 1.00, the lowest-paying room) and the LIBRARY clear silver at the median; the yard alone comes near gold, falling just 6564 short at p50 so roughly half of yard runs beat it. Meanwhile bonusMult rises 1.00 -> 1.65 across the night. So the fragment reward points UP the ladder while achievable score points DOWN it, and the SCORE_STARS comment intent (gold wants perks, the club, evolutions, go gear up on other stages and come back) is inverted in practice: gearing up and moving deeper makes gold LESS reachable. The roof, the finale and highest-paying room, scores 12x below gold.

Same ten manifests, skill 0.8 score_p50. Supersedes I-038, which measured only four rooms and without an elective. Note the mechanism is survival time, not scoring rate: the yard median run lasts to 7:30 while the roof median dies at 3:56, and score is chain-multiplied, so the deep rooms lose the multiplier before it compounds.
I-045 OPEN 9 (sink contract) / 4 (the ladder points down before up)

Maxing every perk in the game costs exactly 2035 fragments (reserve 500 + honed 615 + legs 265 + pockets 195 + owl 340 + flash 120). Median "fragments spent" is 2035 in ALL SEVEN cells of this batch — every skill, both policies. Per-player: 48/48 players across skills 0.25/0.5/0.8 maxed the entire tree, and all 48 did it while still in the GYM, room 2 of 10. Median run at buyout: 8 (0.25, range 4-12), 4 (0.50, range 4-7), 6 (0.80, range 4-8). This is a ceiling effect, not an estimate — no sampling caveat applies.
I-046 OPEN 4 (perk-invested competent FINAL should sit near 50%)

On the played ladder, FINAL is only ever attempted in rooms 7-10, and by then every player carries an identical fully-maxed 2035-fragment kit (see I-045), so these cells are both period-matched and kit-matched. At skill 0.8: detention 0% (0/24), boiler 10% (2/21), lab 20% (3/15), roof 2% (3/135) — pooled 8/195 = 4.1%. At skill 0.5: detention 0% (0/12), boiler 6% (1/16), lab 7% (2/27), roof 5% (3/64) — pooled 6/119 = 5.0%.
I-047 OPEN 6 (deaths must be narratable — never an anonymous mid-night wall)

Greedy-policy cells only, win% by room x period, matched at MIDTERM and (per I-045) matched on a fully-maxed kit from room 3 onward. Skill 0.8: pool 12% (12/97) against detention 48% (12/25), boiler 60% (12/20), lab 48% (12/25), roof 35% (12/34). Skill 0.5: pool 10% (12/118) against detention 18%, boiler 16%, lab 15%, roof 14%. Pool is also the modal stall room under breadth (7/16 at 0.5, 9/16 at 0.8) and with an elective at 0.5 (9/16).
I-048 VALIDATED (was OPEN) 7 (no dominant choice) / 6 (narratable difficulty)

FINAL win% (attempts), completionist routing — the only policy that plays a gym FINAL. skill 0.25: family a yard 14% (91) -> gym 2% (132); family b yard 7% (147) -> gym 1% (99). skill 0.5: family a yard 48% (33) -> gym 11% (113); family b yard 46% (35) -> gym 13% (90). skill 0.8: family a yard 52% (31) -> gym 15% (92); family b yard 55% (29) -> gym 18% (84).
I-049 OPEN — revises I-044 9 (sink contract: a concrete tease)

Gold stars (p50 rooms at >=330000): completionist 4 at both skill 0.5 and 0.8; greedy 0 at every skill; greedy full-shop 0.8 = 2. Stars record the MAX score over attempts, and completionist grinds each FINAL 90-113 times where greedy attempts it a handful of times or not at all.
I-050 VALIDATED 2 (threat pulse)

The time-gated panic valve is live in src/sim.js (commit 3ae4e8a) and its measured effect matches the I-029 sketch. On standard-16 FINAL at sim fa72528+valve: novice near-miss mean 0.88 with median 1 — the first time heuristic 2 has ever had a pulse — against a ledger-long baseline of ~0.2. Novice deathT p50 5:17. Competent near-miss 0.44, 2/16 wins.

n=16/cell, both skills, gates PASS, manifest 2026-08-31-claude-valve-shipped-verify. Implementation multiplies the existing per-kill heal roll rather than adding one, so rng consumption is unchanged; a unit test asserts a closed valve is bit-identical to no valve. 76/76 tests green.

Proposal: Mark I-028, I-029 and I-030 TUNED — the proposal they carried is now shipped. Next: re-baseline the ladder, since the valve changes early-room survival and every night.mjs number predates it. The late-night surround (board #24, I-039) is deliberately untouched: the valve is gated shut past 300s.
I-051 OPEN lab capability

night.mjs buy() writes wallet.step and wallet.chars, but the runNight call (night.mjs:156-161) passes only `bonuses` (perks) and `elective`. Effective: perks 2035 + first elective bought 450 = 2485. Inert: step training 1720 (runner drops `steps`), other two electives 1100 (bought, never equipped), characters 450 (`character: CHAR` fixed to ren).
I-052 OPEN 4 (the ladder points down before up)

Paired A/B, same driver, same seeds, single knob: whether step training reaches the sim. Arm A = shipped runner (inert); arm B = scratchpad runner copy with steps/shiki passed through. At skill 0.5: pool win% 13% (162 attempts) -> 29% (110); runs p50 32 -> 51; silver p50 5 -> 10; bank left p50 2522 -> 11047; cleared 0/16 -> 0/16. At skill 0.8 the effect is marginal: cleared 3/16 -> 4/16 (delta 1 player), gold p50 2 -> 4.
I-053 VALIDATED lab capability

src/bot.js:88 — `out.dash = skill > 0.3 && ...`. The skill gate is the FIRST conjunct, so at skill <= 0.3 the branch short-circuits before it even consumes rng(). All three STEP_TRAINING upgrades are dash upgrades (stride = length, tempo = recharge, echo = +1 charge). Observed: the skill-0.25 cells of arms A and B are IDENTICAL on all 12 reported statistics — 0/16 cleared, rooms p50 4, runs p50 26, win rate 0.28, spent 4655, bank 325, bought out 3/16, gold 0, silver 3, and all five per-room win% on 39-174 attempts each. A probe confirms novices really do buy the upgrades: 130 of 156 runs held a non-empty step wallet, up to {stride:3, tempo:3, echo:2}. They pay 1720 fragments for nothing.
I-054 OPEN 6 (deaths must be narratable) / 2 (threat pulse)

Across six cells x 20 runs, "fully ringed" (no unoccupied 15-deg sector within 8u) occurred in 0.00% of samples in every crowd bucket, with a single 0.18% exception at crowd 31+ in one cell. At the median death the widest corridor was still 45 deg open (p25 30, p75 60), and 0% of death windows were ever fully ringed. Crowd within 8u at death: p50 35-36. The killer is CONTACT STACKING: in the 1.5s before death the peak number of enemies simultaneously within contact range is p50 7-8, p90 11-13, max 30-35. With PLAYER.touchCd = 0.5 applied PER ENEMY, 7-8 attackers is roughly 14-16 damage events per second.
I-055 OPEN 2 (threat pulse) / 6

Cadence is the finding: median 15.8-21.4s between consecutive casts across cells, and at death the domain charge sits at p50 0.61-0.84 in EVERY cell under EVERY policy — the button is dark when the player dies. Chain (0.837) and panic (0.77) barely differ at death, so the binding constraint is refill, not hoarding discipline. Casts per run 13.5-20.5. Each cast wipes p50 48-57 enemies inside the 26u radius (p90 112-122).
I-056 OPEN lab capability

scripts/playtest-runner.mjs threads opts.steps/opts.shiki/opts.electives into new Sim(...) (closing I-050s missing passthrough), and casts sim.castShikigami() every tick using the identical policy game.js uses for its own bot mode (hasShiki && no active summon && cooldown clear && enemies.length > 30). A raw-Sim probe confirms 8 shikigami casts across one 720s FINAL run that the old runner would have reported as exactly 0, by construction, forever. Closes board #17 and #21 (5 instances of the same structural pattern: a verb ships wired to game.js and nowhere else). Fix is written and tested (80/80) but sits UNCOMMITTED in the tree pending Chris — this loop does not commit without being asked.

2026-09-01-claude-steps-shiki-live-final (this manifest); scripts/playtest-runner.mjs, scripts/insight.mjs diffs
I-057 OPEN 4 (ladder points down before up) / 9 (sink contract)

FINAL, ren@yard, maxed perks + elective + full step training + shikigami: skill 0.8 win rate 100% (16/16, 6 clutch), up from a 75% (12/16) perks-only comparison on the same seeds/char/map. First level-up drops 38.6s -> 25.4s, hits taken 45 -> 39, minHP p50 0.461 -> 0.561. Skill 0.25 (novice) reaches 38% (6/16) with the full kit. Answers the decisive question I-050/I-051 left open: the surplus is a genuine economy bug, not evidence of an unfixable difficulty floor — I-046s 5.6% pooled maxed-perks FINAL result was measuring a kit missing 30% of its purchased power. Gates FAIL on clean-sim only (the fix itself is what makes the tree dirty); needs a rerun once the fix lands to pin simSha properly, and this reopens I-045/I-046/I-051/I-052 for a proper re-baseline.

2026-09-01-claude-steps-shiki-live-final (this manifest, gates FAIL — dirty sim, expected)
I-058 OPEN 3 (dead air) / measurement validity — every FINAL/MIDTERM claim on sim>=21dd615 was inflated by this

Board #29 confirmed and closed in code: a front-seeking pull toward sim.currentAng after 3s unthreatened closes most of the CURRENT camp exploit. FINAL skill 0.8 win 10/16->7/16 (62%->44%, back near the pre-CURRENT 246f428 baseline of 47%); MIDTERM skill 0.8 win 16/16->12/16 (100%->75%) and dead-air 16%->4%.

standard-16, n=16, ren@yard t1, sim 3653be1 (bot.js patch uncommitted, sim DIRTY by construction — the fix itself is what dirties the tree, same as I-056). Before: 2026-09-01-claude-antikite-before-final (FINAL 0.25 1/16, 0.8 10/16 dead-air 4%), 2026-09-01-claude-antikite-before-midterm (MIDTERM 0.25 11/16, 0.8 16/16 dead-air 16%). After (this manifest + 2026-09-01-claude-antikite-after-midterm): FINAL 0.25 1/16 (unmoved — novices do not camp effectively at sense=8), 0.8 7/16 dead-air 4% (unmoved, FINAL dead-air was already low); MIDTERM 0.25 11/16->8/16, 0.8 16/16->12/16 dead-air 16%->4%. near-miss mean also rose on FINAL 0.8 (0.19->0.25), consistent with the bot re-entering danger instead of avoiding it outright.

Proposal: Land via lab/harness (board #29 addVerdict + branch push). Once merged, re-baseline every FINAL/MIDTERM finding measured on sim 21dd615..3653be1 — that window's win rates and dead-air numbers describe a bot exploit, not the game. Recommend n=64 confirmation before promoting to VALIDATED; this is one bank, one sha.
I-059 OPEN 4 (ladder points down before up) / 8 (quickie contract)

Full re-baseline on the merged, CLEAN sim bbe6467 (Chris's directive after landing the antikite fix): QUIZ 100%/100% (0.25/0.8, was 63%/100% at 246f428), MIDTERM 50%/75% (was 2%/91%), FINAL 6%/44% (was 0%/47%). FINAL 0.8's 44% lands almost exactly back on the pre-CURRENT 47% baseline; MIDTERM 0.25's 2%->50% is the largest single delta in the table.

standard-16, n=16 each, ren@yard t1, sim bbe6467 (clean, gates PASS on all three periods — 2026-09-01-claude-rebaseline-bbe6467-{quiz,midterm,final}). This closes I-058's clean-sim requirement (bit-identical to the dirty-tree numbers from the same session, so nothing else rode the merge). Multiple mechanics landed between 246f428 and bbe6467 (density taper, Edge economy, recovery valve, THE CURRENT, the antikite fix) — this table is the net effect of the whole chain, not attributable to any one commit. One bank, one sha; gate 6 (second bank) is next.

Proposal: Treat bbe6467 as the new reference sim for every future finding. MIDTERM novice moving 2%->50% deserves its own investigation before it is trusted (which mechanic drove it, and does heuristic-4's ladder shape still make sense with MIDTERM this close to FINAL's difficulty). QUIZ at 100%/100% may be fine under heuristic 8 (win is a given, score is the hook) but is worth a score-variance check.
I-060 OPEN measurement validity — same family as I-019's novice-median bimodality, possibly extending to competent FINAL win rate

I-059's FINAL skill-0.8 win rate does NOT confirm across seed banks: standard-16 gave 44% (7/16), standard-16b gives 75% (12/16) — a 31-point spread (~2.5 SE for n=16 Bernoulli), pooled 59% (19/32). This fails gate 6's 'agrees' bar for VALIDATED. FINAL 0.25 also moved (6%->19%) but both are low-n. QUIZ and MIDTERM-0.25 agree tightly between banks (100/100 vs 94/100, 50% vs 50% exactly); the disagreement is specific to FINAL, and sharper at skill 0.8.

standard-16 (2026-09-01-claude-rebaseline-bbe6467-final): FINAL .25 1/16, .8 7/16. standard-16b (this manifest): FINAL .25 3/16, .8 12/16. Same sim bbe6467, both gates PASS (clean, both skills, sha pinned) individually — only gate 6 (cross-bank agreement) fails.

Proposal: Do not treat either single-bank FINAL-0.8 number as the game's win rate; use the pooled 59% (19/32) as the working estimate until a standard-64-scale pool exists. Worth checking whether FINAL competent is bimodal the way novice medians are (I-019) — if a sizeable minority of seeds snowball via early domain/elective timing, a 16-seed sample would land wherever the mode split falls, exactly as I-019 describes for novice kills/domains.
I-061 OPEN 2 (threat pulse)

At skill 0.8 (full shop, ren@yard FINAL, n=16), t>=400 vs t<400: dash rate rises 4.34/min -> 18.56/min (+328%), domain 0.69/min -> 2.37/min (+246%), elective 0.46/min -> 1.99/min (+331%), shiki 0.41/min -> 0.63/min (+54%), while held-fire duty cycle FALLS 0.70 -> 0.49 (-30%). Dash is ~8x more frequent than domain in both windows and stays the plurality of discrete actions (74% of dash+elective+shiki+domain casts early, 79% late) -- domains share of that same total is flat (11.6% -> 10.1%). At skill 0.25 dash is structurally 0 in both windows (bot.js gates dashing on skill>0.3, per I-053), so the late-game shift there is fire -22% (0.77->0.57) with domain/elective/shiki all roughly doubling from a low base.

2026-09-01-claude-verbmix-final-early-late (this manifest), sim 9d12b3e, standard-16, n=16/cell, both skills.

Proposal: The literal board #26 prediction (mix collapses toward move+domain specifically) is not supported at competent skill -- domain does not gain share, dash does, and elective/shiki also scale up rather than disappearing. Chris perception of "just dodge until domain refills" is better explained by dash volume (1 cast every ~3.2s late-game, an order of magnitude above any other verb) than by domain dominance. Do not file heuristic 10 (one-verb solved run) off this data -- it is refuted, not confirmed. If the feel report still stands, the next falsifying test is whether fire+dash together (the only two verbs available at novice-gated dash) crowd out the OTHERS proportionally at t>500 specifically, closer to the true end of the night, rather than the t>=400 bucket used here.
I-062 OPEN 5 (CE band) / 2 (threat pulse)

HP<35% crisis (full-shop ren@yard FINAL): competent (0.8) the elective (45 CE) is castable in only 4.0% of crisis ticks (70/1735, affecting 4/16 runs); novice (0.25) 15.4% (3452/22379, 14/16 runs -- more crisis exposure because novice runs spend far longer in danger before dying). The high-density 7+-simultaneous-contact crisis (I-054s stacking metric) is rarer (61 ticks competent, 1 tick novice, ~2s and ~0.03s of aggregate exposure across 16 runs respectively -- OPEN on a thin sample) but castable in exactly 0% of it in both cells. This directly explains why I-055 found the panic button (domain) is the reflex and the elective sits unloaded at death: CE is what both compete for, and by the time a fight is bad enough to count as a crisis, CE has usually already been spent on firing.

2026-09-01-claude-ce-at-crisis (this manifest), sim 9d12b3e, standard-16, n=16/cell, both skills. Contact-crisis cells are OPEN on a thin sample (61 and 1 ticks) and want a longer/denser bank before being cited on their own; the HP-crisis result (1735-22379 ticks/cell) is not sample-starved.

Proposal: Board #27s hypothesis holds directionally at both skills and is confirmed under the boards own ~10% bar at competent skill. Not a tuning proposal by itself (that would need to name a knob -- CIRCUIT cost, CE regen, or a crisis-triggered CE rebate -- and predict a size), but it upgrades I-055 from OPEN description to OPEN mechanism: the domain is not preferred out of habit, it is the only verb whose price is not CE. Worth a Chris-facing idea: should a crisis-priced discount exist for the elective specifically (paralleling the recovery valve, which already does something similar for loot), or is CIRCUITs 45 cost simply too close to a full bar for a panic button and wants a flat reduction? Either is a #12-style design question, not a measurement this loop can resolve alone.
I-063 OPEN no dominant choice / sink contract

Moved the existing dry(<35% CE)/loaded(bench domain ready) tag decision out of botLevel (level-up-only, per I-032: 773/773 tags landed at a level-up) into botInput, which runs every tick; swapCharacter is self-gated on TAG_COOLDOWN so this is safe. Also wired the freshT/freshCostMult free-cast window into the elective cast policy (I-032 point 2). Committed src/bot.js directly per playtest/OWNERSHIP.md self-land rules (npm test 83/83, contract-check green), sim moved bbe6467-lineage 9d12b3e -> 3596e62. Clean-sim ren+kaito+SHIKIGAMI FINAL skill 0.8: 11/16 (69%), matching I-033/I-034s exploratory arm C (70-75% pooled n=128) against the old shipped bots 48% (I-034) -- reproduces bit-for-bit against the same-day dirty-tree pre-commit run (11/16, 0/16 both skills), so nothing else moved with the commit. Skill 0.25 stays 0/16, consistent with I-033 (rotation is a competent-skill lever by construction, respects heuristic 4).

2026-09-01-claude-club-renkaito-rotation-clean (this manifest, gates PASS); 2026-09-01-claude-club-renkaito-rotation-live (dirty pre-commit cross-check, same numbers); commit 3596e62.

Proposal: CLOSES board #12 and answers I-032/I-033s open question: the lab can now measure LINE_CHANGE honestly without a harness override, on the shipped bot, for both headless play AND the title-screen attract mode (bot.js is shared). Everything measured on club configs before this commit (any FINAL/MIDTERM party>1 number in the ledger, principally I-018/I-033/I-034s exploratory-harness figures) used either arm-A shipped-bot behavior or a harness-only override and should be treated as superseded going forward -- re-baseline club cells opportunistically rather than as a dedicated iteration, since the direction (club now beats a good pairs solo reference) is already confirmed. Not a tuning proposal: the three LINE_CHANGE constants (freshWindow, freshCostMult, benchLullMult) are now honestly testable and are queue-able for the tuner, but this loop is not naming a number to change.
I-064 OPEN 5 (CE band 27-40%, ceiling not floor) / 4 (ladder points down before up) / 7 (dominant choice, but at the mechanic level: firing no longer competes with specials for anything)

The CE-split (9b962b1: weapon free, CE earned by fighting) pins the cursed-energy pool near its ceiling at every period measured, not just under pressure, and win rates jumped hard everywhere except QUIZ (already at ceiling): MIDTERM 0.25 50%->81% (8/16->13/16), MIDTERM 0.8 75%->100% (12/16->16/16), FINAL 0.25 6%->12.5% (1/16->2/16, tuner ce-split-after), FINAL 0.8 44%->93.8% (7/16->15/16, tuner ce-split-after). CE avg sits at 96-100% median in every cell this iteration measured (QUIZ 100%/97%, MIDTERM 100%/96%).

standard-16, n=16, ren@yard t1, bare kit (perks={}), sim 9b962b1 clean. QUIZ: 2026-09-01-claude-rebaseline-9b962b1-quiz (0.25 16/16 CE100%, 0.8 16/16 CE97% -- both already ceiling pre-split so no win-rate delta visible, but CE pinning is new). MIDTERM: 2026-09-01-claude-rebaseline-9b962b1-midterm (0.25 13/16 CE100%, 0.8 16/16 CE96%) vs pre-split standard-16 baseline in the ledger table (0.25 8/16, 0.8 12/16). FINAL: tuner manifests 2026-09-01-claude-ce-split-before (0.25 0/16, 0.8 12/16) / 2026-09-01-claude-ce-split-after (0.25 2/16, 0.8 15/16, 93.8%) -- reused rather than rerun, same bank/sha, clean tree, both skills present per gate 2.

Proposal: The commit message itself named this exact failure mode ("the naive version backfires -- with nothing draining it the pool pins at 100% and specials become spam") and believed perKill/perDamage earn-rates plus the regen-floor cut (11->1.5) fixed it. This re-baseline says it did not: the pool still pins near-full at every period this run touched. Bare-kit competent FINAL at 93.8% blows past heuristic 4's ~50% perk-invested target -- the game may now be trivialized for competent players well before they spend a single perk. Next: (a) a bespoke tick-level script logging ceFrac over time to see whether it EVER drains meaningfully or is monotonically saturating, (b) check whether perKill/perDamage rates are simply too generous relative to spend rate now that spend (weaponCostMult=0) is zero for the base attack, (c) do NOT treat this as VALIDATED yet -- one bank, one sha, gate 6 needs a second bank/sha agreement.
I-065 OPEN 5 (CE band 27-40%, tune the ceiling not the floor)

The CE pool never enters the heuristic-5 target band (27-40%) at any period or skill measured -- 0% of ticks fall below 40% everywhere, including the worst single run (43% minimum, FINAL skill 0.8). Novice CE is not merely high, it is INERT: min-ever-frac=1.000 across all 24 novice runs (3 periods x 8 seeds) because the bot never dashes below skill 0.3 (I-053) and nothing else in the bare kit spends CE, so passive regen alone holds it pinned at the ceiling the entire night. Competent CE does move -- dash spend (8810 CE across 8 FINAL runs) roughly matches what passive regen alone would supply over the same window (8640) -- but regen is fast enough (a full dash-cost of 10 refills in about 6s at the 1.5-1.7/s passive rate) that the pool spends almost no time away from ceiling even under the heaviest dash usage this lab has measured (I-061: 18.56 dashes/min at skill 0.8 late-game).

scratchpad/ce-trace.mjs, exploratory-8 seed set (prefix of standard-16), n=8/cell, bare kit, ren@yard t1, sim 9b962b1 clean. Full per-cell numbers in this manifest's cells[].summary. Per-run minimum CE fraction at skill 0.8: QUIZ 0.65-0.81, MIDTERM 0.48-0.72, FINAL 0.43-0.72 -- deeper periods dip lower (more sustained dashing) but none cross below 40%.

Proposal: This is now a mechanism, not just a symptom: ENERGY.regen=1.5/s (was 11 when CE was ammo) is still generous relative to the only two spend sinks left (dash 10, electives ~30-45, both cooldown-gated) once the weapon stopped drinking from the pool. Two independent levers could open the band without reverting the free-weapon design: (a) cut ENERGY.regen further (rough math: needs roughly 3-5x reduction, i.e. ~0.3-0.5/s, to let dash spend outpace income during a sustained dash streak), or (b) raise dashCost relative to max so a single dash is a bigger bite. Novice is the harder case -- CE there is not merely comfortable but literally never touched, since the bot is dash-gated below skill 0.3 (I-053) -- so any regen cut needs a companion novice-side spend (or the CE bar should just not be a novice-legible number at all, since nothing in the bare novice kit ever consumes it). Do NOT treat as VALIDATED: one bank (n=8, below gate-1's n>=16), one sha. Needs a confirming rerun at n>=16 before it moves past OPEN, and a second question this does not answer -- does a maxed perk kit (more electives, more dash charges) change the picture materially from bare kit?
I-066 OPEN 4 (ladder points down before up) / 5 (CE band)

The CE-split (9b962b1) win-rate jump generalizes to club (party>1) play, not just solo: club ren+kaito FINAL 0/16->4/16 (0%->25%) at skill 0.25, 11/16->15/16 (68.8%->93.8%) at skill 0.8, on the same rotation-every-tick bot (board #12/I-063) both before and after -- the delta is attributable to the CE-split alone. CE avg still pins 94-97% median with a 2-member party sharing/rotating the same pool, matching I-065's solo pattern.

standard-16, n=16, ren+kaito party, shiki={ren:true,kaito:true}, yard t1 FINAL, bare kit, both skills, sim 9b962b1 clean. Before (sim 3596e62, CE-split not yet landed): 2026-09-01-claude-club-renkaito-rotation-clean (0.25 0/16, 0.8 11/16 68.8%, CE avg 63.8%/45%). After (sim 9b962b1, this iteration): 2026-09-01-claude-rebaseline-9b962b1-club-renkaito-final (0.25 4/16 25%, 0.8 15/16 93.8%, CE avg 97%/94%). Same seed bank, same bot rotation policy, only the CE mechanic changed between the two manifests.

Proposal: Competent club FINAL at 93.8% is now roughly tied with solo competent FINAL (I-064: 93.8%) -- the club no longer trades survivability for anything at the top end, which may flatten I-018's dilution finding (a mixed-strength club dilutes the stronger player) if CE was part of what made solo the stronger choice. Worth a dedicated club-vs-solo comparison once the CE tune (I-065's proposal) actually ships, since re-measuring against a moving target now would need redoing anyway.
I-067 OPEN 6 (narratable deaths / a dramatic finale is the explicit design intent) -- the new content is currently unreachable by this lab's default test population

THE HELD BELL (a3a75ba, committed this session) never triggers in either bare-kit ren@yard baseline population, at either skill: across all 32 FINAL runs measured (16/16 skill 0.25, 16/16 skill 0.8) every run either ends at exactly t=720 (nightLen, no overtime -- dawn fired cleanly with bossKills already at the scheduled max of 4) or the player dies before t=720 with bossKills<4. Zero runs show t>720, which is the only observable signature of a boss-held bell (overtimeSec exists precisely for this). Win rate and every other metric are consequently bit-for-bit identical to the pre-HELD-BELL CE-split baseline (I-064): FINAL 2/16 (12.5%) / 15/16 (93.8%) at 0.25/0.8.

standard-16, n=16/cell, both skills, ren@yard t1, bare kit (perks={}), sim a3a75ba clean (committed mid-iteration; an earlier dirty-tree read at 9b962b1-uncommitted matched bit-for-bit, confirming this is not a fluke of the moment it was measured). Per-run t/bossKills/won inspected directly from raw dumps 2026-09-01-claude-rebaseline-a3a75ba-final--skill-{0-25,0-8}.json -- competent bare kit kills all 4 scheduled bosses (or the player) well ahead of dawn in every single run; novice either kills all 4 or dies first, same pattern.

Proposal: This is a coverage gap, not necessarily a game bug -- the finale may be reachable at a slower/weaker build (fewer perks, a party that under-kills bosses, a higher stage tier with tougher bosses, or a shorter effective night from a mod) that this lab's default bare-kit sweep does not represent. Two ways to actually observe it: (a) sweep boss HP/spawn timing directly via a config micro-experiment (snapshot BOSS_INTERVAL or boss HP up, remeasure, restore) to force a boss to still be alive at t=720 and confirm the sunburn/CE-bleed/no-floor mechanics behave as designed once reached; (b) ask Chris what population he expects to actually encounter it in live play -- if it's rare in the lab's bare/competent test population it may be similarly rare for real players building toward FINAL, which would undercut the finale as a moment players regularly experience.
I-068 OPEN 7 (no dominant choice) / 5 (CE band) / 4 (ladder points down before up)

The yui+sora 'trap' pairing (I-036: the lab's largest standing heuristic-7 violation, 14% vs ren+kaito's 50% at skill 0.8) is gone on the current sim -- yui+sora FINAL is now 1/16 (6.25%) novice, 16/16 (100%) competent, standard-16, bare kit, sim a3a75ba. Competent yui+sora (100%) is now equal to or ABOVE competent ren+kaito (93.8%, I-066) and solo ren (93.8%, I-064). CE avg still pins ~98-100%. The old 36-point spread has not narrowed toward the middle, it has been overrun: both the 'good' and the 'bad' pairing now sit at or near the win-rate ceiling.

standard-16, n=16, yui+sora party, bare kit (perks={}, no elective), yard t1 FINAL, both skills, sim a3a75ba clean. This iteration: 2026-09-01-claude-rebaseline-a3a75ba-club-yuisora-final. Historical: I-036 (2026-08-31-claude-club-yuisora-armA-64b, standard-64 + independent bank, pre-CE-split, pre-rotation-every-tick-fix) measured 9/64 (14%) yui+sora vs 32/64 (50%) ren+kaito at skill 0.8 -- a bank/n mismatch against this iteration's n=16, flagged explicitly, but the direction and magnitude of the change (14%->100%) is far too large to be sampling noise at either n.

Proposal: This reframes the entire "no dominant choice" heuristic under the current CE economy: it is not that pairings are now balanced against each other, it is that CE saturation (I-065) has pushed essentially everything to the ceiling regardless of underlying pairing quality, so heuristic 7 reads as satisfied for the wrong reason. Once the tuner's CE-band fix (I-065's proposal) actually cuts regen/raises spend, this comparison should be re-run -- if yui+sora's underlying weakness (whatever made it lose 86% of the time before) is still there mechanically, it should resurface once CE stops being an unlimited resource propping up weaker builds. Until then this reads as a symptom of I-064/I-065, not an independent balance fix, and should not be read as "the pairing problem is solved."
I-069 OPEN 4 (ladder points down before up) / 7 (no dominant choice, novice end)

Not everything is saturated by the CE-split -- solo sora (the lowest-hp, highest-speed 'glass cannon' kit) is 0/16 (0%) novice FINAL, the only build this whole directed run found that still fully loses. Competent sora is 15/16 (93.8%), in line with every other competent cell measured this run (I-064 ren solo 93.8%, I-066 ren+kaito 93.8%, I-068 yui+sora 100%). So the CE-split's trivialization (I-064/I-065/I-066/I-068) is specifically a COMPETENT-skill effect -- novice play still shows real, large, character-dependent variance: sora 0% vs ren 12.5% (I-064) vs the ren+kaito club 25% (I-066) vs the yui+sora club 6% (I-068).

standard-16, n=16, solo sora, bare kit (perks={}), yard t1 FINAL, both skills, sim 3dc0c1d clean (a trivial commit landed between iterations -- Held Bell toast/audio polish, 3-line sim.js diff adding a boss name to an emit payload only, no logic/rng change, confirmed via git show). 2026-09-01-claude-rebaseline-a3a75ba-solo-sora-final.

Proposal: This sharpens where the tuner should actually look: the CE-split proposal in I-065 (cut ENERGY.regen, raise dashCost) targets competent play, where the problem clearly is. It should NOT touch novice by construction if built around dash/elective spend (I-065: novice CE is inert, the bot never spends it below skill 0.3) -- so a regen cut alone should not make sora\u2019s novice wall any worse, but it is worth an explicit check once that tune ships, since 0% is already the floor and any regression there has no room to hide in noise.
I-401 OPEN

hpLateDouble 100->70 (enemy HP x1.87 -> x2.44 at First Bell), fresh FINAL standard-16 vs 2026-08-30-claude-rebaseline-ec721ce-final: wins identical in all four cells (0/16, 5/16, 8/16, 13/16), deathT p50/p75 identical, near-miss mean unchanged at 0.13; only score p50 dips ~3% at 0.6/0.8. Prediction was -2 to -4 wins at 0.6; measured zero.
I-402 OPEN

dmgRampSec 600->520 (~+6% enemy dmg in the mid-night death window), fresh FINAL, both banks, paired per-seed vs baselines: pooled n=32 wins 0.25: 1->0, 0.5: 14->15, 0.6: 22->20, 0.8: 25->22. Flips 9 W->L vs 5 L->W across 96 paired runs - bidirectional churn, sign test n.s.; banks disagree in direction at 0.8 (a: -4, b: +1). Novice deathT p50 fell 4:14->3:47 (bank a) - the lever bites novices fastest. Near-miss mean at 0.5 did rise 0.10->0.29 pooled.
I-403 OPEN

volley dmg 12->14 (+17%) atop pierce 1, bare FINAL both banks vs tune-sora-pierce1{,-b}: pooled 0.8 wins 14/32 -> 12/32; paired flips 8 W->L vs 6 L->W - bidirectional churn, no signal. 0.25 stays 0/32. Loser deathT p50 rose ~2min (7:44->9:44 bank a) with no win conversion.
I-404 OPEN

hp 90->100 (+11%, roster floor to yui level) atop pierce 1, bare FINAL both banks vs tune-sora-pierce1{,-b}: pooled 0.8 14/32 -> 14/32, 0.25 0/32 -> 0/32, only 4 paired flips total (2 W->L, 2 L->W) - near-zero trajectory change, not even churn.
I-405 VALIDATED

PLAYER.iframes 0.7->0.55 (global post-hit invulnerability -21%; sustained crowd intake cap +27%), fresh ren@yard FINAL, both banks vs rebaseline-ec721ce-final (a) and 2bank-fresh-final (b), sim surface 34477c3 + the tune. Pooled n=32 wins: 0.25 1->0, 0.5 14->13, 0.6 22->15 (-22 pts), 0.8 25->18 (-22 pts). Paired per-seed flips: competent cells (0.6+0.8) 20 W->L vs 6 L->W (sign test p~0.009); 0.5 is churn (7 vs 6); 0.25 at floor. Banks agree in direction at 0.6 and 0.8 (a -4/-4, b -3/-3) and disagree at 0.5 (a +3, b -4). Near-miss mean 0.5: 0.09->0.44, 0.6: 0.19->0.41.
I-411 OPEN 4 (ladder points)

roster INTRO TIMING is not the yard->gym cliff lever either; and the cliff survives all five new mechanics at n=64 with the perk tree MAXED

I-412 OPEN 4 (ladder points)

the anger debt's 2/16->5/16 benefit does not survive n=64 (13%->16%, paired p=0.77) — it lives entirely in the first 16 seeds of standard-64; the commit's XP-neutrality claim is however exactly right

note INCIDENTAL

yard 6/20 vs gym 0/20 at matched skill 0.5, policy panic (Fisher p ~ 0.010). Every other cell-to-cell win difference in this batch is noise at n=20. Ties to I-047/I-048 on room-to-room disorder.

Experiments

idagentquestionnsimgates
2026-09-03-claude-skillsweep-final-05claude skill sweep: does win rate keep climbing steeply past 0.4, or plateau16 d63af7f fail
2026-09-03-claude-skillsweep-final-04claude board #55-era skill sweep: where does the fresh-save FINAL win-rate cliff actually sit between 0.25 (19%) and 0.8 (94%)?16 d63af7f fail
2026-09-03-claude-skillsweep-final-03claude skill sweep: is the cliff between 0.25 and 0.4, or does it move even earlier16 d63af7f fail
2026-09-03-claude-rebaseline-bda12fb-quizclaude post-drift re-baseline: where does QUIZ sit after dashCost/tier-speed tunes, builds-per-student, spawn/quiz-timing changes since I-06916 b32d158 pass
2026-09-03-claude-rebaseline-bda12fb-midtermclaude post-drift re-baseline: MIDTERM after dashCost/tier-speed tunes since I-06916 b32d158 pass
2026-09-03-claude-rebaseline-bda12fb-finalclaude post-drift re-baseline: FINAL bare-kit after dashCost 10->20 (I-414) and tier-speed tunes since I-069, does CE band open up16 b32d158 pass
2026-09-03-claude-ladder-n16-threebetsclaude Ladder: can a ren player get from the yard to the roof, where do they stall, and does the shop outlast the night?16 d63af7f pass
2026-09-03-claude-kittedtier3-finalclaude board #55 0f: KITTED TIERS power-ceiling cell, Night III — the hardest named tier, does it clear heuristic 4's ~50pct competent target better than tier 1/216 d63af7f pass
2026-09-03-claude-kittedtier2-finalclaude board #55 0f: KITTED TIERS power-ceiling cell, Night II — is heuristic 5 (CE, kitted-only 35-65% band) and heuristic 4's calibration question different from tier 1's I-071 reading16 d63af7f pass
2026-09-03-claude-kitted-bda12fb-finalclaude does the CE band open up for a maxed-perk kit post-drift (dashCost 20, builds-per-student shop rewrite) — I-065 only ever traced bare kit16 b32d158 pass
2026-09-03-claude-gymcliff-postcornertrap-finalclaude board #55 0ad2 / board #36: does the yard-gym FINAL cliff persist post corner-trap fix (38e5b1a)? Prior post-anger-debt reading was gym 0.8=5/16 vs yard 8/1616 d63af7f pass
2026-09-03-claude-club-renkaito-bda12fb-final-v2claude club ren+kaito FINAL post 'builds are per student' shop rewrite (20e0606) and dashCost 20 — does I-066's near-ceiling club story still hold16 b32d158 pass
2026-09-03-claude-2026-09-03-claude-ladder-threebets-s05claude Ladder: can a ren player get from the yard to the roof, where do they stall, and does the shop outlast the night?16 d63af7f fail
2026-09-03-claude-2026-09-03-claude-ladder-threebets-bothskillsclaude Ladder: can a ren player get from the yard to the roof, where do they stall, and does the shop outlast the night?10 d63af7f fail
2026-09-02-claude-tune-tier3speed2-afterclaude Effect of further NIGHT III enemySpeedMult 1.44->1.6 on kitted win rate (board #46 continued)16 5a8e642 fail
2026-09-02-claude-tune-tier3speed-beforeclaude Baseline: tier 3 kitted win rate before enemySpeedMult change (board #46)16 7a7a6a2 pass
2026-09-02-claude-tune-tier3speed-afterclaude Effect of NIGHT III enemySpeedMult 1.22->1.44 on kitted win rate (board #46)16 7a7a6a2 fail
2026-09-02-claude-tune-tier2speed2-beforeclaude Baseline at n=64: tier 2 kitted win rate at enemySpeedMult 1.34, before pushing to 1.44 (board #46, I-422 follow-up)64 156b1c2 pass
2026-09-02-claude-tune-tier2speed2-afterclaude Effect of NIGHT II enemySpeedMult 1.34->1.44 at n=64 (board #46, I-422 follow-up)64 156b1c2 fail
2026-09-02-claude-tune-tier2speed-beforeclaude Baseline: tier 2 kitted win rate before enemySpeedMult change (board #46)16 e3d016d pass
2026-09-02-claude-tune-tier2speed-afterclaude Effect of NIGHT II enemySpeedMult 1.12->1.34 on kitted win rate (board #46)16 e3d016d fail
2026-09-02-claude-tune-tier2hp-afterclaude Effect of NIGHT II enemyHpMult 1.55->1.9 on kitted win rate, watching for I-417 overkill-clamp backfire (board #46)64 02d88d8 fail
2026-09-02-claude-tune-speedramp-beforeclaude Baseline: bare-kit tier1 FINAL win rate before speedRampSec change (board #39/#40, I-425)16 f8f863d pass
2026-09-02-claude-tune-speedramp-afterclaude Effect of DIFFICULTY.speedRampSec 1500->900 on bare-kit tier1 FINAL win rate (board #39/#40, I-425)16 f8f863d fail
2026-09-02-claude-sweep-kitted-final-full-t3-7bf8499claude Standing kitted sweep: final at sim 7bf8499.16 7bf8499 pass
2026-09-02-claude-sweep-kitted-final-full-t2-7bf8499claude Standing kitted sweep: final at sim 7bf8499.16 7bf8499 pass
2026-09-02-claude-sweep-kitted-final-full-t1-7bf8499claude Standing kitted sweep: final at sim 7bf8499.16 7bf8499 pass
2026-09-01-claude-verbmix-final-early-lateclaude Board #26: does late-night FINAL play collapse to move+domain, as Chris reports ("by the end I only dodge until the domain refills")?16 9d12b3e pass
2026-09-01-claude-tune-speedlate-beforeclaude Baseline before DIFFICULTY.speedLatePer30 0.06->0.09 (board #40, HP/speed lever)16 a1c5cb3 pass
2026-09-01-claude-tune-speedlate-afterclaude Effect of DIFFICULTY.speedLatePer30 0.06->0.09 on FINAL win rate (board #40)16 a1c5cb3 fail
2026-09-01-claude-tune-perkill-beforeclaude Baseline before ENERGY.perKill 0.3->0.2 (board #44, untested income lever)16 86f21b8 pass
2026-09-01-claude-tune-perkill-afterclaude Effect of ENERGY.perKill 0.3->0.2 on FINAL win rate, both skills (board #44)16 86f21b8 fail
2026-09-01-claude-tune-ladderhold-beforeclaude Baseline before SPAWN_LADDER.hold 180->140 (board #39)16 7eb8b6d pass
2026-09-01-claude-tune-ladderhold-afterclaude Effect of SPAWN_LADDER.hold 180->140 on FINAL win rate, both skills (board #39)16 7eb8b6d fail
2026-09-01-claude-tune-hpramp-beforeclaude Baseline before DIFFICULTY.hpRampSec 240->210 (board #40, HP lever)16 c893424 pass
2026-09-01-claude-tune-hpramp-afterclaude Effect of DIFFICULTY.hpRampSec 240->210 on FINAL win rate, both skills (board #40)16 c893424 fail
2026-09-01-claude-tune-gym-wisp-yardref64claude Reference cell n=64: yard FINAL, perks maxed, sim 3c31d02 — the top of the I-048 cliff; unaffected by a gym roster edit64 7b00588 pass
2026-09-01-claude-tune-gym-wisp-base64claude Baseline n=64: gym FINAL, perks maxed, sim 3c31d02, before the wisp-debut tune (I-040/I-048)64 7b00588 pass
2026-09-01-claude-tune-gym-wisp-baseclaude Baseline: gym FINAL with the perk tree maxed, sim 3c31d02, before touching the wisp debut (I-040/I-048)16 7b00588 pass
2026-09-01-claude-tune-gym-wisp-265claude Effect of gym wisp debut 110s -> 265s on the yard-gym FINAL cliff (I-040/I-048)?64 7b00588 fail
2026-09-01-claude-tune-dashcost2-beforeclaude Bare-kit baseline before ENERGY.dashCost 20->30 (board #44 continuation, third lever step)16 a36d6d5 pass
2026-09-01-claude-tune-dashcost2-afterclaude Effect of ENERGY.dashCost 20->30 on bare-kit CE band and win rate (board #44, probing response curve)16 a36d6d5 fail
2026-09-01-claude-tune-dashcost-beforeclaude Bare-kit CE/win-rate baseline before ENERGY.dashCost 10->20 (board #44 continuation, I-065)16 20e0606 pass
2026-09-01-claude-tune-dashcost-afterclaude Effect of ENERGY.dashCost 10->20 on bare-kit CE band and win rate (board #44 continuation, I-065)16 20e0606 fail
2026-09-01-claude-tune-crash-yard-150claude Control on sim 0157b47 (anger debt + elite tiers): yard FINAL, perks MAXED, crash at its shipped 1.5 — vs the same cell on 3c31d0264 d2c5720 pass
2026-09-01-claude-tune-crash-gym-freshclaude Who pays for the anger debt? Gym FINAL on sim 0157b47 with NO perks, to size the shop's value against the perks-MAXED cells64 d2c5720 pass
2026-09-01-claude-tune-crash-gym-30claude Effect of PRESSURE_WAVE.crash 3.0 (shipped 1.5) on the anger debt's gym FINAL regression, perks MAXED64 d2c5720 fail
2026-09-01-claude-tune-crash-gym-150claude Baseline on sim 0157b47 (anger debt + elite tiers): gym FINAL, perks MAXED, PRESSURE_WAVE.crash at its shipped 1.564 d2c5720 pass
2026-09-01-claude-tune-crash-gym-075claude Effect of PRESSURE_WAVE.crash 0.75 (shipped 1.5) on the anger debt's gym FINAL regression, perks MAXED64 d2c5720 fail
2026-09-01-claude-tune-ce-regen-beforeclaude CE baseline with circuit elective equipped, before ENERGY.regen cut (I-065 follow-up, board #44)16 20e0606 pass
2026-09-01-claude-tune-ce-regen-afterclaude CE with circuit elective after ENERGY.regen 1.5->0.5 (I-065 follow-up, board #44)16 20e0606 fail
2026-09-01-claude-steps-shiki-live-finalclaude Board #17/#21 (I-050/I-052): now that runNight() threads steps/shiki and casts the animal, does the full-shop surplus actually convert to wins at FINAL?16 21dd615 fail
2026-09-01-claude-rebaseline-bbe6467-quiz-16bclaude I-059 second-bank confirmation: QUIZ on standard-16b16 bbe6467 pass
2026-09-01-claude-rebaseline-bbe6467-quizclaude post-antikite-fix baseline: QUIZ both skills on sim bbe646716 bbe6467 pass
2026-09-01-claude-rebaseline-bbe6467-midterm-16bclaude I-059 second-bank confirmation: MIDTERM on standard-16b16 bbe6467 pass
2026-09-01-claude-rebaseline-bbe6467-midtermclaude post-antikite-fix baseline: MIDTERM both skills on sim bbe646716 bbe6467 pass
2026-09-01-claude-rebaseline-bbe6467-final-16bclaude I-059 second-bank confirmation: FINAL on standard-16b16 bbe6467 pass
2026-09-01-claude-rebaseline-bbe6467-finalclaude post-antikite-fix baseline: FINAL both skills on sim bbe646716 bbe6467 pass
2026-09-01-claude-rebaseline-a3a75ba-solo-sora-finalclaude Does the presumed-weakest solo character (sora, glass cannon, 90hp) still lose under the current CE-saturated ceiling? Directed 10-iteration run, iteration 7.16 3dc0c1d pass
2026-09-01-claude-rebaseline-a3a75ba-finalclaude Clean re-baseline vs THE HELD BELL (a3a75ba), just committed -- directed 10-iteration run, iteration 5.16 a3a75ba pass
2026-09-01-claude-rebaseline-a3a75ba-club-yuisora-finalclaude Club yui+sora FINAL re-baseline vs a3a75ba (CE-split + THE HELD BELL + rotation-every-tick bot) -- checking I-066/I-036 generalize, directed 10-iteration run, iteration 6.16 a3a75ba pass
2026-09-01-claude-rebaseline-9b962b1-quizclaude QUIZ re-baseline after the CE-split (weapon free, CE earned by fighting) + bot elective policy update, sim 9b962b1 -- directed 10-iteration run, iteration 1.16 9b962b1 pass
2026-09-01-claude-rebaseline-9b962b1-midtermclaude MIDTERM re-baseline after the CE-split + bot elective policy update, sim 9b962b1 -- directed 10-iteration run, iteration 1.16 9b962b1 pass
2026-09-01-claude-rebaseline-9b962b1-club-renkaito-finalclaude Club ren+kaito FINAL re-baseline vs 9b962b1 (CE-split + rotation-every-tick bot both in effect) -- directed 10-iteration run, iteration 3.16 9b962b1 pass
2026-09-01-claude-rebaseline-51285d2-finalclaude Confirm FINAL bare-kit win rate is unmoved after the sunburn-removal/canon-pass commits (03f6ed3, 51285d2) -- directed 10-iteration run, iteration 8.16 51285d2 pass
2026-09-01-claude-oldsim-3c31d02-gym-freshclaude TRUE SIM IS 3c31d02 (pre anger debt) despite the HEAD label — src/ checked out backwards deliberately, hence dirty. Gym FINAL fresh kit n=64, the missing control for the commit's 2/16->5/16 improvement claim64 d2c5720 fail
2026-09-01-claude-ladder-env-beforeclaude FINAL baseline before the spawn-ladder envelope (Boneyard wave falloff).16 6224f25 pass
2026-09-01-claude-ladder-env-afterclaude FINAL after the spawn-ladder envelope, vs ladder-env-before.16 9d12b3e pass
2026-09-01-claude-heldbell-probe-tier3-finalclaude Boss-timing probe for I-067: does NIGHT III's enemyHpMult=2.2 make a boss survive to bell time and actually trigger THE HELD BELL?16 a3a75ba pass
2026-09-01-claude-heldbell-dirty-informational-finalclaude Informational-only read of THE HELD BELL's effect on FINAL (Chris's WIP, uncommitted, tests green) -- explicitly not gate-eligible, for signal only.16 9b962b1 fail
2026-09-01-claude-held-bell-midtermclaude MIDTERM after the held bell (a3a75ba) — the cell where it fires (competent 4/16, heldT p50 26s).16 a3a75ba pass
2026-09-01-claude-held-bell-finalclaude FINAL after the held bell (a3a75ba). Expect digit-identical to ce-split-after: the 600s boss dies before the bell at both skills.16 a3a75ba pass
2026-09-01-claude-gymcliff-before-angerdebtclaude Gym FINAL baseline before the anger-debt change (board: minute-10 box-in).16 7b00588 pass
2026-09-01-claude-gymcliff-after-angerdebtclaude Gym FINAL after the anger debt + elite tiers.16 d2c5720 pass
2026-09-01-claude-fullshop-9b962b1-finalclaude Full-shop FINAL sanity check on 9b962b1 before trusting the bespoke maxed-kit CE trace's 0/8 win rate -- cross-check against the official runner.16 9b962b1 fail
2026-09-01-claude-edge-v2b-midtermclaude Edge economy v2 SHIPPED (665519a): MIDTERM vs taper-post-midterm. Supersedes the dirty edge-v2-midterm.16 665519a pass
2026-09-01-claude-edge-v2b-finalclaude Edge economy v2 SHIPPED (665519a): FINAL vs taper-post-final. Supersedes the dirty edge-v2-final.16 665519a pass
2026-09-01-claude-edge-v2-midtermclaude Edge economy v2 (pressure+damp+lull, late rally) on MIDTERM vs taper baseline.16 5424e98 fail
2026-09-01-claude-edge-v2-finalclaude Edge economy v2 on FINAL vs taper baseline.16 5424e98 fail
2026-09-01-claude-edge-post-midtermclaude Edge economy pieces 3+2 on MIDTERM vs taper-post-midterm baseline.16 5424e98 fail
2026-09-01-claude-edge-post-finalclaude Edge economy pieces 3+2 on FINAL vs taper-post-final baseline.16 5424e98 fail
2026-09-01-claude-current-leak-midtermclaude The current + leak SHIPPED: MIDTERM vs edge-v2b-midterm.16 21dd615 pass
2026-09-01-claude-current-leak-finalclaude The current + leak SHIPPED: FINAL vs edge-v2b-final.16 21dd615 pass
2026-09-01-claude-club-renkaito-rotation-liveclaude Board #12: with the rotation policy now built into bot.js, does the shipped bot reproduce I-033 arm C's club>solo effect on ren+kaito?16 9d12b3e fail
2026-09-01-claude-club-renkaito-rotation-cleanclaude Board #12 clean-sim confirmation: club ren+kaito FINAL win rate with the rotation policy live in the shipped bot.16 3596e62 pass
2026-09-01-claude-ce-trace-tick-levelclaude I-064 follow-up: does the CE pool (post-9b962b1 CE-split) ever meaningfully drain, or does it structurally saturate at every period/skill? What fraction of ticks fall in the heuristic-5 target band (27-40%)? 9b962b1 fail
2026-09-01-claude-ce-split-beforeclaude FINAL baseline before decoupling the weapon from CE (board #27 / I-062).16 3596e62 pass
2026-09-01-claude-ce-split-afterclaude FINAL after the CE split, clean tree (supersedes the dirty attempt).16 9b962b1 pass
2026-09-01-claude-ce-at-crisisclaude Board #27: is the elective (CIRCUIT BREAK, 45 CE) priced out of the emergency it exists for -- crisis defined as HP<35% or 7+ simultaneous contact-range enemies (I-054)?16 9d12b3e pass
2026-09-01-claude-antikite-before-midtermclaude board #29 baseline: does the bot camp the CURRENT's quiet side on MIDTERM?16 3653be1 pass
2026-09-01-claude-antikite-before-finalclaude board #29 baseline: does the bot camp the CURRENT's quiet side on FINAL?16 3653be1 pass
2026-09-01-claude-antikite-after-midtermclaude board #29 fix: does front-seeking after quietT>3s close the CURRENT camp exploit on MIDTERM?16 3653be1 fail
2026-09-01-claude-antikite-after-finalclaude board #29 fix: does front-seeking after quietT>3s close the CURRENT camp exploit on FINAL?16 3653be1 fail
2026-08-31-claude-valve-shipped-verifyclaude Does the shipped valve reproduce I-029: novice near-miss up, novice survival up, competent flat?16 3ae4e8a pass
2026-08-31-claude-tune-iframes-045-midclaude Mid-ladder effect of PLAYER.iframes 0.55->0.45 — does it reach the I-006 target band at 0.6 without regressing 0.5?64 aaf2ed9 fail
2026-08-31-claude-tune-iframes-045-investedclaude Invested 0.6 under iframes 0.45 — does I-006's other half (invested ~50%) survive the tune?64 aaf2ed9 fail
2026-08-31-claude-tune-iframes-045claude Effect of PLAYER.iframes 0.55->0.45 on the FINAL ceiling (I-006), post late-shift?64 aaf2ed9 fail
2026-08-31-claude-tune-gym-spawnmult-1claude Does raising gym spawnMult 0.95->1.0 narrow the yard-gym FINAL cliff (I-040/I-048)?16 3ae4e8a fail
2026-08-31-claude-taper-post-midtermclaude Board #28 after: density taper effect on MIDTERM.16 3ae4e8a fail
2026-08-31-claude-taper-post-finalclaude Board #28 after: density taper effect on FINAL.16 3ae4e8a fail
2026-08-31-claude-taper-baseline-midtermclaude Pre-taper MIDTERM baseline on the valve build, for board #28 before/after.16 3ae4e8a pass
2026-08-31-claude-surround-geometryclaude Board #23 and #24: which knob produces the inescapable surround, and does a chained domain clear an escape route or refill too slowly to matter?20 3ae4e8a fail
2026-08-31-claude-solo-ren-elective-gymclaude Second-MAP reference: solo ren + SHIKIGAMI on THE GYM.64 9730eeb pass
2026-08-31-claude-solo-ren-elective-9730eebclaude The matched SOLO reference for the club cells: ren alone WITH SHIKIGAMI at n=64. Without this the club-vs-solo comparison is confounded by the elective.64 9730eeb pass
2026-08-31-claude-solo-ren-elective-64bclaude Second-bank confirm of the SOLO reference cell (I-034): ren + SHIKIGAMI on the genuinely independent standard-64b.64 9730eeb pass
2026-08-31-claude-rebaseline-lateshift-investedclaude Invested 0.6 baseline at iframes 0.55 on current HEAD — the I-009 yardstick for judging the tune.64 aaf2ed9 fail
2026-08-31-claude-rebaseline-lateshift-final-midclaude Mid-ladder FINAL cells on current HEAD after the late shift + pressure waves — where does the I-006 ceiling sit now?64 aaf2ed9 fail
2026-08-31-claude-rebaseline-lateshift-finalclaude Did Chris's late shift (lurker/moth/warden) + pressure waves move the FINAL cells off the 246f428 baseline?64 aaf2ed9 pass
2026-08-31-claude-probe-iframes-050claude I-407 mechanism probe: is the mid-ladder near-miss collapse a touchCd threshold effect (0.50 behaves like 0.55) or smooth dose-response (0.50 sits midway)?64 f48a154 fail
2026-08-31-claude-linechange-solo-final-carryforwardclaude Does the LINE CHANGE surface change SOLO runs at all? Solo has no bench and no tag, so freshT/benchLull cannot fire — this should replay tune-iframes-045 bit-for-bit.64 315ce64 fail
2026-08-31-claude-ladder3-greedy-s08-electiveclaude Ladder: can a ren player at skill 0.8 get from the yard to the roof, and where do they stall?16 fa72528 fail
2026-08-31-claude-ladder3-greedy-s08claude Ladder: can a ren player at skill 0.8 get from the yard to the roof, and where do they stall?16 fa72528 fail
2026-08-31-claude-ladder3-greedy-s05-electiveclaude Ladder: can a ren player at skill 0.5 get from the yard to the roof, and where do they stall?16 fa72528 fail
2026-08-31-claude-ladder3-greedy-s05claude Ladder: can a ren player at skill 0.5 get from the yard to the roof, and where do they stall?16 fa72528 fail
2026-08-31-claude-ladder3-greedy-s025claude Ladder: can a ren player at skill 0.25 get from the yard to the roof, and where do they stall?16 fa72528 fail
2026-08-31-claude-ladder3-breadth-s08claude Ladder: can a ren player at skill 0.8 get from the yard to the roof, and where do they stall?16 fa72528 fail
2026-08-31-claude-ladder3-breadth-s05claude Ladder: can a ren player at skill 0.5 get from the yard to the roof, and where do they stall?16 fa72528 fail
2026-08-31-claude-ladder2-yardclaude Corrected ten-room ladder for the re-grade: room yard with a FULLY kitted progressed save (800 fragments AND a live elective). I-037 measured this ladder with no elective equipped, which understates a progressed player.64 fa72528 pass
2026-08-31-claude-ladder2-roofclaude Corrected ten-room ladder for the re-grade: room roof with a FULLY kitted progressed save (800 fragments AND a live elective).64 fa72528 pass
2026-08-31-claude-ladder2-poolclaude Corrected ten-room ladder for the re-grade: room pool with a FULLY kitted progressed save (800 fragments AND a live elective).64 fa72528 pass
2026-08-31-claude-ladder2-libraryclaude Corrected ten-room ladder for the re-grade: room library with a FULLY kitted progressed save (800 fragments AND a live elective). I-037 measured this ladder with no elective equipped, which understates a progressed player.64 fa72528 pass
2026-08-31-claude-ladder2-labclaude Corrected ten-room ladder for the re-grade: room lab with a FULLY kitted progressed save (800 fragments AND a live elective).64 fa72528 pass
2026-08-31-claude-ladder2-hallsclaude Corrected ten-room ladder for the re-grade: room halls with a FULLY kitted progressed save (800 fragments AND a live elective). I-037 measured this ladder with no elective equipped, which understates a progressed player.64 fa72528 pass
2026-08-31-claude-ladder2-gymclaude Corrected ten-room ladder for the re-grade: room gym with a FULLY kitted progressed save (800 fragments AND a live elective). I-037 measured this ladder with no elective equipped, which understates a progressed player.64 fa72528 pass
2026-08-31-claude-ladder2-detentionclaude Corrected ten-room ladder for the re-grade: room detention with a FULLY kitted progressed save (800 fragments AND a live elective).64 fa72528 pass
2026-08-31-claude-ladder2-cafeteriaclaude Corrected ten-room ladder for the re-grade: room cafeteria with a FULLY kitted progressed save (800 fragments AND a live elective). I-037 measured this ladder with no elective equipped, which understates a progressed player.64 fa72528 pass
2026-08-31-claude-ladder2-boilerclaude Corrected ten-room ladder for the re-grade: room boiler with a FULLY kitted progressed save (800 fragments AND a live elective).64 fa72528 pass
2026-08-31-claude-ladder-yard-high800claude Board #14: does the mid-game power curve meet the deep hours? A fully progressed ~800 fragment save on room yard of the new ten-room night.64 b78caf6 pass
2026-08-31-claude-ladder-pool-high800claude Board #14: does the mid-game power curve meet the deep hours? A fully progressed ~800 fragment save on room pool of the new ten-room night.64 b78caf6 pass
2026-08-31-claude-ladder-onenight-skill05claude Ladder: can a ren player at skill 0.5 get from the yard to the roof, and where do they stall?12 fa72528 fail
2026-08-31-claude-ladder-gym-high800claude Board #14: does the mid-game power curve meet the deep hours? A fully progressed ~800 fragment save on room gym of the new ten-room night.64 b78caf6 pass
2026-08-31-claude-ladder-corrected-3skillclaude Ladder: can a ren player get from the yard to the roof, where do they stall, and does the shop outlast the night?16 fa72528 pass
2026-08-31-claude-ladder-boiler-high800claude Board #14: does the mid-game power curve meet the deep hours? A fully progressed ~800 fragment save on room boiler of the new ten-room night.64 b78caf6 pass
2026-08-31-claude-l5-steps-liveclaude Ladder: can a ren player get from the yard to the roof, where do they stall, and does the shop outlast the night?16 fail
2026-08-31-claude-l5-comp-s08-seedbclaude Ladder queue 0n/0o/0p: shop=perks, policy=completionist, seed0=500000, skill 0.8.16 fa72528 fail
2026-08-31-claude-l5-comp-s05-seedbclaude Ladder queue 0n/0o/0p: shop=perks, policy=completionist, seed0=500000, skill 0.5.16 fa72528 fail
2026-08-31-claude-l5-comp-s025-seedbclaude Ladder queue 0n/0o/0p: shop=perks, policy=completionist, seed0=500000, skill 0.25.16 fa72528 fail
2026-08-31-claude-l5-comp-s025-seedaclaude Ladder queue 0n/0o/0p: shop=perks, policy=completionist, seed0=90000, skill 0.25.16 fa72528 fail
2026-08-31-claude-l5-chris-econclaude Ladder: can a ren player get from the yard to the roof, where do they stall, and does the shop outlast the night?16 fa72528 pass
2026-08-31-claude-l4-seedb-s08claude Ladder queue 0n/0o/0p: shop=perks, policy=greedy, seed0=500000, skill 0.8.16 fa72528 fail
2026-08-31-claude-l4-seedb-s05claude Ladder queue 0n/0o/0p: shop=perks, policy=greedy, seed0=500000, skill 0.5.16 fa72528 fail
2026-08-31-claude-l4-seedb-s025claude Ladder queue 0n/0o/0p: shop=perks, policy=greedy, seed0=500000, skill 0.25.16 fa72528 fail
2026-08-31-claude-l4-full-s08claude Ladder queue 0n/0o/0p: shop=full, policy=greedy, seed0=90000, skill 0.8.16 fa72528 fail
2026-08-31-claude-l4-full-s05claude Ladder queue 0n/0o/0p: shop=full, policy=greedy, seed0=90000, skill 0.5.16 fa72528 fail
2026-08-31-claude-l4-full-s025claude Ladder queue 0n/0o/0p: shop=full, policy=greedy, seed0=90000, skill 0.25.16 fa72528 fail
2026-08-31-claude-l4-comp-s08claude Ladder queue 0n/0o/0p: shop=perks, policy=completionist, seed0=90000, skill 0.8.16 fa72528 fail
2026-08-31-claude-l4-comp-s05claude Ladder queue 0n/0o/0p: shop=perks, policy=completionist, seed0=90000, skill 0.5.16 fa72528 fail
2026-08-31-claude-i030-valve-confirmclaude I-029's time-gated valve is the lab's one live ship proposal but was measured on ren@yard only. Does the containment hold for other characters, and does the result depend on the exact t=300 cutoff?64 dd9ea8f fail
2026-08-31-claude-i029-valve-time-gateclaude I-028 proved the recovery valve's effect and its containment problem (competent 47% -> 83%). Time is the one gate competent players demonstrably do not share, since novices die at 3:35 and competent players at 7:38. Does gating panic drops on time keep the novice benefit while holding the competent ceiling flat?64 dd9ea8f fail
2026-08-31-claude-i028-recovery-valve-sketchclaude I-026/I-027 concluded that a novice lever must have its value FALL as the player improves, and that the recovery valve is the only shape with that property by construction. Sim-sketch three valve shapes and test that claim.64 dd9ea8f fail
2026-08-31-claude-club-yuisora-armA-64bclaude Second-bank confirm that yui+sora remains the trap pairing (I-016/I-018) post-LINE-CHANGE.64 9730eeb pass
2026-08-31-claude-club-renkaito-armA-gymclaude Second-MAP confirm of I-034: does club break-even with solo hold off the yard?64 9730eeb pass
2026-08-31-claude-club-renkaito-armA-9730eebclaude Recorded arm-A club baseline at the clean LINE CHANGE surface: what does ren+kaito+SHIKIGAMI score under the SHIPPED bot, which per I-032 cannot rotate? This is the reference the rotation-capable rerun must beat.64 9730eeb pass
2026-08-31-claude-club-renkaito-armA-64bclaude Second-bank confirm of I-034: is the club still BREAK-EVEN with solo under the shipped bot on an independent bank?64 9730eeb pass
2026-08-31-claude-carryforward-cloudsave-9730eebclaude Do the two cloud-save commits (9730eeb, ce6ddd6), which touch src/save.js on the sim surface, change SOLO runs? I-031 proved the uncommitted version inert; this re-pins it at the committed SHA.64 9730eeb pass
2026-08-31-claude-blastradius-quiz-055claude Counterfactual: QUIZ at iframes 0.55 on the same HEAD.64 f44e438 fail
2026-08-31-claude-blastradius-quiz-045claude Blast radius of the shipped iframes 0.45 on QUIZ.64 f44e438 pass
2026-08-31-claude-blastradius-midterm-055claude Counterfactual: MIDTERM at iframes 0.55 on the same HEAD, to separate my tune from the late shift.64 f44e438 fail
2026-08-31-claude-blastradius-midterm-045claude Blast radius of the shipped iframes 0.45 on MIDTERM — I landed a global constant having measured FINAL only.64 f44e438 pass
2026-08-30-claude-upgrade-dominance-06claude Rotation D: is any upgrade a dominant choice? Prefer-X policy per upgrade id vs botChoose baseline, FINAL ren@yard, skill 0.6 (the steep region), standard-16.16 b001603 fail
2026-08-30-claude-tune-sora-pierce1-bclaude Effect of sora volley pierce 0->1 on bare-kit FINAL win rate (bank b)?16 b001603 fail
2026-08-30-claude-tune-sora-pierce1claude Effect of sora volley pierce 0->1 on bare-kit FINAL win rate (bank a)?16 b001603 fail
2026-08-30-claude-tune-sora-hp100-bclaude Effect of sora hp 90->100 (atop pierce 1) on bare-kit FINAL win rate (bank b)?16 34477c3 fail
2026-08-30-claude-tune-sora-hp100claude Effect of sora hp 90->100 (atop pierce 1) on bare-kit FINAL win rate (bank a)?16 34477c3 fail
2026-08-30-claude-tune-sora-dmg14-bclaude Effect of sora volley dmg 12->14 (atop pierce 1) on bare-kit FINAL win rate (bank b)?16 34477c3 fail
2026-08-30-claude-tune-sora-dmg14claude Effect of sora volley dmg 12->14 (atop pierce 1) on bare-kit FINAL win rate (bank a)?16 34477c3 fail
2026-08-30-claude-tune-latedouble-70claude Effect of hpLateDouble 100->70 on fresh-save FINAL win rate?16 cc3a4a0 fail
2026-08-30-claude-tune-iframes-055-bclaude I-006 ceiling, bank b: does PLAYER.iframes 0.7->0.55 hold direction, or is it chaos-dominated like dmgRampSec (I-402)? Bank a gave 0/8/4/9 vs baseline 0/5/8/13 — non-monotone, pooled flips 14 W->L vs 9 L->W.16 34477c3 fail
2026-08-30-claude-tune-iframes-055claude I-006 ceiling: does PLAYER.iframes 0.7->0.55 (global post-hit intake cap, the first-order UNPINNED player-side lever never tried) move fresh FINAL down where hpLateDouble (I-401) and dmgRampSec (I-402) could not?16 34477c3 fail
2026-08-30-claude-tune-hpquad-330claude Effect of hpQuadSec 380->330 on fresh-save FINAL win rate?16 2f56ccd fail
2026-08-30-claude-tune-dmgramp-520-bclaude Effect of dmgRampSec 600->520 on fresh-save FINAL win rate (bank b)?16 c9fbe18 fail
2026-08-30-claude-tune-dmgramp-520claude Effect of dmgRampSec 600->520 on fresh-save FINAL win rate (bank a)?16 c9fbe18 fail
2026-08-30-claude-sweep-ladder-quiz-5b6dd3dclaude Standing ladder sweep: quiz at sim 5b6dd3d.16 5b6dd3d pass
2026-08-30-claude-sweep-ladder-quiz-34477c3claude Standing ladder sweep: quiz at sim 34477c3.16 34477c3 pass
2026-08-30-claude-sweep-ladder-midterm-5b6dd3dclaude Standing ladder sweep: midterm at sim 5b6dd3d.16 5b6dd3d pass
2026-08-30-claude-sweep-ladder-midterm-34477c3claude Standing ladder sweep: midterm at sim 34477c3.16 34477c3 pass
2026-08-30-claude-sweep-ladder-final-5b6dd3dclaude Standing ladder sweep: final at sim 5b6dd3d.16 5b6dd3d pass
2026-08-30-claude-sweep-ladder-final-34477c3claude Standing ladder sweep: final at sim 34477c3.16 34477c3 pass
2026-08-30-claude-sora-postpierce-shikiclaude Post-pierce sora + KITSUNE: does the animal's +44-point contribution shrink now that the kit is stronger (I-014 double-buff question)?16 34477c3 pass
2026-08-30-claude-sora-postpierceclaude Post-pierce sora bare re-mint (queue 3): current numbers after the tuner's pierce 0->1 so the I-014 double-buff question has a live baseline. Tuner measured 7/16 bank a at 0.8.16 34477c3 pass
2026-08-30-claude-skill-calibration-finalclaude I-005 calibration: where on the bot skill knob does fresh-save FINAL cross 50% win rate? Decides whether lab-competent=0.8 is superhuman or the FINAL ceiling is soft.16 2f56ccd pass
2026-08-30-claude-shiki2b-yui-finalclaude I-014 second bank: yui solo with SHIKIGAMI elective FINAL on standard-16b. Pair vs kit2b-yui-final (same seeds); pool with the bank-a shiki-live cells to n=32.16 b001603 pass
2026-08-30-claude-shiki2b-sora-finalclaude I-014 second bank: sora solo with SHIKIGAMI elective FINAL on standard-16b. Pair vs kit2b-sora-final (same seeds); pool with the bank-a shiki-live cells to n=32.16 b001603 pass
2026-08-30-claude-shiki2b-ren-finalclaude I-014 second bank: ren solo with SHIKIGAMI elective FINAL on standard-16b. Pair vs kit2b-ren-final (same seeds); pool with the bank-a shiki-live cells to n=32.16 b001603 pass
2026-08-30-claude-shiki2b-kaito-finalclaude I-014 second bank: kaito solo with SHIKIGAMI elective FINAL on standard-16b. Pair vs kit2b-kaito-final (same seeds); pool with the bank-a shiki-live cells to n=32.16 b001603 pass
2026-08-30-claude-shiki-yui-finalclaude Rotation H / queue 1: shikigami sidegrade check, yui solo with the SHIKIGAMI elective on FINAL. Heuristic 7: no >15% win-rate outlier across the four students at equal skill. First elective-equipped baseline.16 cc3a4a0 pass
2026-08-30-claude-shiki-sora-finalclaude Rotation H / queue 1: shikigami sidegrade check, sora solo with the SHIKIGAMI elective on FINAL. Heuristic 7: no >15% win-rate outlier across the four students at equal skill. First elective-equipped baseline.16 cc3a4a0 pass
2026-08-30-claude-shiki-ren-finalclaude Rotation H / queue 1: shikigami sidegrade check, ren solo with the SHIKIGAMI elective on FINAL. Heuristic 7: no >15% win-rate outlier across the four students at equal skill. First elective-equipped baseline.16 cc3a4a0 pass
2026-08-30-claude-shiki-live-yui-finalclaude Rotation H, real run on c9fbe18 (elective wire fixed): yui solo with SHIKIGAMI elective, FINAL. Judge vs the shiki-yui-final control cell (zero-cast, same seeds) — delta is the shikigami's contribution. Uptime from electiveCasts x dur / lived.16 c9fbe18 pass
2026-08-30-claude-shiki-live-sora-finalclaude Rotation H, real run on c9fbe18 (elective wire fixed): sora solo with SHIKIGAMI elective, FINAL. Judge vs the shiki-sora-final control cell (zero-cast, same seeds) — delta is the shikigami's contribution. Uptime from electiveCasts x dur / lived.16 c9fbe18 pass
2026-08-30-claude-shiki-live-ren-finalclaude Rotation H, real run on c9fbe18 (elective wire fixed): ren solo with SHIKIGAMI elective, FINAL. Judge vs the shiki-ren-final control cell (zero-cast, same seeds) — delta is the shikigami's contribution. Uptime from electiveCasts x dur / lived.16 c9fbe18 pass
2026-08-30-claude-shiki-live-kaito-finalclaude Rotation H, real run on c9fbe18 (elective wire fixed): kaito solo with SHIKIGAMI elective, FINAL. Judge vs the shiki-kaito-final control cell (zero-cast, same seeds) — delta is the shikigami's contribution. Uptime from electiveCasts x dur / lived.16 c9fbe18 pass
2026-08-30-claude-shiki-kaito-finalclaude Rotation H / queue 1: shikigami sidegrade check, kaito solo with the SHIKIGAMI elective on FINAL. Heuristic 7: no >15% win-rate outlier across the four students at equal skill. First elective-equipped baseline.16 cc3a4a0 pass
2026-08-30-claude-rebaseline-ec721ce-finalclaude Queue item 1: re-baseline fresh FINAL on ec721ce (per-student electives + shikigami landed; tests 48->63). Do the standard-16 cells replay the 2f56ccd numbers (0/16, 5/16, 8/16, 13/16 at 0.25/0.5/0.6/0.8)? If identical, rng consumption did not move and old baselines carry forward; if not, all 2f56ccd baselines are stale.16 cc3a4a0 pass
2026-08-30-claude-rebaseline-c9fbe18-finalclaude Carry-forward proof for c9fbe18 (runner gains the input.special -> castElective wire): fresh no-elective FINAL must replay the cc3a4a0/2f56ccd baseline bit-for-bit, since botInput leaves special=false with no elective equipped.16 c9fbe18 pass
2026-08-30-claude-rebaseline-b001603-finalclaude Carry-forward proof for b001603 (ELECTIVES gain a short label field - display only): fresh FINAL must replay the c9fbe18 baseline bit-for-bit.16 b001603 pass
2026-08-30-claude-rebaseline-246f428claude The tuner landed PLAYER.iframes 0.7 -> 0.55, so every row in the ledger's baselines table describes a game that no longer exists. Re-measure all six baseline cells on 246f428, under the new I-019 rules.64 246f428 pass
2026-08-30-claude-quiz-rebaseline-bclaude Rotation A, bank b: QUIZ re-baseline confirmation cells for I-001 (flat threat) and I-002 (novice drift above the economy-table 50%).16 b001603 pass
2026-08-30-claude-quiz-rebaselineclaude Rotation A: QUIZ re-baseline on standard-16 at gate-passing n, replacing the pre-lab quick-6 baselines. Settles I-002 (drift vs the MECHANICS.md economy table: novice 5/10, competent-0.5 10/10) and gives I-001 (flat threat for competent QUIZ) its first n=16 measurement.16 b001603 pass
2026-08-30-claude-perk-delta-mid-finalclaude I-006 follow-up: how many win-rate points does the canonical ~270-fragment mid-tier perk loadout add to FINAL at skills 0.25/0.6/0.8 vs the fresh-save curve?16 2f56ccd pass
2026-08-30-claude-perk-delta-high-finalclaude I-006 follow-up: does the canonical ~800-fragment perk loadout move FINAL win rate where the ~270-fragment one did not (skills 0.25/0.6/0.8 vs fresh-save curve)?16 2f56ccd pass
2026-08-30-claude-party-yuisoraclaude Rotation C: 2-club party, strong+weak pairing (yui captain + sora). Does the club flatten the I-012 spread — is sora carried, and does yui's novice rescue survive sharing the night?16 34477c3 pass
2026-08-30-claude-party-renkaitoclaude Rotation C control pairing: ren captain + kaito, both mid-tier kits.16 34477c3 pass
2026-08-30-claude-kit2b-yui-finalclaude I-012 second bank: bare-kit yui solo FINAL on standard-16b. Pool with the shiki-yui-final control cells (bank a) to n=32 for the heuristic-7 spread claim.16 b001603 pass
2026-08-30-claude-kit2b-sora-finalclaude I-012 second bank: bare-kit sora solo FINAL on standard-16b. Pool with the shiki-sora-final control cells (bank a) to n=32 for the heuristic-7 spread claim.16 b001603 pass
2026-08-30-claude-kit2b-ren-finalclaude I-012 second bank: bare-kit ren solo FINAL on standard-16b. Pool with the shiki-ren-final control cells (bank a) to n=32 for the heuristic-7 spread claim.16 b001603 pass
2026-08-30-claude-kit2b-kaito-finalclaude I-012 second bank: bare-kit kaito solo FINAL on standard-16b. Pool with the shiki-kaito-final control cells (bank a) to n=32 for the heuristic-7 spread claim.16 b001603 pass
2026-08-30-claude-i027-frontload-remeasureclaude I-026 showed every shared enemy knob fails by construction, promoting the perk track — the axis novices lack — to the lab's best remaining novice lever. Does I-010's front-load still buy the novice rescue on the current sim, and does it leave the competent ceiling alone?64 dd9ea8f fail
2026-08-30-claude-i026-husk-thresholdclaude I-025 named husk contact as 51% of novice damage and the mechanism as a two-hits-to-kill threshold. Does tuning the husk move the novice wall — and does it cost the competent FINAL ceiling that I-021 just set at 47%?64 dd9ea8f fail
2026-08-30-claude-i025-what-kills-novicesclaude I-024 left the novice wall time-locked at ~215s with the bosses and the HP ramp ruled out, and the queue's next suspect was the HUSK PARADE surge at t=200. Rather than test suspects one config edit at a time: what is actually dealing the damage?64 dd9ea8f pass
2026-08-30-claude-i024-novice-wall-not-the-bossclaude I-023 named THE JANITOR (boss #1 at 150s) as the killer of 17 of 64 novices and proposed measuring whether BOSS_INTERVAL or first-boss HP is the binding constraint. Which is it?64 dd9ea8f fail
2026-08-30-claude-i023-death-autopsy-postiframeclaude I-021's iframe tune created 34 new competent FINAL losses. Are those deaths NARRATABLE — at a named boss, or limping toward dawn — or anonymous? This is what decides whether the tune bought retention or only difficulty (heuristic 6, and I-011's 0/97 near-dawn figure).64 dd9ea8f pass
2026-08-30-claude-i019-novice-varianceclaude I-017 died because one novice cell disagreed 4x between the two seed banks. Was that a bad bank, or is n=16 simply too small at novice? Measure the sampling error of a 16-seed cell directly.160 246f428 pass
2026-08-30-claude-i018-club-dilutionclaude Does I-017 replicate on a second seed bank, and does the proposed fix (benched members earning a share of the active member's domain charge) recover the club's lost wins?16 34477c3 pass
2026-08-30-claude-i017-domain-freezeclaude Why does a club cost yui so much? Separate the two party-only domain rules — the 8s DOMAIN_SWAP_LOCK applied after every cast, and the freezing of a benched member's domain charge — by measuring domain casts per night across solo / no-swap / swap arms.16 34477c3 fail
2026-08-30-claude-i016-yuisora-bclaude I-016 mechanism cell 1: does yui+sora underperform solo yui on a second seed bank?16 34477c3 pass
2026-08-30-claude-i016-sorayui-aclaude I-016 mechanism cell 2: captain order. Does sora-captain + yui change the club result vs yui-captain + sora on the same bank?16 34477c3 pass
2026-08-30-claude-i016-noswapclaude I-016 mechanism cell 3: is 'the 2-club is a trap' a property of the party system, or of the bot's CE-triggered swap policy? Neutralize swapping and compare each club against its solo members.16 34477c3 pass
2026-08-30-claude-i015-confirmclaude I-015 confirmation: do regen/focus dominance and the step trap hold on bank b and at the skill edges?16 34477c3 pass
2026-08-30-claude-highperk-0507-final-bclaude I-009 resolution, bank b: ~800 diamond loadout at skills 0.5/0.7 on clean sim cc3a4a0. Pool with bank a cells for n=32 judgment of the invested curve.16 cc3a4a0 fail
2026-08-30-claude-highperk-0507-final-a-cleanclaude I-009 resolution, bank a: ~800 diamond loadout at skills 0.5/0.7 on clean sim cc3a4a0. Supersedes 2026-08-30-claude-highperk-0507-final-a (dirty sim, do-not-compare). Judge invested curve pooled n=32 with bank b.16 cc3a4a0 fail
2026-08-30-claude-highperk-0507-final-aclaude I-009 resolution: ~800-fragment high loadout (reserve 4, honed 3, legs 2, flash 1) at skills 0.5/0.7 on standard-16, to judge the invested curve on pooled n=32 cells across both banks.16 5b6dd3d fail
2026-08-30-claude-frontload2-rank1-bclaude I-010 rank-1-only cell under the front-load schedule at 0.25, bank b.16 b001603 fail
2026-08-30-claude-frontload2-rank1-aclaude I-010 rank-1-only cell (~135 diamonds: reserve 1, honed 1, legs 1) under the front-load schedule at 0.25, bank a — is the FIRST purchase felt?16 b001603 fail
2026-08-30-claude-frontload2-mid-bclaude I-010 re-validation, bank b. Iteration 7 measured 6/16 at 2f56ccd.16 b001603 fail
2026-08-30-claude-frontload2-mid-aclaude I-010 re-validation on current SHA (config experiment, front-load schedule applied to perkBonuses): mid ~270 diamond loadout at 0.25, bank a. Iteration 7 measured 3/16 here at 2f56ccd; identical replay expected if carry-forward holds.16 b001603 fail
2026-08-30-claude-frontload-perk-mid-final-bclaude Config micro-experiment (I-008 front-load), second bank: with PERKS rank effects front-loaded in save.js perkBonuses (reserve cum [25,35,40,45,50] HP, honed cum [12,16,19,22,25]%, legs cum [6,8,9]%; max totals unchanged), does the ~270-fragment mid loadout (reserve 2, honed 2, legs 1) buy meaningful win rate vs fresh on standard-16b?16 5b6dd3d fail
2026-08-30-claude-frontload-perk-mid-final-aclaude Config micro-experiment (I-008 front-load): with PERKS rank effects front-loaded in save.js perkBonuses (reserve cum [25,35,40,45,50] HP, honed cum [12,16,19,22,25]%, legs cum [6,8,9]%; max totals unchanged), does the ~270-fragment mid loadout (reserve 2, honed 2, legs 1) buy meaningful win rate vs fresh on standard-16?16 5b6dd3d fail
2026-08-30-claude-death-autopsy-final-midtermclaude Rotation F death autopsy: where do novice/mid-skill deaths land relative to the 150s special-grade cycle, the scripted SURGES, and dawn? Analysis of archived raw runs from clean-sim manifests only — no new sim execution (working-tree sim surface is mid-edit by another session).97 fail
2026-08-30-claude-curves-midtermclaude Engagement curves MIDTERM: does the mid-length night have a threat pulse and reward drip at both skills, or is it flat like QUIZ (I-001)?16 2f56ccd pass
2026-08-30-claude-curves-finalclaude Engagement curves FINAL: threat pulse, reward drip, death-time clustering at both skills on standard-16; extends the QUIZ flat-threat finding I-001 to the long night.16 2f56ccd pass
2026-08-30-claude-2026-08-30-claude-2bank-perk-mid-finalclaude Second-bank validation of I-008 mid cell: does the ~270-fragment loadout (reserve 2, honed 2, legs 1) still add ~zero win rate at 0.25/0.6/0.8 on standard-16b?16 2f56ccd pass
2026-08-30-claude-2026-08-30-claude-2bank-perk-high-finalclaude Second-bank validation of I-008 high cell: does the ~800-fragment loadout still add a large delta at 0.6 (+31 pts on standard-16) and small deltas at 0.25/0.8 on standard-16b?16 2f56ccd pass
2026-08-30-claude-2026-08-30-claude-2bank-fresh-finalclaude Second-bank validation of I-006 (and I-003/I-007 FINAL cells): does fresh-save FINAL still cross ~50% win at skill 0.6 on disjoint seeds (standard-16b), and do near-misses stay ~0?16 2f56ccd pass
2026-08-30-claude-2026-08-30-claude-2bank-curves-midtermclaude Second-bank validation of I-003/I-004 MIDTERM cells: flat competent threat (near-miss ~0 at 0.8) and the novice mid-night death wall (deathT p50 ~35-45% of night) on standard-16b.16 2f56ccd pass

Shipped tuning changes

datecommitchange
2026-09-02b32d158Rooms pay more through the night; insurance per room, priced by the hour
2026-09-027b59a3fThree bets: insurance, the favor's price, rerolls
2026-09-02131c1fbShort-night bosses carry less hp; the bot fights a held bell instead of kiting it
2026-09-02f137f52Quiz boss at 2:00: a short night's first boss leads its bell by BOSS_LEAD
2026-09-015f57340Determinism: the auto-aim lock survives a snapshot (I-426)
2026-09-017bf8499Tune: DIFFICULTY.speedRampSec stays 1500 — 900 backfired hard AND exposed a determinism bug (I-425/I-426)
2026-09-01f8f863dTune: STAGE_TIERS[2].enemyHpMult stays 1.55 — confirmed I-417 backfire, plus a test lock (I-424)
2026-09-0102d88d8Tune: STAGE_TIERS[2].enemySpeedMult stays 1.34 — 1.44 bought nothing at n=64, exhausted (I-423)
2026-09-01156b1c2Tune: STAGE_TIERS[2].enemySpeedMult 1.12 -> 1.34 — real pressure gained, ceiling unresolved at n=16 (I-422)
2026-09-01e3d016dTune: STAGE_TIERS[3].enemySpeedMult stays 1.44 — 1.6 reversed the win rate to 88% (I-421)
2026-09-015a8e642Tune: STAGE_TIERS[3].enemySpeedMult 1.22 -> 1.44 — kitted Night III win rate 94% -> 75% (I-046/#46)
2026-09-0182439d7Tune: perKill stays 0.3 — 33% income cut moved nothing (I-419)
2026-09-0186f21b8Tune: SPAWN_LADDER.hold stays 180 — faster type turnover also backfires (I-418)
2026-09-017eb8b6dTune: hpRampSec stays 240 — raising enemy HP made BOTH skills win MORE (I-417)
2026-09-01c893424Tune: speedLatePer30 stays 0.06 — locked invariant, out of tuner scope (I-416)
2026-09-01a1c5cb3Tune: ENERGY.dashCost stays 20 — pushed to 30, bought zero further wins (I-415)
2026-09-01a36d6d5Tune: ENERGY.dashCost 10 -> 20 — competent FINAL 15/16 -> 14/16, CE off the ceiling
2026-09-0120e0606Builds are per student: the club shop is gone, perks live on each sheet
2026-09-0151285d2Canon pass: a round's bell is not daybreak
2026-09-0103f6ed3Held bell: no sunburn — a round is an hour of the night, not daybreak
2026-09-01a3a75baThe Held Bell: First Bell waits for a live boss — a bounded, self-fueling finale
2026-09-019b962b1Cursed Energy becomes the specials pool: the weapon is free, fighting earns it
2026-09-019d12b3eThe spawn ladder: every enemy type has an era, not a permanent seat
2026-08-3121dd615The current: spawns arrive from a heading, not a closing circle
2026-08-31665519aThe Edge economy, pieces 3+2: pressure-charged domain and late-night rally
2026-08-315424e98Density taper: the late night trades bodies for toughness
2026-08-313ae4e8aRecovery valve: panic heal drops, hard-gated to the first 300s
2026-08-31fa72528THE SHIKIGAMI gets its own slot: shared CE pool, extreme cooldown
2026-08-312c887f3Room dressing: the five new hours look like themselves
2026-08-31b78caf6ONE NIGHT: the whole game is a single night — ten rooms, one hour each
2026-08-31315ce64The Line Change: tagging is a CE rotation, and the entrance is free
2026-08-31f44e438Tune: record that iframes is a switch at touchCd, not a dial (I-408)
2026-08-31f48a154Tune: PLAYER.iframes 0.55 -> 0.45 — I-006 met on both clauses
2026-08-31aaf2ed9Three new curses for the late shift, and blood instead of blobs
2026-08-31691ad3aPressure waves: a resolved domain opens real room, on a 30s valve
2026-08-30dd9ea8fFlash step: per-student STEP TRAINING on the student sheet
2026-08-30246f428Tune: player iframes 0.7->0.55 — first lever to move the FINAL ceiling, -22 pts at 0.6 and 0.8
2026-08-3034477c3Tune: sora volley pierce 0 -> 1 — I-012 fix-upward, spread 72 -> 53
2026-08-30b001603Student sheet: the timetable is four tiles in a row, and the sheet fits
2026-08-30ec721ceElectives enrol per STUDENT, and every student calls a different shikigami