Skip to content

fix(items): re-spell the corpus for spec #93 and enforce LIST-ITEM-001 - #30

Merged
justinmerrell merged 1 commit into
mainfrom
fix/spec-93-listing-item-type
Sep 15, 2026
Merged

justinmerrell merged 1 commit into
mainfrom
fix/spec-93-listing-item-type

Conversation

@justinmerrell

Copy link
Copy Markdown
Contributor

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 on main currently fails the structural phase, and the nightly run will go red.

What changes

Items, a mechanical re-spelling, so no revision is bumped (same as #28):

  • metadata.revision removed from all 14 listings (a listing now carries slug only)
  • spec.listingKindspec.itemType
  • homepageUrl / sourceRepoUrl / supportUrl…URL
  • license now matches the SPDX expression pattern:
    • n8n: SUL-1.0
    • redis: LicenseRef-RSALv2 OR SSPL-1.0 OR AGPL-3.0-only
    • open-webui: LicenseRef-Open-WebUI

postgres and redis lose their blueprint.yaml. The new LIST-ITEM-001 says itemType is BLUEPRINT exactly when the item holds a blueprint. These two stay COMPONENT and become building blocks like llm-endpoint, which matches the spec's own postgres example.

Harness

  • checkIdentity reports only ERR_SLUG_MISMATCH. CORE-ITEM-002 / ERR_VERSION_MISMATCH are withdrawn.
  • New checkItemType: LIST-ITEM-001 / ERR_ITEM_TYPE_MISMATCH at /spec/itemType, same behaviour as upstream tools/src/validation/semantic.ts.
  • layout.test.ts drops its catalog-only blueprint rule, because LIST-ITEM-001 now states it in both directions.
  • structural.test.ts skips the blueprint case for any item holding none.
  • rules.test.ts uses the new listing shape and covers both directions of the new rule (upstream listing semantic/015, /016), plus a clean COMPONENT item that validates structurally.
  • README and tests/README updated.

No impact: the tags / screenshots bounds (at most 6 tags, no screenshots) and component repositoryURL (no GIT sources).

Risks for review

  • Platform sync. If the platform has not adopted #93 yet (it may still read listingKind, …Url or 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.
  • The postgres and redis descriptions still say "Single-container deployment of…". That still describes the component's defaults, so the copy is unchanged.
  • LicenseRef-… values pass the grammar, but a storefront shows them verbatim.

Verification

  • npm run typecheck: clean
  • npm 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

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>
@justinmerrell
justinmerrell merged commit aa2ef2e into main Sep 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant