Skip to content

fix(transcription): honor supplied whisper.cpp environment - #554

Merged
steipete merged 2 commits into
steipete:mainfrom
vincent-peng:codex/fix-whisper-child-environment
Nov 5, 2026
Merged

steipete merged 2 commits into
steipete:mainfrom
vincent-peng:codex/fix-whisper-child-environment

Conversation

@vincent-peng

@vincent-peng vincent-peng commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Summary

whisper.cpp binary/model selection used the resolved environment, but its availability and transcription subprocesses inherited only the ambient process environment. Config-only variables and an explicitly supplied PATH could be lost at execution.

Pass the inherited environment with supplied values overlaid at both launch sites. Partial environments retain ambient variables, supplied values take precedence, and process.env is not mutated. Binary/model selection and provider ordering are unchanged.

Behavior proof

Captured built-CLI terminal log shows the exact base and PR commits, recording executable, fresh config, environment allowlist, invocation, child arguments, stdout/stderr, and exit status. Config-only values reach both PR child launches; the base drops them. A conflicting process value wins on both builds. Config-only PATH discovery fails on the base and succeeds on the PR.

The audio/model fixtures are synthetic. This verifies child-process environment propagation without speech inference.

Validation

  • pnpm run build
  • pnpm run check: 3,888 passed, 43 optional/live skips
  • Five child-process/CLI regressions cover supplied PATH, partial environments, override precedence, omitted env, and config-only runtime values

Existing shell exports and installed daemon environment snapshots already worked. No new configuration fields or dependencies.

Maintainer validation

Validated the five environment regressions and pnpm run check on Linux (3,882 passed, 49 optional skips). Independent P0–P2 review is clean. Added the credited Unreleased entry; release versions are unchanged.

@clawsweeper

clawsweeper Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

🦞👀
ClawSweeper picked this up.

Pull request received. I will update this pull request when review starts.

ClawSweeper review complete

ClawSweeper finished reviewing this revision. The review result is being finalized.

View the workflow run.

@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. P2 Normal priority bug or improvement with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. and removed clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Nov 1, 2026
@clawsweeper

clawsweeper Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Codex review: needs maintainer review before merge.

What this changes

Pass the supplied environment to whisper.cpp availability checks and transcription subprocesses.

Example: config.env.PATH contains /opt/whisper/bin, where whisper-cli is installed, and ambient PATH is absent.

  • Before: The availability check cannot find whisper-cli and extraction fails.
  • After: Both child launches use the configured PATH and extraction completes.

Review scores

Measure Result What it means
Overall readiness 🦞 diamond lobster (5/6) Focused contract repair with captured shipped-CLI proof, passing head checks, and no remaining findings; no persisted format, config-loading rule, or migration changes.
Proof confidence 🦞 diamond lobster (5/6) Sufficient (terminal): The complete linked terminal capture exercises the built CLI on the exact base and reviewed head under Node 24.22.0: config-only values reach availability and transcription children after the fix, process values retain precedence, and config-only PATH enables extraction. The recording executable verifies the changed process boundary; synthetic fixtures appropriately make no speech-inference claim and resolve the prior review request.
Patch quality 🦞 diamond lobster (5/6) No actionable review findings were identified.

Product

Kind: Bug fix · Worth it: Yes · Fix scope: Complete
User problem: Configured whisper.cpp runtime variables disappear in child processes, and an executable available only through supplied PATH is reported unavailable.
Reason: Restores the documented environment contract and completes prior merged environment propagation without changing provider ordering or adding an option.

Merge readiness

✅ Ready for maintainer review

This PR fixes a current environment-propagation bug with a focused patch; no actionable defects remain.

Priority: P2
Reviewed head: d99638e862a854cfd506f63b05177b3bd7c6e625

Before merge

None.

Findings

None.

Agent review details

How this fits together

The core transcription adapter receives media and resolved environment settings from CLI or library callers, launches whisper.cpp through the shared process wrapper, and returns transcript text.

flowchart TD
  A[CLI config and process environment] --> B[Resolved environment]
  B --> C[Core transcription adapter]
  D[Media file] --> C
  C --> E[Tracked whisper.cpp children]
  E --> F[Transcript text]
Loading

Technical review

Best possible solution:

Land the two environment overlays in the existing core adapter with the accompanying regression coverage.

Do we have a high-confidence way to reproduce the issue?

Current-main source shows the missing spawn environment, and the contributor's exact-base CLI capture demonstrates the failure; no target code was executed during this read-only review.

Is this the best way to solve the issue?

The patch repairs the existing core owner directly, preserves ambient inheritance for partial environments, and avoids new configuration or parallel execution paths.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning medium; reviewed against e1f209e1a9bd.

Provenance checked

  • whisper.cpp environment propagation keeps the original intent (fix: propagate config env to whisper.cpp #160: Make resolved configuration environment control whisper.cpp readiness, binary selection, and model selection.)
  • Configuration environment precedence keeps the original intent (29f63ee: Support configuration-supplied credentials while retaining environment-over-config precedence; current mergeConfigEnv preserves that rule.)

Testing

Proof path: shipped entry point.

Security

None.

Evidence

What I checked:

  • Focused introduced patch: The pinned diff adds the environment overlay at both existing subprocess launches, documents it, and adds child-process regression coverage. (packages/core/src/transcription/whisper/whisper-cpp.ts:128, d99638e862a8)
  • Captured shipped CLI behavior: Read the complete captured terminal log at fix(transcription): honor supplied whisper.cpp environment #554 (comment), completing the supplied excerpt identified by body SHA-256 5996b500eb80230ad1e0d8ab22a6b647a0eada8d3ac482aec04f949265b8f7a5. Exact-base/head CLI runs show config-only markers reaching both children only after the fix, unchanged ambient precedence, and config-only PATH extraction succeeding after failing on base. (d99638e862a8)
  • Existing environment contract: Config merging already preserves nonempty process values, and the local transcription caller already forwards options.env; current main drops that environment only at the two whisper.cpp spawn options. (src/config/env.ts:24, e1f209e1a9bd)
  • Prior repair and owner context: fix: propagate config env to whisper.cpp #160 introduced explicit environment threading for binary/model selection; steipete's discussion confirms that intent and added readiness coverage. This PR completes propagation into child execution. (packages/core/src/transcription/whisper/whisper-cpp.ts:22, c85c8bed045f)
  • Head validation: All five reported check runs succeeded against the reviewed head; GitHub reports the PR mergeable with clean merge state. (d99638e862a8)
  • Policy and inspection boundary: Read the full root AGENTS.md; no nested policies, maintainer notes, or pr-simplify skill were present. History was followed across the src-to-core move; one historical git show --stat failed on an unavailable parent object, while the relevant historical source blob and environment repair diff were readable. The checkout remains clean. (AGENTS.md:1, d99638e862a8)

Likely related people:

  • Peter Steinberger: Raw commit 57f9f5f adds packages/core/src/transcription/whisper/whisper-cpp.ts:116 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: 57f9f5faeb83; files: packages/core/src/transcription/whisper/whisper-cpp.ts)
  • Michael Sakaluk: Raw commit c85c8be adds packages/core/src/transcription/whisper/whisper-cpp.ts:20 relative to its recorded parents. This identifies author metadata, not feature responsibility or a PR merger. (role: source-line author; confidence: high; commits: c85c8bed045f; files: packages/core/src/transcription/whisper/whisper-cpp.ts)

Review metrics

Metric Value Why it matters
Patch scope Production +2, tests +127, docs +2; no deletions The production fix stays at the two existing launch sites; real child-process fixtures cover propagation and compatibility behavior.

Labels

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient.
  • add rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.
  • remove rating: 🧂 unranked krab: Current PR rating is rating: 🦞 diamond lobster, so this older rating label is no longer current.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P2: Affects local whisper.cpp users relying on supplied environment variables or config-only PATH; ambient-environment setups already work.
  • rating: 🦞 diamond lobster: Overall readiness is 🦞 diamond lobster; proof is 🦞 diamond lobster and patch quality is 🦞 diamond lobster.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR.
  • proof: sufficient: Contributor real behavior proof is sufficient.

Rating scale

6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior.

Workflow

ClawSweeper edits this one comment on every review. Comment @clawsweeper re-review for a fresh review only. Repair and merge execution lanes are retired.

History

Review history (1 earlier review cycle)
  • reviewed 2026-11-01T21:11:27.862Z sha d99638e :: needs real behavior proof before merge. :: none

Reviewed November 2, 2026, 1:29 AM ET / 06:29 UTC (Revision 2).

Copy link
Copy Markdown
Contributor Author

Added the captured built-CLI proof requested in the review, from the exact base and PR head. Both source checkouts stayed clean.

  • Base e1f209e1a9bde7b73868e856259071876ac91766 drops the config-only marker at both child launches. PR d99638e862a854cfd506f63b05177b3bd7c6e625 passes it to both.
  • A conflicting process-environment marker wins on both builds, preserving process-over-config precedence.
  • With ambient PATH absent and the executable available only on config.env.PATH, the base cannot discover it; the PR discovers it and completes extraction.

The capture below includes the recording executable source, each fresh config, the environment allowlist, normalized CLI invocation, child arguments, actual stdout/stderr, and exit status. The model and audio are deliberately synthetic: this proves subprocess environment propagation, without claiming speech inference. Local paths were normalized as stated in the log. No credentials or service endpoints are included.

Captured terminal log, 2026-11-02 UTC
Public capture from whisper-comment-proof.log. Only local Node, proof-script, and disposable fixture paths were normalized to <NODE_24.22.0>, <PROOF_DIR>, and <FIXTURE_ROOT>. Results, commits, hashes, child arguments, and marker values are unchanged. No credentials or private service URLs are present.

PR #554 built-CLI environment propagation proof
Started UTC: 2026-11-02T05:15:46.763Z
Node: v24.22.0
Invocation: '<NODE_24.22.0>' '<PROOF_DIR>/whisper-comment-proof.mjs' '/private/tmp/summarize-oss-review-20261101' '/private/tmp/summarize-pr554-proof-20261102'
The recording executable uses synthetic audio/model fixtures. This tests process environment propagation, without speech inference.
No user config, credentials, or endpoints are read. Each CLI runs with a fresh HOME and working directory and an explicit environment allowlist.
Build identities:
{
  "root": "/private/tmp/summarize-oss-review-20261101",
  "commit": "e1f209e1a9bde7b73868e856259071876ac91766",
  "trackedSourceStatus": "clean",
  "workspaceCore": "/private/tmp/summarize-oss-review-20261101/packages/core",
  "builtCli": "/private/tmp/summarize-oss-review-20261101/dist/cli.js",
  "builtCliWrapperSha256": "8166fd4fcfe449a79cddb8cfe1378eac2420629bb28635a63769b0f1701014b2",
  "compiledCliSha256": "a7a5e2d380d5302b9d09244b38910566557e95e0434c5757db5aa059284f8456",
  "compiledWhisper": "/private/tmp/summarize-oss-review-20261101/packages/core/dist/esm/transcription/whisper/whisper-cpp.js",
  "compiledWhisperSha256": "9875e39c9a832f7d410092f0a89c9f66e15ef03b0c43704e4b4991e0ee736891",
  "sourceWhisperSha256": "97a4bc970819e853d25b6985043eae5ff4e5e7553d0c20ce874f3fed705fed2c",
  "compiledSpawnEnvironmentOverlays": 0
}
{
  "root": "/private/tmp/summarize-pr554-proof-20261102",
  "commit": "d99638e862a854cfd506f63b05177b3bd7c6e625",
  "trackedSourceStatus": "clean",
  "workspaceCore": "/private/tmp/summarize-pr554-proof-20261102/packages/core",
  "builtCli": "/private/tmp/summarize-pr554-proof-20261102/dist/cli.js",
  "builtCliWrapperSha256": "8166fd4fcfe449a79cddb8cfe1378eac2420629bb28635a63769b0f1701014b2",
  "compiledCliSha256": "a7a5e2d380d5302b9d09244b38910566557e95e0434c5757db5aa059284f8456",
  "compiledWhisper": "/private/tmp/summarize-pr554-proof-20261102/packages/core/dist/esm/transcription/whisper/whisper-cpp.js",
  "compiledWhisperSha256": "fa25970f7a34414ef6e9be62cadc9c655444c80dee7b7a90540026ce09906c17",
  "sourceWhisperSha256": "3686e568a4b2aa0c51715c35d91cfa8257e2e41268a70d957f5804ac9f0a7f94",
  "compiledSpawnEnvironmentOverlays": 2
}
Recording executable source:
#!/bin/sh
marker="${SUMMARIZE_OSS_REVIEW_MARKER:-CONFIG_ENV_MISSING}"
if [ "$1" = "--help" ]; then
  printf 'help marker=%s\n' "$marker" >> child-calls.log
  exit 0
fi
printf 'transcription marker=%s\n' "$marker" >> child-calls.log
printf 'argv=%s\n' "$*" >> child-calls.log
while [ "$#" -gt 0 ]; do
  if [ "$1" = "--output-file" ]; then
    shift
    printf '%s' "$marker" > "$1.txt"
    exit 0
  fi
  shift
done
exit 2


=== baseline-config-only ===
Commit: e1f209e1a9bde7b73868e856259071876ac91766
Working directory: <FIXTURE_ROOT>/baseline-config-only
Fresh config: <FIXTURE_ROOT>/baseline-config-only/.summarize/config.json
{
  "env": {
    "SUMMARIZE_DISABLE_LOCAL_WHISPER_CPP": "0",
    "SUMMARIZE_WHISPER_CPP_BINARY": "<FIXTURE_ROOT>/baseline-config-only/recording-whisper-cli",
    "SUMMARIZE_WHISPER_CPP_MODEL_PATH": "<FIXTURE_ROOT>/baseline-config-only/ggml-base.bin",
    "SUMMARIZE_OSS_REVIEW_MARKER": "CONFIG_ENV_REACHED_CHILD"
  },
  "cache": {
    "enabled": false
  }
}
CLI environment allowlist:
{
  "HOME": "<FIXTURE_ROOT>/baseline-config-only",
  "PATH": "/usr/bin:/bin",
  "LANG": "C",
  "SUMMARIZE_DISABLE_FFMPEG_WASM": "1"
}
Config-only marker absent from CLI process environment: true
Executable/model overrides absent from CLI process environment: true
Command: cd '<FIXTURE_ROOT>/baseline-config-only'
/usr/bin/env -i 'HOME=<FIXTURE_ROOT>/baseline-config-only' 'PATH=/usr/bin:/bin' 'LANG=C' 'SUMMARIZE_DISABLE_FFMPEG_WASM=1' '<NODE_24.22.0>' '/private/tmp/summarize-oss-review-20261101/dist/cli.js' '--extract' '--plain' '--metrics' 'off' '--timeout' '5s' '<FIXTURE_ROOT>/baseline-config-only/audio.mp3'
Captured result:
{
  "exit": 0,
  "signal": null,
  "spawnError": null,
  "stdout": "Transcript:\nCONFIG_ENV_MISSING",
  "stderr": "",
  "childCalls": "help marker=CONFIG_ENV_MISSING\nhelp marker=CONFIG_ENV_MISSING\nhelp marker=CONFIG_ENV_MISSING\nhelp marker=CONFIG_ENV_MISSING\ntranscription marker=CONFIG_ENV_MISSING\nargv=--model <FIXTURE_ROOT>/baseline-config-only/ggml-base.bin --language auto -mc 0 --no-prints --print-progress --output-txt --output-file /tmp/summarize-whisper-cpp-out-d8ac8912-657f-4570-853f-e824edd64db6 <FIXTURE_ROOT>/baseline-config-only/audio.mp3"
}
Assertions: PASS

=== baseline-process-env-control ===
Commit: e1f209e1a9bde7b73868e856259071876ac91766
Working directory: <FIXTURE_ROOT>/baseline-process-env-control
Fresh config: <FIXTURE_ROOT>/baseline-process-env-control/.summarize/config.json
{
  "env": {
    "SUMMARIZE_DISABLE_LOCAL_WHISPER_CPP": "0",
    "SUMMARIZE_WHISPER_CPP_BINARY": "<FIXTURE_ROOT>/baseline-process-env-control/recording-whisper-cli",
    "SUMMARIZE_WHISPER_CPP_MODEL_PATH": "<FIXTURE_ROOT>/baseline-process-env-control/ggml-base.bin",
    "SUMMARIZE_OSS_REVIEW_MARKER": "CONFIG_ENV_REACHED_CHILD"
  },
  "cache": {
    "enabled": false
  }
}
CLI environment allowlist:
{
  "HOME": "<FIXTURE_ROOT>/baseline-process-env-control",
  "PATH": "/usr/bin:/bin",
  "LANG": "C",
  "SUMMARIZE_DISABLE_FFMPEG_WASM": "1",
  "SUMMARIZE_OSS_REVIEW_MARKER": "PROCESS_ENV_REACHED_CHILD"
}
Config-only marker absent from CLI process environment: false
Executable/model overrides absent from CLI process environment: true
Command: cd '<FIXTURE_ROOT>/baseline-process-env-control'
/usr/bin/env -i 'HOME=<FIXTURE_ROOT>/baseline-process-env-control' 'PATH=/usr/bin:/bin' 'LANG=C' 'SUMMARIZE_DISABLE_FFMPEG_WASM=1' 'SUMMARIZE_OSS_REVIEW_MARKER=PROCESS_ENV_REACHED_CHILD' '<NODE_24.22.0>' '/private/tmp/summarize-oss-review-20261101/dist/cli.js' '--extract' '--plain' '--metrics' 'off' '--timeout' '5s' '<FIXTURE_ROOT>/baseline-process-env-control/audio.mp3'
Captured result:
{
  "exit": 0,
  "signal": null,
  "spawnError": null,
  "stdout": "Transcript:\nPROCESS_ENV_REACHED_CHILD",
  "stderr": "",
  "childCalls": "help marker=PROCESS_ENV_REACHED_CHILD\nhelp marker=PROCESS_ENV_REACHED_CHILD\nhelp marker=PROCESS_ENV_REACHED_CHILD\nhelp marker=PROCESS_ENV_REACHED_CHILD\ntranscription marker=PROCESS_ENV_REACHED_CHILD\nargv=--model <FIXTURE_ROOT>/baseline-process-env-control/ggml-base.bin --language auto -mc 0 --no-prints --print-progress --output-txt --output-file /tmp/summarize-whisper-cpp-out-e5c5e541-1d4e-4695-9b88-e2454f4dafc0 <FIXTURE_ROOT>/baseline-process-env-control/audio.mp3"
}
Assertions: PASS

=== pr-config-only ===
Commit: d99638e862a854cfd506f63b05177b3bd7c6e625
Working directory: <FIXTURE_ROOT>/pr-config-only
Fresh config: <FIXTURE_ROOT>/pr-config-only/.summarize/config.json
{
  "env": {
    "SUMMARIZE_DISABLE_LOCAL_WHISPER_CPP": "0",
    "SUMMARIZE_WHISPER_CPP_BINARY": "<FIXTURE_ROOT>/pr-config-only/recording-whisper-cli",
    "SUMMARIZE_WHISPER_CPP_MODEL_PATH": "<FIXTURE_ROOT>/pr-config-only/ggml-base.bin",
    "SUMMARIZE_OSS_REVIEW_MARKER": "CONFIG_ENV_REACHED_CHILD"
  },
  "cache": {
    "enabled": false
  }
}
CLI environment allowlist:
{
  "HOME": "<FIXTURE_ROOT>/pr-config-only",
  "PATH": "/usr/bin:/bin",
  "LANG": "C",
  "SUMMARIZE_DISABLE_FFMPEG_WASM": "1"
}
Config-only marker absent from CLI process environment: true
Executable/model overrides absent from CLI process environment: true
Command: cd '<FIXTURE_ROOT>/pr-config-only'
/usr/bin/env -i 'HOME=<FIXTURE_ROOT>/pr-config-only' 'PATH=/usr/bin:/bin' 'LANG=C' 'SUMMARIZE_DISABLE_FFMPEG_WASM=1' '<NODE_24.22.0>' '/private/tmp/summarize-pr554-proof-20261102/dist/cli.js' '--extract' '--plain' '--metrics' 'off' '--timeout' '5s' '<FIXTURE_ROOT>/pr-config-only/audio.mp3'
Captured result:
{
  "exit": 0,
  "signal": null,
  "spawnError": null,
  "stdout": "Transcript:\nCONFIG_ENV_REACHED_CHILD",
  "stderr": "",
  "childCalls": "help marker=CONFIG_ENV_REACHED_CHILD\nhelp marker=CONFIG_ENV_REACHED_CHILD\nhelp marker=CONFIG_ENV_REACHED_CHILD\nhelp marker=CONFIG_ENV_REACHED_CHILD\ntranscription marker=CONFIG_ENV_REACHED_CHILD\nargv=--model <FIXTURE_ROOT>/pr-config-only/ggml-base.bin --language auto -mc 0 --no-prints --print-progress --output-txt --output-file /tmp/summarize-whisper-cpp-out-0ba07c50-100d-47f4-b183-59b611edfa99 <FIXTURE_ROOT>/pr-config-only/audio.mp3"
}
Assertions: PASS

=== pr-process-env-control ===
Commit: d99638e862a854cfd506f63b05177b3bd7c6e625
Working directory: <FIXTURE_ROOT>/pr-process-env-control
Fresh config: <FIXTURE_ROOT>/pr-process-env-control/.summarize/config.json
{
  "env": {
    "SUMMARIZE_DISABLE_LOCAL_WHISPER_CPP": "0",
    "SUMMARIZE_WHISPER_CPP_BINARY": "<FIXTURE_ROOT>/pr-process-env-control/recording-whisper-cli",
    "SUMMARIZE_WHISPER_CPP_MODEL_PATH": "<FIXTURE_ROOT>/pr-process-env-control/ggml-base.bin",
    "SUMMARIZE_OSS_REVIEW_MARKER": "CONFIG_ENV_REACHED_CHILD"
  },
  "cache": {
    "enabled": false
  }
}
CLI environment allowlist:
{
  "HOME": "<FIXTURE_ROOT>/pr-process-env-control",
  "PATH": "/usr/bin:/bin",
  "LANG": "C",
  "SUMMARIZE_DISABLE_FFMPEG_WASM": "1",
  "SUMMARIZE_OSS_REVIEW_MARKER": "PROCESS_ENV_REACHED_CHILD"
}
Config-only marker absent from CLI process environment: false
Executable/model overrides absent from CLI process environment: true
Command: cd '<FIXTURE_ROOT>/pr-process-env-control'
/usr/bin/env -i 'HOME=<FIXTURE_ROOT>/pr-process-env-control' 'PATH=/usr/bin:/bin' 'LANG=C' 'SUMMARIZE_DISABLE_FFMPEG_WASM=1' 'SUMMARIZE_OSS_REVIEW_MARKER=PROCESS_ENV_REACHED_CHILD' '<NODE_24.22.0>' '/private/tmp/summarize-pr554-proof-20261102/dist/cli.js' '--extract' '--plain' '--metrics' 'off' '--timeout' '5s' '<FIXTURE_ROOT>/pr-process-env-control/audio.mp3'
Captured result:
{
  "exit": 0,
  "signal": null,
  "spawnError": null,
  "stdout": "Transcript:\nPROCESS_ENV_REACHED_CHILD",
  "stderr": "",
  "childCalls": "help marker=PROCESS_ENV_REACHED_CHILD\nhelp marker=PROCESS_ENV_REACHED_CHILD\nhelp marker=PROCESS_ENV_REACHED_CHILD\nhelp marker=PROCESS_ENV_REACHED_CHILD\ntranscription marker=PROCESS_ENV_REACHED_CHILD\nargv=--model <FIXTURE_ROOT>/pr-process-env-control/ggml-base.bin --language auto -mc 0 --no-prints --print-progress --output-txt --output-file /tmp/summarize-whisper-cpp-out-3d791a34-c4f5-4fcc-b221-ff93b13ca255 <FIXTURE_ROOT>/pr-process-env-control/audio.mp3"
}
Assertions: PASS

=== baseline-config-only-path ===
Commit: e1f209e1a9bde7b73868e856259071876ac91766
Working directory: <FIXTURE_ROOT>/baseline-config-only-path
Fresh config: <FIXTURE_ROOT>/baseline-config-only-path/.summarize/config.json
{
  "env": {
    "SUMMARIZE_DISABLE_LOCAL_WHISPER_CPP": "0",
    "SUMMARIZE_WHISPER_CPP_BINARY": "recording-whisper-cli",
    "SUMMARIZE_WHISPER_CPP_MODEL_PATH": "<FIXTURE_ROOT>/baseline-config-only-path/ggml-base.bin",
    "SUMMARIZE_OSS_REVIEW_MARKER": "CONFIG_ENV_REACHED_CHILD",
    "PATH": "<FIXTURE_ROOT>/baseline-config-only-path"
  },
  "cache": {
    "enabled": false
  }
}
CLI environment allowlist:
{
  "HOME": "<FIXTURE_ROOT>/baseline-config-only-path",
  "LANG": "C",
  "SUMMARIZE_DISABLE_FFMPEG_WASM": "1"
}
Config-only marker absent from CLI process environment: true
Executable/model overrides absent from CLI process environment: true
Config-only PATH absent from CLI process environment: true
Command: cd '<FIXTURE_ROOT>/baseline-config-only-path'
/usr/bin/env -i 'HOME=<FIXTURE_ROOT>/baseline-config-only-path' 'LANG=C' 'SUMMARIZE_DISABLE_FFMPEG_WASM=1' '<NODE_24.22.0>' '/private/tmp/summarize-oss-review-20261101/dist/cli.js' '--extract' '--plain' '--metrics' 'off' '--timeout' '5s' '<FIXTURE_ROOT>/baseline-config-only-path/audio.mp3'
Captured result:
{
  "exit": 1,
  "signal": null,
  "spawnError": null,
  "stdout": "",
  "stderr": "Media file transcription requires one of the following:\n\n1. Local ONNX (Parakeet or Canary):\n   Run summarize transcriber setup\n\n2. Groq Whisper (fast, free tier):\n   Set GROQ_API_KEY=gsk_...\n\n3. Gemini audio transcription:\n   Set GEMINI_API_KEY=...\n\n4. AssemblyAI transcription:\n   Set ASSEMBLYAI_API_KEY=...\n\n5. OpenAI Whisper:\n   Set OPENAI_API_KEY=sk-...\n\n6. FAL Whisper:\n   Set FAL_KEY=...\n\n7. Deepgram:\n   Set DEEPGRAM_API_KEY=...\n\n8. Local whisper.cpp:\n   brew install whisper-cpp\n   Ensure whisper-cli is on your PATH (or set SUMMARIZE_WHISPER_CPP_BINARY)\n\nSee: summarize transcriber help",
  "childCalls": ""
}
Assertions: PASS

=== pr-config-only-path ===
Commit: d99638e862a854cfd506f63b05177b3bd7c6e625
Working directory: <FIXTURE_ROOT>/pr-config-only-path
Fresh config: <FIXTURE_ROOT>/pr-config-only-path/.summarize/config.json
{
  "env": {
    "SUMMARIZE_DISABLE_LOCAL_WHISPER_CPP": "0",
    "SUMMARIZE_WHISPER_CPP_BINARY": "recording-whisper-cli",
    "SUMMARIZE_WHISPER_CPP_MODEL_PATH": "<FIXTURE_ROOT>/pr-config-only-path/ggml-base.bin",
    "SUMMARIZE_OSS_REVIEW_MARKER": "CONFIG_ENV_REACHED_CHILD",
    "PATH": "<FIXTURE_ROOT>/pr-config-only-path"
  },
  "cache": {
    "enabled": false
  }
}
CLI environment allowlist:
{
  "HOME": "<FIXTURE_ROOT>/pr-config-only-path",
  "LANG": "C",
  "SUMMARIZE_DISABLE_FFMPEG_WASM": "1"
}
Config-only marker absent from CLI process environment: true
Executable/model overrides absent from CLI process environment: true
Config-only PATH absent from CLI process environment: true
Command: cd '<FIXTURE_ROOT>/pr-config-only-path'
/usr/bin/env -i 'HOME=<FIXTURE_ROOT>/pr-config-only-path' 'LANG=C' 'SUMMARIZE_DISABLE_FFMPEG_WASM=1' '<NODE_24.22.0>' '/private/tmp/summarize-pr554-proof-20261102/dist/cli.js' '--extract' '--plain' '--metrics' 'off' '--timeout' '5s' '<FIXTURE_ROOT>/pr-config-only-path/audio.mp3'
Captured result:
{
  "exit": 0,
  "signal": null,
  "spawnError": null,
  "stdout": "Transcript:\nCONFIG_ENV_REACHED_CHILD",
  "stderr": "",
  "childCalls": "help marker=CONFIG_ENV_REACHED_CHILD\nhelp marker=CONFIG_ENV_REACHED_CHILD\nhelp marker=CONFIG_ENV_REACHED_CHILD\nhelp marker=CONFIG_ENV_REACHED_CHILD\ntranscription marker=CONFIG_ENV_REACHED_CHILD\nargv=--model <FIXTURE_ROOT>/pr-config-only-path/ggml-base.bin --language auto -mc 0 --no-prints --print-progress --output-txt --output-file /tmp/summarize-whisper-cpp-out-e1db0c37-564a-4b01-849c-afa635e1664b <FIXTURE_ROOT>/pr-config-only-path/audio.mp3"
}
Assertions: PASS

Final results:
[
  {
    "label": "baseline-config-only",
    "commit": "e1f209e1a9bde7b73868e856259071876ac91766",
    "exit": 0,
    "stdout": "Transcript:\nCONFIG_ENV_MISSING"
  },
  {
    "label": "baseline-process-env-control",
    "commit": "e1f209e1a9bde7b73868e856259071876ac91766",
    "exit": 0,
    "stdout": "Transcript:\nPROCESS_ENV_REACHED_CHILD"
  },
  {
    "label": "pr-config-only",
    "commit": "d99638e862a854cfd506f63b05177b3bd7c6e625",
    "exit": 0,
    "stdout": "Transcript:\nCONFIG_ENV_REACHED_CHILD"
  },
  {
    "label": "pr-process-env-control",
    "commit": "d99638e862a854cfd506f63b05177b3bd7c6e625",
    "exit": 0,
    "stdout": "Transcript:\nPROCESS_ENV_REACHED_CHILD"
  },
  {
    "label": "baseline-config-only-path",
    "commit": "e1f209e1a9bde7b73868e856259071876ac91766",
    "exit": 1,
    "stdout": ""
  },
  {
    "label": "pr-config-only-path",
    "commit": "d99638e862a854cfd506f63b05177b3bd7c6e625",
    "exit": 0,
    "stdout": "Transcript:\nCONFIG_ENV_REACHED_CHILD"
  }
]
All six cases passed. Both source worktrees remain on their original commits with clean tracked source.
Finished UTC: 2026-11-02T05:15:49.656Z

Copy link
Copy Markdown
Contributor Author

The captured CLI setup and output are attached above and linked from the PR body. All six cases passed at the unchanged head d99638e862a854cfd506f63b05177b3bd7c6e625.

@clawsweeper re-review

@clawsweeper

clawsweeper Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

🦞👀
Exact review queued.

Re-review progress:

@clawsweeper clawsweeper Bot added clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. clawsweeper:intake:bug Preliminary submission classification; full source review pending. clawsweeper:intake:needs-environment Preliminary submission classification; full source review pending. clawsweeper:intake:needs-repro Preliminary submission classification; full source review pending. labels Nov 2, 2026
@steipete
steipete merged commit dab699f into steipete:main Nov 5, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

P2 Normal priority bug or improvement with limited blast radius. proof: sufficient Contributor real behavior proof is sufficient. rating: 🦞 diamond lobster Very strong PR readiness with only minor maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants