Repository navigation
feat(release): release-kind acceptance bound to the publish gate (#58 slice 1) - #61
Merged
Merged
Conversation
The acceptance contract had no release kind, so the update chain's health — the thing every release actually rides on — had no place in the executable definition of done. Slice 1 of #58: - rivet-acceptance.rktd gains the `release` requirement plus a release-update suite (racket/tests/release-update-test.rkt); the pinned rivet's acceptance-kinds already includes `release`. - The suite drives the N→N+1 lifecycle at the backend boundary every host shares, over a loopback feed signed with a throwaway key: plain-http feeds can never yield a candidate; artifacts must be HTTPS at the sign/parse layers; foreign keys and key-ids fail closed; semver refuses downgrades; rollout 0 gates every bucket; the real download worker verifies SHA-256 against the signed manifest; cancellation and sha-mismatch never land an artifact; and tasks.db stays byte-identical with the seeded task alive through all of it. The Linux AppImage in-place swap — the one install arm the backend owns end to end — replaces the running image for real on the Linux leg. - release.yml's publish job runs the suite on the tree being published, before signing: no update evidence, no release. - UPDATE.md documents what the suite proves and where each install arm's evidence lives. A loopback-feed subtlety worth keeping: the feed server must close only the output half — close-input-port waits on the peer's EOF while the client waits for the response, deadlocking the suite.
4 tasks
Rivet requires native-ui/package/release suites to declare at least one evidence file under .rivet/acceptance/ — CI caught the missing declaration on the Windows acceptance leg. Mirror the package runner: scripts/acceptance/release-update.rkt runs the suite with raco test and writes .rivet/acceptance/<platform>/release-update.json on success; the rktd command and evidence declaration follow.
The suite passed on the Windows leg (exit 0) but the runner judged it failed: the rktd declares .rivet/acceptance/release-update.json and the runner wrote it under the platform subdirectory. Each platform's acceptance run executes on its own runner, so the single declared path carries that run's record.
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.
Refs #58 (slice 1 per the claimed plan). Closes nothing yet — the issue tracks five slices.
What
rivet-acceptance.rktd:releaserequirement +release-updatesuite — the update chain joins the executable definition of done (the pinned rivet'sacceptance-kindsalready carriesrelease).racket/tests/release-update-test.rkt(new): N→N+1 lifecycle at the backend boundary over a loopback feed — plain-http and non-HTTPS-artifact feeds rejected, foreign key/key-id fails closed, semver + rollout gates, real download worker with SHA-256 verification, cancellation and sha-mismatch never land an artifact, Linux AppImage in-place swap end to end, andtasks.dbbyte-identical with the seeded task surviving throughout.release.ymlpublish job runs the suite on the exact tree before signing: no update evidence, no release.UPDATE.md: release-evidence section (what the suite proves, where host-side arms get their coverage).Verification
raco test racket/— 215 tests, full core suite green).