Skip to content

cockpit wait: an account block is pointless only for a refused repo - #119

Merged
addisdev merged 1 commit into
mainfrom
fix/account-blocked-per-repo
Oct 24, 2026
Merged

addisdev merged 1 commit into
mainfrom
fix/account-blocked-per-repo

Conversation

@addisdev

Copy link
Copy Markdown
Owner

Why

2026-10-24: GitHub refused hosted jobs on petcam-android, petcam-nvr and enjoyable-languages-site ("The job was not started because recent account payments have failed or your spending limit needs to be increased", e.g. petcam-nvr run 40127592404). Those are private repos and the Free plan's 2,000 included minutes are spent. cockpit wait taylab-launch-kit --pr 279 and cockpit wait taylab-agent-kit --pr 21 then exited 2 ("not waiting — GitHub is refusing jobs on 3 repos"), but their runs are self-hosted and were only queued on a busy ultra. Public repos and self-hosted runners kept running through the block (fleet-runner's hosted macOS/Windows/ARM jobs ran at 19:56Z, the same minute petcam-nvr was refused).

What

  • verdict.js: loadFailureFacts keeps account.blockedRepos (refused only, not storage quota). The account-blocked finding carries repos, and its title counts those.
  • lib/checks.js decide and Swift Waiter.decide (CLI + MCP): an account block makes waiting pointless only when the target repo is in repos (full or short name), or when one of the target's own checks is queued with cause github-hosted and "will not start" (a private repo's hosted run). A public repo's hosted queue still waits.
  • An older daemon has no repos: the CLI (and refusedRepos in checks.js) reads them from the finding's Repos: a, b evidence line, so the reinstalled CLI fixes the kit waits before the daemon is redeployed.
  • Glance fixtures regenerated (repos added); docs (cli.md exit 2, agents.md, api.js tool text) and CHANGELOG.

Tests

  • checks.test.js: refused repo (full and short name) is pointless; the kit case (block on other repos, own run queued behind a busy host) stays pending; own run queued for a hosted runner under a block is pointless with the billing reason, a public repo's is pending; old-daemon evidence parsing.
  • verdict.test.js: blockedRepos excludes quota repos; finding repos/title.
  • RollupTests.swift: the same cases for Waiter.decide.
  • Local: npm test 1111/1112 pass (0 fail), fixtures and skill --check clean, check-docs.sh ok. Swift suite proven in CI.

Deploy: fleetd changes (verdict.js/checks.js/api.js). The waiting ~/deploy-idle-4cf00c3.sh on ultra switches to origin/main at deploy time, so it deploys this too once merged.

🤖 Generated with Claude Code

GitHub refused hosted jobs on three private repos (petcam-android,
petcam-nvr, enjoyable-languages-site) once the account's included minutes
ran out, and `cockpit wait` on taylab-launch-kit #279 and taylab-agent-kit
#21 exited 2 at once, though their self-hosted runs were only queued on a
busy ultra.

The account-blocked finding now carries `repos`, the repos with refused
jobs (a storage-quota repo is not one). Both wait deciders (lib/checks.js
and Waiter.decide) stop only when the target is one of them, or when one of
the target's own checks is queued for a GitHub-hosted runner while the
account is blocked; a public repo's hosted queue still waits. Against an
older daemon the CLI reads the repos from the finding's "Repos:" evidence.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@addisdev
addisdev merged commit 9a87c00 into main Oct 24, 2026
11 checks passed
@addisdev
addisdev deleted the fix/account-blocked-per-repo branch October 24, 2026 20:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant