Problem: resolveMinerGoalSpec (packages/gittensory-miner/lib/miner-goal-spec.js, built for #5255) reads a target repo's real .gittensory-miner.yml — including a killSwitch.paused field — but nothing in the real attempt/loop pipeline ever calls it. buildAttemptGovernorContext (packages/gittensory-miner/lib/attempt-input-builder.js) hardcodes killSwitchRepoPaused: undefined on every call, and loop-cli.js's own kill-switch check (checkMinerKillSwitch) is global-scope only. A repo owner setting killSwitch.paused: true in their own .gittensory-miner.yml today has no effect at all — the miner will keep attempting that repo regardless.
Area: Miner / Governor
Proposal: Wire resolveMinerGoalSpec into attempt-cli.js (it needs the already-cloned worktree path from prepareAttemptWorktree, which is real IO, not a network round trip since the repo is already on disk by that point) and thread its killSwitch.paused value into buildAttemptGovernorContext's killSwitchRepoPaused field. Extend loop-cli.js's own kill-switch check (currently checkMinerKillSwitch({ env }), global-only) to also resolve and check the per-repo pause for whichever repo the loop is about to claim/attempt.
Deliverables:
attempt-cli.js resolves and passes a real killSwitchRepoPaused value instead of undefined.
loop-cli.js's per-cycle kill-switch check also considers the target repo's own .gittensory-miner.yml pause.
Acceptance criteria:
Boundaries:
Problem:
resolveMinerGoalSpec(packages/gittensory-miner/lib/miner-goal-spec.js, built for #5255) reads a target repo's real.gittensory-miner.yml— including akillSwitch.pausedfield — but nothing in the real attempt/loop pipeline ever calls it.buildAttemptGovernorContext(packages/gittensory-miner/lib/attempt-input-builder.js) hardcodeskillSwitchRepoPaused: undefinedon every call, andloop-cli.js's own kill-switch check (checkMinerKillSwitch) is global-scope only. A repo owner settingkillSwitch.paused: truein their own.gittensory-miner.ymltoday has no effect at all — the miner will keep attempting that repo regardless.Area: Miner / Governor
Proposal: Wire
resolveMinerGoalSpecintoattempt-cli.js(it needs the already-cloned worktree path fromprepareAttemptWorktree, which is real IO, not a network round trip since the repo is already on disk by that point) and thread itskillSwitch.pausedvalue intobuildAttemptGovernorContext'skillSwitchRepoPausedfield. Extendloop-cli.js's own kill-switch check (currentlycheckMinerKillSwitch({ env }), global-only) to also resolve and check the per-repo pause for whichever repo the loop is about to claim/attempt.Deliverables:
attempt-cli.jsresolves and passes a realkillSwitchRepoPausedvalue instead ofundefined.loop-cli.js's per-cycle kill-switch check also considers the target repo's own.gittensory-miner.ymlpause.Acceptance criteria:
killSwitch: { paused: true }in its own.gittensory-miner.ymlis genuinely skipped by bothgittensory-miner attemptandgittensory-miner loop, verified by a real integration-style test (real file on disk, not just a mocked resolver).Boundaries:
resolveMinerGoalSpec's own resolution logic (local-file/repo-file/default precedence) — this issue only wires an already-built resolver into two new call sites.claim-ledger.js's write side into the real pipeline.