Repository navigation
Report: interval floor of 10 paired cases, rank only interval-backed variants - #20
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Essentials Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
…variants Address review items B2 and B3 on replay reporting (and document B4). - BOOTSTRAP_MIN_PAIRED_CASES goes from 2 to 10. Below the floor the mean is still reported next to common_case_count, but no interval is published; a percentile bootstrap over a handful of points is the range of those points wearing a 95% label. - A segment's ranking now holds only variants whose interval excludes zero, ascending by mean delta. Every other variant with a mean is listed unordered under indistinguishable_from_baseline. Each variant carries interval_excludes_zero, and each segment interval_family_size, so the unadjusted per-interval level is auditable. - REPORT_SCHEMA_VERSION becomes 4, kept distinct from the relevance report's 3; render_markdown dispatches on the presence of the task document instead of a version number the two report kinds could share. - Re-render the PAA reference evidence and golden fixture (the fixture batch has two paired cases, now below the floor); update the operator doc and tests. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RzSnFgZ2rHydpunbz2b1V9
1a590d4 to
a789d07
Compare
There was a problem hiding this comment.
🟢 Approval recommended
The reporting behavior changes are consistently implemented across JSON/Markdown, reflected in updated fixtures, and covered by targeted new/updated tests for both above-floor and below-floor scenarios.
Pull request overview
This PR updates Scout’s batch/sweep replay reporting to (1) require a higher minimum paired-case count before publishing bootstrap confidence intervals, and (2) restrict segment “ranking” to interval-backed variants whose 95% interval excludes zero, while tracking and reporting the interval family size for auditability. It also bumps the report schema version accordingly, refreshes golden/reference evidence, and updates the pinned jig revision.
Changes:
- Raise
BOOTSTRAP_MIN_PAIRED_CASESfrom 2 → 10; below the floor, report the mean/common-case count but omit CI bounds and markinterval_available: false. - Partition variants into
ranking(interval excludes zero, sorted by mean delta) vsindistinguishable_from_baseline(unordered set semantics; deterministic name-sorted representation), and addinterval_family_sizeper segment. - Bump schema version to 4, update markdown rendering, update
jigpin, and re-render reference evidence / fixtures and docs.
File summaries
| File | Description |
|---|---|
| src/scout/replay/reporting.py | Implements the new interval floor, interval-excludes-zero partitioning, interval family size, schema bump, and updated Markdown rendering/dispatch. |
| tests/test_replay_reporting.py | Updates existing assertions and adds focused unit tests for interval partitioning and floor behavior. |
| tests/test_replay_cli.py | Aligns CLI JSON report version assertion with the new schema version constant. |
| docs/operations/offline-replay.md | Documents the new interval floor, ranking semantics, and interval family size rationale. |
| src/scout/replay/experiments.py | Updates pinned JIG_REVISION. |
| pyproject.toml | Updates the jig git dependency revision. |
| uv.lock | Updates locked jig source revision to match the pin. |
| tests/test_jig_contract.py | Updates the contract-test docstring to reflect the new jig revision context. |
| web/tests/fixtures/replay-worker-configuration.json | Updates the jig revision in the web test fixture. |
| src/scout/paa/reference_evidence.py | Fixes the reference evidence regeneration command path in the error message. |
| evidence/paa/reference/reference-manifest.json | Re-rendered reference evidence manifest consistent with updated reporting outputs. |
| evidence/paa/reference/experiment-summary.json | Re-rendered reference experiment summary reflecting new report schema/fields. |
| tests/fixtures/paa_reference/expected/reference-manifest.json | Updates golden manifest fixture to match regenerated artifacts. |
| tests/fixtures/paa_reference/expected/experiment-summary.json | Updates golden experiment summary fixture for schema v4 and new segment fields. |
Review details
- Files reviewed: 8/8 changed files
- Comments generated: 0
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Stacked on #19 (both re-render
evidence/paa/reference/); retarget tomainonce #19 merges.Summary
Addresses review items B2 and B3 on
src/scout/replay/reporting.py, and records the family size for B4.BOOTSTRAP_MIN_PAIRED_CASES2 → 10. Below the floor the mean is still reported besidecommon_case_count, butinterval_availableis false and no bound is published. The Markdown saysunavailable (< 10 paired cases).rankingnow contains only variants whose 95% interval excludes zero, ascending by mean delta. Every other variant with a mean goes intoindistinguishable_from_baseline, an unordered set the Markdown renders as a set. Each variant carriesinterval_excludes_zero(nullwhen no interval).interval_family_size, the number of intervals it holds at the unadjusted 95% level. No correction is applied; the size is recorded so a reader can apply one. The Markdown states this per segment.REPORT_SCHEMA_VERSION2 → 4. It skips 3 because the relevance report already uses 3 andrender_markdownwas dispatching on that number; it now dispatches on the presence of the relevancetaskdocument.evidence/paa/reference/and the golden fixture (the fixture batch has two paired cases, now below the floor: empty ranking, one indistinguishable variant). Operator doc updated indocs/operations/offline-replay.md.Not in this PR: B1 (repeats per case) moves the canonical plan hash and gets its own PR.
Test plan
uv run pytest(2441 passed, 11 skipped) including newTestIntervalPartitionunit tests, a 10-case sweep where both variants rank, and a 3-case sweep where neither doesuv run ruff check .,uv run mypy .🤖 Generated with Claude Code
https://claude.ai/code/session_01RzSnFgZ2rHydpunbz2b1V9