You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Two-machine runner pool (node + workstation) with claim-based balancing #32
Decision (owner, 2026-10-09): claim-based runners. Both machines run the watcher and claim up to a per-machine capacity cap. Central dispatcher alternative is dropped.
Claim-based capacity, atomic claim refs, epoch fencing, stale-claim quarantine, and the node runbook shipped in v1.7.0. The latest read-only check of the requested second machine found node, git, and gh unavailable on its PATH, the requested checkout absent, and neither a GitHub environment credential nor a gh auth configuration present. No second live runner has been qualified. This issue remains open for node toolchain and scoped credential provisioning, followed by a real two-machine claim/capacity test.
The node now has an unprivileged Node 22.23.3, Git 2.47.3 and GitHub CLI 2.46.0 toolchain, plus a locked HeadlessCode checkout. The claim/capacity and worker credential-exclusion tests passed.
An actual two-host synthetic qualification also passed: both hosts contended for atomic claim refs, respected a capacity of one each, renewed leases through six sweeps, excluded credentials from injected worker environments, and rejected stale recovery before accepting a fenced epoch change. The callbacks were synthetic; no model worker or permanent watcher deployment was exercised.
PR #98 fixes discovery starvation when another node owns the first issue in the queue. It is merged. Permanent node deployment and a credentialed issue-to-PR run remain unqualified because scoped node GitHub credentials and the contained worker deployment have not been provisioned. Workstation credentials were not copied to the node.
docs/phase5-issue-watcher.md: links pool section to the new runbook
Baseline (before)
Claim-based balancing already in-tree (commits 7a18bc8, 67c0fbf, 1808667, 46cf165 all ancestors of HEAD): GitHub-ref CAS claims, pool-mode sweep/capacity/reconciliation, --runner-id/--runner-assignee CLI + lock. Gap: lease duration not tunable from CLI (claimLeaseMs existed in WatcherConfig but had no flag/env); no dedicated node install runbook.
Reopening: PR #124 is not merged yet. The worker closed this issue immediately after filing the PR, but the harness review did not run (reviewer reported 'no real changes' despite the branch commit) and QA did not run. Re-close on merge.
Activity
w4ffl35 commentedon Oct 9, 2026
Decision (owner, 2026-10-09): claim-based runners. Both machines run the watcher and claim up to a per-machine capacity cap. Central dispatcher alternative is dropped.
w4ffl35 commentedon Oct 11, 2026
Claim-based capacity, atomic claim refs, epoch fencing, stale-claim quarantine, and the node runbook shipped in v1.7.0. The latest read-only check of the requested second machine found
node,git, andghunavailable on its PATH, the requested checkout absent, and neither a GitHub environment credential nor a gh auth configuration present. No second live runner has been qualified. This issue remains open for node toolchain and scoped credential provisioning, followed by a real two-machine claim/capacity test.w4ffl35 commentedon Oct 12, 2026
The node now has an unprivileged Node 22.23.3, Git 2.47.3 and GitHub CLI 2.46.0 toolchain, plus a locked HeadlessCode checkout. The claim/capacity and worker credential-exclusion tests passed.
An actual two-host synthetic qualification also passed: both hosts contended for atomic claim refs, respected a capacity of one each, renewed leases through six sweeps, excluded credentials from injected worker environments, and rejected stale recovery before accepting a fenced epoch change. The callbacks were synthetic; no model worker or permanent watcher deployment was exercised.
PR #98 fixes discovery starvation when another node owns the first issue in the queue. It is merged. Permanent node deployment and a credentialed issue-to-PR run remain unqualified because scoped node GitHub credentials and the contained worker deployment have not been provisioned. Workstation credentials were not copied to the node.
w4ffl35 commentedon Oct 12, 2026
Issue 32 — Closing Report
Files changed
Baseline (before)
Claim-based balancing already in-tree (commits 7a18bc8, 67c0fbf, 1808667, 46cf165 all ancestors of HEAD): GitHub-ref CAS claims, pool-mode sweep/capacity/reconciliation, --runner-id/--runner-assignee CLI + lock. Gap: lease duration not tunable from CLI (claimLeaseMs existed in WatcherConfig but had no flag/env); no dedicated node install runbook.
Baseline (after)
watch --helpexposes --claim-lease-ms; parse checks: valid 60000 accepted, 5000/9999999/abc rejected, env 45000 accepted, env bogus rejectednpx tsc --noEmit: clean (exit 0)Boot check
N/A — watcher change needs a GitHub token + live repo to boot a sweep; verified via --help output, parse checks, and typecheck + unit suites instead.
Residual risk / notes
PR: #124
w4ffl35 commentedon Oct 12, 2026
Reopening: PR #124 is not merged yet. The worker closed this issue immediately after filing the PR, but the harness review did not run (reviewer reported 'no real changes' despite the branch commit) and QA did not run. Re-close on merge.
Merge pull request #124 from Capsize-Games/issues/w1-2026-10-12-2