Repository navigation
fix(add-component): stop seeding a .gitignore that hides the path manifest - #185
Merged
Merged
Conversation
…ifest Both seeded .gitignore files ignored *.generated-paths.json as "rewritten on every regen". The generator documents the opposite: the manifest is committed in the component, its capturedAt comes from the spec repo's <stateDir>/<group>.paths.json baseline rather than the clock, so a regen that moved nothing leaves it byte-identical (clabonte/generator#2055). Ignoring it discards the old-to-new path mapping a layout-changing release hands over. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
clabonte
added a commit
that referenced
this pull request
Oct 28, 2026
* feat(add-component): seed C# and Python component repos once (#177) `specfuse authoring add-component <csharp|python> <dir>`, run from the spec repo, creates ../<dir>, renders templates/components/<lang> into it, git-inits it, appends the component's groups to the project file, and runs generate.sh for them when the project has it. The seeded files are project-owned from then on: not in the scaffold manifest, never touched by upgrade, never emitted by the generator. C#: .slnx, Directory.Build.props (src/ + gen-src/), Domain / Infrastructure / Api projects with the package references the pinned generator's output compiles against (taken from the generator's own compile fixture), a Program.cs wiring the generated registrations, and the two seams generated code calls by name or needs to be usable: UserHelper and an ExceptionFilter mapping generated domain exceptions to HTTP. Requires a tenancy block (clabonte/generator#2883). Python: a uv workspace with contracts and core libraries whose package roots follow the generator's derivation; kebab-case project names are refused until clabonte/generator#2882 is fixed. Drift guard: example-regen seeds both from hello-orders, generates with the pinned jar, then builds and serves the C# API (200/404/400) and syncs, imports and tests the Python workspace. ci.yml covers the offline refusals and the seed shape. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(add-component): stop seeding a .gitignore that hides the path manifest (#185) Both seeded .gitignore files ignored *.generated-paths.json as "rewritten on every regen". The generator documents the opposite: the manifest is committed in the component, its capturedAt comes from the spec repo's <stateDir>/<group>.paths.json baseline rather than the clock, so a regen that moved nothing leaves it byte-identical (clabonte/generator#2055). Ignoring it discards the old-to-new path mapping a layout-changing release hands over. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.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.
Stacked on #180.
Both seeded
.gitignoretemplates (C# and Python) ignored*.generated-paths.jsonas "rewritten on every regen". The generator documents the opposite: the manifest is committed in the component. ItscapturedAtcomes from the spec repo's<stateDir>/<group>.paths.jsonbaseline, not the clock, so a regen that moved nothing leaves it byte-identical (clabonte/generator#2055,PathManifestWriter). Ignoring it throws away the old-to-new path mapping that a layout-changing release hands over.The ignore line is replaced by a comment saying the omission is deliberate. The same correction for
docs/component-repos.mdand the C# guide is in the C# docs PR.🤖 Generated with Claude Code