Skip to content

Re-vendor the specification bundle at neutral identifiers#8

Merged
kikashy merged 1 commit into
mainfrom
feat/revendor-neutral-spec
Jul 23, 2026
Merged

Re-vendor the specification bundle at neutral identifiers#8
kikashy merged 1 commit into
mainfrom
feat/revendor-neutral-spec

Conversation

@kikashy

@kikashy kikashy commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

The actual blocker

CHANGELOG.md and README.md both said re-vendoring was "pending the specification project publishing" a neutral tag. That was wrong. The permanent https://judgmentpack.org/schema/ identifiers have been on judgment-pack-spec's main since its first neutrality PR. The blocker was inside this repository:

tools/sync-spec-artifacts/main.go:225 compares the source checkout's git remote get-url origin against its own hardcoded constant. That constant named the predecessor organization, while the real spec repo's origin is Judgment-Pack/judgment-pack-spec — so the documented procedure in docs/releasing.md exited 1 with source origin is not the official judgment-pack-spec repository. The re-vendor path was dead.

Changes

Atomic — none of these work alone:

  • tools/sync-spec-artifacts/main.go:23 and internal/releasecheck/check.go:12 → the Judgment-Pack URL. The sync tool's constant had to move first, since it gates the tool that regenerates the lock the release gate then validates.
  • Regenerated lock.json, schema.json, manifest.schema.json
  • internal/artifacts/artifacts_test.go:11-14 → new pinned repository, commit, ref
  • Corrected the three stale prose claims

Why a commit pin, not a tag

Attempted first, and it failed. judgment-pack-spec/tools/build_release.py:52-67 binds the tag string to specVersion in three assertions plus a release-notes check. v0.1.0-draft.1 fails all four — the design is one tag per specification version. Republishing under a second tag would require bumping specVersion across the manifest, schema const, schema $id, 47 conformance cases and the examples, announcing a revision when nothing normative changed.

releasecheck.immutableRef (check.go:58-66) already accepts a full-length commit digest as immutable. This is a supported reference, not a relaxation of the gate. The pin returns to a tag when a specification version carrying the permanent identifiers is published.

Machine-visible change

spec schema 0.1.0-draft --format json moves:

field before after
schemaId raw.githubusercontent.com/… https://judgmentpack.org/schema/0.1.0-draft/…
bytes 14307 14268
sha256 81f6986e… c65c559d…

Bundle digest changes too. outputVersion stays "1". Per VERSIONING.md this warrants a minor bump, not a patch.

Verified

  • gofmt -l empty · go vet ./... clean · go test ./... all packages ok
  • check-release --tag v0.1.0Release inputs verified for v0.1.0.
  • spec test-conformance47/47, exit 0 — corpus is byte-identical to the previous pin, so this is a genuine no-change-in-behavior result
  • goreleaser check validated
  • grep -rn protossai .no matches (was 9). The one surviving protoss string is the intentional origin statement at CHANGELOG.md:28.

Unblocks

This was the only item blocking the MCP skeleton — describe_runtime exposes artifact.provenance, which until now would have surfaced the predecessor URL to every agent that called it.

🤖 Generated with Claude Code

…l identifiers

The embedded bundle was pinned to the pre-neutralization upstream tag, whose
schema `$id` values point at a temporary repository-hosted URL under the
predecessor organization. Two hardcoded constants also named that organization
and gated the maintainer tooling: `sync-spec-artifacts` compares the source
checkout's `origin` against its own constant, so the documented re-vendor
procedure in docs/releasing.md could not run at all against the real
specification repository.

Re-vendor from Judgment-Pack/judgment-pack-spec. The two schema `$id` members
now carry the permanent https://judgmentpack.org/schema/ identifiers. The
conformance corpus and manifest are byte-identical to the previous pin, so all
47 cases still pass; only lock.json, schema.json, and manifest.schema.json
change.

Pin an exact commit rather than a tag. The specification's release tooling
binds the tag string to `specVersion` in three assertions, so the permanent
identifiers on its `main` branch cannot be republished under a second
0.1.0-draft tag without faking a version bump across the manifest, schema
const, 47 conformance cases, and examples. `releasecheck.immutableRef` already
accepts a full-length commit digest as immutable, so this is a supported
reference, not a relaxation. The pin moves back to a tag once a specification
version carrying the permanent identifiers is published.

This is machine-visible: `spec schema` now reports a different schemaId,
sha256, and bytes (14307 -> 14268), and the bundle digest changes.
`outputVersion` stays "1".

Also corrects three prose claims. README and CHANGELOG attributed the delay to
the specification project not having published a neutral tag; the permanent
identifiers were already on its `main` branch, and the real blocker was inside
this repository.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed-off-by: Brian Jin <35789537+kikashy@users.noreply.github.com>
@kikashy
kikashy merged commit 737178e into main Jul 23, 2026
4 checks passed
@kikashy
kikashy deleted the feat/revendor-neutral-spec branch July 23, 2026 22:31
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