Release a version
Produce an immutable release and inspect what ships against what stays private.
A release is the exact artifact a version resolves to forever. Producing one is mechanical; inspecting it is the point.
Bump the version when bytes change
Each package's version is immutable once released. fruitful-plugin-build.json records the bundle digest of every released version:
{
"entrypoint": "authoring/src/hn-page-plugin.ts",
"outfile": "plugin/hn-page-plugin.js",
"immutableReleases": [
{ "version": "0.13.0", "sha256": "4295e0dc…" },
{ "version": "0.14.0", "sha256": "db50d6a3…" },
{ "version": "0.15.0", "sha256": "db50d6a3…" }
]
}If plugin generate produces bytes that differ from the recorded digest for the current version, bump version in the root fruitful-package.json rather than overwrite a released digest. Bindings and Lexicon packages version the same way, and the Feed Package's pins (^1.0.0) say which releases it accepts.
Materialize it
yarn fruitful plugin generate feed-packages/<name> --write --json
yarn fruitful lexicon generate feed-packages/<name> --write
yarn fruitful plugin release feed-packages/<name> --out <temporary-directory>release refuses a stale bundle or stale generated types, so the two --write steps come first.
Inspect it
<out>/
├── runtime/ # what devices download: manifests, bundles, surfaces
├── review/ # fixtures, expectations, presentation examples, evidence
└── attestation.json # digests binding bothCheck three things:
- runtime and review share no files;
- no private review bytes appear under
runtime/; attestation.jsonnames the digests you expect, and runtime artifact roles are onlytransformandcapture-hooks.
Run the proofs
yarn turbo test --filter=workspace.packages.feed-package-runtime
yarn lint --changed
git diff --checkThe runtime package's tests cover the publication and package proofs and the release format itself. Then open a pull request with the definition; publishing happens from the merged inventory, see Publish, review, approve, promote.
Reference: CLI.