Skip to content

[Preset]: Update Inventory Alignment (inventory-alignment) to v0.1.1 #4487

Description

@Yash-Chindam

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

  • Preset installs successfully via download URL
  • All commands execute without errors
  • Documentation is complete and accurate
  • No security vulnerabilities identified
  • Tested on at least one real project

Submission Requirements

  • Valid preset.yml manifest included
  • README.md with installation and usage instructions
  • LICENSE file included
  • GitHub release created with version tag
  • All template and command files exist and are properly formatted
  • Preset ID follows naming conventions (lowercase-with-hyphens)

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions