Skip to content

refactor(0026): Phase 8 — move Satisfactory-specific Infra out + stale-ref sweep - #289

Merged
ChrisonSimtian merged 1 commit into
mainfrom
refactor/283-phase8-infra-moves
May 29, 2026
Merged

refactor(0026): Phase 8 — move Satisfactory-specific Infra out + stale-ref sweep#289
ChrisonSimtian merged 1 commit into
mainfrom
refactor/283-phase8-infra-moves

Conversation

@ChrisonSimtian

Copy link
Copy Markdown
Collaborator

Partial close-out of #283 (ADR-0026 phase 8). Makes Erp.Infrastructure less game-coupled and clears stale post-refactor references.

Provider moves (the issue's named scope)

Erp.Infrastructure → Satisfactory.Infrastructure is one-way, so the Satisfactory providers can''t reference back. Resolved by pushing the shared types down to Erp.Application.Common (which everything references) — no cross-product→Satisfactory coupling:

  • Erp.Application.Common: InMemoryCatalogue, CatalogueOptions, FactoryStateOptions
  • Satisfactory.Infrastructure: DocsCatalogProvider, SatisfactorySaveNetFactoryStateProvider, UserCatalogueConfig (+ an Erp.Application.Common ProjectReference)

Consumers needed almost no changes — PlayerScopedCatalogProvider / AutoIngestJob / the DI extension already import both namespaces.

Stale-ref sweep

Functional: InternalsVisibleTo fixed for renamed test assemblies (ApiService.TestsSatisfactory.Presentation.Api.Tests, Agent.TestsErp.Presentation.Agent.Common.Tests); aspire.config.json appHost 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)

  • The 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.
  • Fully decoupling PlayerScopedCatalogProvider / AutoIngestJob from Erp.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

  • Build green; dotnet format clean.
  • Erp.Infrastructure.Tests 22 pass / 1 fail — the 1 is the known Windows-only PlayerScopedCatalogProviderTests.No_row_and_fallback_on_delegates_to_fallback env failure (green on CI Linux).
  • Satisfactory.Presentation.Api.Tests 29 / 0 / 5.

🤖 Generated with Claude Code

…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>
@github-actions

Copy link
Copy Markdown

UI test results

10 tests   9 ✅  6s ⏱️
11 suites  1 💤
11 files    0 ❌

Results for commit cdae400.

@ChrisonSimtian
ChrisonSimtian merged commit 3c6f8b4 into main May 29, 2026
14 checks passed
@ChrisonSimtian
ChrisonSimtian deleted the refactor/283-phase8-infra-moves branch May 29, 2026 02:38
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