Skip to content

feat(miner-hands): dry-run/no-op mode for CodingAgentDriver invocations #4313

Description

@JSONbored

This repo already has a proven, exact precedent for "run in observe/dry-run mode instead of live" at the maintainer-action layer: resolveAgentActionMode (src/settings/agent-execution.ts:38-42) resolves an AgentActionMode of "paused" | "dry_run" | "live" (type at line 23) from a global kill-switch plus per-repo config, deny-toward-safety (paused beats dry_run beats live), and agentActionModeExecutes (:46-48) is the single boolean check every caller uses to decide whether to actually mutate GitHub or just log what it would have done. src/settings/autonomy.ts's graduated AUTONOMY_LEVELS dial (observe/suggest/propose/auto_with_approval/auto, line 5) is the sibling per-action-class version of the same "how much is this allowed to actually do" question. A CodingAgentDriver invocation (#4262) needs the same escape hatch: run the driver in a mode where it reports what it WOULD do (or actually runs but every downstream effect is suppressed) without truly letting a coding agent loose.

Deliverables

  • A dry-run mode on the CodingAgentDriver interface (feat(miner-hands): define the CodingAgentDriver interface seam #4262) or its invocation call site, structurally mirroring AgentActionMode's three-state shape (src/settings/agent-execution.ts:23) — decide whether coding-agent dry-run needs the same three states (paused/dry_run/live) or just a boolean, and justify the choice against the existing three-state precedent rather than picking arbitrarily.
  • Precise semantics for what "dry-run" means for a CODING agent specifically (harder than the existing GitHub-mutation case, which just skips an API call): does dry-run mean the driver never spawns/queries the underlying agent at all (pure no-op, cheapest, least informative), or does it let the agent run and edit files inside its worktree (feat(miner-hands): git-worktree-per-attempt isolation primitive #4269) but suppress everything AFTER that (no commit, no push, no PR) so the edits themselves are still inspectable? Pick one, document the tradeoff, and make sure the choice is legible in the attempt log (feat(miner-hands): driver-level structured attempt log (JSONL event trace per attempt) #4294).
  • Wire this through the driver factory (feat(miner-hands): CodingAgentDriver factory + provider-style config resolution #4289) and/or the plan-template coding-agent step (packages/gittensory-engine/src/plan-templates.ts:84) so a dry-run attempt is distinguishable end-to-end, not just at the driver's own boundary.
  • Tests mirroring resolveAgentActionMode's existing test bar (src/settings/agent-execution.ts:38-42's precedence rules: global pause beats per-repo dry-run beats live) adapted to whatever state shape this issue settles on.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    gittensor:featureGittensor-scored feature linked to a feature issue — scores a 0.25x multiplier.help wantedExtra attention is needed

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions