Skip to content

enh(plan-checker): let gsd-plan-checker write its stall-watch return receipt on hosts that run it read-only (#767 Group B) #5245

Closed as not planned

Description

@davesienkowski

GSD Version

1.16.0 (next @ 663acba1f)

Follow-up for Finding 3 of the #5192 review (the fix for #5182), filed as the contributor proposed there. The maintainer has not yet ruled on "Group B in #5192" versus "follow-up issue"; this issue is the follow-up option, and it needs its own approved-enhancement before code.

User impact

On a host that runs gsd-plan-checker read-only, such as Codex, a plan-phase run that has stall detection on can wait out the full stall threshold after a checker pass and then report the checker as stalled, even though it finished. That happens unless the runtime's own completion result reaches the orchestrator first, which #5192 also accepts. This is inferred from the sandbox derivation and has not been measured on Codex. With this change, the checker's return ends the wait on every host, the same as it already does for the planner.

Pre-submission checklist

  • I have confirmed this improves existing behavior — it does not add a new command, workflow, or concept
  • I have searched existing issues and this enhancement has not already been proposed
  • I have read CONTRIBUTING.md and understand I must wait for approved-enhancement before writing any code
  • I can clearly describe the concrete benefit — not just "it would be nicer"

What existing feature or behavior does this improve?

The plan-phase stall watch for the plan checker (step 10), after #5192. #5192 has every spawned agent end with a one-line return receipt that GSD owns, and the watch reads that receipt instead of the host's transcript. The planner writes its receipt with Write. The checker has no Write, so it writes the receipt through Bash (printf).

Current behavior

gsd-plan-checker is in #767's Group A, the pure read-only agents: tools: Read, Bash, Glob, Grep, Skill, and READONLY_AGENT_DISALLOWED_TOOLS denies Write, Edit, MultiEdit (src/runtime-artifact-conversion.cts:3930-3938). Codex derives sandbox_mode from tools:: workspace-write iff Write or Edit is declared, otherwise read-only (src/codex-agent-toml.cts:694-745; CODEX_SANDBOX_HOLDS at :492 is empty, so nothing else widens it). So on Codex the checker's sandbox refuses the receipt write. A checker that passes also touches no *-PLAN.md, so the watch sees no progress either and ends stalled at the threshold.

#5192 states this as a known limit. It is no worse than next on hosts that have no output file, where the checker watch can only end stalled. On Claude Code, next read the host transcript and ended at its first check, because the transcript quotes the markers (the #5182 defect itself). It is the one host and agent pair where #5182's AC5 ("identical on every host") does not hold.

Proposed behavior

Move gsd-plan-checker to #767's Group B, the report-writers: add Write to its tools:, and change its READONLY_AGENT_DISALLOWED_TOOLS entry to Edit, MultiEdit. That is how gsd-verifier, gsd-doc-verifier, gsd-eval-auditor and gsd-ui-auditor are configured. The checker then writes its receipt on every host, and its agent definition states that the receipt is its only write.

Reason and benefit

Scope of changes

Breaking changes

None for users. The security posture is the open point. On Codex, workspace-write lets the checker write anywhere in the workspace, not only its receipt file. On Claude Code, disallowedTools stops denying Write; it still denies Edit and MultiEdit. That widening is the reason this is a separate decision rather than part of the bug fix.

Alternatives considered

Area affected

Agents (gsd-plan-checker tool grants); plan-phase stall detection

Additional context

Generated by AI during contribution; reviewed and posted by a human maintainer (@davesienkowski).

Activity

  1. davesienkowski commented on Oct 9, 2026

    @davesienkowski
    CollaboratorAuthor

    Closing as superseded. @trek-e ruled on #5192 (issuecomment-6036744404) that the plan-checker receipt write on read-only hosts is fixed in that PR, not in a follow-up. The Group B move this issue proposed is now commit 83e3c5fdd on #5192. That commit also states the receipt-only write limit unconditionally in the checker's <anti_patterns>, because the quick, quick-batch and import spawns send no receipt.

    Generated by AI during review response; reviewed and posted by a human maintainer (@davesienkowski).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: agentsAgent spawning, subagent behaviorenhancementNew feature or requestneeds-triageNew issue awaiting maintainer review

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions