This is an update to an existing catalog entry, not a new listing. inventory-alignment is already in presets/catalog.community.json at v0.1.0, and that entry's download_url currently 404s. Filed at @mnriem's request in #4449 (comment), which closed my direct catalog PR in favour of this flow. EXTENSION-PUBLISHING-GUIDE.md:174 asks for updates to come through this template too, so this supersedes #4449. Companion submission for the required extension is #4486.
Preset ID
inventory-alignment
Preset Name
Inventory Alignment
Version
0.1.1
Description
Classifies each requirement against a read-only inventory of live IDs before writing, so reworded requirements are updated instead of duplicated.
Author
Yash Chindam
Repository URL
https://github.com/Yash-Chindam/spec-kit-inventory-alignment
Download URL
https://github.com/Yash-Chindam/spec-kit-inventory-alignment/releases/download/v0.1.1/inventory-alignment.zip
Documentation URL
https://github.com/Yash-Chindam/spec-kit-inventory-alignment/blob/main/inventory-alignment/README.md
License
MIT
Required Spec Kit Version
=1.0.4
Required Extensions (optional)
speckit-inventory >=0.1.1 — submitted as #4486, and now declared formally in preset.yml:
requires:
speckit_version: ">=1.0.4"
extensions:
- id: "speckit-inventory"
version: ">=0.1.1"
required: true
This is the substantive change in v0.1.1. When #4227 was filed, preset.yml's requires: could only declare speckit_version, so this dependency could not be expressed at all — I noted that limitation in that submission, and @mnriem had flagged it in #4164 (comment) as a separable core enhancement. It has since shipped: requires.extensions landed in Spec Kit v1.0.4 via #4250. specify preset add now reports a missing, disabled, or version-mismatched extension at install time instead of leaving the wrappers silently inert.
Templates Provided
1 template — tasks-template (append strategy), documenting the optional covers: field that links a task to the requirement IDs it implements.
Commands Provided
2 commands, both using the wrap strategy with the {CORE_TEMPLATE} placeholder so they fall through to the original command body:
speckit.specify — prepends a pre-pass that loads the inventory and classifies each proposed requirement as already-true / edit-existing / conflict / genuinely-new before writing.
speckit.analyze — prepends a pre-pass that loads the complete live ID set as an input to cross-artifact coverage and conflict review.
Number of Scripts (optional)
0
Tags
inventory, alignment, requirements, traceability, workflow
Key Features
Behaviour is unchanged from the v0.1.0 listing in #4227. This release restores availability and corrects the dependency declaration.
- Classify before writing. Each proposed requirement is checked against the live ID set and resolved as already-true, edit-existing, conflict, or genuinely-new, so a reworded requirement updates the original instead of adding a second live one.
- Discovery by ID, not by wording. The failure this addresses is a grep-based one: after "charge on Pay" becomes "show a confirm modal", nothing matches, and the agent adds a duplicate.
- Wraps rather than replaces. Both overrides use
{CORE_TEMPLATE}, so the original command body still runs and the preset can be removed without residue.
- Fails loudly when its dependency is absent. New in v0.1.1 — see the required-extensions section above.
Testing Checklist
Submission Requirements
Testing Details
What went wrong with v0.1.0. The repository the release assets lived under became unavailable, so repository, homepage, documentation, and download_url in the current catalog entry all 404. Installation fails at the download, before verify_archive_sha256 is ever reached. That is my fault, and I'm sorry it reached the catalog in that state.
Why the digest changes. The v0.1.0 archives are unrecoverable — nothing reproduces their pinned digests — so v0.1.1 supersedes them and the pinned SHA-256 changes with it. Artifacts are now built reproducibly (sorted members, fixed timestamp, two canonical permission modes, eol=lf pinned via .gitattributes), and a clean clone reproduces the digest byte for byte.
Verification of this release, run against the live URL rather than local files:
$ curl -sIL .../v0.1.0/inventory-alignment.zip -o /dev/null -w '%{http_code}'
404
$ curl -sIL .../v0.1.1/inventory-alignment.zip -o /dev/null -w '%{http_code}'
200
$ sha256sum inventory-alignment.zip
227db99a4c0626e8310f0116153929923a3f832b1b2d849231caeaff958b65a6
That digest matches the sha256 in the proposed catalog entry under Additional Context. The archive is 4,669 bytes containing preset.yml, both wrapper commands, templates/tasks-template.md, README.md, and CHANGELOG.md, and it validates against PresetManifest.
The corrected floor is the one thing worth re-checking on your side. requires.speckit_version moves from >=0.9.0 to >=1.0.4. The old floor was wrong the moment the preset declared requires.extensions: v1.0.3 has no _validate_requires_extensions, v1.0.4 does, so a v0.9 CLI would install the preset and ignore the dependency it declares — the exact silent-no-op that #4250 set out to prevent.
Wrapper behaviour is carried over from #4227 and was not re-run for this release; no command or template content changed between v0.1.0 and v0.1.1. Happy to re-run the full matrix against the v0.1.1 archive before vetting if you'd prefer that evidence fresh.
Additional Context
Proposed catalog entry. The preset template has no field for this, so including it here as the extension template does — only version, download_url, sha256, requires.speckit_version, requires.extensions, and updated_at change against the entry currently on main:
"inventory-alignment": {
"name": "Inventory Alignment",
"id": "inventory-alignment",
"version": "0.1.1",
"description": "Classifies each requirement against a read-only inventory of live IDs before writing, so reworded requirements are updated instead of duplicated.",
"author": "Yash Chindam",
"repository": "https://github.com/Yash-Chindam/spec-kit-inventory-alignment",
"download_url": "https://github.com/Yash-Chindam/spec-kit-inventory-alignment/releases/download/v0.1.1/inventory-alignment.zip",
"sha256": "227db99a4c0626e8310f0116153929923a3f832b1b2d849231caeaff958b65a6",
"homepage": "https://github.com/Yash-Chindam/spec-kit-inventory-alignment",
"documentation": "https://github.com/Yash-Chindam/spec-kit-inventory-alignment/blob/main/inventory-alignment/README.md",
"license": "MIT",
"requires": {
"speckit_version": ">=1.0.4",
"extensions": [
"speckit-inventory"
]
},
"provides": {
"templates": 1,
"commands": 2
},
"tags": [
"inventory",
"alignment",
"requirements",
"traceability",
"workflow"
],
"created_at": "2026-08-20T00:00:00Z",
"updated_at": "2026-09-09T00:00:00Z"
}
Vet the pair together. The companion speckit-inventory v0.1.1 extension submission is #4486. This preset's wrappers do nothing useful without it, and as of v0.1.1 the CLI enforces that rather than degrading silently.
AI disclosure. Filed on behalf of @Yash-Chindam by Claude Code (model: Claude Opus 5), at my direction. Per CONTRIBUTING, the underlying preset used substantial AI assistance for code generation — first drafted with ChatGPT (Codex, GPT-5), then reviewed and corrected with Claude Code — as disclosed in #4227. For this submission specifically, Claude Code verified the live URLs and digests, unpacked and inspected both archives, confirmed the >=1.0.4 floor against the #4250 implementation, and drafted this text; I reviewed it before filing.
Preset ID
inventory-alignment
Preset Name
Inventory Alignment
Version
0.1.1
Description
Classifies each requirement against a read-only inventory of live IDs before writing, so reworded requirements are updated instead of duplicated.
Author
Yash Chindam
Repository URL
https://github.com/Yash-Chindam/spec-kit-inventory-alignment
Download URL
https://github.com/Yash-Chindam/spec-kit-inventory-alignment/releases/download/v0.1.1/inventory-alignment.zip
Documentation URL
https://github.com/Yash-Chindam/spec-kit-inventory-alignment/blob/main/inventory-alignment/README.md
License
MIT
Required Spec Kit Version
Required Extensions (optional)
speckit-inventory>=0.1.1 — submitted as #4486, and now declared formally inpreset.yml:This is the substantive change in v0.1.1. When #4227 was filed,
preset.yml'srequires:could only declarespeckit_version, so this dependency could not be expressed at all — I noted that limitation in that submission, and @mnriem had flagged it in #4164 (comment) as a separable core enhancement. It has since shipped:requires.extensionslanded in Spec Kit v1.0.4 via #4250.specify preset addnow reports a missing, disabled, or version-mismatched extension at install time instead of leaving the wrappers silently inert.Templates Provided
1 template —
tasks-template(appendstrategy), documenting the optionalcovers:field that links a task to the requirement IDs it implements.Commands Provided
2 commands, both using the
wrapstrategy with the{CORE_TEMPLATE}placeholder so they fall through to the original command body:speckit.specify— prepends a pre-pass that loads the inventory and classifies each proposed requirement as already-true / edit-existing / conflict / genuinely-new before writing.speckit.analyze— prepends a pre-pass that loads the complete live ID set as an input to cross-artifact coverage and conflict review.Number of Scripts (optional)
0
Tags
inventory, alignment, requirements, traceability, workflow
Key Features
Behaviour is unchanged from the v0.1.0 listing in #4227. This release restores availability and corrects the dependency declaration.
{CORE_TEMPLATE}, so the original command body still runs and the preset can be removed without residue.Testing Checklist
Submission Requirements
preset.ymlmanifest includedTesting Details
What went wrong with v0.1.0. The repository the release assets lived under became unavailable, so
repository,homepage,documentation, anddownload_urlin the current catalog entry all 404. Installation fails at the download, beforeverify_archive_sha256is ever reached. That is my fault, and I'm sorry it reached the catalog in that state.Why the digest changes. The v0.1.0 archives are unrecoverable — nothing reproduces their pinned digests — so v0.1.1 supersedes them and the pinned SHA-256 changes with it. Artifacts are now built reproducibly (sorted members, fixed timestamp, two canonical permission modes,
eol=lfpinned via.gitattributes), and a clean clone reproduces the digest byte for byte.Verification of this release, run against the live URL rather than local files:
That digest matches the
sha256in the proposed catalog entry under Additional Context. The archive is 4,669 bytes containingpreset.yml, both wrapper commands,templates/tasks-template.md,README.md, andCHANGELOG.md, and it validates againstPresetManifest.The corrected floor is the one thing worth re-checking on your side.
requires.speckit_versionmoves from>=0.9.0to>=1.0.4. The old floor was wrong the moment the preset declaredrequires.extensions: v1.0.3 has no_validate_requires_extensions, v1.0.4 does, so a v0.9 CLI would install the preset and ignore the dependency it declares — the exact silent-no-op that #4250 set out to prevent.Wrapper behaviour is carried over from #4227 and was not re-run for this release; no command or template content changed between v0.1.0 and v0.1.1. Happy to re-run the full matrix against the v0.1.1 archive before vetting if you'd prefer that evidence fresh.
Additional Context
Proposed catalog entry. The preset template has no field for this, so including it here as the extension template does — only
version,download_url,sha256,requires.speckit_version,requires.extensions, andupdated_atchange against the entry currently onmain:Vet the pair together. The companion
speckit-inventoryv0.1.1 extension submission is #4486. This preset's wrappers do nothing useful without it, and as of v0.1.1 the CLI enforces that rather than degrading silently.AI disclosure. Filed on behalf of @Yash-Chindam by Claude Code (model: Claude Opus 5), at my direction. Per CONTRIBUTING, the underlying preset used substantial AI assistance for code generation — first drafted with ChatGPT (Codex, GPT-5), then reviewed and corrected with Claude Code — as disclosed in #4227. For this submission specifically, Claude Code verified the live URLs and digests, unpacked and inspected both archives, confirmed the
>=1.0.4floor against the #4250 implementation, and drafted this text; I reviewed it before filing.