Repository navigation
chore(deps): adopt plugin-task v0.2026300.951 (the bump report counts the pins that MOVED) - #1076
Merged
Merged
Conversation
… the pins that MOVED) `charly task sync`'s bump prints a summary line, and the org's pin waves quote it. The counts in that line were INDEX WRITES — opencharly/plugin-task#53 measured 406 written against 4 moved on the live umbrella — so a reader could not tell a pin that MOVED from a pin that was merely rewritten. opencharly/plugin-task#58 replaces the report with one that counts the pins that MOVED, in three clauses: the materialised roll, the index advance, and the pin_map edge, plus the total they sum to. The producer's work is merged and tagged: v0.2026300.951 (tag v2026.300.0951, commit 669a5ee5) carries #58 and #60, the coverage that holds each of the three counters. This repo's compiled-in pin is the consumer that has not moved, so the binary still prints the two-bucket shape. The delta between the two versions is that report change and its tests. `charly/go.mod` requires the new version; `charly/go.sum` carries its hash pair. The tree's other module locks are untouched. Fixes #1075 Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)
This was referenced Oct 27, 2026
Contributor
Review — PASSWhat the diff actually does
Consistency with the body
Correctness / scope / security
Comments
No blocking findings: the diff is exactly the claimed pin movement, the diffstat matches, the legacy pair is fully removed, and the change is coherent and minimal. Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
github-actions Bot
pushed a commit
to opencharly/opencharly
that referenced
this pull request
Oct 27, 2026
… (#736) opencharly/plugin-task#53 retired the bump report's two-bucket shape: its counters were INDEX WRITES, so the live umbrella wave that wrote 398 pins and moved 2 read as "advancing 398 pin(s) in the index". The current form partitions the paths the bump touched into three groups and counts what MOVED in each, with the total the product prints as their sum. The umbrella's `scripts/sync-pr-body.sh` renders that report VERBATIM into the PR body it builds, so it encoded the retired shape. This re-keys it to the current one, with the expectations written as the current form's OWN literals, so a definition that regressed to the two-bucket shape cannot pass the arm. The middle leg had to land first: the artifact the umbrella runs is built from `charly`'s module pin, not from the umbrella's `plugin-task` gitlink. opencharly/charly#1076 (squash c49c132) advanced that pin to `plugin-task v0.2026300.951`, and this advances the umbrella's own `charly` and `plugin-task` gitlinks to the served tips through the sanctioned verb — `charly task sync` wrote the pins, `charly task init` materialized the checkouts at them, `charly task verify` judged the tree. Three live citations moved with the pin, and their LINE numbers were re-read in the new module rather than transcribed: the version gate judges version literals only, so a version-only re-key would have left them pointing at the wrong line with the gate green (#734 records the same defect class). The version gate itself carried a latent defect this pin exposed: the org's module version drops the time part's leading zeros (the tag `v2026.300.0951` is the module `v0.2026300.951`), and the gate's shape was hard-coded to four digits — so it stopped matching, found no citation at all, and went vacuous. Its shape now accepts the widths the org publishes, and the self-test asserts them. Closes #735 Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)
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.
Summary
The compiled-in
plugin-taskpin is behind the served release, and what the release carries is the moved-pin report: the bump summary's counters change from INDEX WRITES to the pins that actually MOVED.charly/go.modrequiresgithub.com/opencharly/plugin-task/candy/plugin-task v0.2026299.2314. The served release isv0.2026300.951(tagv2026.300.0951, commit669a5ee5eb68181121e6f2af36872b4491204d8d), which carries opencharly/plugin-task#58 — "the bump report counts the pins that MOVED, not the index WRITES" — and opencharly/plugin-task#60, the coverage that holds each of the three counters.The two shapes, read from the module each version compiles. The report is printed by the compiled-in plugin-task, so its shape is a property of the version
charly/go.modrequires:That is the two-bucket shape, and its counts are INDEX WRITES — opencharly/plugin-task#53 measured 406 written against 4 moved on the live umbrella, so a reader could not tell a pin that MOVED from a pin that was merely rewritten. The served release prints the three-bucket shape instead:
Every published version between them still prints the two-bucket shape — the report changed at
v0.2026300.903(a3a80eb, opencharly/plugin-task#58's merge):Why this repo is the leg that has to move.
charlyIS the binary that runs the org's pin waves. The umbrella'scharly task syncis agit-submodulesverb, and that verb lives in the compiled-in plugin-task — the onecharly/go.modpins, not the umbrella'splugin-taskgitlink (opencharly/opencharly#678, Finding 2). So the report the umbrella's wave PRs quote is the report this binary prints, and it is the two-bucket one until this pin advances.The umbrella's own consumer leg (opencharly/opencharly#735) is blocked on exactly this: its
scripts/sync-pr-body.shfixture renders the producer's summary line, and it must render what the binary the umbrella BUILDS prints. Writing the new shape into that fixture before this pin advances would make the fixture describe a shape the running binary does not print — a false fix in the opposite direction.charly/go.modplugin-task/candy/plugin-task v0.2026300.951(wasv0.2026299.2314)charly/go.sumNothing else changes: the delta between the two versions is the report change and its tests.
Producer-first. opencharly/plugin-task#58 and #60 have merged and the release is tagged; this repo's compiled-in pin is the consumer that had not moved, so the report never reached the binary. The umbrella's leg (opencharly/opencharly#735) follows this one.
Closes #1075
How tested
The change-class gate ran on the committed tree this PR pushes (
cb15ab7e2c79e93cfb463496cb4fbaeffc7a175d, treeb1222b846df106b4c7317634ff1eb84015dab160), with zero warnings, and the live differential ran the SAME fixture through the binary built from this tree and through the binary built fromorigin/main(5a83e0387516abbd307855a03b9e3d74c00781fe).The gate — this repo's own CI shape (
.github/workflows/ci.yml:go test ./charly/..., thetools/*sweep,gofmt,golangci-lint v2.13.2overcharly/and over everytools/*module), plus this repo's core gate (charly/AGENTS.md:go vet ./...fromcharly/) and the R9 worktree-local build:Why the gate's step 0 shows the pre-amend SHA. The gate ran on commit
856ea1f51366e27e948f59e8901968298a04b749, whose tree isb1222b846df106b4c7317634ff1eb84015dab160; the commit was then amended ONCE — before the first push, which the lifecycle allows — to re-tier its own attribution fromsyntax check onlyto the tier it had earned. The amend touched the MESSAGE only, so the tree is byte-identical and the gate's result is the gate's result for this head:The toolchain is the one the repo pins, and the one CI installs.
charly/go.modsaysgo 1.26.8; CI installs exactly that (actions/setup-gowithgo-version-file: charly/go.mod) and buildsgolangci-lint v2.13.2with it. The host's default Go here isgo1.27.3-X:nodwarf5(GOROOT=/usr/lib/go), whose compiled standard library carries export data version 5 — and the CI-pinned linter's importer reads at most version 4, so against that standard library every typecheck fails on the standard library itself (could not import strings,could not import sort,undefined: yamlas a knock-on of the failed import chain), not on this repo's code. The gate therefore runs the lint against the pinned toolchain, which is what CI does; under it the lint reports 0 issues.Every step's exit code is its own command's. The first run of this gate read the exit code of a pipeline (
cmd | tail -N) and therefore recordedtail's status, not the command's: it reportedOK lint charlywhile the linter had printed 12 issues. That is the rulebook's own command-hygiene law ("a piped exit code is not the command's exit code"), it was in the gate harness rather than in the tree, and it is fixed here — every step redirects into its own log file and reads$?from the command. The run pasted above is the corrected gate, on the same committed tree.The live differential — a real bump, driven through the binary rather than through the plugin's in-process test seam: a fixture superproject with two declared paths, both with a
branch=, one materialised and recorded one commit behind the remote (so the bump ROLLS it and the pin MOVES) and one unmaterialised whose recorded pin already equals the remote's tip (so the bump advances it IN THE INDEX and nothing moves there). The check states the product's promise and must fail against the old binary (R7: a check that cannot fail proves nothing):rolling 1 leaf submodule(s) to their default-branch HEAD (1 moved),advancing 1 leaf pin(s) in the index (0 moved), and the total1 pin(s) moved;advancing N pin(s) in the indexis gone;targetmoved to the remote's tip,staledid not move and was not materialized.Reading the two runs. The BEFORE run is the defect, live: the old report says "advancing 1 pin(s) in the index" for a pin that did not move — the write is presented as an advance, and there is no total at all, so a reader cannot tell a moved pin from a rewritten one. The NEW run separates the two numbers (
1 leaf pin(s)advanced in the index,0 moved) and prints the total the three groups sum to (1 pin(s) moved).Rulebook compliance
/charly-internals:git-workflow(the branch/commit/push/PR lifecycle),/charly-internals:go(build/test/vet/format) and/charly-internals:strict-policy(engineering discipline) were loaded before the first tool action; this repo's ownAGENTS.mdwas read before acting here.OK). The missed control is named: the step's own exit code was never captured. It is fixed in the harness and the corrected gate is pasted above — the tree itself is clean, so there is no product defect to file.go.modand CI agree on the pinned toolchain, so the tree carries no defect here either; the gate runs the lint the way CI does. The claim is proved by the paste: 0 issues under the pinned toolchain.charly task→ thegit-submodulesbump).v0.2026299.2314pair is gone fromcharly/go.modandcharly/go.sum. The claim-keyed proof is the gate's step 11 — the binary's module set carriesv0.2026300.951and no longer carriesv0.2026299.2314— plus the diff above, whosego.sumhunk removes exactly the twov0.2026299.2314lines and adds exactly the twov0.2026300.951lines, and nothing else.git statuswas run first; the branch isfeat/adopt-plugin-task-951off freshorigin/main; the commit is amended ONCE, before the first push, to re-tier its own attribution; no force-push, no history rewrite, no hook bypass, no direct push tomain.origin/main. The changed path executed live, with commands, outputs and exit codes retained above.scripts/bootstrap-charly.shbuild (2026.300.0956); the gate assertsbin/charly versionand the binary's module set. No shared install was used. No new runtime OS dependency was introduced, sopackaging:is unchanged.Change classification
v0.2026300.951(merged, tagged) → this repo's compiled-in pin (this PR) → the umbrella'scharlygitlink and its fixture re-key (the sync-PR-body fixture reproduces a producer-summary shape the moved-pin report retires — the umbrella's consumer leg for plugin-task#53 opencharly#735, one PR, gated withcharly task verifyon the committed tree).fully tested and validated— the change-class gate passed on the final tree and the changed path executed live.Filed issues
None. The one finding this change raised — the compiled-in pin being behind the served release — is blocking for this change and is fixed by it (#1075); it is closed by this PR, not filed away. The two findings the gate raised are defects in the gate harness and in the host's toolchain, not in this repo's product; both are fixed in the harness and proved by the paste above.
Agent: charly
Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)