docs: the fleet design, and a plan for its first phase - #103
Merged
Conversation
adityak74
marked this pull request as ready for review
August 24, 2026 18:10
Phase 1 only. Phase 0 needs no code, and Phase 2 cannot be planned yet: the spec defers three open questions to it, and planning around them would mean deciding them in a plan document. Two corrections to the spec, both found by reading the code it describes. /api/health and /api/capabilities already exist, so the work is extending them and not adding routes; a second route on the same path makes axum panic at startup. And a worker already has its own --token, so the per-worker requirement is met, while what is missing is an environment source fit for a mounted Secret. Claude-Session: https://claude.ai/code/session_01KGPVQ8wUG7h36zashWYCp4
Design only. Nothing here is implemented and no code is touched. Claude-Session: https://claude.ai/code/session_01KGPVQ8wUG7h36zashWYCp4
adityak74
force-pushed
the
docs/fleet-phase-1-plan
branch
from
August 24, 2026 18:11
8034f2d to
8316a1c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Draft. Documentation only, no code touched, nothing here is implemented.
Two commits:
docs/DECISIONS.mdentry: coordinator (azorp-fleetcrate) pluszorp-webworker pods, capability invocation asthe unit of distribution, git remote per track as the state bus, checkpoint
relay rules, per-worker tokens and sibling-call denial, a fleet-level rate
limit cap, four phases, and three open questions deferred to Phases 2 and 3.
Why the plan covers Phase 1 and not the rest
Phase 0 needs no code, and that checks out:
Dockerfileandcompose.ymlare both present today.
Phase 2 cannot be planned yet. The spec defers three open questions to it:
whether a worker blocks or parks while a checkpoint waits for a human, where
track remotes live, and whether
zorp-fleetreuseszorp-web's session storeshape. Writing task level steps for the coordinator would mean deciding those
three inside a plan document, which is the wrong place for them. The spec's
own handoff says the checkpoint relay is the piece to brainstorm first.
Phase 1 stops cleanly on its own. After it, a human running several worker
pods by hand can ask each one whether it is busy and what it can run, and no
agent on any pod can reach another pod.
Two corrections to the spec, found by reading the code it describes
Neither changes the design. Both change what the work is, and both are
applied in the plan rather than edited into the spec, so the record shows what
was believed when the design was written.
/api/healthand/api/capabilitiesalready exist, registered atzorp-web/src/api.rs:106and:113. The spec calls them two additions.health()returns{"status":"ok"}and nothing else, andcapabilities()reports one capability. So the work is extending the payloads. An
implementer who takes the spec literally and adds a second route on the
same path makes axum panic at startup.
zorp-webtakes its own--token, so the fleet never had one shared secret to begin with. What ismissing is a source fit for a mounted Secret, because a token in
argsisvisible in
pson the node. The plan addsZORP_WEB_TOKEN.The plan's five tasks
/api/healthsays whether a turn is in flight.SessionState.runningalready exists, so this is a read and not new bookkeeping.
/api/capabilitiessays which features the binary was compiled with andwhich tools are attached, observed rather than declared.
/api/v1/path prefix, which would break every call inweb/src/api.tsand buy Phase 1 nothing.
denial from one port to a list of named peers.
Two judgment calls worth review: the versioning choice in task 3, and that
peer matching in task 5 is a lowercased substring. The matching is blunt on
purpose, because a false positive costs one denied command with a legible
reason and a false negative costs the boundary.
One acknowledged gap, flagged in the plan's self review: task 2 does not name
the exact call that builds the agent for tool listing, because that
construction lives in
turn.rsand may move. The step says to read it andmirror it, and not to invent a second registry.
https://claude.ai/code/session_01KGPVQ8wUG7h36zashWYCp4