Repository navigation
feat(generator): per-project generator pin with checksum, plus an unpinned local-jar override - #175
Merged
Merged
Conversation
This was referenced Oct 19, 2026
…override (#169) The generator version was fixed by the kit's own generator.lock, so a project could not move to a newer or older generator without bypassing `specfuse authoring generate` and losing checksum verification. - A project may commit .specfuse/generator.lock. It is found by walking up from the working directory, stopping at the repo root. Only version and sha256 are required; asset, release_tag and release_repo default to the dist repo's conventions, min_java to the kit's. It is downloaded, verified and cached exactly like the kit pin, and warns when it differs from the kit's tested version. - SPECFUSE_GENERATOR_JAR runs a local jar as-is, warning on every run that it is unpinned. It is the variable check-extension-vocabulary.py already honoured. - Every run names the pin it used. The status line is flushed so it precedes the generator's own output. - check-extension-vocabulary.py examines the project-pinned jar when one is set, instead of the newest jar in the shared cache. - generator-access.md documents both; CI covers the offline paths. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…does add-component read only <spec-dir>/.specfuse/generator.lock, while specfuse authoring generate searches upward to the repo root. Reuse generator.find_project_lock so both name the same pin. Mention the project pin in getting-started and the generate skill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
clabonte
force-pushed
the
feat/project-generator-pin
branch
from
October 29, 2026 14:42
22f32af to
fe53e73
Compare
With no project pin the CLI falls back to the kit pin. Its download fails in CI, and bash -e exited the step without a message. The check only greps the output, so the exit status is ignored. 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.
Closes #169.
Problem.
specfuse authoring generateonly read the kit'sgenerator.lock. The only way for a project to use a different generator was to bypass the CLI, which RestoManager does today: it commits its jar and has no checksum.Changes
.specfuse/generator.lock.versionandsha256are required.asset,release_tagandrelease_repodefault to the dist repo's naming, andmin_javadefaults to the kit's.upgradenever touches the file, because it isn't in the overlay manifest.SPECFUSE_GENERATOR_JAR=/path.jarruns a local jar as-is and warns on every run that it is unpinned. It reuses the variablecheck-extension-vocabulary.pyalready reads.check-extension-vocabulary.pynow checks the project-pinned jar instead of the newest jar in the shared cache, which could belong to a different project.docs/generator-access.mdgets a new section, troubleshooting rows and a security note. The scripts README has a one-line update.Tested locally (from source, with a separate
SPECFUSE_HOME):.git: ignoredThe new CI step passes locally against this branch.
Not covered: a checksum mismatch on a fresh download (needs network); that code is unchanged apart from naming the pin source in the message. No
compatibility.mdrow yet; that's added at release time.Rebased on main (2026-10-29, kit 0.30.0, generator 0.21.0). The rebase was clean. Since this PR opened,
generate.sh(#176) andadd-component(#180) shipped already saying the project pin is honoured, so until this merges those claims are false. One follow-up commit:add-componentnow finds the project pin throughgenerator.find_project_lock, so it searches up to the repo root likegeneratedoes, rather than looking only in<spec-dir>/.specfuse/.getting-started.mdand thegenerateskill mention the project pin.Re-tested from source: the #169 CI step passes, and so do
check-shipped-docs.pyandcheck-flows-page.py.add-componentresolves the project pin from the spec dir and from a subdirectory.🤖 Generated with Claude Code