Skip to content

fix(add-component): stop seeding a .gitignore that hides the path manifest - #185

Merged
clabonte merged 1 commit into
feat/add-componentfrom
fix/add-component-manifest
Oct 28, 2026
Merged

clabonte merged 1 commit into
feat/add-componentfrom
fix/add-component-manifest

Conversation

@clabonte

Copy link
Copy Markdown
Collaborator

Stacked on #180.

Both seeded .gitignore templates (C# and Python) 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, 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.md and the C# guide is in the C# docs PR.

🤖 Generated with Claude Code

…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
clabonte merged commit ef4d918 into feat/add-component Oct 28, 2026
8 checks passed
@clabonte
clabonte deleted the fix/add-component-manifest branch October 28, 2026 15:14
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>
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