Skip to content

Give /forge-perf a verdict for each read stream - #71

Draft
bajtos wants to merge 1 commit into
claude/read-rates-historyfrom
claude/read-rates-verdicts
Draft

bajtos wants to merge 1 commit into
claude/read-rates-historyfrom
claude/read-rates-verdicts

Conversation

@bajtos

@bajtos bajtos commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

Written by Claude.

Give the /forge-perf comment a verdict for read-back and restore beside ingest.

  • experiment.py adds each run's read rates to its status entry. It compares each read stream the way it compares ingest: the median of the branch runs' medians against main's, judged against that stream's noise band.
  • The ingest comparison keeps the top-level keys, so a status written before this change still parses. read_back and restore objects of the same shape sit beside them.
  • A stream is null when a run has no positive median for it. A p5 delta is null when a run lacks the p5.
  • pr_run.py renders one row per stream (median delta, p5 delta, median noise band, verdict), and the state line names all three verdicts. It accepts a status with or without the read objects.

No committed band covers the read streams yet, so they use fallbacks:

Stream Median p5
Ingest committed band, else ±3.5% committed band, else ±11%
Read-back ±3.5% ±11%
Restore ±34% none

Read-back tracks the ingest median within about 2% in every tier 3 run. Restore's ±34% is twice the 17.2% coefficient of variation of the 19 valid tier 3 runs. Those runs used different sets, so it is an upper bound.

Refs FIL-810

@bajtos
bajtos added this pull request to stack #73 October 2, 2026 17:18
@bajtos
bajtos force-pushed the claude/read-rates-verdicts branch from 3f82be8 to b99064b Compare October 5, 2026 17:41
@bajtos
bajtos force-pushed the claude/read-rates-verdicts branch from b99064b to 78bde27 Compare October 5, 2026 18:03
A pull request that changes ingot's read path should see whether
read-back or restore moved, not only ingest. experiment.py adds each
run's read rates to its status entry and compares read-back and restore
the way it compares ingest: the median of the branch runs' medians
against main's, judged against that stream's noise band.

The ingest comparison keeps the top-level keys, so a status written
before this change still parses; read_back and restore objects of the
same shape sit beside them. A stream is null when a run has no
positive median for it, and its p5 delta is null when a run lacks the
p5, as for records from before the harness recorded read p5.

No committed band covers the read streams yet, so they take fallbacks.
Read-back takes ingest's ±3.5% median and ±11% p5, since it tracks the
ingest median within about 2% in every tier 3 run. Restore takes ±34%
on the median, twice the 17.2% coefficient of variation of the 19
valid tier 3 runs, and no p5 band, because no run has recorded a
restore p5 yet.

The comment renders a row per stream with the median and p5 deltas,
the median noise band and the verdict, and the state line names all
three verdicts. pr_run.py accepts a status with or without the read
objects.

Refs FIL-810

Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Miroslav Bajtoš <oss@bajtos.net>
@bajtos
bajtos force-pushed the claude/read-rates-verdicts branch from 78bde27 to 16ddd30 Compare October 5, 2026 18:23

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant