refactor(0026): Phase 8 — move Satisfactory-specific Infra out + stale-ref sweep - #289
Merged
Merged
Conversation
…e-ref sweep (#283) Makes Erp.Infrastructure less game-coupled by relocating the Satisfactory catalogue/save providers, and clears the deck of stale post-refactor references. Provider moves (the issue's named scope): - Shared types pushed DOWN to Erp.Application.Common so both infra projects can reach them without a back-reference (Erp.Infrastructure → Satisfactory.Infrastructure is one-way): InMemoryCatalogue, CatalogueOptions, FactoryStateOptions. - Satisfactory-specific providers moved to Satisfactory.Infrastructure: DocsCatalogProvider, SatisfactorySaveNetFactoryStateProvider, UserCatalogueConfig. - Satisfactory.Infrastructure gains an Erp.Application.Common ProjectReference. - Consumers needed no using changes (PlayerScopedCatalogProvider / AutoIngestJob / the DI extension already import both namespaces); NoCatalogueProblem dropped its now-unused Erp.Infrastructure using; the Infra test added using Satisfactory.Infrastructure. Stale-ref sweep (functional): - InternalsVisibleTo fixed for the renamed test assemblies: ApiService.Tests → Satisfactory.Presentation.Api.Tests, Agent.Tests → Erp.Presentation.Agent.Common.Tests. - aspire.config.json appHost path → src/Hosting/Erp.Hosting.AppHost/. Stale-ref sweep (docs/comments): CLAUDE.md, README.md, .claude/architecture.md, docs/power-generators.md, tools/Update-Assets.ps1, and a few in-code comments updated to the post-ADR-0026 paths. Deleted docs/MIGRATION-0026.md — a transient refactor checklist (its own header said it self-deletes post-merge); the durable layout/naming lives in ADR-0026. Deferred to a dedicated follow-up (documented on #283): the OrToolsRecipePlanner "split" (its orchestration already lives in the Application query handler + IRecipePlanner; the real concern is Satisfactory-specific generator/miner data in a parity-tested LP core), and fully de-coupling PlayerScopedCatalogProvider / AutoIngestJob from Erp.Infrastructure — both are larger refactors than a cleanup pass and risk the planner/catalogue core. Verified: build green; format clean; Erp.Infrastructure.Tests 22/1 (the 1 is the known Windows-only PlayerScopedCatalogProvider env failure, green on CI); Satisfactory.Presentation.Api.Tests 29/0/5. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
UI test results10 tests 9 ✅ 6s ⏱️ Results for commit cdae400. |
This was referenced May 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Partial close-out of #283 (ADR-0026 phase 8). Makes
Erp.Infrastructureless game-coupled and clears stale post-refactor references.Provider moves (the issue's named scope)
Erp.Infrastructure → Satisfactory.Infrastructureis one-way, so the Satisfactory providers can''t reference back. Resolved by pushing the shared types down toErp.Application.Common(which everything references) — no cross-product→Satisfactory coupling:Erp.Application.Common:InMemoryCatalogue,CatalogueOptions,FactoryStateOptionsSatisfactory.Infrastructure:DocsCatalogProvider,SatisfactorySaveNetFactoryStateProvider,UserCatalogueConfig(+ anErp.Application.CommonProjectReference)Consumers needed almost no changes —
PlayerScopedCatalogProvider/AutoIngestJob/ the DI extension already import both namespaces.Stale-ref sweep
Functional:
InternalsVisibleTofixed for renamed test assemblies (ApiService.Tests→Satisfactory.Presentation.Api.Tests,Agent.Tests→Erp.Presentation.Agent.Common.Tests);aspire.config.jsonappHost path →src/Hosting/Erp.Hosting.AppHost/.Docs/comments: CLAUDE.md, README.md,
.claude/architecture.md,docs/power-generators.md,tools/Update-Assets.ps1+ a few in-code comments updated to post-ADR-0026 paths.Deleted
docs/MIGRATION-0026.md— a transient checklist (self-deletes per its own header); durable layout/naming lives in ADR-0026.Deferred (documented on #283, kept open)
OrToolsRecipePlanner"split" — its orchestration already lives in the Application query handler +IRecipePlanner; the real concern is Satisfactory-specific generator/miner data baked into a parity-tested LP core.PlayerScopedCatalogProvider/AutoIngestJobfromErp.Infrastructure(both still Satisfactory-coupled).Both are larger refactors than a cleanup pass and risk the planner/catalogue core — better as a dedicated, test-guarded effort.
Verification
dotnet formatclean.Erp.Infrastructure.Tests22 pass / 1 fail — the 1 is the known Windows-onlyPlayerScopedCatalogProviderTests.No_row_and_fallback_on_delegates_to_fallbackenv failure (green on CI Linux).Satisfactory.Presentation.Api.Tests29 / 0 / 5.🤖 Generated with Claude Code