Skip to content

feat(fleet): active, settled, and retired sections across squadrons - #242

Merged
bryantderosier merged 2 commits into
j5/retired-agent-never-a-rowfrom
j5/fleet-three-sections
Sep 24, 2026
Merged

bryantderosier merged 2 commits into
j5/retired-agent-never-a-rowfrom
j5/fleet-three-sections

Conversation

@bryantderosier

@bryantderosier bryantderosier commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

The Fleet page showed one table per Squadron with every Crew expanded, so I could not tell at a glance what was still in motion, what was done, and what had retired.

The page now has three sections. Active is one table across every Squadron of every connected environment, with a Squadron column on each tree's root row (the environment label joins it only when several environments merge) and Crew expanders collapsed by default. Settled is a collapsed expander holding the trees whose every agent, Crew seats included, reads as settled from upstream's settle mechanic; idle and unknown stay Active, a mixed tree is never split, and a settled root held in Active by a working child says "Settled" in its status cell. Retired is one collapsed list of archived Crews across Squadrons, each row naming its Squadron. The partition is a pure function in fleet.logic.ts with focused tests, and the Fleet page product definition now describes the built page (the one-Squadron-at-a-time page in the old criteria was never built, so those criteria are replaced in place).

Stacked on #244, which makes a retired agent never a row; the partition depends on that. Only J5-owned files change, so the FORK.md inventory is unchanged. Mobile has no Fleet page.

Verified with the fleet logic tests (9 passing), the web typecheck, lint on the changed files, and a visual pass on a dev server seeded from real data.

Before

Fleet page before: one section per Squadron, Crew expanded

After, default

Fleet page after: one Active table with a Squadron column, Crew and Retired collapsed

After, Crew and Retired opened

Fleet page after with the Crew and Retired list opened

A settled Captain with idle seats stays in Active

Settled Captain with idle seats stays in Active

Everything settled: collapsed, then opened

Settled section collapsed

Settled section opened

Designed, built, and reviewed by a J5 crew under Claude Fable 5.1 in Claude Code.

🤖 Generated with Claude Code

@bryantderosier bryantderosier self-assigned this Sep 22, 2026
@bryantderosier
bryantderosier added this pull request to stack #243 September 22, 2026 14:35
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). labels Sep 22, 2026
@bryantderosier
bryantderosier removed this pull request from stack #243 September 22, 2026 14:40
@bryantderosier
bryantderosier changed the base branch from j5/retired-crew-cards to j5/retired-agent-never-a-row September 22, 2026 14:41
@bryantderosier
bryantderosier added this pull request to stack #245 September 22, 2026 14:41
@Jacksondr5 Jacksondr5 added the jackson-direct Taken by Jackson + Astra outside the fleet methodology; lanes never staff these label Sep 23, 2026
@Jacksondr5

Copy link
Copy Markdown
Owner

Claimed for review by Jackson with Claude Fable 5.1 and GPT-6-Astra (the crews review thread). Other agents: please skip this one.

Jacksondr5 pushed a commit that referenced this pull request Sep 23, 2026
The single J5 CI job ran format, lint, typecheck, and every package's tests
serially and had crept up to its 20 minute timeout with all tests green; the
PR run for #242 was cancelled at 20m03s while its push twin passed at 19m19s.

Split the job the way upstream ci.yml does: a checks job for format, lint,
and typecheck, a test job for every package except the server, and three
server shards, since the server suite runs files one at a time and alone took
over eleven minutes. A gate job keeps the check name the default-branch
ruleset requires and fails when any split job fails, is cancelled, or is
skipped.

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

Copy link
Copy Markdown
Collaborator Author

#254 landed on option A: an archive touches one agent, and a Captain's archive still retires its Crews for now. I rebased this onto the reworked #244 and #241's Captain link. The partition reads only current placement and upstream's settle facts, so the child of an archived agent now renders at the Squadron root in whichever section it belongs to, and each retired Crew row across Squadrons keeps the Captain line from #241.

I also dropped the partition's client-side filter for archived threads (37cd4a4). The client's thread shells never carry archived threads, so it could never fire; the roster read is what keeps a retired agent off the page. When the Captain→Crew cascade comes out, that PR also needs to group a Captain-less Crew at the root so it still settles as a unit (fleet-page AC31).

Merge order: top of the fleet stack, so #241 merges first, then #244, then this.

@github-actions github-actions Bot added size:L 100-499 effective changed lines (test files excluded in mixed PRs). and removed size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). labels Sep 23, 2026

@Jacksondr5 Jacksondr5 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rebased cleanly on the reworked #244 and #241's Captain line. The partition reads only current placement and upstream's settle facts, a child of an archived agent renders at the Squadron root in whichever section it belongs to (tested), retired rows keep the Captain line, and the dropped archived-thread filter is safe: the server snapshot splits archived threads out, the shell stream turns an archive into a removal, and the shells atom reads only the active set, so the filter could never fire. Approving, to merge after #244.

One consistency nit: thread.archivedAt !== null on the retired-row branch can never be true by the same argument; keep both checks or neither. And the AC31 note (a Captain-less Crew groups at the root and settles as a unit) is only in your comment, which is fine for the cascade-removal PR to pick up.

Reviewed by Claude Fable 5.1 in Claude Code, with an independent pass by GPT-6-Astra in Codex.

bryantderosier and others added 2 commits September 23, 2026 11:16
The Fleet page showed one table per Squadron with every Crew expanded, so a
person could not tell at a glance what was still in motion.

The page now has three sections. Active is one table across every Squadron of
every connected environment, with a Squadron column on each tree's root row and
Crew expanders collapsed by default. Settled is a collapsed expander holding the
trees whose every agent, Crew seats included, reads as settled from upstream's
settle mechanic; idle and unknown stay Active, and a mixed tree is never split.
Retired is one collapsed list of archived Crews across Squadrons, each row naming
its Squadron. The partition is a pure function with focused tests, and the Fleet
page product definition now describes the built page.

Designed, built, and reviewed by a J5 crew under Claude Fable 5.1.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ives

The client's thread shells hold only unarchived threads (the shell snapshot
splits archived ones out), so the partition's "drop an agent whose thread
shows archived" filter could never fire, and its comment promised a
stale-read guard that did not exist. The roster read already leaves retired
agents out, so the filter goes and the test now covers what does happen:
the child of a retired agent roots in its own section.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bryantderosier

Copy link
Copy Markdown
Collaborator Author

Rebased onto the updated #244 and #241. I dropped the dead thread.archivedAt !== null check in #241 (81e54a8), where the line comes from, so both checks are now gone. The AC31 note stays with the cascade-removal PR.

@Jacksondr5 Jacksondr5 left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-approving on 3fb3bd0: rebased on the fixed #244 and #241, and the dead archivedAt branch on the retired row is gone, so the page and the partition make the same claim about archived shells. Merges last in the stack.

Reviewed by Claude Fable 5.1 in Claude Code.

@bryantderosier
bryantderosier merged commit 1cd7bac into j5/main Sep 24, 2026
29 of 31 checks passed
@bryantderosier
bryantderosier deleted the j5/fleet-three-sections branch September 24, 2026 13:35
Jacksondr5 added a commit that referenced this pull request Sep 24, 2026
…242)

Carried from j5/main 1cd7bac onto the upstream V2 candidate.

Conflict: crews.md AC20 takes the PR's text with the handoff-artifact naming.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jacksondr5 added a commit that referenced this pull request Sep 25, 2026
Joins fork head 2cf4ad7 (j5/main, including #247, #241, #244, #242,
#214, #215, #216, #248, #249, #250, #251) with the reviewed candidate
(j5/upstream-sync-20260924-candidate), which descends from frozen upstream
67a2be0. Upstream force-rewrote history,
so per FORK.md's rewrite runbook the candidate was built from the upstream
tree with pin 62aef85 as the content base, then carried each j5/main
PR since 8f56083 onto it and adapted it to upstream V2. This merge's
tree equals the candidate tree exactly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

jackson-direct Taken by Jackson + Astra outside the fleet methodology; lanes never staff these size:L 100-499 effective changed lines (test files excluded in mixed PRs). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants