Skip to content

version-guard: label-free local mode, first in gates and unconditional in core - #233

Merged
lannbot merged 1 commit into
mainfrom
version-guard-local
Aug 23, 2026
Merged

version-guard: label-free local mode, first in gates and unconditional in core#233
lannbot merged 1 commit into
mainfrom
version-guard-local

Conversation

@lannbot

@lannbot lannbot commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

What

Closes the gap #232 exposed: the protocol-tear check lived only in pr mode, which no-ops without PR_NUMBER — so a pre-push just gates never asked the question, and a direct push to main would have carried a tear until cut time.

New check.ts local mode — no PR context, no labels, no event payload:

  • lockstep-agreement (fatal)
  • monotonicity vs the last cut, derived locally: git tags first, jsr.io runtime latest as fallback, loud SKIP when neither answers (fatal when it can answer)
  • protocol-tear-identity (fatal — the A22: protocol is the host-ABI surface, gated by conventions goldens #232 catch): if protocol/deno.json names a published version, in-tree protocol must be byte-identical to it (shared implementation with publish mode's check, so they cannot drift); network failure is a named FAIL with the incident history, never a silent skip
  • conventions-goldens advisory (never fatal): M/D goldens vs origin/main print a reminder that the PR needs breaking/protocol or conventions-fix — labels are PR-side intent, local can only warn

Wiring: version-guard-local recipe runs first in just gates and as an unconditional gha::core step (push runs are now covered; version-guard-pr still adds the label-aware checks on pull_request runs). AGENTS.md enforcement-points note updated (three → four).

Gates

just test-version-guard 50/50 (10 new local-mode cases incl. network-error and advisory semantics); just version-guard-local passes on this tree (protocol 0.2.2 pending, lockstep 0.5.0 > v0.4.0 via local tag).

…l in core

pr mode no-ops without PR_NUMBER, so neither a pre-push 'just gates' nor
a direct-push CI run ever asked the tear question — #232 shipped a
protocol tear that only a pull_request run could catch. local mode runs
the label-free tree checks with no GitHub context: lockstep agreement,
monotonicity against a locally-derivable last cut (git tags, jsr.io
fallback), and the protocol byte-identity tear check (shared with publish
mode's implementation; network failure is a named FAIL, never a silent
skip), plus an advisory reminder for modified conventions goldens (labels
are PR-side intent, unenforceable locally).
@lannbot
lannbot enabled auto-merge August 23, 2026 02:17
@lannbot
lannbot merged commit 80a79b9 into main Aug 23, 2026
3 checks passed
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.

2 participants