feat(ci): assert a release tag names one exact revision #86
No reviewers
Labels
No labels
priority/P0
priority/P1
priority/P2
release/v0.1.0
status/blocked
status/planned
type/bug
type/design
type/test-gap
type/tracker
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
natsukium/felis!86
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/release-gate-18"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fixes #18.
A release tag now has to prove it names one exact revision before anything
is published.
scripts/release/verify.shchecks the tag's shape and object(annotated, semver, a recognized prerelease suffix), that the manifests agree
with the tag name, that the working tree is clean, and that the built
artifact reports the same version and the same revision it was cut at; a
hermetic
--self-testcovers every accept and reject case..forgejo/workflows/release.ymlpublishes from the tag only after that gate passes, and the PR workflow plus
justfileexpose the same checks locally.Doc cascade:
docs/reference/workspace.md(the release gate's normative rules),docs/explanation/testing.mdanddocs/reference/testing.md(where the self-testsits in the verification layers),
docs/how-to/install.md,docs/backlog.md(the follow-ups below),
docs/explanation/architecture/ipc.md,scripts/README.md,CLAUDE.mdand theimplement-featureskill.This branch also carries a one-line fix to
crates/felis-transport/src/driver/tests.rs:two changes landed on main in the same window (
Conn::Welcomegrew the typedidentityfield, and the phase-ladder refactor added a case building aWelcomeby hand), so main does not compile its test target. The same fix is on the #23
branch; whichever lands first makes the other a no-op.
Verified: just check green (fmt, clippy, nextest, deny); reviewed by plan/correctness/docs lenses and pi sol
Deferred
proto-baseline/against the latest published final release'sfelis.proto— no acceptance criterion needs it; it is #19's follow-up, needs a release API call plus a token, andfirst-releaseis the correct answer while no final release exists.proto-baseline/to main after a final release publishes — a CI push to main needs push-scoped credentials and contradicts the repo's deliberate-human-step stance; left as the human step the backlog now names.git+https://.../felis?ref=refs/tags/v0.1.0— the tag does not exist until #31 pushes it; documenting an unresolvable ref would break every install command today.crates/build-common.rstreefmt drift — inherited from the base branch feat/build-identity-17; fixing it in a stacked branch would conflict with #17.first-releasestays valid forever — same deferral as above: no acceptance criterion requires it and the API/token dependency doesn't exist yet.main, and no CHANGELOG entry records the change — the tag doesn't exist until #31 pushes it, and this is scope prose, not one of the five checkbox acceptance criteria."false"as a clean build — speculative hardening against a hypothetical serializer; today's Rust serializer always emits a real boolean.FELIS_GIT_HASHmakesfelis --versionandfelis version's cli row name different builds — hypothetical packager-supplied short-hash scenario; no acceptance criterion requires validating this env var's shape, and the flake passes the full hash.