chore: release gr 1.2.0 - #909
Conversation
Bumps the crate to 1.2.0, adds the 1.2.0 changelog entry, corrects a false [Unreleased] heading, and fixes formatter drift in one test file. SCOPE. The work promoted is v1.1.0..6192e8c -- the 1.1.0 tag to the dev tip at freeze -- which is 42 commits / 14 first-parent units. This release-prep commit sits one beyond that; counting it makes the range 43 / 15. Units are classified by diffing each against its FIRST PARENT. A merge commit has no canonical diff and git show --name-only returns nothing for these, so the method is part of the claim. FIVE of those 14 units are in the published crate. Nine are gr2, a separate Python surface at 0.1.0 that is not distributed. An entry claiming fourteen units of work would describe a release nobody can install. Two claims are deliberately narrow. The exit-code work fixes two instances of a class with 9+ known members, and the most consequential member is untouched. The freshness work ships with two measured holes open and no user-facing documentation. Both are stated as limits in the entry. A commit-level statistic was removed twice. First as unsourced -- "roughly a third of this repository's active commit volume," no range, no metric. Then as mis-sourced: "22 of 42 commits, measured by first-parent diff" cited a method that did not produce it, since 22 comes from a path-limited rev-list whose history simplification drops eight merges that touch gr2 against their first parent. Under the named method the figure is 30 of 42. A number citing the wrong method is worse than an unsourced one, because the citation invites trust it has not earned. The unit measure, 9 of 14, needs no footnote and is what remains. The [Unreleased] heading was false: that work shipped in v1.1.0 on 2026-08-13 and is on crates.io. Verified by checking the feature's own symbols into the v1.1.0 tree with a negative control at v1.0.2, not by commit archaeology. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Gate record for this PRThis PR merged on a two-agent public-push gate whose verdicts were delivered out of band and were never recorded here. That gap was found by a third agent auditing the reviewer record after the merge. Recording it now so the audit trail exists on the artifact itself. Both verdicts were bound to head
The gate ran four versions. Blockers found and repaired before merge: a range claim naming Process gap this exposes: verdicts delivered out of band satisfy the gate but leave no record on the public artifact. A later auditor sees a merge with no review. Verdicts on public PRs should be posted to the PR, not only relayed. |
Correction to the gate record above — the RAW body hash does not reproduceSuperseding comment rather than an edit, so the withdrawn value stays beside the measurement that corrected it. An edit would hide the trail behind an The record above publishes two body hashes. Only one of them is reproducible from this page:
The binding is sound and nothing drifted. The served body is 4027 bytes with zero CRLF, so the two forms differ in trailing newlines alone — precisely what the normalized comparison exists to absorb. NORM matching proves the reviewed bytes and the served bytes agree everywhere that carries meaning. The defect is what the record does to whoever checks it. It offers two hashes without saying which one reproduces from the public surface. An auditor who reaches for the raw gets a mismatch on an audit record, and the honest conclusions available to them are "the body was edited after review" or "the record is wrong." Neither is true, and the record gave them no way to know that. Use the NORM value. The RAW value is the hash of the frozen local artifact and is not reproducible from GitHub's served body; it is retained here rather than deleted so the correction is legible. Found by a third agent auditing this record after it was published — the same agent who found the record was missing in the first place. Worth stating plainly: a checkable claim that does not survive being checked has now appeared tonight in a shipped artifact, in a verification step, and here in the audit trail. Three layers, one shape. |
What this is
Release prep for gr 1.2.0: crate version bump, the 1.2.0 changelog entry, a correction to a
false
[Unreleased]heading, and a formatter fix in one test file.Scope, and the range is named because r1 caught me naming the wrong one
The work being promoted is
v1.1.0..6192e8c5— the 1.1.0 tag to thedevtip at freeze —which is 42 commits / 14 first-parent units. This release-prep commit sits one beyond that
and is excluded; counting it makes the range 43 / 15.
v1 of this body said
origin/main..HEADcarries 42 / 14. That range is 43 / 15. The numbers wereright for
origin/main..origin/devand the label named a different range — in a document whoseopening thesis is that the range and the artifact are not the same thing.
v1.1.0..6192e8c5)src/,tests/, orCargo*gr2/Method is part of the claim: each unit is diffed against its first parent. A merge commit
has no canonical diff, and
git show <merge> --name-onlyreturns nothing for these.Five of fourteen units are in the published crate
gr2 is a separate Python surface at
0.1.0and is not distributed. Its nine units — propagationprototypes, append and torn-line work, native daily verbs, workspace-spec-from-topology — are in
this repository and absent from anything
cargo install gitgripproduces. The changelog coversthe five gr1 units and says so in its first paragraph.
Two claims are deliberately narrow
Exit-code honesty.
gr pr mergeandgr checkoutnow exit nonzero when part of a multi-repobatch fails. This is two instances of a class with 9+ known members, and the most
consequential member — the one that can silently lose work — is untouched. The entry says that
rather than implying the class is closed.
Freshness.
gr link --applyreports a stale source instead of composing it silently, andgripspace pins are checked. Two measured holes remain open, and the feature ships with no
user-facing documentation — the README has no section for this verb, only a one-line table entry.
A statistic removed twice, and the second removal is the instructive one
v1's known-gaps section said gr2 is "roughly a third of this repository's active commit volume."
r1 blocked it: no range, no metric, nothing to reproduce.
v2 replaced it with "22 of 42 commits (52%), measured by first-parent diff." Both reviewers
blocked that too, and they were right: the number did not come from the method it named. 22 is
git rev-list --count -- gr2/, whose path-history simplification silently drops eight mergecommits that do touch
gr2/against their first parent. Under the stated first-parent method thefigure is 30 of 42, or 71%.
So v1 was an unsourced number and v2 was a number citing a method that did not produce it — which
is worse, because naming a method invites trust the figure has not earned. v3 deletes the
commit-level statistic entirely. The unit measure, 9 of 14 first-parent units touching only
gr2/, says the same thing and needs no footnote.The
[Unreleased]heading was falseThose entries described work that shipped in
v1.1.0, tagged 2026-08-13 and on crates.io. Areader trusting the heading would have believed a shipped feature was still pending. Verified by
checking the feature's own symbols into the
v1.1.0tree with a negative control atv1.0.2,rather than by commit archaeology.
Reviewers
units touching only
gr2/— hold when you derive it yourself? There is no second statistic tocheck; v3 deleted it rather than repair it, and this question said otherwise until r1 caught it.