Repository navigation
chore: bump Spec Kit to v1.0.6 and rename setup-plan's SPECS_DIR key to FEATURE_DIR - #299
Merged
Merged
Conversation
…to FEATURE_DIR The auto-update stage routed v1.0.5 to a maintainer (#292) because upstream renamed setup-plan.sh --json's feature-directory key from SPECS_DIR to FEATURE_DIR (github/spec-kit#4397) and this repository had consumers hard-coded to the old name: the speckit-plan skill's step 1 and the stage's own end-to-end self-test, which extracts .SPECS_DIR and fails the gate when it is absent. A plain pin bump would have pulled in the renamed script and broken both. v1.0.6 then superseded v1.0.5. Mirrors prepare's regeneration step by hand: `uvx --from git+https://github.com/github/[email protected] specify integration upgrade claude --script sh --force` on a clean main (all 22 vendored files matched their manifest hashes beforehand), then prepare's two pin edits (init-options.json speckit_version, preflight SPECKIT_SUPPORTED_VERSION). The CLI rewrote setup-plan.sh, create-new-feature.sh (branch-name sanitizing parity fix, #4286), all ten speckit-* SKILL.md files (extensions.yml-unreadable narration, #4456; plan.md FEATURE_DIR; tasks.md field-constraint bullet, #4430; constitution.md Sync Impact Report wording, #4431), integration.json and both manifests. Manifest hashes re-verified against the LF content on disk. The rename applied to every remaining consumer: the verify job's end-to-end step (jq key, shell variable, failure-detail text) and the specs/034 contract, research and tasks docs that describe that assertion. create-new-feature.sh's internal $SPECS_DIR variable is upstream's and is read by nothing outside that script. Verified: setup-plan.sh --json emits FEATURE_DIR in both modes; the auto-update-spec-kit behavioral suite passes (t4 Scenario 1 runs the real scripts through the real extracted verify step, so it only passes when both sides of the rename agree); run-local-gates.py 61/61. Closes #292 Co-Authored-By: Claude Fable 5.1 <[email protected]>
…on's Sync Impact Reports The end-to-end self-test extracted setup-plan.sh's FEATURE_DIR into a local named feature_dir, one screen below the step's own FEATURE_DIR env that means something else; every sibling extracted from the same output is sp_-prefixed, so this one is now sp_feature_dir too. Spec Kit v1.0.5 rewrote the vendored constitution skill to call its Sync Impact Report temporary scratch to be removed before commit. This repository keeps those reports as the constitution's amendment history, so CLAUDE.md now says so where the vendored instruction cannot overwrite it. Co-Authored-By: Claude Fable 5.1 <[email protected]>
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.
Bumps this repository's pinned Spec Kit version from v1.0.4 to v1.0.6 and performs the one migration the auto-update stage correctly refused to do on its own: upstream renamed
setup-plan.sh --json's feature-directory key fromSPECS_DIRtoFEATURE_DIR(github/spec-kit#4397, shipped in v1.0.5), and this repository had consumers hard-coded to the old name.Why by hand
The auto-update stage evaluated v1.0.5 and routed it to a maintainer (
needs-migration, see #292) because a plain pin bump would have pulled in the renamed script while leaving two consumers reading.SPECS_DIR: thespeckit-planskill's instructions, and the stage's own end-to-end self-test inauto-update-spec-kit.yml, which extracts.SPECS_DIRand fails the gate when it is absent. v1.0.6 then superseded v1.0.5 as the candidate; this PR takes the repository straight to v1.0.6.What the
preparejob would have done, done hereMirrors the stage's
preparestep byte-for-byte in shape: ranuvx --from git+https://github.com/github/[email protected] specify integration upgrade claude --script sh --forcefrom the repo root on a clean checkout ofmain(all 22 vendored files matched their manifest hashes before the run, so--forceoverwrote nothing local), then applied the pin edits the step applies afterwards..specify/init-options.json—speckit_version1.0.4 → 1.0.6 (the pin the stage reads; the CLI wrote this itself)..github/actions/wing-commander-preflight/action.yml—SPECKIT_SUPPORTED_VERSION1.0.4 → 1.0.6 (prepare'ssed)..specify/integration.json,.specify/integrations/{claude,speckit}.manifest.json— version + per-file SHA-256 rewritten by the CLI; every hash re-verified against the LF content on disk.What changed upstream between v1.0.4 and v1.0.6 in the files this repo vendors
Of the ~100 files upstream touched, these are the only ones that land in
.specify/or.claude/skills/speckit-*/:scripts/bash/setup-plan.sh→.specify/scripts/bash/setup-plan.sh: JSON key and plain-mode labelSPECS_DIR→FEATURE_DIR(#4397). The value was always the feature directory; only the name changed.scripts/bash/create-new-feature.sh→.specify/scripts/bash/create-new-feature.sh: branch-name sanitizing made byte-identical to the Python/PowerShell twins (#4286) —LC_ALL=Cso[^a-z0-9]is not collation-dependent,--*instead of GNU-only-\+,printfinstead ofechoso a name like-nis text.templates/commands/*.md→ all ten.claude/skills/speckit-*/SKILL.md: the extension-hook preamble/postamble no longer says to skip silently when.specify/extensions.ymlis unreadable; the agent must report the parser error and that no hooks (including mandatory ones) were checked (#4456).templates/commands/plan.md→speckit-plan/SKILL.md: step 1 now says "parse JSON for FEATURE_SPEC, IMPL_PLAN, FEATURE_DIR, BRANCH".templates/commands/tasks.md→speckit-tasks/SKILL.md: new bullet requiring data-model.md field constraints to be quoted verbatim in generated tasks (#4430).templates/commands/constitution.md→speckit-constitution/SKILL.md: the Sync Impact Report is described as temporary review material expected to be removed before commit (#4431).Unchanged upstream, and therefore unchanged here:
check-prerequisites.sh,common.sh,setup-tasks.sh,resolve-template.sh, all five.specify/templates/*-template.md,.specify/.gitignore.The rename, applied to every consumer
grep -rn SPECS_DIRacross the repository (includingspecs/,docs/,.github/) after the refresh found exactly these, all nowFEATURE_DIR:.github/workflows/auto-update-spec-kit.yml—verifyjob, "End-to-end verification" step:jq -r '.FEATURE_DIR // empty', thefeature_dirshell variable, and the "documented FEATURE_SPEC/IMPL_PLAN/FEATURE_DIR/BRANCH shape" failure detail. (.claude/skills/speckit-plan/SKILL.mdwas rewritten by the CLI, not by hand.)specs/034-e2e-verification-tier/contracts/e2e-verification-tier.mdandresearch.md— describe the live assertion, updated to match.specs/034-e2e-verification-tier/tasks.md— T006 is a completed-task record; updated too so a future grep finds no stale mention of the old key.The remaining
SPECS_DIRhits arecreate-new-feature.sh's internal shell variable ($REPO_ROOT/specs), which upstream did not rename and nothing outside that script reads.Verification
bash .specify/scripts/bash/setup-plan.sh --json(withSPECIFY_FEATURE_DIRECTORYset, as the stage invokes it) emits{"FEATURE_SPEC":…,"IMPL_PLAN":…,"FEATURE_DIR":…,"BRANCH":…}; plain mode printsFEATURE_DIR: ….bash .github/scripts/auto-update-spec-kit-tests/run-tests.sh— 518 passed, 0 failed across all ten suites.t4_verify.shScenario 1 is the contract check here: it copies the real.specify/scriptsinto a fixture worktree and runs the real extractedverifystep, so it only passes when the script and the self-test agree on the key.python .github/scripts/run-local-gates.py— 61/61 passed (the suite includesrun-tests.shas one of its gates).container-shell-safetyskill on the editedrun:step (insideverify'scontainer:job): the step already pinsshell: bash; Gate 43 passes.Tracking issue
The stage never calls
gh issue close— its own version-bump PRs close the tracking issue through GitHub'sCloses #Nkeyword, and once the pin equals the latest upstream releasedetectreports up-to-date andsettleis skipped, so nothing would ever touch #292 again. This PR therefore closes it the same way. It deliberately does NOT carry the stage'sversion-bumpPR-body marker: that marker is thepr-mergedjob's self-recognition contract for PRs the bot opened, and on this merge that job is meant to be a no-op.Closes #292
🤖 Generated with Claude Code