-
Notifications
You must be signed in to change notification settings - Fork 1
InstallerEngine conflates provision and diagnose responsibilities #855
Copy link
Copy link
Open
Labels
keypathScope: KeyPath product, app, installer, or repository workScope: KeyPath product, app, installer, or repository worklarge-refactorneeds-decisionRequires a product or scope decision before implementationRequires a product or scope decision before implementationon-holdValid work intentionally deferred pending evidence, dependency, or product decisionValid work intentionally deferred pending evidence, dependency, or product decisionpost-releasePost-public-1.0 work; not required before stable 1.0 releasePost-public-1.0 work; not required before stable 1.0 releaserefactorBehavior-preserving structural change; requires concrete justificationBehavior-preserving structural change; requires concrete justificationtech-debtKnown maintainability cost with current evidenceKnown maintainability cost with current evidencetracking-onlyOpen coordination or roadmap issue; do not implement as one PROpen coordination or roadmap issue; do not implement as one PR
Description
Metadata
Metadata
Assignees
Labels
keypathScope: KeyPath product, app, installer, or repository workScope: KeyPath product, app, installer, or repository worklarge-refactorneeds-decisionRequires a product or scope decision before implementationRequires a product or scope decision before implementationon-holdValid work intentionally deferred pending evidence, dependency, or product decisionValid work intentionally deferred pending evidence, dependency, or product decisionpost-releasePost-public-1.0 work; not required before stable 1.0 releasePost-public-1.0 work; not required before stable 1.0 releaserefactorBehavior-preserving structural change; requires concrete justificationBehavior-preserving structural change; requires concrete justificationtech-debtKnown maintainability cost with current evidenceKnown maintainability cost with current evidencetracking-onlyOpen coordination or roadmap issue; do not implement as one PROpen coordination or roadmap issue; do not implement as one PR
Current assessment
InstallerEngineremains a large, sensitive facade for install, repair, uninstall, and system inspection. The underlying maintenance debt is real, but the original standalone extraction plan is no longer the desired implementation strategy.As of 2026-07-12:
InstallerEngine.swiftis roughly 1,180 lines, up from the 779 lines cited when this issue was opened.injectedValidator ?? WizardDependencies.systemValidatorfallback remains an initialization-order and testability seam.SystemStateProvider, system validation, andInstallerDecisionPipeline.InstallerEngineas the public facade and rejects a broad manager/consolidation rewrite without concrete behavioral justification.Priority and scope
Deferred architectural debt. Do not schedule this as a standalone cleanup project ahead of user-visible bugs or reliability work.
This issue should guide opportunistic improvements when a real installer bug, reliability problem, testability limitation, or compile-boundary change already requires touching the relevant responsibility.
Desired direction
Preserve the public
InstallerEnginefacade and reinforce the existing execution model:probe → snapshot → decide → execute → verifyWhen implementation work naturally crosses one of these boundaries:
SystemStateProvider/ validator ownership.InstallerDecisionPipeline; do not introduce live state reads into planning.Explicit non-goals
SystemInspector/InstallRecipeRunnerrewrite solely to reduce file length.Activation criteria
Take a narrow slice only when at least one is true:
Related: #735, #149 and ADR-043.
Surfaced by holistic codebase review 2026-06-09; rescoped 2026-07-12.