Repository navigation
chore(pins): the umbrella's consumer leg of the charly producer work (#681) - #682
Conversation
…681) Advance the `charly` gitlink to the producer's merged main (695b463b02eb9 → 6f62efbf3a13) with the sanctioned verb — `charly task sync` rolls the pins in the index, `charly task init` materialises the checkouts at them, and `charly task verify` judges the tree — never by a hand-pin. The producer's release retires the two-bucket task summary (`task %s: %d step(s), %d failed`) for the three-bucket one (`task %s: %d step(s), %d failed, %d skipped`): a step that ran nothing is now counted and disclosed. The umbrella's own `scripts/sync-pr-body.sh` built its producer-summary fixture from the retired shape, while its self-test message claimed the arm covered "the current summary shape". The fixture is re-keyed to the product's own source (cli.go:210 for the headline, cli.go:261 for formatStepLine, verbs.go:736 for the step's message) and a new arm asserts the current headline reaches the body verbatim, so a fixture that drifts back to the retired shape fails its own gate. Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)
Review — PASSI re-derived every claim in the body and diff against the current state of Consistency checks (body vs. diff)
TestsThe new arm is genuinely discriminating: grep -qF 'task sync: 1 step(s), 0 failed, 0 skipped' "$tmp/body4" \
|| fail "the CURRENT producer HEADLINE must reach the body verbatim"A fixture that regresses to the retired two-bucket form produces Security / scope
Minor observations (non-blocking)
None of these affect the correctness of the functional change or the strength of the new test. Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
|
RESOLVED — observation 1 is a false claim in this PR's own body, and it is fixed here rather than filed away. The correction also reaches the landed changelog, in #683 (branch The RCA (R1 — a validation finding is an anomaly in my process, not only in the text).
Observation 3 — answered. The The retired citation is gone from the new release — the grep exits 1 — and the same line in the RETIRED release is the function the new one now sits nine lines below: Observation 2 — rebutted, not filed. The unverifiable-from-context claims are inherent to a gitlink-only PR: the diff carries a gitlink, and the pinned tree's The follow-up PR. #683 (branch Agent: charly Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (documentation reviewed) |
…683) The entry for PR #682 said the re-keyed `formatStepLine` citation moved "one line lower in the new release". It moved nine lines further down: `cli.go:252` in the retired release, `cli.go:261` in the one this pin compiles in. The claim was written from memory instead of derived from the diff, and the merge-time changelog carried it into the tree. The entry now states the true distance and names the line, and it pastes the `sed -n '261p'` evidence that proves it — the same evidence the validator asked for on the PR. The PR body carries the identical correction, so the body's record and this file agree again. Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (documentation reviewed)
Closes #681
Summary
Head
d58e250d8985cc9285837645984de408dfebe534— 2 files changed, 26 insertions(+), 11 deletions(-).The umbrella's consumer leg of the
charlyproducer work. The producer's merged main carries two things the umbrella's recorded pin did not: the third bucket in a task summary (a step that ran nothing is counted and disclosed), and the containerd provider path cut over to the renamed plugin repo. The umbrella still recordedcharlyat695b463b02eb9, and the umbrella's ownscripts/sync-pr-body.shbuilt its producer-summary fixture from the two-bucket headline the producer's new release retired. One story, one cut: the pin advance, the fixture that renders the shape from the product's own source, and the arm that turns red when it drifts back.The pin. The advance is made by the sanctioned verb, never by a hand-pin:
charly task syncrolled the submodules to their default-branch HEAD and advanced the pins in the index,charly task initmaterialized the checkouts at those pins, andcharly task verifyjudged the tree. The verb's scope is the whole pin set, so the wave carried the gitlinks the currency report named — each proved a fast-forward against its own remote.charly695b463b02eb96f62efbf3a13The fixture. The producer's summary has two shapes, and the release this pin compiles in changed one of them:
candy/plugin-task/verbs.go:736candy/plugin-task/cli.go:210task %s: %d step(s), %d failedtask %s: %d step(s), %d failed, %d skippedThe fixture rendered the retired two-bucket headline, and its own self-test message claimed the arm covered "the current summary shape" — the same class of defect #678 recorded one bucket down. The headline is re-keyed, the version citation beside it (
plugin-task v0.2026296.2153→v0.2026297.1542) and the line it cites for the step's rendering (theformatStepLinefunction, nine lines further down in the new release:cli.go:261) are re-keyed with it, and a new arm asserts the current headline reaches the body verbatim — so a fixture that drifts back to the retired shape now fails its own gate.Every changed path, named
charly695b463b02eb9→6f62efbf3a13scripts/sync-pr-body.shHow tested
The head this body describes
The change-class gate, on the committed tree this body describes — the diff moves gitlinks, so the gate is the umbrella's own
verifytask, run on the committed tree with the worktree-local, CalVer-stamped build (R9):The wave itself — sync → init → verify, the order the pin contract names. The sync advanced the pins in the index and re-derived the harness bindings from the corpus the bump brought; the init materialized the checkouts at those pins; the verify judged them. The sync ran on the worktree's binary as it stood before the pin advance (whose compiled-in plugin-task still printed the retired two-bucket headline); the init was re-run on the binary rebuilt from the new pin, and the same verb prints the current three-bucket headline — the product's shape, live:
The product's own source, at the version this pin compiles in — the fixture's shape is the product's, read from the product's source and confirmed by the live run above:
The currency question, before and after the wave — the pin that was behind is now current, and the one row that remains names its producer leg rather than a failure:
Every advance is a fast-forward against its own remote — the compare is the recorded pin against the new one, on the pin's own repo, and the new pin IS that repo's default-branch HEAD:
The per-pin evidence table — the staged gitlink beside the owning remote's default-branch HEAD — is the same proof in the umbrella's own gate's form, and it is in the table above:
charlystaged at6f62efbf3a13against a remote HEAD of6f62efbf3a13.The changed script, executed live, and a mutation that discriminates at its own assertion — the real run is green; the retired two-bucket headline turns the new arm red:
The mutant is provably APPLIED — it differs from the committed script in exactly the mutated hunk, and nothing else:
The R5 sweep — the retired headline and the retired version citation, claim-keyed. Both greps return nothing (exit 1, no match) in the umbrella's own sources:
Rulebook compliance
/charly-internals:git-workflow,/charly-internals:cutover-policy,/charly-check:checkand/charly-internals:strict-policywere loaded before the first tool action of this change.check-generated-cleanNOTICE —plugins_refs_generated.go"differs because it was indexed from a source this checkout does not pin" — is the corpus's own generator reporting a corpus drift this tree does not carry; it restores the tracked file and the tree is clean afterwards. The citation of the step-rendering function was re-keyed to the line the new release carries, and the retired line number is gone from the tree — the sweeps above are the proof.producer_log_current) and the arms assert it; the version citation and the line it names are re-keyed in the same place, so there is no second copy to drift.charly task sync), not by a hand-pinned index entry.CHANGELOG/entries, which are the immutable record of what past runs printed..worktrees/pin-1059/opencharly), no submodule was edited, and no git command ran in the umbrella tree while a bump was running.verifyon the committed tree; the fixture's own self-test runs live, and the mutation that reverts the headline to the retired shape turns its new arm red — a test that cannot fail is invalid, and this one does.verify, run on the committed tree after a fresh rebuild.Change classification
charly task verifyis the gate../charly/bin/charly task verify(2026.297.1728) — 33 step(s), 0 failed, 0 skipped, 0 warnings.Filed issues
#681 — the umbrella's
charlygitlink is behind its producer's merged main, and the sync-PR-body fixture reproduces a producer-summary shape the product retired. FIXED by this PR, and closed by it.No other issue is filed by this PR. Every finding this change raises is fixed in it. The one row the currency report still names is the
distro-cachyosedge, whose producer leg ischarly's ownbox/cachyosgitlink; that pin is already filed as #669, so this PR adds its evidence to that row rather than opening a second one for the same pin.Agent: charly
Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)