FLEET.md mirrors an implementation that now exists in crew — and the mirror is wrong about scope #187
Labels
No labels
attention
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-ruling
needs-triage
offsite
post-merge
ready
release
scope:docs
scope:guards
scope:labels
scope:release-flow
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/ceremony#187
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Short answer to the question that prompted this
TRIAGE.md, REVIEWER.md and BUILDER.md must stay.
heavy-duty/crew's session prompts delegate to them by name — they are load-bearing runtime dependencies, not background reading:triage.txtmention.txthygiene.txtreview.txtbuild.txtresume.txthandoff.txtfragment-unblockable.txtDeleting them leaves every agent session reading instructions that point at nothing. The split is deliberate and stated in the engine itself (
duty-triage.sh: "Detection here, judgment in sessions") — crew owns mechanism, these docs own judgment. They encode the issue contract, the verdict doctrine, picking/claiming/building, the round rhythm. None of that is in crew and none of it should be.FLEET.md is the exception, for two separate reasons.
1. It is a prose mirror of an implementation that now exists
## Anatomy of a duty loopdescribes the tick/poll/act skeleton:That is now
shared/bin/tick.shandshared/bin/duty.sh, with the hygiene sweep self-scheduling inside the duty tick rather than needing its own cron line.## The rosteris nowfleet.roster, a committed file the CLI reads.## Resiliencedescribes crash recovery the engine implements.A prose description of running code drifts by default. This one has.
2. It is now factually wrong on the most safety-relevant point
Two passages state the opposite of merged behaviour:
repos.txtis the scope, for every role including reviewer. Requests outside it are logged and never acted on. The rule changed on 2026-07-25 because an unbounded review surface is what made a drill box's containment impossible: narrowingrepos.txtconfined attention, triage and hygiene but not review — the one module that submits verdicts.This is the same staleness already fixed in crew's
conf/repos-default.txtheader, and FLEET.md is the upstream doctrine source that header was written from. Left alone it is the authoritative-looking document that tells the next reader the old rule.This is not cosmetic. An agent session that reads "no repo filter may gate it" may reasonably conclude a request outside its registry is authorization.
Spec
Split FLEET.md by what owns each part:
shared/README.mdalready documents these with a provenance table; a second description in another repo is a second thing to keep true.fleet.roster, delete here. The committed file is the roster; prose about who is on the fleet duplicates it and will drift the moment the single-role split starts.Leave a pointer where the mechanism was, so a reader looking for "how does a tick actually work" is routed to crew rather than finding silence.
Tasks
repos.txtis the scope for every role; out-of-scope work is logged, never acted on.## Anatomy of a duty loop's mechanism, replacing it with a pointer to crew'sshared/README.md.## The rosterprose with a pointer tofleet.roster.Acceptance criteria
Test plan
Documentation. The check is a read-through against
shared/lib/duty-review.sh,duty-builder.sh,duty-triage.shandbin/tick.shat crew's merged head, confirming every remaining behavioural claim in FLEET.md matches. The scope passages are the pinned must-fix: a reader must not be able to conclude that a review request outsiderepos.txtis authorization.Dependencies
Caused by the scope doctrine change in heavy-duty/crew (merged in crew#16). Sibling of the same fix already applied to crew's
conf/repos-default.txt.