Rename kernel ring to Fallout.Core, fix onion review findings, and remove the Nuke.* shims#1
Closed
ChrisonSimtian wants to merge 7 commits into
Closed
Conversation
…-namespaces Renames the shared kernel ring projects/assemblies/package IDs Fallout.Kernel* to Fallout.Core*, and deepens each sub-project's namespace to match its project (review finding #4): Fallout.Core.Text.Json, Fallout.Core.IO.Compression, and Fallout.Core.IO.Globbing (were flat Fallout.Kernel / Fallout.Kernel.IO). Updates all consumer usings, fallout.slnx, the strongly-typed-solution Verify snapshot, and reconciles CHANGELOG / ADR-0006 / spike-0003 (stranded "Kernel" prose -> "Core", plus a naming note that the kernel ring reuses the Fallout.Core name freed by the earlier Fallout.Core -> Fallout.Domain domain rename). Build green; 463 passed / 0 failed / 7 skipped. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The `:setup` scaffold's Configuration.cs imported `Fallout.Common.Tooling`, a namespace that no longer exists since the onion realignment dissolved the Fallout.Common catch-all — so a freshly-scaffolded consumer build failed to compile. `Enumeration` and `TypeConverter<T>` now live in `Fallout.Application.Tooling`; repoint the using there. The template is shipped as an EmbeddedResource (not compiled in-repo), so the solution build can't catch this; verified by compiling the emitted Configuration.cs against the Fallout.Application.Tooling assembly. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…view #2) The GenerateTools and References targets still pointed SpecificationsDirectory at the dissolved `src/Fallout.Common/Tools` and stamped the dead `Fallout.Common.Tools.*` namespace, so regenerating tool wrappers was broken and would have emitted wrong namespaces. - SpecificationsDirectory -> `src/Fallout.Application.Tools` (where the tool specs moved). - namespaceProvider -> `Fallout.Application.Tools.{Name}` (matches existing generated output). - Add a shared `SpecificationFiles` list (the `<Tool>/<Tool>.json` glob) that excludes obj/bin build-output JSON, now that the spec directory is the project root rather than a dedicated Tools folder. `References` consumes it via the file-list overload instead of `Directory.GetFiles(..., TopDirectoryOnly)`, which never matched the subdir specs. Verified: build/_build.csproj compiles; the selection resolves 61 tool specs, excludes the 2 obj artifacts, and the emitted namespace matches the committed generated files. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The fitness suite only guarded the Domain ring plus a single Application-ring assertion that omitted Fallout.Application.Components, and there were no guards for the Core (kernel) or Infrastructure rings. Adds: - Fallout.Application.Components to the Application ⊥ Infrastructure test (and an explicit Fallout.Application.Solutions reference — it was only transitive before). - CoreRingFitnessTests: the Core kernel ring must not depend on Application/Infrastructure/Cli (the kernel-side counterpart to the Domain test). - InfrastructureRingFitnessTests: the Infrastructure ring must not depend on the Fallout.Cli composition root (it may still depend inward). - Domain test now also forbids Fallout.Core and Fallout.Cli. The Architecture.Tests csproj now references every ring assembly, since an unreferenced assembly is silently dropped from the scan. Architecture.Tests 1 -> 3 tests; full suite 465 passed / 0 failed / 7 skipped. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
With net472 gone, two net10.0-only projects carried unreachable preprocessor branches: - ContextAwareTask.cs (Fallout.MSBuildTasks, net10.0-only): the net472 #else paths were already removed; this also drops the now-always-true `#if NETCOREAPP` guard around `using System.Runtime.Loader;`. - NuGetToolPathResolver.cs (Fallout.Infrastructure.Tooling, net10.0-only): drops the dead `#if !NETSTANDARD2_0`/`#else` split, keeping the EnumerationOptions-based path. No behavior change (the surviving branch is the one that already compiled on net10.0). Live netstandard2.0 conditionals in Fallout.Core and the vendored Fallout.Persistence.Solution are intentionally untouched. Full suite 465/0/7. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… shim
The onion re-layering + namespace deepening (ADR-0006) moves types across rings
and deepens namespaces in ways a re-export shim cannot honestly mirror — a code
review showed the deepening had already silently broken the shim path for
glob/compression extension methods and the GlobbingCaseSensitivity enum. A
half-working shim that compiles and then fails at the edges is worse than none,
so the shim layer is removed and the migration is treated as a deliberate,
one-time break (a fuller migration helper in fallout-migrate is the follow-up).
Removed:
- src/Shims/{Nuke.Common,Nuke.Components} shim projects (+ leftover Nuke.Build)
- src/Fallout.SourceGenerators/TransitionShimGenerator.cs (the shim generator)
- tests/{Nuke.Common,Nuke.Components}.Shim.Tests, tests/Consumers/Nuke.Consumer
- TransitionShimGeneratorTest + its Verify snapshots
- the corresponding fallout.slnx entries
Kept: src/Shared/NukeNamespaceMap.cs and the whole Fallout.Migrate(.Analyzers)
CLI — the migrate path still needs the map.
Docs/pipeline updated to match (AGENTS.md, repository-layout, from-nuke guide,
roadmap, release.yml); historical ADRs/spikes and the transient rebrand-plan
left as-is. Regenerated the strongly-typed-solution snapshot (5 Nuke.* accessors
dropped). Build green; full suite 460 passed / 0 failed / 7 skipped.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sweeps the small findings from the code review: - Extract a shared `RingFitness.AssertNoDependencyOn` helper for the three ring tests (was `FailingTypes` duplicated verbatim 4×). The helper also folds in a non-empty-scan precondition: a NetArchTest rule over an empty type set reports success, so a stale namespace filter (e.g. after a rename) would silently turn a guard into a no-op — now it fails loudly instead. - Drop the legacy pre-realignment names from the Core and Domain forbidden lists. Those namespaces no longer exist (dead weight), and "Fallout.Build" specifically false-positives against the real, allowed `Fallout.Build.Shared` project (NetArchTest matches by namespace-segment prefix). Keep only the live outer-ring guards. - Add a `Fitness_scan_is_not_vacuous` guard to the Domain tests (same vacuity concern; its two rules share the `Fallout` filter). - Fix src/Fallout.Domain/README.md: it was titled `# Fallout.Core` and referenced `Fallout.Build` — both stale (Fallout.Core is now the live kernel ring; Fallout.Build is now Fallout.Application). Full suite 461 passed / 0 failed / 7 skipped. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ChrisonSimtian
added a commit
that referenced
this pull request
Jul 12, 2026
…t creation Contributors weren't consistently labelling PRs, so release notes fell through to 'Other Changes'. - .github/release.yml: document the label taxonomy inline (header + per-label blurbs on what each is for). It already drives auto-generated release notes; now it's also the canonical reference for which label to apply. - issue-and-pr-style.md: add a label-at-creation rule next to the raise-in-draft rule. - release-and-versioning.md: add a changelog-category-label step to the PR-creation flow. - AGENTS.md: rule #1 now names the category label + points at release.yml. So AI applies the matching changelog-category label whenever it raises a PR on the user's behalf. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ChrisonSimtian
pushed a commit
that referenced
this pull request
Jul 19, 2026
When working from a personal fork (origin) alongside the core repo (upstream), branch from a stale origin/main instead of upstream/main and open the PR against the wrong repo — both happened in practice and produced a large, spurious merge conflict. Add a step 0 to the PR-creation flow in release-and-versioning.md: detect the fork/upstream remote setup via `git remote -v`, branch from upstream/main, push new branches to origin, and open PRs against upstream. Also restate the pre-existing draft-by-default rule (already documented in issue-and-pr-style.md) directly in this flow, since it's the doc AGENTS.md rule #1 points to at PR-creation time and the flag was dropped once already. Point AGENTS.md rule #1 at both additions. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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.
Stacks on
refactor/onion-architecture(the onion re-layering). This branch renames the kernel ring, fixes the findings from a full code review of the onion work, and removes the now-untenableNuke.*transition shims. Base is set to the onion branch so the diff is just the 7 commits below.Public namespaces and package IDs change (
Fallout.Kernel*→Fallout.Core*, deepened sub-namespaces), and theNuke.*transition shims are removed. This is a deliberate one-time break — the onion re-layering is too deep to shim honestly. NUKE consumers migrate viafallout-migrate; a fuller migration helper is the queued follow-up. Belongs on theexperimentalline, batched to the yearly major (ADR-0004).What's here (7 commits)
Fallout.Kernel→Fallout.Core+ align sub-namespacesusing Fallout.Common.Toolingin the starter build templateGenerateTools/ReferencesatFallout.Application.ToolsNuke.*transition shims — migration is a hard break, not a shimKernel ring →
Fallout.CoreFallout.Kernel*renamed toFallout.Core*across projects, assemblies, package IDs, namespaces,.slnx.namespace = project(review Add project-scoped skill for restructuring PR commit history #4):Fallout.Core.Text.Json,Fallout.Core.IO.Compression,Fallout.Core.IO.Globbing.Fallout.Corename freed when the old domain ring becameFallout.Domain— documented with a naming note inCHANGELOG.md/ ADR-0006.Shims removed
A code review showed the namespace deepening had already silently broken the shim path for glob/compression extension methods and the
GlobbingCaseSensitivityenum. A half-working shim that compiles then fails at the edges is worse than none, so the whole shim layer is gone:src/Shims/*, theTransitionShimGenerator, the shim tests +Nuke.Consumersentinel, and the.slnxentries.NukeNamespaceMapand theFallout.MigrateCLI are kept — the migrate path still needs them.Tests
dotnet build fallout.slnxgreen; full suite 461 passed / 0 failed / 7 skipped. Architecture fitness now guards Domain + Core + Application(+Components) + Infrastructure rings, each with a non-vacuous-scan precondition.Follow-up (not in this PR)
Build the real migration helper in
fallout-migrate(namespace/package moves a prefix-swap can't do) once the rearchitecture lands — the sanctioned consumer path now that shims are gone.Test drive
Check out
refactor/kernel-to-coreand run./build.sh(or./build.ps1) — it carries the full onion stack plus these changes.🤖 Generated with Claude Code