fix(items): re-spell the corpus for spec #93 and enforce LIST-ITEM-001 - #30
Merged
Merged
Conversation
musher-dev/specifications#93 merged on 2026-09-15 and is served from the v1 alias already, so every listing in the corpus failed the structural phase that day. ADR 0025 removes the listing's revision, renames listingKind to itemType and binds it to the item, and applies ADR 0007's URL casing. Items and harness land together: neither half goes green without the other. Items, mechanical and with no behaviour change, so no revision is bumped: - metadata.revision is dropped from all 14 listings - spec.listingKind becomes spec.itemType - homepageUrl, sourceRepoUrl, supportUrl become homepageURL, sourceRepoURL, supportURL - license takes the SPDX expression grammar: n8n is SUL-1.0, redis is LicenseRef-RSALv2 OR SSPL-1.0 OR AGPL-3.0-only, open-webui is LicenseRef-Open-WebUI postgres and redis lose their one-node blueprint.yaml. LIST-ITEM-001 makes itemType BLUEPRINT exactly when the item holds one, so a COMPONENT item can no longer carry it. They become building blocks like llm-endpoint, and no longer deploy on their own. Harness: - checkIdentity reports ERR_SLUG_MISMATCH only; CORE-ITEM-002 and ERR_VERSION_MISMATCH are withdrawn - checkItemType adds LIST-ITEM-001 / ERR_ITEM_TYPE_MISMATCH at /spec/itemType - layout.test.ts drops its catalog-only blueprint rule, which LIST-ITEM-001 now states in both directions - structural.test.ts skips the blueprint case for any item holding none - rules.test.ts moves to the new listing shape and gains both directions of the new rule plus a clean COMPONENT item that validates structurally Refs musher-dev/specifications#93. Co-Authored-By: Claude Opus 5 (1M context) <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.
Why
musher-dev/specifications#93 (ADR 0025) merged on 2026-09-15 and is already served at
specifications.musher.dev/<family>/v1/. This suite fetches that alias, so every listing onmaincurrently fails thestructuralphase, and the nightly run will go red.What changes
Items, a mechanical re-spelling, so no revision is bumped (same as #28):
metadata.revisionremoved from all 14 listings (a listing now carriesslugonly)spec.listingKind→spec.itemTypehomepageUrl/sourceRepoUrl/supportUrl→…URLlicensenow matches the SPDX expression pattern:SUL-1.0LicenseRef-RSALv2 OR SSPL-1.0 OR AGPL-3.0-onlyLicenseRef-Open-WebUIpostgresandredislose theirblueprint.yaml. The new LIST-ITEM-001 saysitemTypeisBLUEPRINTexactly when the item holds a blueprint. These two stayCOMPONENTand become building blocks likellm-endpoint, which matches the spec's own postgres example.Harness
checkIdentityreports onlyERR_SLUG_MISMATCH.CORE-ITEM-002/ERR_VERSION_MISMATCHare withdrawn.checkItemType: LIST-ITEM-001 /ERR_ITEM_TYPE_MISMATCHat/spec/itemType, same behaviour as upstreamtools/src/validation/semantic.ts.layout.test.tsdrops its catalog-only blueprint rule, because LIST-ITEM-001 now states it in both directions.structural.test.tsskips the blueprint case for any item holding none.rules.test.tsuses the new listing shape and covers both directions of the new rule (upstream listing semantic/015, /016), plus a cleanCOMPONENTitem that validates structurally.No impact: the
tags/screenshotsbounds (at most 6 tags, no screenshots) and componentrepositoryURL(noGITsources).Risks for review
listingKind,…Urlor the listing revision, or expect one blueprint per listing), merging this first could break the sync. That matters most for postgres and redis, which can no longer be deployed on their own.LicenseRef-…values pass the grammar, but a storefront shows them verbatim.Verification
npm run typecheck: cleannpm test: 445 tests, 442 pass, 0 fail, 3 skipped (the blueprint structural case for postgres, redis, llm-endpoint)task check:shell check:workflow: clean🤖 Generated with Claude Code