Skip to content

Claude/add executor library jl xt k#1790

Merged
hulto merged 2 commits intoagent-builder-executorfrom
claude/add-executor-library-JLXtK
Feb 11, 2026
Merged

Claude/add executor library jl xt k#1790
hulto merged 2 commits intoagent-builder-executorfrom
claude/add-executor-library-JLXtK

Conversation

@hulto
Copy link
Copy Markdown
Collaborator

@hulto hulto commented Feb 11, 2026

What type of PR is this?

What this PR does / why we need it:

Which issue(s) this PR fixes:

Fixes #

claude and others added 2 commits February 10, 2026 04:58
Introduce an executor interface for build task execution with two
implementations: MockExecutor for testing and DockerExecutor for
production use. The Docker executor pulls the specified build image,
runs the build script as the container entrypoint, and streams
stdout/stderr over channels. The builder agent now passes claimed
tasks to the executor, collects output/errors from channels, and
reports results back to the server via gRPC.

https://claude.ai/code/session_017WBbxwiwQS6tXTNcaBrfBH
@hulto hulto merged commit 3720124 into agent-builder-executor Feb 11, 2026
@hulto hulto deleted the claude/add-executor-library-JLXtK branch February 11, 2026 02:06
github-merge-queue bot pushed a commit that referenced this pull request Feb 17, 2026
* ping works

* encrypted ping

* Replace b64 ID with uuid

* Update to use ed25519 key

* Address feedback

* fix

* Callback and claim tasks. TODO: fix tasking dead clients.

* Claude/add executor library jl xt k (#1790)

* Add executor library with mock and Docker implementations

Introduce an executor interface for build task execution with two
implementations: MockExecutor for testing and DockerExecutor for
production use. The Docker executor pulls the specified build image,
runs the build script as the container entrypoint, and streams
stdout/stderr over channels. The builder agent now passes claimed
tasks to the executor, collects output/errors from channels, and
reports results back to the server via gRPC.

https://claude.ai/code/session_017WBbxwiwQS6tXTNcaBrfBH

* cleanup

---------

Co-authored-by: Claude <noreply@anthropic.com>

* Address PR #1791 feedback on builder executor

- Extract poll interval magic number to taskPollInterval const
- Simplify ClaimBuildTasks to follow beacon task claiming pattern
  (use rollback helper, reload tasks after commit, remove debug query)
- Add rollback.go helper matching c2 package pattern
- Add TODO section to README: concurrent builds, streaming tests,
  gRPC streaming for SubmitBuildTaskOutput

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>

* Review fixes: remove premature started_at, update README, fix error field type

- Remove SetStartedAt from ClaimBuildTasks so claimed_at and started_at
  are distinct lifecycle stages (started_at should be set at execution time)
- Update README with current gRPC API, executor docs, and full package table
- Change BuildTask error field from String to Text for consistency with
  the output field and the Task schema pattern

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>

* Add output_size derived field and hook to BuildTask schema

Mirror the Task schema pattern: add output_size field with a
HookDeriveBuildTaskInfo hook that auto-computes byte length from
the output field on create/update. Enables sorting and filtering
build tasks by output size in GraphQL.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>

* Concurrent builds, executor-owned channels, idempotent output submission

- Run build tasks concurrently with a semaphore (max 4) instead of
  sequentially blocking the poll loop. Wait for in-flight builds on
  context cancellation.
- Invert channel ownership: executor implementations now close both
  outputCh and errorCh before returning (sender closes). This follows
  standard Go channel conventions and prevents fragile caller-side
  close ordering.
- Make SubmitBuildTaskOutput idempotent: if a task is already finished,
  return success without overwriting. Handles network retries safely.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>

* updates

* Cleanup and builder management

* Resolve feedback

* merge

* Fix test

* Fix tests

* Feedback

* Remove buildTaskIDs

* Cleanup upstream

* Dont task dead or unseen builders

* Fix test

* Started to add multi transport

* Update callbackURI

* Update type

* del settings

* refactor alive beacon query

* fix test

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Happy <yesreply@happy.engineering>
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.

2 participants