test(fs-search): re-record the glob-sampling snapshot against the real API

The scenario previously carried an authored fixture; W4 of #1119 review
requires a live transcript. Recording surfaced two composition bugs that
are fixed here alongside it:
- provider ids: the app and the replay catalog both named the old
  'deepseek' provider, which no adapter registers; both now use
  'deepseek-official'
- the live config lacked persistenceCompression: none, so record-mode
  sessions were written zstd-compressed and could not be harvested
  (the snapshot twin already forced plaintext)

Recorded logs also need deterministic replay:
- packChunks: false in both configs — the eager-drain batch boundaries
  that split packed delta runs are timing-dependent, so a packed log of
  a long reasoning stream cannot replay-match its live record
- the fixture's request/header config and request/context are normalized
  to the replay-produced minimal shape (the live adapter logs model
  capabilities llm-replay has no data for), and tool-result path
  separators are canonicalized to '/' for the Linux golden

posixOnly is restored now that the fixture is recorded.
This commit is contained in:
Huanqi Cao
2026-08-01 21:56:32 +08:00
parent a9871d4af1
commit d22438e2b1
4 changed files with 142 additions and 31 deletions
+10 -3
View File
@@ -181,16 +181,23 @@ const SCENARIOS: Scenario[] = [
// `--sort=modified` order, pinning over-cap glob sampling without depending
// on a host-installed ripgrep binary or a PATH stand-in. POSIX-only because
// the displayed paths carry `/` separators the session-log comparison
// cannot normalize.
// cannot normalize. Recorded (not authored): the assistant turn is a real
// model transcript; re-record with `test:snapshot:record -t fs-glob-sampling`.
// The composition disables packed chunk rows (fs-search.cordis.yml), whose
// run boundaries depend on eager-drain timing, and the recorded fixture's
// `request/header` config and `request/context` are normalized to the
// replay-produced minimal shape (the live adapter logs model capabilities
// like maxTokens/reasoningEffort that llm-replay has no data for), and its
// tool-result paths are canonicalized to `/` separators.
{
name: 'fs-glob-sampling',
hasModelTurn: true,
recorded: false,
recorded: true,
posixOnly: true,
pinsHeader: true,
headerClass: 'fs-search',
configPath: FS_SEARCH_CONFIG,
prepareWorkspace: prepareFsSearchWorkspace,
posixOnly: true,
},
{ name: 'fs-read', hasModelTurn: true, recorded: true },
{ name: 'fs-write', hasModelTurn: true, recorded: true },