Repository navigation
Use the configured Harness for release notes - #605
Merged
Merged
Conversation
This was referenced Oct 10, 2026
Closed
The summary reads contributor-editable PR titles and bodies, but the Codex adapter reused the session arguments, including --dangerously-bypass-approvals-and-sandbox. Run it read-only and sandboxed, with nothing to approve and Codex's shell, MCP, web search, apps, plugins, browser, computer-use and hook tools switched off, as Claude's summary runs with --tools ''. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Release input holds contributor-editable PR titles and bodies, and the agy, Grok, Muse and OpenCode summaries reused their session arguments, which approve every tool. Each now drops its bypass and runs with as few tools as its CLI allows, verified against the real CLIs: - Grok: only todo_write, without the MCP gateways or web search. - Muse: approval and sandbox on, no shell, writes or web, and one model step, so a file read can never reach the summary. - OpenCode: no --auto, and a deny-all permission config through OPENCODE_CONFIG_CONTENT, which holds even with --auto. - agy: headless mode denies every tool that needs a permission; adds --sandbox, --disable-slash-commands and a 10-minute print timeout. File reads remain possible. agy's stream-json input needs an "event" field, not "type": the summary failed with every real agy before this. The summary prompt now says there are no tools, since a refused tool call ends agy and OpenCode turns with no summary. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 10, 2026
Merged
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.
Summary
The release script shares this checkout's config parser and Harness adapters through an internal
--release-summarycommand. All six Harnesses receive complete input, including input above the argument-size limit. Summary generation runs in a temporary directory without Factory skills; Claude's tools stay disabled. The release instructions now name the configured Harness as the login prerequisite.Closes #596
Evidence
maininvokedclaude -p --tools '' --strict-mcp-configregardless of the User config.After:
cargo test --test release --test harness_choicepassed all 61 tests, covering configured Harness/Model/Effort, all six Harnesses, final text, and fallback after invalid config, failed or blank output.every_harness_receives_the_complete_release_input_above_the_argument_limitverifies complete 150 KB input for every Harness. A smoke check through the realsummary_agentCargo interface also passed with configured Codex, complete 150 KB input, and final text on stdout.After: the same command passed after naming the User config's default Harness (exit 0).
cargo check,cargo fmt --check,cargo clippy --all-targets -- -D warnings, andbash -n scripts/release.shpassed.cargo testsuite: 1667 passed, 0 failed, 1 existing ignored test.Test seams
scripts/release.shagainst a local Git origin and fake Harness CLIs: selected Harness/Model/Effort, summary content, fallback, and release completion.thirdshift --release-summary(internal script interface): config failures, Harness completion, and complete large-input delivery through the existing adapters.Unaddressed findings
Standards
None. The review found no documented-standard violations or actionable baseline smells.
Spec
None. The single finding, the stale Claude login prerequisite in
README.md:989, was reproduced and fixed in6119a52; the same inspection command now passes.Security
The automated Security review could not run target code on this host because it had no sandbox, so it flagged one risk without reproducing it. It has since been triaged by hand.
Codex release summary reached unrestricted tools: addressed in
f8c682e. Release input (contributor-editable PR titles and bodies) went to Codex with--dangerously-bypass-approvals-and-sandbox, where the pinned base usedclaude -p --tools ''. The Codex summary now runs with:--sandbox read-only,approval_policy="never",web_search="disabled"andmcp_servers={};shell_tool,unified_exec,apps,plugins,browser_use,computer_useandhooksdisabled.A Codex that doesn't know one of these features fails, and the release falls back to GitHub's generated notes. The release test now asserts these arguments and the absence of the bypass flag; it failed before the change. An end-to-end run of
--release-summarywith real Codex 0.162.0, given input instructing it totoucha marker file and quote~/.gitconfig, produced a plain summary: no marker was created and nothing was quoted.agy, Grok, Muse and OpenCode summaries: addressed in
9759a0c. Each summary now drops its session bypass and keeps as few tools as the CLI allows. Each setting was checked against the real CLI with a direct request totoucha marker file and quote~/.gitconfig:--tools todo_write --disallowed-tools search_tool,use_tool --disable-web-search. Onlytodo_writeremains. Nothing ran and nothing was quoted.--disable-shell --disable-write --disable-web-tools --no-foreign-personal-context --max-model-steps 1. Muse can still read files, but with a single step a read can never reach the summary; the probe failed closed.--auto, plusOPENCODE_CONFIG_CONTENT={"permission":{"*":"deny"}}, which holds even with--auto. Nothing ran.--dangerously-skip-permissions, plus--sandbox --disable-slash-commands --print-timeout 10m. Headless agy auto-denies commands, writes, URLs and MCP, and a denial ends the turn with no summary.Residual risk (agy only): agy's file reads need no permission, and no flag removes them. A probe asking it to quote
~/.gitconfigreturned no summary, but this is not guaranteed.Two more fixes in the same commit:
"event":"user", not"type":"user". Every real agy rejected the summary before this.Ordinary summaries were verified through
thirdshift --release-summarywith real agy, Grok, Muse and OpenCode. A new release test asserts each Harness's restrictions and the absence of its bypass; it failed before the change.Review coverage
Both axes read all 19 changed files against
main. No changed file was left unread. Reports, final files-read lists, and the Spec reproduction are saved in.thirdshift-review-uVfIt3/standards.mdand.thirdshift-review-uVfIt3/spec.mdin the continuation worktree.Security review outcome
Merge Danger
Door: two-way
The script and internal helper can be reverted together.
Blast Radius: Releases
Release summaries use the configured Harness and its Model/Effort. Cargo is required to run the helper from the checkout; summary failures retain the generated-notes fallback.
Built with codex · gpt-6.1-sol · high