feat(eval): agent-maintained notes arm for the SWE-chat planning benchmark - #160
Open
chiragbiradar wants to merge 2 commits into
Open
feat(eval): agent-maintained notes arm for the SWE-chat planning benchmark#160chiragbiradar wants to merge 2 commits into
chiragbiradar wants to merge 2 commits into
Conversation
…rness Adds a 'notes' runner to swechat-plan: the agent plans with a docs/agent-notes.md maintained by an agent across the same prior sessions used to build Greplica memory, giving the benchmark a realistic non-Greplica docs baseline alongside the graph-export 'docs' arm. - evals/swechat-plan/build-notes.ts: replays the case's prior sessions in order (same transcripts, same reconstructed edits as build-memory) but has the agent maintain a single agent-notes.md instead of Greplica proposals; stores the final notes as a checked-in notes-seeds/agent-notes.md with a manifest. Notes are committed into the replay snapshots so git reset/clean between sessions cannot drop them. - run.ts: --runner notes seeds docs/agent-notes.md from the case's notes-seeds, prompts the agent to navigate from the notes, blocks greplica/codegraph as in baseline, audits notes-file usage (first_notes_memory_command, notes_memory_first_navigation_used) and forbids notes access from other runners; records notes size stats next to the docs-arm stats. - build-memory.ts: export the transcript/edit replay helpers so build-notes reuses them instead of duplicating. - package.json: eval:swechat-plan-build-notes script.
Same GNU-tar absolute-Windows-path issue fixed for run.ts and build-memory.ts in a separate PR; build-notes carries the fix for its own copy of the extraction step.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follows up on the Discord thread about the docs-folder comparison for the roadmap benchmark item — builds directly on the SWE-chat planning harness from #139.
What this adds
A fourth benchmark arm answering "how does Greplica compare with a docs folder maintained by an agent": alongside
baseline,greplica, and the graph-exportdocsarm,--runner noteshas the planning agent navigate from adocs/agent-notes.mdthat an agent maintained across the same prior sessions used to build the Greplica memory seeds.That gives the benchmark both docs baselines:
docs— Greplica's knowledge exported to markdown (structured memory, flat presentation)notes— what developers actually do today: an agent keeping its own notes file session by session, no Greplica involvedHow it works
evals/swechat-plan/build-notes.ts(mirror ofbuild-memory.ts): replays the case's prior sessions in chronological order using the same transcript-to-markdown conversion and reconstructed session edits, but instead of writing Greplica proposals the agent maintains a singleagent-notes.md(bootstrap pass on the base snapshot first, then one update per session). The final notes are stored as a checked-innotes-seeds/agent-notes.mdplus a manifest with per-step token/size stats, parallel tomemory-seeds/.One subtlety: the replay machinery does
git reset --hard && git clean -fdbetween sessions, which would delete an untracked notes file — so notes are committed into the replay snapshots after each step.run.ts:--runner notescopies the case's notes seed todocs/agent-notes.mdin the target repo, prompts the agent to use it as its memory map (mirroring the docs-arm prompt shape), keeps greplica/codegraph blocked exactly like baseline, and extends the transcript audit:first_notes_memory_command/notes_memory_first_navigation_usedfor the notes arm, and aforbidden_notes_memory_accessviolation if any other runner touches the file. Notes size stats (chars / estimated tokens) are recorded next to the docs-arm stats for storage-cost comparison.build-memory.ts: only change is exporting the transcript/edit replay helpers sobuild-notesreuses them instead of duplicating ~100 lines.Checks run locally
npm run typecheck— cleannpm run build— clean--runner notes --fixture-onlyreaches fixture prep;--runner bogusrejected with the updated usage linegit diff --check— cleanHonest caveat: I couldn't run the arms end-to-end here — that needs the SWE-chat transcript root (
.context/swechat-data) and an OpenAI key, and additionally the harness'star -C <absolute path>step doesn't work on Windows (GNU tar treatsC:\...as a remote host — pre-existing, hitsbaselinethe same way; happy to fix separately). Typecheck, build, and the argument/setup paths are verified.To produce numbers
npm run eval:swechat-plan-build-notes -- --case <case-id>once per case (needs transcript root + key) to generate the checked-innotes-seeds/npm run eval:swechat-plan -- --case <case-id> --runner notesI can generate and check in the notes seeds for the four #139 cases if you can share the transcript root setup — or if it's easier, run build-notes on your side and I'll take it from there. Also happy to adjust the notes-agent prompts if you want the notes arm handicapped/equipped differently.