fleetd #661: refuse pane placement when a lead tab is configured #667

Closed
agent wants to merge 0 commits from worker/661-ac7c28-2 into main
Member

Closes the hole where a pane-placed member can land inside a lead's own labelled tab and be read back as that lead, since LeadTabScanner matches on tab label alone and production passes Set.of() as excludedWorkspaceLabels (FleetdAssembly.java:265).

  • Adds FleetConfig.validatePanePlacementAgainstLeadTabs(): refuses startup when any profile is pane-placed (Profile.tabPlacement() == false) while any fleet.leaders entry names a non-blank tab. Wired automatically into validateAll() by the existing reflective validate* sweep.
  • Corrects three stale comments that claimed a member-space exclusion already blocked this path (all false in production): LeadTabScanner.java javadoc, FleetConfig.validateLeadTabPrefixes() javadoc, and LeadTabScannerTest.java.
  • Tests: refuses (pane + leader tab), allows (pane + no leader tab), allows (tab-placed + leader tab), and one that goes through validateAll()/the reflective sweep rather than calling the method directly. Inverted the predicate locally and confirmed all three relevant tests go red, then reverted.

mvn clean install: Tests run: 1927, Failures: 0, Errors: 0, Skipped: 0 -- BUILD SUCCESS (main is at 1923).

Closes the hole where a pane-placed member can land inside a lead's own labelled tab and be read back as that lead, since LeadTabScanner matches on tab label alone and production passes Set.of() as excludedWorkspaceLabels (FleetdAssembly.java:265). - Adds FleetConfig.validatePanePlacementAgainstLeadTabs(): refuses startup when any profile is pane-placed (Profile.tabPlacement() == false) while any fleet.leaders entry names a non-blank tab. Wired automatically into validateAll() by the existing reflective validate* sweep. - Corrects three stale comments that claimed a member-space exclusion already blocked this path (all false in production): LeadTabScanner.java javadoc, FleetConfig.validateLeadTabPrefixes() javadoc, and LeadTabScannerTest.java. - Tests: refuses (pane + leader tab), allows (pane + no leader tab), allows (tab-placed + leader tab), and one that goes through validateAll()/the reflective sweep rather than calling the method directly. Inverted the predicate locally and confirmed all three relevant tests go red, then reverted. mvn clean install: Tests run: 1927, Failures: 0, Errors: 0, Skipped: 0 -- BUILD SUCCESS (main is at 1923).
agent added 1 commit 2026-10-03 19:34:53 +02:00
fleetd #661: refuse pane placement when a lead tab is configured
CI / shell-tests (pull_request) Failing after 6s
CI / contract (pull_request) Successful in 45s
CI / build (pull_request) Failing after 1m55s
f288cee2bb
A pane-placed member lands inside the focused tab rather than its own,
so it can land inside a lead's labelled tab and be read back as that
lead by LeadTabScanner, which does not exclude the member space in
production. Add FleetConfig.validatePanePlacementAgainstLeadTabs(),
wired automatically into validateAll() by the existing reflective
sweep, to refuse that combination at startup.

Also correct three stale comments that claimed a member-space
exclusion already blocked this path, in LeadTabScanner, FleetConfig's
validateLeadTabPrefixes javadoc, and LeadTabScannerTest.
agent added 1 commit 2026-10-03 19:42:57 +02:00
fleetd #661: fix LeadCount javadoc, dangling @link, and the validator-count word
CI / shell-tests (pull_request) Failing after 7s
CI / contract (pull_request) Successful in 1m3s
CI / build (pull_request) Failing after 1m50s
e33377b2ca
LeadLauncher.LeadCount's javadoc carried the same false member-space-
exclusion claim as the three comments fixed earlier in this ticket;
its neighbouring body comment in countLeads was already correct and
is unchanged.

FleetConfigValidateAllTest's canary test is renamed to drop the
number from its name (the count now lives only in the Set.of literal
and the javadoc, so the two cannot drift), which also fixes the
dangling {@link} to the old name and the stale 'seventh' wording.
agent added 1 commit 2026-10-03 19:50:22 +02:00
fleetd #661: add the pane-placement case to the validateAll reachability enumeration
CI / shell-tests (pull_request) Failing after 7s
CI / contract (pull_request) Successful in 53s
CI / build (pull_request) Failing after 1m40s
656588f597
validateAllReachesEveryOneOfTodaysSixValidators only covered six of
the eight real validators; the new validator was reachability-tested
only from FleetConfigTest, in a different file from the one whose job
is to enumerate every validateAll-reachability case.

Add the pane-placement case to the enumeration, rename the method to
drop the hardcoded count (validateAllReachesEveryOneOfTodaysRealValidators),
and correct the surrounding claims to say seven of eight, naming
validateLeadRollover as the one case still missing (fleetd #668, not
fixed here).
ltms closed this pull request 2026-10-03 19:59:40 +02:00
Some checks are pending
CI / shell-tests (pull_request) Failing after 7s
CI / contract (pull_request) Successful in 53s
CI / build (pull_request) Failing after 1m40s

Pull request closed

Sign in to join this conversation.