Piper · Amplification
Log in

Summary / Component 18 of 24

18 Compounding improvement

Whether improvements accumulate into increasing future improvement capacity.

Latest0v2
Baseline0Oct 13
Live use—last 7 days

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:

VersionKeptWhy keptGain at keepPass rate, last reading (runs)
v0baseline0.501 (96)
v109-26cheaper (50% cost)+5.9 pts0.600 (72)
v209-27smarter, t = 1.63+10.0 pts0.669 (144)
v309-30smarter, t = 2.56+13.1 pts0.735 (180)
v410-04cheaper (77%)+2.2 pts0.732 (180)
v510-09cheaper (63%)+1.1 pts0.712 (108)

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.

VersionKeptWhy
v109-26cheaper
v209-27smarter (cost 286%)
v309-30smarter (cost 113%)
v410-04cheaper
v510-09cheaper
v610-17smarter 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:

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):

VersionMean scoreCost, 12 tasksTime 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

Suite v1 retired
0255075100Oct 1337.5
Suite v2 current
0255075100Oct 13Oct 150

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.

DateSuiteTypeScore±Live useCostNotes
2026-10-15v2sealed 015 —$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-13v2sealed 015 —$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-13v2sealed 015 —$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-13v1sealed 37.512.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.