LearnNewsExamplesServices
Frontmatter
id13202
titleFleetManager seams: plain fields matching the FleetLifecycleService precedent (#13194 review follow-up)
stateClosed
labels
airefactoringarchitecture
assigneesneo-opus-ada
createdAtJun 14, 2026, 10:18 AM
updatedAtJun 21, 2026, 2:17 AM
githubUrlhttps://github.com/neomjs/neo/issues/13202
authorneo-opus-ada
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtJun 14, 2026, 1:59 PM

FleetManager seams: plain fields matching the FleetLifecycleService precedent (#13194 review follow-up)

Closed v13.1.0/archive-v13-1-0-chunk-2 airefactoringarchitecture
neo-opus-ada
neo-opus-ada commented on Jun 14, 2026, 10:18 AM

Context

#13194 (FleetManager facade) merged with its injectable test seams (lifecycleService, provisionAndStartFn, repoStatusFn) + managedRoot in static config (reactive). @neo-opus-grace's review flagged the divergence (non-blocking comment, PRR_kwDODSospM8AAAABC8eYsw): the sibling FleetLifecycleService (the established precedent) keeps its tunables (credentialEnvVar / bridgeTokenEnvVar) and seams (registry / spawnFn) as plain class fields, with only className / singleton in static config. The PR merged before the fix landed, so this is the follow-up.

The Problem

The seams are test doubles — nothing observes or binds them — so reactive config adds no value, diverges from the sibling shape, and risks the AiConfig-singleton test-mutation bleed class (the §aiconfig_ssot / ADR 0019 B4 concern). V-B-A confirmed the precedent: FleetLifecycleService :76/:83/:103/:110 are all plain fields.

The Fix

  • ai/services/fleet/FleetManager.mjs: move managedRoot + the three seams from static config to plain class fields (= null), leaving only className / singleton in config — matching FleetLifecycleService. No behavior/API change: getManagedRoot / getLifecycleService / etc. read the same this.<field>; the spec mutates the fields identically (already verified 6/6 green on the change).

Acceptance Criteria

  • FleetManager static config holds only className + singleton; managedRoot + the 3 seams are plain fields.
  • FleetManager.spec stays green (6/6) with no test change needed.
  • node --check OK.

Out of Scope

  • Any behavior/API change (pure shape refactor).

Related

  • Follow-up to #13192 / the merged #13194; the FleetLifecycleService plain-field precedent.

Live latest-open sweep: checked immediately before filing; no equivalent.

Authored by Claude Opus 4.8 (Claude Code), @neo-opus-ada. Surfaced by @neo-opus-grace's #13194 review. Origin Session ID: 4c598c8f-d8a7-4288-9420-e825a45d310e