Summary / Component 18 of 24
18 Compounding improvement
Whether improvements accumulate into increasing future improvement capacity.
Shared copy: the operator's name is replaced with "the operator", and machines other than Firefly are named by their role. Nothing else is changed.
Layer 4 — Recursive leverage. Do improvements to Piper make her better at improving Piper?
What her system has now
A record and a refusal (piper/amp_compounding, 10-13 02:29). Reading the change ledger, she reports one batch of 7 attempts, 1 settled, 0 verified gains, no cost and no generation field, and calls the amplification ratio undefined: Branch B (the outcome consumer) does not exist, so a two-branch run would compare the same improver with itself; and cost per attempt is not stored (her cost ledger is flagged red, ledger/balance 0.132×, fact piper/cost_gap_20261009).
Generations she does have, not used in that doc: the solver loop, ~/rsi/results/*.json. 17 sessions from 09-25 to 10-12, 15 decided, versions v0 to v5, each with incumbent and candidate pass rates on 12 hidden tasks, a t value, an older-set retention check, session spend and scoring cost. She used five of these sessions as items in her paired replay (piper/rsi_replay_result).
What is missing
- No generation or parent field anywhere a change is recorded; the solver loop's version number is the only lineage.
- No per-attempt cost or human-assistance field on the change ledger (her own finding). The solver results do carry spend.
- Nothing reads the solver series and asks whether keeps are getting easier or harder.
Reviewer Claude, 2026-10-15
Reviewer's read, before testing: She says her record has no generations; her own solver loop has six, and capability keeps stopped after the third
On the change ledger her answer is correct: B is the same as A, the ratio is 0/0, there is one batch. But "the record cannot be partitioned into generations at all" is true of the ledger, not of her. The solver loop is a generation record:
| Version | Kept | Why kept | Gain at keep | Pass rate, last reading (runs) |
|---|---|---|---|---|
| v0 | baseline | 0.501 (96) | ||
| v1 | 09-26 | cheaper (50% cost) | +5.9 pts | 0.600 (72) |
| v2 | 09-27 | smarter, t = 1.63 | +10.0 pts | 0.669 (144) |
| v3 | 09-30 | smarter, t = 2.56 | +13.1 pts | 0.735 (180) |
| v4 | 10-04 | cheaper (77%) | +2.2 pts | 0.732 (180) |
| v5 | 10-09 | cheaper (63%) | +1.1 pts | 0.712 (108) |
- Pass rate rose from v0 to v3 (0.50 to 0.74), then stopped: v4 0.73, v5 0.71 on the latest reading.
- Decided sessions per keep: 1, 1, 3, 4, 4, and 0 keeps in the 2 decided since. Only one keep cleared t = 2 on capability (v3); her own noise-floor note marks the v1 and v2 verdicts "uninformative under the measured floor".
- No capability keep in the 10 decided sessions after 09-30; the two keeps since passed on cost.
On the one series she has, that is the opposite of compounding: the early gains were large and quick, the later ones small and slow, and the measured pass rate no longer rises. Two cautions before reading it as "her improver is getting worse": the hidden tasks may be drawn fresh each session, so difficulty varies (corrected 10-14: the 12 main hidden tasks are a fixed set); and each candidate is read on 36 runs, so a 2-point gain is inside noise. Either way the series is the right object for #18, it costs nothing to read, and her doc missed it.
A smaller point with the same root as #5: a newly kept version's first reading is optimistic. v3 read 0.783 on 72 runs and settled to 0.735 on 180.
Overlap: her keep-rule power note (piper/rsi_keep_rule_power) and the RSI practice rig (RULES 0.05 bar) measure the resolution of the same loop; governance #1 asks whether her "verified" gains are hollow. #18 adds only the time axis.
Update 2026-10-17 — solver v6 kept: the first capability keep since v3, and the first keep ever that is both smarter and cheaper
Result. The 10:00 loop session was kept at 12:36 as v6: mean hidden-task score 0.676 → 0.750 (+0.074 per task, t = 2.24; bar +0.05 and t ≥ 1.28), cost per task 86% of v5's (t −3.27), older set 1.000 (v5 0.967), no hidden loss. 4 candidate runs per main task against v5's pooled 180 runs; no second look needed. Session spend $0.15, scoring $2.01. It gained on 10 of 12 tasks (van-dispatch +0.30, register-spill +0.15, changeover +0.10). Weak spot: log-dictionary scored 0 on 3 of 4 runs, and van-dispatch had one invalid run.
| Version | Kept | Why |
|---|---|---|
| v1 | 09-26 | cheaper |
| v2 | 09-27 | smarter (cost 286%) |
| v3 | 09-30 | smarter (cost 113%) |
| v4 | 10-04 | cheaper |
| v5 | 10-09 | cheaper |
| v6 | 10-17 | smarter and cheaper (86%) |
How she got it (all in about 17 minutes, four dispatches, $0 before the candidate): a read-only recon of the rules and the last three rollbacks; an A/A noise floor of v5 against itself from the loop's cached practice runs (per-run sd 0.271, so a practice "gain" under ~0.13 means nothing); a diagnosis of v5's one-in-four collapses from the stored runs, reproduced by deleting or adding a single line (a swap that keeps the partner's demand, and a swap that forgets its tier counts: the same stale-bookkeeping bug twice); then one change aimed at that bug class (swaps must keep a move's bookkeeping, and the self-check must test feasibility and a recomputed objective, not just "imports and runs"). She filed odds with three candidates (picked p = 0.55, claimed +0.045) and created READY through ready_guard, whose MDE check said the claim would only be detectable on a second look. The real gain was larger than she claimed.
Was it amplification? Partly, and the parts are separable:
- Used amplification machinery: the odds record and ready_guard gate (#14), the MDE pre-check and noise-floor reasoning (#13), and diagnosis of failures from stored runs before choosing the change (#7). ready_guard and the MDE pre-check were built 10-14 in the chain that started from the first amplification salience notice.
- Not triggered by amplification: the session started from the loop's own scheduled 10:00 message. Her four dispatches don't mention amplification, the amp-bench or any salience notice. The 09:45 amplification notice went to a different task.
- Help from outside her: the practice rig (
compare.py) and the loop's scoring changes (4 candidate runs, pooled incumbent, screen, 10-15) were built by Claude for the operator; the 10-13 solver steer asked her to stop wall-time trims and measure first. No operator or Claude message reached her between 10:20 and the result. This session falls inside the operator's 10-17 clean window.
What it means for compounding: decided sessions per keep were 1, 1, 3, 5, 4, and now 5 (v5 → v6). One capability keep after six cost-or-nothing sessions is not a trend yet. What changed is the method: measure the noise, diagnose a real failure, make one targeted change. That method came from earlier improvement work (#13, #14). If the next capability keeps also come from this method, that is compounding. No score changed on this card.
Update 2026-10-14 — taken over by Claude: same-day re-score of v0, v3, v5. No capability gain since v3, nothing lost either; the loop is too coarse to see small gains
The operator asked Claude to do #18 in Piper's place. Everything below used the loop's own scorer and account, on the fixed set of 12 main hidden tasks (the review's "drawn fresh each session" caution was wrong and is struck out above). Cost $1.98. Nothing in the loop's state was touched.
Same-day re-score (all three versions side by side, one run per task):
| Version | Mean score | Cost, 12 tasks | Time per task |
|---|---|---|---|
| v0 (baseline) | 0.503 | $0.64 | ~580 s |
| v3 (last "smarter" keep) | 0.663 | $0.81 | ~480 s |
| v5 (current) | 0.674 | $0.52 | ~315 s |
Paired by task: v0→v3 +0.16 (t 1.1), v3→v5 +0.01 (t 0.1). Capability stopped rising at v3. The two later keeps are real cost cuts with no measurable quality loss: v5 matches v3 at 64% of its cost. The falling daily readings of v5 (0.743 on 10-09 down to 0.600 on 10-14) are run-to-run noise, not decay: the same code read 0.674 the same afternoon.
Why it flattened: the loop cannot see small capability gains. From 11 repeated runs of v5 on each task, one run varies with a standard deviation of 0.27. With 2 candidate and 2 incumbent runs on 12 tasks, a day's measured gain has a standard error of about 0.08, so a keep needs about +0.10 observed. A true +0.05 (the loop's own stated bar) is kept only about 26% of the time, and a true +0.10 about half the time. Cost cuts are nearly noise-free (t −5 to −7), so they are what gets through. Decided sessions per keep: 1, 1, 3, 5, 4, and 4 since. That is the opposite of compounding, and the measurement explains most of it. Zeros are not the main noise: 7% of 612 graded runs since 10-01 score 0, most of them valid answers no better than the simple baseline. A validity guard has about 3% headroom.
Generation record (missing piece 1, done): ~/rsi/results/generations.json on Firefly. Per version it records lineage, kind of keep, gain at keep, every loop reading as incumbent, wall time, cost per task, today's re-score and the loop's resolution numbers. It appears in her MY RECORD digest.
The lever, pulled (operator's go, live from the 10-15 session): a second look. If a candidate misses the smarter bar on its first 2 runs per task but shows at least +0.03 with t ≥ 0.5, the loop scores it 6 more times per task, plus 2 more same-day runs of the current version, and applies the same keep rules to everything pooled. The thresholds are unchanged; only the evidence grows. Estimated: a real +0.10 is kept ~95% of the time (was ~65%), a real +0.05 ~50% (was ~33%), and a no-effect change stays near the 10% false-keep rate. Replayed on the 18 past sessions it would have fired 5 times (09-28, 10-02, 10-03, 10-07, 10-12), costing about $4 and 4–5 hours of scoring each. Off switch SECOND_LOOK = False in rsi_loop.py; RULES.md and her daily start message say how it works. Readout: whether a capability keep follows within the next ~10 sessions.
Test suite proposed
Pre-flight ($0, about 10 minutes): compute decided sessions per keep and gain per keep by version from ~/rsi/results/*.json (done above: 1, 1, 3, 4, 4; capability keeps stopped after v3). The measure has already moved both ways, so it can show compounding or its absence. Then check whether the flattening is a ceiling: do the hidden tasks of the last five sessions get harder, or does v3 score the same on them as v5?
Items: before Branch B exists, no two-branch run. Instead, tag each solver session with a generation, the model and the task draw, so the series reads without reconstruction; and re-score v0, v3 and v5 together on one fixed slice of about 10 hidden tasks (about $1), which separates "the improver got slower" from "the tasks got harder" or "the solver hit a ceiling". The two-branch ratio comes after #16's consumer exists.
Live use: decided solver sessions per kept version over the last three versions. Today: 3, 4, 4 (rising means slowing), with 0 capability keeps in 10 decided sessions after 09-30.
Scoring rules shared by all 24 suites: How the tests work.
Research & attempts
No documents yet.
Score history
Dashed line: the suite's baseline. Shaded band: the ± interval. Hollow dots are anchor items carried over from an earlier suite. Scores from different suite versions are not comparable, so each version gets its own panel.
| Date | Suite | Type | Score | ± | Live use | Cost | Notes |
|---|---|---|---|---|---|---|---|
| 2026-10-15 | v2 | sealed | 0 | 15 | — | $0.00 | RE-READ 10-15 (Claude, full refresh; not her submit, accepted 0 stays). n=5. Failed categories: later generations gain less 1. v1: +9.9 pts; v2: +6.9 pts; v3: +6.6 pts; v4: -0.3 pts; v5: -5.6 pts; first 2 mean +8.4, last 2 mean -2.9 |
| 2026-10-13 | v2 | sealed | 0 | 15 | — | $0.00 | INCONCLUSIVE via the amp-bench API (cl-20261013-generation-record-1.0.0). n=5. Failed categories: later generations gain less 1. v1: +9.9 pts; v2: +6.9 pts; v3: +6.6 pts; v4: -0.3 pts; v5: -3.7 pts; first 2 mean +8.4, last 2 mean -2.0 |
| 2026-10-13 | v2 | sealed | 0 | 15 | — | $0.00 | BASELINE via the amp-bench API (set by Claude at install). n=5. Failed categories: later generations gain less 1. v1: +9.9 pts; v2: +6.9 pts; v3: +6.6 pts; v4: -0.3 pts; v5: -2.0 pts; first 2 mean +8.4, last 2 mean -1.1 |
| 2026-10-13 | v1 | sealed | 37.5 | 12.5 | — | $0.00 | v1 summary score (baseline, $0): read off the 10-13 review, no bench run. Rubric = 4 checks x 25 (yes 25 / partly 12.5 / no 0): E exists 12.5, P in her default path 12.5, M measured 12.5, W measure shows it working 0. ± 12.5 = one rubric step. The solver has 6 generations: pass rate rose v0→v3 (0.50→0.74), then flattened (v4 0.73, v5 0.71), the opposite of compounding; she didn't use this series. v2 bench LIVE (2026-10-13, amp-bench API: Piper submits a change and gets KEEP / REVERT / INCONCLUSIVE / SATURATED back; v2 rows below): #18 Compounding improvement, v2 (record suite, $0). Score = 50 + 50 x (mean re-measured capability gain of your last 3 kept solver versions minus that of your first 3) / (first 3's mean), clamped 0-100. 50 = flat, above 50 = later generations gain more (compounding), below = gains shrinking. Gains are re-measured (each version's last incumbent reading minus its parent's), not the day-of-keep numbers. |
Experimental record
One entry per intervention: hypothesis, prediction, before and after, cost, side effects, and the keep-or-revert decision.
No interventions recorded yet.