refactor(core): consume Nordstein.Core as a git submodule - #538
Merged
Conversation
Completes the split started in #535. Nordstein.Core now lives in its own public repository (NordsteinSoftware/Nordstein.Core), extracted with git filter-repo so the full per-file history came across (28 commits, back to the original rename). core/ becomes a submodule pinned to that repo; the plain-tracked staging copy is removed. The reference machinery is unchanged: NordsteinCorePath already defaults to core/ and UseLocalCore flips on when core/Nordstein.Core.sln exists, so source mode, the Dockerfile restore layers and detect-changes see the same core/ paths they always have. A submodule (rather than a sibling checkout or published packages) keeps Proxytrace publicly buildable with no feed, and keeps a Core edit a one-build change. - add core/ submodule (.gitmodules) pinned to Nordstein.Core main - CI / e2e / perf / codeql / release: checkout with submodules: recursive so core/ is populated for the build and the Docker build context - detect-changes: a submodule bump shows as the bare path `core` plus .gitmodules; treat both as backend changes - Directory.Build.props: drop the subtree-split / sibling-checkout framing - docs/code-reuse.md, docs/commands.md: submodule reality + --recurse-submodules Verified: Core standalone build + 198 tests; full Proxytrace.sln source-mode build (0 warnings, 0 errors). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A8tYyCfGKz2dnvzEX2GTyd
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.
Completes the split that #535 set up. Nordstein.Core now lives in its own public repository, NordsteinSoftware/Nordstein.Core, and Proxytrace consumes it as a git submodule at
core/. The in-repo staging copy is removed.The extraction
Run against the merged
masterwithgit filter-repo, mapping the pre-move paths (Proxytrace.Common/,Proxytrace.Common.Tests/,Proxytrace.Testing/) onto the currentcore/layout — notgit subtree split, which follows paths without renames and would have collapsed everything to the single move commit. Result: 28 commits of real history in the new repo, back through the licensing subsystem, the secrets-at-rest retrofit and the originalrename to proxytrace, sogit blameon Core still points at the change that shaped each line.Verified standalone in a scratch clone before pushing (no parent directory to inherit from):
dotnet build(0/0),dotnet test(198 passed),dotnet pack(4 packages). Two standalone-only fixups landed on top in the Core repo: a.gitignore(Proxytrace's root one didn't come across) and a README/PUBLISHING rewrite for the standalone reality.Why a submodule (not a sibling checkout or packages)
core/is a submodule pinned to a specific Core commit. This was chosen deliberately:../Core/checkout can't be seen from a Docker build context, which would have forced release images onto package mode and therefore onto a published feed — dragging the feed/licence/prefix decisions incore/PUBLISHING.mdonto the critical path. The submodule keepscore/inside the build context, so source mode works everywhere, including Docker, with nothing published.--recurse-submodulesclones and CI'sGITHUB_TOKENboth read it — no 401 for outside contributors.The reference machinery is unchanged:
NordsteinCorePathalready defaults tocore/andUseLocalCoreflips on whencore/Nordstein.Core.slnexists, so source mode, the Dockerfile restore layers anddetect-changessee the samecore/paths they always have.What changed here
.gitmodules+coregitlinkcore/is now a submodule pinned to Nordstein.Coremainci,e2e,perf,codeql,release)checkoutwithsubmodules: recursiveon the 7 jobs that buildcore/or the Docker context; the diff-only jobs (changes,secrets,frontend,manual, releasemeta/release) are left alonedetect-changescore(no trailing slash) plus.gitmodules; both now count as backend changesDirectory.Build.propsgit subtree split/ sibling-checkout framing from the commentsdocs/code-reuse.md,docs/commands.mdgit clone --recurse-submodulesNo product code changed.
Verification
dotnet build core/Nordstein.Core.sln— clean, standalone (through the submodule)dotnet build Proxytrace.sln(source mode against the submodule) — 0 warnings, 0 errorsbackend(both solutions) andcore-package(product against packed.nupkgs) exercise both modes on this PR.No user-facing change, so no CHANGELOG entry (same as #535).
Follow-ups (not in this PR)
PUBLISHING.md) belongs there.Nordstein.*prefix reservation are unchanged open decisions, now genuinely optional since the submodule needs none of them.🤖 Generated with Claude Code
https://claude.ai/code/session_01A8tYyCfGKz2dnvzEX2GTyd