Skip to content

feat(console): fleet config panel — switch by identity, roster filtered to members (ADR Part A slice 2) - #35

Merged
brettchien merged 1 commit into
mainfrom
feat/fleet-config-panel-slice2
Aug 14, 2026
Merged

feat(console): fleet config panel — switch by identity, roster filtered to members (ADR Part A slice 2)#35
brettchien merged 1 commit into
mainfrom
feat/fleet-config-panel-slice2

Conversation

@brettchien

Copy link
Copy Markdown
Contributor

Drafted by Orca (ecs-claude) — flagging authorship (shared GitHub identity).

Part A slice 2 of fleet-as-usage-grouping (#33), building on the backend from #34. Slice 1 taught oab-mcp's fleet_config to report each fleet's members; this wires the console so the config panel matches the new model.

What

  • Switch by fleet identity, not cluster. A fleet is a usage-based group, so two fleets can share a cluster (orca + mira both on oab). Switching by cluster made them indistinguishable — the switch key moves from data-clusterdata-fleet (name). FleetConfigEntry gains members. selectFleet(name) derives the cluster it reads from and the members it filters by.
  • Roster filtered to the fleet's members. New pure filterByMembers(deployments, members) keeps only deployments whose ECS service name (oab-{ns}-{name}) or short name is a member — mirroring studio-cp's resolve_service, which accepts both forms. Empty member list ⇒ whole cluster (legacy [[fleet]] semantics), roster unfiltered. null selection = default cluster, unfiltered.
  • List by fleet. Each fleet button now shows its member services as chips (or whole cluster); the empty-config help points at the new [fleet.<name>] form.
  • Fixtures model the canonical shape — orca + mira sharing cluster oab with distinct members — and the new [fleet.<name>] TOML the editor loads.

This realizes the ADR §4 consequence: "the config panel evolves: list fleets by name, roster filtered to a fleet's members, switch by fleet identity (not cluster)." The fleets.toml editor (slice C) carries over unchanged.

Verification

  • npm run typecheck (tsc --noEmit) clean.
  • npm run build (tsc + vite build) clean — this is what desktop.yml CI gates on for console/**.
  • npm test (vitest) 31/31 (was 22; 9 new): member filtering — full-name, short-name, empty-list-is-whole-cluster, no-match, multi-match; switch-by-name with a shared cluster; member chip rendering; serviceName derivation.
  • ⚠️ Console unit tests don't run in CI (ci.yml is Rust-only; desktop.yml runs build, not test) — so the vitest run above was done locally. build-test will still exercise the (unchanged) Rust backend.

Not in this slice

Reverse-MCP / Part B (ADR §3, §5 open questions) — next up per the plan (study → ADR → implement).

🤖 Generated with Claude Code

…red to members (ADR Part A slice 2)

Backend slice 1 (#34) taught oab-mcp's fleet_config to report each fleet's
members. This wires the console (Part A slice 2 of the fleet-grouping ADR):

- **Switch by fleet identity, not cluster.** A fleet is a usage-based group,
  so two fleets can share a cluster (orca + mira on `oab`). The config panel's
  switch key moves from `data-cluster` to `data-fleet` (name); `FleetConfigEntry`
  gains `members`. Selecting a fleet derives the cluster it reads from and the
  member set it filters by.
- **Roster filtered to the fleet's members.** New pure `filterByMembers` keeps
  only deployments whose ECS service name (`oab-{ns}-{name}`) or short name is a
  member — mirroring studio-cp's `resolve_service`, which accepts both forms. An
  empty member list means whole cluster (legacy semantics), roster unfiltered.
- **List by fleet.** Each fleet button shows its member services as chips (or
  "whole cluster"); empty-config help now points at the new [fleet.<name>] form.
- Fixtures model the canonical shape: orca + mira sharing cluster `oab` with
  distinct members, and the new [fleet.<name>] TOML the editor loads.

Verification: tsc --noEmit + vite build clean; vitest 31/31 (9 new — member
filtering incl. short-name/full-name/empty cases, switch-by-name with a shared
cluster, member rendering). Console unit tests don't run in CI (only Rust does),
so this was run locally.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
@brettchien
brettchien merged commit f2f62de into main Aug 14, 2026
2 checks passed
@brettchien
brettchien deleted the feat/fleet-config-panel-slice2 branch August 14, 2026 01:52
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.

1 participant