Repository navigation
Conversation
A republication with --title or --body-file updates the existing pull request and names what changed. A lost or failed gh pr create settles by the owned branch, with time of its own, so an identical retry no longer ends the same way. Prepared workspaces carry a commit identity, and publication Git starts no detached maintenance. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A TMPDIR too deep for a Unix socket falls back to /tmp, in production and in the test that failed under a build slot. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A failed activation reads the host's journal and says whether the execution exists. The same start activates it instead of failing on the reserved name, and the host sync stops one nobody retried. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The budget needs a live execution, not a scoped credential, and access refusals name their reason. hosts check answers for a worker's GitHub reads. Workers read the coordinator's event log, the guard passes literal GraphQL reads, CI parks get a deadline, and a log request naming a reviewer is no review ask. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Desk review of exact head Findings:
Issue closure assessment (implementation at this head, not a claim of a rolled/live proof):
Validation: exact-head worktree; source review of the diff and affected surrounding paths; read every closing issue and its comments. Focused existing tests passed: |
PR writes recheck authority and end with the lease; only the settling read outlives it. An empty --body-file or --title is refused. A start the host confirms completes even when the caller's deadline failed it. The worker App wrapper shares the guard's literal GraphQL read classifier, and goconst findings are fixed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
gh pr edit reads review requests, which an App token may not reach, and fails the edit with them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What this doesFixes what still fails for workers on SSH execution hosts, in four commits that can be read one at a time. Publication (
Askpass (
Remote starts (
Worker reads (
For the reviewer
Not covered
TestingFocused runs on an execution host: Written from one execution, which owns one branch, so these fixes share one pull request rather than two batches. Overlap: #2339 also changes Closes #2242 🤖 Generated with Claude Code |
goconst counted the GraphQL read classifier's literals with the retry reader's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What this does
Fixes what still fails for workers on SSH execution hosts, in four commits that can be read one at a time.
Publication (
fix(publish): settle creates and update pull requests)--titleor--body-filenow updates the existing pull request and lists the changed fields inupdated. A flag left out keeps the field, an identical retry writes nothing, and a failed update is an error rather than silence.gh pr createsettles by the owned branch. A pull request found there is returned. If none is found, the error says GitHub created none and why, through a fixed diagnosis rather than raw output. Only an unreadable branch stays "uncertain".--sync-basefalls back to it for workspaces prepared earlier.TempDircleanup flake, which never reproduced locally, so the fix is unproven against the flake itself.Askpass (
fix(secret): bind the askpass socket under a deep TMPDIR)/tmpwhenTMPDIRis too deep for a Unix socket.Remote starts (
fix(agents): reconcile remote starts that time out)Worker reads (
fix(agents): give SSH workers reads the coordinator owns)budgetneeds a live execution, not a scoped credential. Refusals name their reason, and a missing grant is no longer called "revoked".agents hosts checkanswers for a worker's reads: withoutgithub.workerAppit follows the host's ownghlogin, and a logged-out host fails the check and every start. An older host, which does not report a login, keeps working until it updates.beekeeper logworks for a managed worker: its flags go to the coordinator, which answers with at most 256 KiB of the newest events. This gives a post-merge proof a channel.note addno longer reads a log request as a review ask because it names a reviewer.gh api graphqlread whose query and variables are all literal and hold no mutation. Files, dynamic words,-Xand repeatedqueryfields stay refused.merge.ciTimeoutor its per-repository value, so CI that never settles still wakes the worker.For the reviewer
beekeeper loglets a managed worker read the coordinator's event log. It is read-only and bounded, like the existing roster relay, but it is a wider read than before.status,boardandsupervisor statusstay refused.TestExecutionStartThroughHarnessRegistersBeforeSSHAndRecoversLostReplychanged for this.TestExecutionSyncReleasesStaleUnacknowledgedReservationchanged for this.Not covered
ghwrapper stays refused, as documented. The guard change applies to hosts on their own login.budgetby hand over SSH outside a worker still reportsgh executable not found.state lock is busyfailures noted in Supervisor rework fails on remote starts: execution host deadline exceeded, activation outcome unconfirmed #3202 are a separate cause and are not changed here.gh issue view --json projectItemsstill answers[]for another owner's board. That is GitHub's answer; the hint and the docs now say it proves nothing.Testing
Focused runs on an execution host:
./internal/execution,./internal/secret,./internal/guard, and./cmdfiltered to executions, publication, starts, workers and notes. All pass. The full suite and lint are left to CI. None of this has been proven live on a rolled release.Written from one execution, which owns one branch, so these fixes share one pull request rather than two batches. Overlap: #2339 also changes
internal/execution/retire.go,internal/execution/server.goanddocs/ssh-execution-hosts-operations.md. Here those are one identity constant, one capability field and separate doc paragraphs, so whichever merges second has at most a small conflict.Closes #2242
Closes #3192
Closes #3194
Closes #3195
Closes #3196
Closes #3197
Closes #3198
Closes #3199
Closes #3202
Closes #3211
Closes #3275
🤖 Generated with Claude Code