Skip to content

fix(refinement): drop stale recency tie-break expectation contradicted by #2400 (main-red fix-forward) - #2450

Merged
sethkarten merged 1 commit into
mainfrom
fix/stale-recency-row
Sep 18, 2026
Merged

sethkarten merged 1 commit into
mainfrom
fix/stale-recency-row

Conversation

@sethkarten

@sethkarten sethkarten commented Sep 18, 2026

Copy link
Copy Markdown
Contributor

Why main is red

Test (coding-agent 1/3) fails at main: refinement.test.ts row "ranks by 'recency as the tie-break for equal scores'" expects [global:zz_newer] to win an equal-score tie, but that expectation is stale after #2400.

Two independently-green PRs combined into one red expectation:

No harness entry is lost from the built digest: this is the tie-break policy between two equal-score entries, and the merged #2400 contract (stable order, by design) is what the digest follows.

Fix

Delete the stale row (11 lines). It is now a true duplicate of #2400's merged test "breaks score ties by stable identifier order, not recency", which pins the same observable (equal scores, same titles, window 1 -> identifier order beats recency) and passes under #2392's IDF scoring. Updating the row instead would only create a second copy of that vector.

Validation

  • refinement.test.ts: 76/76 green (was 1 failed / 76 passed).
  • suite/agent-session-prompt.test.ts + suite/agent-session-compaction.test.ts: 69/69 green; recursion digest test green.
  • Test-line budget: net -11 test lines (deletion only), gate passes.

Authorization: fleet-manager fix-forward, authorized by the session owner's delegate (faerie1) under the standing 'until all are merged' directive: the main-red was caused by the wave-3 merge interaction of #2392 and #2400 (wave-2's main-tip CI was cancelled, never verified against #2400's file state). No functional regression: the deleted row is a true duplicate of #2400's merged tie-break test. Trivially revertable if overruled.


Note

Low Risk
Test-only deletion; harness ranking implementation is unchanged.

Overview
Removes a harness digest ranking table row in refinement.test.ts that still expected recency to break equal relevance scores (zz_newer over aa_older).

That expectation is obsolete after the merged tie-break policy uses stable identifier order (path, title, id) for prompt-cache stability, not updated_at. The same behavior is already asserted by "breaks score ties by stable identifier order, not recency", so deleting the row fixes the failing main CI without changing production ranking logic.

Reviewed by Cursor Bugbot for commit 78fcc36. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Drop stale recency tie-break test in refinement.test.ts harness digest ranking

Removes the test case that asserted the newer worktree entry wins a recency tie-break over alphabetical ordering when relevance scores are equal. The expectation contradicts behavior established in #2400.

Macroscope summarized 78fcc36.

@sethkarten
sethkarten enabled auto-merge (squash) September 18, 2026 00:35
@github-actions

github-actions Bot commented Sep 18, 2026

Copy link
Copy Markdown

Prime Agent performance — completed

PR 78fcc368 compared with main 126fe701.

Overall: 4 regressed · 0 improved · 37 no clear change.

Metric Main This PR Change
Cold startup 2,174.8 ms 2,112.1 ms ≈ -62.7 ms (-2.88%)
Warm startup 1,212.4 ms 1,255.1 ms ≈ +42.7 ms (+3.52%)
Installation 13.68 s 15.71 s ≈ +2.03 s (+14.86%)
Compressed release artifacts 72.68 MB 72.62 MB ≈ -0.06 MB (-0.08%)
Installed footprint 568.04 MB 568.04 MB ≈ -2e-05 MB (-0.00%)
Idle memory, summed RSS 1,269.75 MB 1,249.52 MB ≈ -20.23 MB (-1.59%)

Python runtime

Metric Main This PR Change
Python kernel startup 101.9 ms 115.7 ms ≈ +13.8 ms (+13.58%)
Python cell round trip 0.530 ms 0.647 ms ≈ +0.117 ms (+22.01%)
Empty bash command 12.7 ms 13.9 ms ≈ +1.1 ms (+9.02%)
Bash git status 19.6 ms 20.7 ms ≈ +1.1 ms (+5.62%)
Bash 32 KiB output 12.6 ms 15.7 ms ≈ +3.2 ms (+25.01%)
35 cells / 9 shell calls 187.8 ms 201.9 ms ≈ +14.1 ms (+7.49%)
Python interrupt to done 1.620 ms 1.841 ms ≈ +0.221 ms (+13.64%)
Python state snapshot 28.7 ms 27.2 ms ≈ -1.5 ms (-5.16%)
Python state restore 414.8 ms 428.2 ms ≈ +13.3 ms (+3.21%)
Python idle RSS 29.02 MB 28.75 MB ≈ -0.27 MB (-0.93%)
Python RSS after pandas workload 97.39 MB 96.51 MB ≈ -0.88 MB (-0.90%)

Session transport

Metric Main This PR Change
Private frame decode, 32 MiB in 8 KiB chunks 45.3 ms 67.0 ms $\textcolor{#c65a5a}{\textsf{↑ +21.7 ms (+47.79\%)}}$

UI interactions

Metric Main This PR Change
Resume large session (cold) 4,391.8 ms 4,832.5 ms ≈ +440.6 ms (+10.03%)
CPU, resume large session 6,780.0 ms 8,400.0 ms ≈ +1,620.0 ms (+23.89%)
Switch into large session 4,689.8 ms 5,549.4 ms ≈ +859.7 ms (+18.33%)
CPU, switch into large session 7,000.0 ms 8,700.0 ms $\textcolor{#b8625f}{\textsf{↑ +1,700.0 ms (+24.29\%)}}$
Open agents view from a session 165.8 ms 197.4 ms ≈ +31.7 ms (+19.10%)
CPU, open agents view 360.0 ms 450.0 ms ≈ +90.0 ms (+25.00%)
Full agents roster, many sessions 4.86 s 4.87 s ≈ +0.0067 s (+0.14%)
CPU, full agents roster 3.81 s 3.94 s ≈ +0.13 s (+3.41%)
Open another session from agents view 2,973.5 ms 3,029.0 ms ≈ +55.5 ms (+1.86%)
CPU, open from agents view 2,820.0 ms 3,000.0 ms ≈ +180.0 ms (+6.38%)
Reopen resident large session 629.7 ms 666.8 ms ≈ +37.1 ms (+5.89%)
CPU, reopen resident session 990.0 ms 990.0 ms ≈ +0.0 ms (+0.00%)
Open subagent session at depth 6 22,129.7 ms 22,748.4 ms ≈ +618.7 ms (+2.80%)
CPU, open subagent at depth 6 11,940.0 ms 12,760.0 ms ≈ +820.0 ms (+6.87%)
Open chain parent from agents view 4,569.7 ms 4,523.0 ms ≈ -46.7 ms (-1.02%)
CPU, open chain parent 4,300.0 ms 4,500.0 ms ≈ +200.0 ms (+4.65%)
Scheduled catalog, first request 2,219.4 ms 2,320.9 ms ≈ +101.5 ms (+4.57%)
CPU, scheduled catalog 3,730.0 ms 4,030.0 ms ≈ +300.0 ms (+8.04%)
Scheduled catalog, repeated request 1.2 ms 1.3 ms ≈ +0.1 ms (+11.13%)
CPU, repeated catalog 0.0 ms 0.0 ms ≈ +0.0 ms (N/A)
Cold worker with three catalog scans 998.1 ms 1,439.7 ms $\textcolor{#c45b5a}{\textsf{↑ +441.6 ms (+44.24\%)}}$
CPU, cold worker and scans 1,870.0 ms 2,290.0 ms $\textcolor{#b76260}{\textsf{↑ +420.0 ms (+22.46\%)}}$
UI memory after interactions 2,687.59 MB 2,702.67 MB ≈ +15.08 MB (+0.56%)

Sandbox cost: ~$0.1733 — no inference calls.
Run, logs, and downloadable raw results

Methodology and samples

Main resolved at 2026-09-18T00:35:48.601923+00:00. Harness 126fe701.
Linux x64, 4 vCPU, 8 GB RAM, 20 GB disk; region us.
Image: node:24-bookworm@sha256:be23f54a88d34e8824c741b19b91064094f92c1c97b194144bfc8b50d67258e2.
Stock tools, skills, daemon, and Python bootstrap enabled; fresh homes and a fixed Git fixture.
Onboarding is dismissed; the editor starts without a selected model or submitted prompt.
Medians shown. Arrows require a 20% timing/memory change plus absolute floors and IQR.
These practical noise floors are not a statistical significance test.
Cold means stopped Prime processes; OS filesystem caches are not flushed.
No model requests or credentials. Installation excludes build/setup time.
Installer tarballs use loopback; npm/Python downloads use the network with fresh caches.
Artifact size counts release tarballs; footprint after first use includes registry packages.
MB is decimal. Summed RSS can double-count shared pages; PSS is recorded when available.
Provisioning, setup, and build durations are recorded separately in the raw results.
Kernel probes use the installed JSONL runtime, outside the TUI/TypeScript host.
Per trial: 50 Python cells, 5 calls per shell case, and one 35-cell mix (9 git status calls).
Cell/shell values are batch means; other runtime timings are single operations.
State fixture: a 10,000-row × 8-column integer DataFrame and a 10,000-integer list.
Restore runs in a fresh kernel, including pandas imports; kernel startup is excluded.
Kernel RSS covers the isolated Python process; loaded RSS follows the pandas workload.
Transport benches run node against the prepared source build, outside the installed home.
Frame decode times one 32 MiB private frame, snapshot-chunk header, pushed in
8 KiB chunks; the wire shape of multi-MB frames on the daemon-worker channels.
UI trials use a fresh fixture set: 194 top-level sessions including one ~40 MB transcript,
40 ledger fan-out children, and a 6-deep subagent chain (~46 spawn edges).
Large fixtures hold 1,999 complete triples (~5 MB JSONL); medium 119; subagents 399 each.
Interactions: cold --resume of a large session, warm /resume switch, left-arrow to agents view,
roster settle with many saved sessions, search-and-open of another large session,
reattaching to that resident session, opening the chain parent, and drilling to depth 6.
Readiness is the rendered transcript tail plus a confirmed editor echo.
CPU metrics sum utime+stime across the whole benchmark-user process tree per interaction.
UI memory sums RSS after the interactions; PTY byte counts are in the raw results.
A separate catalog fixture has 2,300 sessions, 2,298 edges, and 13 paused scheduled-job owners.
Catalog timings cover first/repeated reads and cold worker creation under three pending scans.
All expected jobs and owner metadata are checked; worker readiness excludes TUI rendering.
Costs estimate full sandbox lifetimes at configured rates, including setup and build.
Budget target: $1; not a billing cap. Performance changes are informational.
Failed or incomplete execution fails the workflow; saved artifacts remain available.
Each side stops a phase after 2 identical consecutive failures.
Skipped trials are not attempted samples. Warm startup requires a successful cold launch.

Metric Main successful/attempted PR successful/attempted Main spread PR spread
Cold startup 10/10 10/10 IQR 276.7 ms IQR 277.2 ms
Warm startup 10/10 10/10 IQR 147.7 ms IQR 112.5 ms
Installation 3/3 3/3 range 1.90 s range 0.20 s
Compressed release artifacts 1/1 1/1
Installed footprint 1/1 1/1
Idle memory, summed RSS 10/10 10/10 IQR 100.85 MB IQR 93.96 MB
Python kernel startup 10/10 10/10 IQR 5.6 ms IQR 21.5 ms
Python cell round trip 10/10 10/10 IQR 0.080 ms IQR 0.123 ms
Empty bash command 10/10 10/10 IQR 1.8 ms IQR 1.9 ms
Bash git status 10/10 10/10 IQR 3.1 ms IQR 3.1 ms
Bash 32 KiB output 10/10 10/10 IQR 1.7 ms IQR 3.5 ms
35 cells / 9 shell calls 10/10 10/10 IQR 23.7 ms IQR 18.6 ms
Python interrupt to done 10/10 10/10 IQR 0.386 ms IQR 0.481 ms
Python state snapshot 10/10 10/10 IQR 4.3 ms IQR 3.4 ms
Python state restore 10/10 10/10 IQR 48.7 ms IQR 80.8 ms
Python idle RSS 10/10 10/10 IQR 2.96 MB IQR 1.80 MB
Python RSS after pandas workload 10/10 10/10 IQR 2.62 MB IQR 2.62 MB
Private frame decode, 32 MiB in 8 KiB chunks 10/10 10/10 IQR 4.8 ms IQR 7.0 ms
Resume large session (cold) 3/3 3/3 range 771.6 ms range 1,132.7 ms
CPU, resume large session 3/3 3/3 range 810.0 ms range 2,160.0 ms
Switch into large session 3/3 3/3 range 1,060.9 ms range 1,108.1 ms
CPU, switch into large session 3/3 3/3 range 1,120.0 ms range 1,220.0 ms
Open agents view from a session 3/3 3/3 range 41.3 ms range 48.7 ms
CPU, open agents view 3/3 3/3 range 130.0 ms range 210.0 ms
Full agents roster, many sessions 3/3 3/3 range 0.41 s range 0.01 s
CPU, full agents roster 3/3 3/3 range 1.04 s range 0.46 s
Open another session from agents view 3/3 3/3 range 218.2 ms range 491.1 ms
CPU, open from agents view 3/3 3/3 range 180.0 ms range 1,080.0 ms
Reopen resident large session 3/3 3/3 range 106.5 ms range 139.7 ms
CPU, reopen resident session 3/3 3/3 range 100.0 ms range 160.0 ms
Open subagent session at depth 6 3/3 3/3 range 1,027.0 ms range 1,521.8 ms
CPU, open subagent at depth 6 3/3 3/3 range 790.0 ms range 3,520.0 ms
Open chain parent from agents view 3/3 3/3 range 206.4 ms range 630.1 ms
CPU, open chain parent 3/3 3/3 range 280.0 ms range 1,470.0 ms
Scheduled catalog, first request 3/3 3/3 range 501.3 ms range 429.1 ms
CPU, scheduled catalog 3/3 3/3 range 800.0 ms range 540.0 ms
Scheduled catalog, repeated request 3/3 3/3 range 2.9 ms range 3.3 ms
CPU, repeated catalog 3/3 3/3 range 10.0 ms range 10.0 ms
Cold worker with three catalog scans 3/3 3/3 range 171.9 ms range 208.4 ms
CPU, cold worker and scans 3/3 3/3 range 280.0 ms range 310.0 ms
UI memory after interactions 3/3 3/3 range 32.49 MB range 22.47 MB

@sethkarten
sethkarten requested a review from xeophon September 18, 2026 05:01
@sethkarten
sethkarten merged commit ff40ea2 into main Sep 18, 2026
62 checks passed
@sethkarten
sethkarten deleted the fix/stale-recency-row branch September 18, 2026 05:45
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.

2 participants