go-module-v1 is the catalog-authorized release profile for ordinary Spice Go
modules that are not starters. It does not replace, wrap, or infer the existing
library-release path: every starter-* repository is rejected before source
inspection.
The catalog names the metadata file. Version 1 is a closed JSON object:
{
"schema": 1,
"profile": "go-module-v1",
"repository": "spice-agent",
"module": "github.com/spice-framework/spice-agent",
"version": "v0.1.0-preview.7"
}Unknown and missing fields fail. The catalog is the sole owner of required
module path-and-version selections; the metadata does not duplicate that list.
Each selection must have that exact canonical version in a require entry in
the committed go.mod and must match committed vendor metadata. Merely naming
the expected module or selecting another canonical version is insufficient.
The entry may be marked indirect when
Go derives it from a tool directive. Releases reject every replace
directive, including remote replacements.
The catalog authorizes the next dependency-free Spice foundation source
release as github.com/spice-framework/spice v0.1.0-preview.4. The reviewed
product authority is core commit
0e79bc4f3b294cd0a429598c4921391f2e4d10e2, which adds Spice-native
structured logging and contains the canonical schema-two CODE_STYLE.md with
SHA-256
09c014e2d7eb93bf2b395e24e4e6ff2466c05d164d4778a11cf7433164bffb76.
Release-preparation metadata may advance the eventual tagged commit without
changing those reviewed bytes.
The immutable preview.3 tag object
62f413c8b24e4d6580cd248f85ea8477400969d6 resolves to candidate commit
ea7499ddea29cc7a74216ae3569cb26bc9633355. Its
release run
passed exact tag and source validation, then failed before artifact rendering
because the candidate did not provide the reusable workflow's required
make tools-bootstrap target. Rendering, independent verification,
attestation, provenance authentication, protected publication, and every
deployment were skipped. GitHub contains no preview.3 Release or assets, so
the tag must never be moved or reused and preview.3 is not an authenticated
foundation release that downstream release policies can select.
That recovery advanced Spice's own version and the Spice requirement of
Toolchain preview.3 and TUI preview.2 to preview.4. Those were the only three
normalized catalog changes at that authority point; Toolchain and TUI retained
their own release versions and TUI retained Toolchain preview.3. Spice
preview.4 was subsequently published. The immutable Toolchain preview.3
tag-only attempt later failed Windows installed execution before attestation
or deployment and produced no Release. Recovery then advanced Toolchain's own
version and TUI's Toolchain requirement to preview.4 without changing their
Spice preview.4 selections. Toolchain preview.4 through preview.8 were
subsequently published through their distinct protected release workflows. The
immutable preview.8 tag object 656f3f82a5ddfdb35b83e7a705e173e0d9ba1469
resolves to candidate commit 2eb210494b806da023b518fcda8d07fdf32605e2.
Release run
31690826584
attempt 2 used attestation deployment 5886610104 and publication deployment
5886635974 to publish the exact ten-asset prerelease. Public resolution
produces module sum h1:syajJg1GSYZT1TZbvBmXFh/X/cDi3dnb+9t0GXGvaJg= and
go.mod sum h1:nezzFkAq9TDdavVL5sYJm2nOKNWAu1p9VTz3XFihgUg=; TUI remains pinned
to published Toolchain preview.4.
At that authority point this was pre-tag policy authorization only; the Development change did not itself create a preview.4 candidate, tag, module proxy version, attestation, approval, or release. Spice preview.4 was later published through its separately protected release workflow. The existing immutable preview.2 release and its history remain unchanged.
go-module-v1 spice github.com/spice-framework/spice v0.1.0-preview.4
Toolchain preview.8 and TUI preview.2 require immutable Spice preview.4; TUI continues to require Toolchain preview.4. Agent, provider, coding-tools, Coding distribution, extension-profile, starter, application, and editor selections continue to use their recorded versions.
The catalog authorizes the next spice-agent v0.1.0-preview.7 source release
to select immutable github.com/spice-framework/spice v0.1.0-preview.4 and
github.com/spice-framework/toolchain v0.1.0-preview.2. This is pre-tag policy
authorization only and does not create a candidate, tag, module proxy version,
attestation, approval, or Release.
The provider and coding-tools policies remain on Spice preview.2, their exact
historical Toolchain pseudo-version
v0.1.0-preview.1.0.20260806203056-d0b9ac086bd6, and Agent preview.4. Agent
preview.7 does not silently repin either component. The separately authorized
Coding preview.5 distribution explicitly selects Spice preview.4, Toolchain
preview.8, Agent preview.7, provider and coding-tools preview.1, and TUI
preview.2.
The independently authorized TUI preview.2 policy instead selects Spice preview.4 and published Toolchain preview.4. The separate Toolchain preview.8 authority does not repin or authorize a TUI candidate.
This authorization is deliberately repository-scoped. spice-agent
preview.6 remains published with the public
VerifiedLauncher boundary, the removable Phase 7/8 experiment evidence, and
the enforced pre-v1 API/protocol/durable/security compatibility policy.
Authorizing preview.7 does not rewrite that immutable release history.
The provider and coding-tools own release versions remain
v0.1.0-preview.1; the TUI own release version is authorized at
v0.1.0-preview.2. The separate spice-agent-coding own release version is
authorized at v0.1.0-preview.5 with the explicit current published graph
above; its metadata, two binaries, seven payloads, six targets, and
build-identity contracts are unchanged. See
the distribution release history.
The immutable spice-agent v0.1.0-preview.1 tag records a failed pre-artifact
workflow attempt, not an authorized or published Spice release. Its
release run
stopped in candidate-owned verification before the central renderer,
independent verifier, attestation, provenance authentication, or publisher ran;
GitHub contains no release or release assets for that tag. The tag must never
be moved or reused.
The immutable spice-agent v0.1.0-preview.2 tag records a separate failed
pre-attestation workflow attempt, not a published release. Its
release run
completed candidate validation and central rendering, then the independent
verifier job failed while cleaning its isolated module cache. Attestation,
provenance authentication, and publication were skipped, and GitHub contains no
release or release assets for that tag. That tag also must never be moved or
reused. Recovery advances the Agent release version and its downstream
selections to v0.1.0-preview.3.
The immutable spice-agent v0.1.0-preview.3 tag records another failed
pre-attestation attempt, not a published release. Its
release run
completed candidate validation and central rendering, then the independent
verifier rejected a release-policy mismatch. Attestation, provenance
authentication, and publication were skipped, and GitHub contains no release
or assets for that tag. That tag must never be moved or reused. Recovery
advances the Agent release version and its downstream selections to
v0.1.0-preview.4.
Agent v0.1.0-preview.4 was subsequently published as the architecture-proof
prerelease. The annotated v0.1.0-preview.5 tag and public Go proxy module now
exist. Its release workflow
31343998056
completed candidate validation, central rendering, independent verification,
keyless attestation, provenance authentication, and protected publication. The
non-draft GitHub prerelease contains the exact source archive, SPDX SBOM,
release metadata, checksums, and portable Sigstore provenance bundle.
The v0.1.0-preview.6 catalog entry began as pre-tag policy authorization.
The later annotated tag object
ee8436262fb755c4bf4897254650cd6d84e2e9fc resolves to exact candidate commit
f771caa3b150d87845417c4e26938e2a889441a6. Release workflow
31428824060
completed candidate verification, deterministic rendering, independent
verification, keyless attestation, provenance authentication, and protected
publication. The non-draft prerelease contains the exact five-asset module
set. Publication did not alter any downstream module selection.
The sole graphless exception is a catalog entry with no required modules whose
root module genuinely selects no dependencies. In that mode both root
go.sum and vendor/modules.txt must be absent. The renderer rejects a
partial pair, every tracked vendor/ path, and every require, tool, or
replace directive. It then runs offline go list -mod=readonly for the
packages and module graph and requires the graph to contain exactly the
unversioned main module. A missing graph file never downgrades a normal
vendored release into this mode.
spice-dev go-release policy-check \
--repo spice-agent \
--module github.com/spice-framework/spice-agent \
--version v0.1.0-preview.7 \
--profile go-module-v1
The command validates the exact repository, module, version, and profile against the embedded catalog and prints exactly:
go-module-v1 spice-agent github.com/spice-framework/spice-agent v0.1.0-preview.7
It does not read a checkout, tag, or artifact and performs no network access. The trusted renderer and independently versioned Toolchain verifier can run their corresponding policy checks before tag creation and require the emitted tuples to be byte-identical. Unknown repositories, starter or distribution profiles, stale versions, and module/profile drift fail closed. This check proves policy agreement only; it does not replace candidate verification, artifact verification, attestation, provenance authentication, or publication.
spice-dev go-release render \
--root <clean-checkout> \
--repo <catalog-name> \
--version <catalog-version> \
--output <new-directory-outside-checkout>
The version tag must resolve to HEAD. The origin, module, metadata, Go and
toolchain directives, required files, dependency graph, and portable regular
tracked files are validated without network access. Symlinks and special Git
modes are rejected. The output directory is atomically
committed without replacement and contains exactly:
checksums.txt;<repository>_<version>_release.json, binding source, commit, epoch, toolchain, and artifact digests;<repository>_<version>_sbom.spdx.json, a deterministic SPDX 2.3 module graph;<repository>_<version>_source.tar.gz, built from committed Git objects with a fixed prefix, timestamp, ordering, permissions, and gzip platform marker.
No host paths, current timestamps, credentials, mutable branch names, or ambient workspace state enter an artifact.
Repository roots and existing output parents are resolved through filesystem links before containment checks. A path that looks external but traverses a symlink or junction back into the repository is rejected before staging.
spice-dev go-release verify \
--root <same-exact-clean-checkout> \
--repo <catalog-name> \
--version <catalog-version> \
--artifacts <existing-directory>
Verification rejects extra, missing, non-regular, oversized, or changed files and byte-compares a new deterministic render from the tagged commit. This is a renderer-owned reproducibility gate. Release authenticity, keyless signing, provenance, fresh-download verification, and publication are deliberately separate organization-workflow and independent-toolchain responsibilities.
go-distribution-v1 uses the separate profile-specific command documented in
go-distribution-release.md. Catalog
authorization never selects a different renderer implicitly or publishes an
artifact.