Skip to content

Give the typedmemeval verb a real stage-1 dry run - #211

Merged
joslat merged 2 commits into
mainfrom
feat/typedmemeval-dry-run
Aug 31, 2026
Merged

Give the typedmemeval verb a real stage-1 dry run#211
joslat merged 2 commits into
mainfrom
feat/typedmemeval-dry-run

Conversation

@joslat

@joslat joslat commented Aug 31, 2026

Copy link
Copy Markdown
Owner

The three-stage run protocol covers every paid run, and the verb that runs most of them had no
stage 1.

What it does: loads the corpus through TypedMemEvalCorpus.Load with the same option mapping the
real run uses — so it proves the corpus the run will actually read rather than a simulation — and
reports vertical, arm token, seed, selected question count and shape distribution. An empty selection
aborts: a run that selects nothing measures nothing, and a window holding none of the phenomenon
has already cost a paid run once.

One thing worth noting. The first version sat inside RunVerticalAsync, so it booted a Neo4j
container and read Azure credentials before printing "nothing spent". A dry run that spends
anything — money, or two minutes of container start — isn't what the directive asked for. It now runs
before any client, container or credential read: 2.9s, no container.

Verified on the row 53 configuration — arithmetic, seed 20260821, arm default, 50 questions, shapes
count 14 / sum 14 / duration 12 / delta 10.

The drift guard now names --dry-run, so an advertised option that stops being carried fails the
suite. Release 0-warn; 730/730.

The three-stage run protocol is a maintainer directive covering every paid run, and the verb that
runs most of them had no stage 1. This adds one: it loads the corpus through TypedMemEvalCorpus.Load
using the same option mapping the real run uses -- so it proves the corpus the run will actually
read, not a simulation of it -- and reports the vertical, the arm token, the seed, the selected
question count and the shape distribution.

It also carries the containment precondition: an empty selection ABORTS, because a run that selects
nothing measures nothing, and a window holding none of the phenomenon has already cost this project
a paid run.

The first version of this sat inside RunVerticalAsync, which meant it booted a Neo4j container and
read Azure credentials before printing "nothing spent". A dry run that spends anything -- money or
two minutes of container start -- is not the thing the directive asked for. It now runs before any
client, container or credential read, and completes in under three seconds.

Verified on the row 53 configuration: arithmetic, seed 20260821, arm default, 50 questions selected,
shapes count 14 / sum 14 / duration 12 / delta 10, no container created.

The drift guard now names --dry-run, so an advertised option that stops being carried fails the
suite. Release 0-warn; LongMemEval 730/730.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RM9gMsvo3SpYqEBENbaefo
Copilot AI lite review requested due to automatic review settings August 31, 2026 09:48

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

XML documentation comments around the new DryRun block contain duplicate/misattached <summary> tags that should be corrected to avoid misleading docs and potential XML-doc warnings.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Adds a real “stage 1” dry-run path to the typedmemeval tool so operators can validate corpus loading and question selection (including shape distribution) before any paid calls, Neo4j container startup, or credential reads.

Changes:

  • Introduces a --dry-run option that exits early after loading the corpus via the same option-mapping path as the real run.
  • Implements DryRun(...) output including vertical, arm token, seed, selected question count, and shape distribution; aborts if selection is empty.
  • Extends the option drift-guard unit test to ensure --dry-run is carried on the options record.
File summaries
File Description
tools/AgentMemory.LongMemEval/TypedMemEvalProgram.cs Adds --dry-run, early-exit stage-1 execution, and the DryRun implementation for corpus/selection verification.
tests/AgentMemory.Tests.Unit.LongMemEval/TypedMemEvalCommandLineTests.cs Updates the “advertised options are carried” drift guard to include --dry-run.
tests/AgentMemory.Tests.Unit.LongMemEval/TypedMemEvalArmProvenanceTests.cs Updates construction of TypedMemEvalRunOptions to include the new DryRun field.
Review details

Suppressed comments (1)

tools/AgentMemory.LongMemEval/TypedMemEvalProgram.cs:546

  • The summary that describes PrintSupersessionStore was moved above DryRun, leaving PrintSupersessionStore undocumented and DryRun partially mis-documented. Reattach the summary to PrintSupersessionStore.
    private static void PrintSupersessionStore(LongMemEvalSupersessionStore? store)
    {
  • Files reviewed: 3/3 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread tools/AgentMemory.LongMemEval/TypedMemEvalProgram.cs Outdated
Copilot's review of #211 found consecutive <summary> tags above DryRun. Same cause as the one it
found on #210: inserting a method between an existing doc comment and its body leaves the comment
attached to the newcomer, so one method carries two summaries and another carries none.

Twice in one session is a pattern rather than a slip, so this fixes both sites and then SWEEPS the
repository for the shape instead of waiting to be told about the next one. The sweep found a third,
pre-existing and unrelated to this branch: LeadingToken's summary had been stranded above
LeadingTokenAfterLabel in LongMemEvalPostRunDiagnostics, leaving the parser it describes
undocumented. Reattached.

Repo-wide sites remaining: none. Release build 0-warn.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RM9gMsvo3SpYqEBENbaefo
@joslat
joslat merged commit 1e9d61a into main Aug 31, 2026
7 checks passed
@joslat
joslat deleted the feat/typedmemeval-dry-run branch August 31, 2026 10:15
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