Repository navigation
chore(pins): advance the charly and plugin-task gitlinks, and re-key the plugin-task citations the pinned charly now compiles - #723
Conversation
…the plugin-task citations the pinned charly now compiles The umbrella's consumer leg of the plugin-task producer work. opencharly/charly#1074 landed — the charly binary now compiles plugin-task v0.2026299.2314, the release whose `git-submodules` bump REFUSES a move that would drop a nested checkout's work. The umbrella's own `charly` gitlink still recorded the release before it, so the refusal never reached the umbrella's pin wave — and the umbrella's prose cited the version the umbrella's PINNED charly compiled, v0.2026297.2108, beside line numbers that moved with the version. The pins advance by the sanctioned verb only: `charly task sync` rolled the submodules to their default-branch HEAD and advanced the pins in the index, `charly task init` materialized the checkouts at those pins, and `charly task verify` judges the tree. | path | recorded | served | |---|---|---| | `charly` | `f1f85d19e8` | `5a83e03875` | | `plugin-task` | `30c57809b2` | `b523e8780b` | The re-key is five lines across four files, and it is not only the version: the umbrella's prose also cites LINE NUMBERS in plugin-task's source, and those moved with the version. `verbs.go:736` (the step's PASS message) is `:739` in v0.2026299.2314, and `ancestryClass` moved from `verbs.go:916` to `:919`. The two `cli.go` citations (`:210` and `:261`) did not move. The version gate (scripts/check-cited-plugin-task-version.mjs) judges version LITERALS only, so a version-only re-key would have left three citations pointing at the wrong line with the gate green — a defect the gate cannot see, and the same class the validator caught on the previous leg's body. - `charly` — the gitlink: `f1f85d19e8` → `5a83e03875` - `plugin-task` — the gitlink: `30c57809b2` → `b523e8780b` - `charly.yml` — the step's Result.Message citation: `v0.2026297.2108` → `v0.2026299.2314` - `scripts/check-retired-claims.mjs` — the `ancestryClass` citation: the version, and `verbs.go:916` → `verbs.go:919` - `scripts/sync-pr-body.sh` — the step-message citation: `verbs.go:736` → `verbs.go:739`, and the version - `scripts/check-cited-plugin-task-version.mjs` — the gate's own example citation: `verbs.go:736` → `verbs.go:739` Refs #722 Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)
|
STATUS — the PR is open; the validator is the next gate. Head. Done. The two pins the currency report named are advanced ( Next. The fresh Due. The next update lands with the validator's verdict, or with the first round's fix commit. |
Review — PASSI re-derived every claim in the body against the current diff, the commit, and the single comment. The change is a pin advance plus a prose re-key, and the numbers hang together. Per-file verification
Diffstat check: 2 gitlinks (1/1 each) + 1 + 1 + 2 + 1 = 6 files, 7 insertions, 7 deletions — exactly the claimed shortstat. Line-number honestyThe decisive evidence is the module-cache proof, and it is internally coherent rather than merely asserted: in the OLD module Consistency of the supporting evidence
Comment dispositionThe single comment (#6432768945 by @aitrawog) is a status note, not a sign-off. No designated maintainers are configured for this run, so no comment carries approval weight; the change is judged on its own evidence. The comment's assertions — head Security / scopeNo secrets, injection, or dependency-surface change; only gitlinks and comments/prose. No leftover legacy path: the old version literal and the two moved line numbers are swept from all current-claim surfaces ( No blocking findings. The residual gap — that no automated check compares a cited line number against the module it names — is acknowledged, and the version-gate-as-sentinel forces re-reads whenever the pin moves, which is an adequate control for this change class. Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
|
RESOLVED — #723 Landed. Squash commit The issue it resolves is #722, and it is CLOSED (closedAt 2026-10-27T03:12:12Z, reason COMPLETED) — closed by hand with the RESOLVED record naming the PR, its squash SHA and its merge tag, because the org's auto-merge is a GitHub App and the automatic close only fires for a What landed. The The currency question, answered by the sanctioned verb. Before the wave: No follow-up issue is filed. Every finding this change raised is fixed in it. Agent: charly |
Closes #722
Summary
Head
44b79d6b875cec703750918dfd70fce64b75a907— the commit this PR pushes: 6 files changed, 7 insertions(+), 7 deletions(-).The umbrella's consumer leg of the plugin-task producer work, and the pin that makes the producer's refusal reachable. opencharly/charly#1074 landed — the charly binary now compiles plugin-task
v0.2026299.2314, the release whosegit-submodulesbump REFUSES a move that would drop a nested checkout's work. The umbrella's owncharlygitlink still recorded the release before it, so the refusal never reached the umbrella's pin wave. Alongside that gitlink, the umbrella's prose cited the version its PINNED charly compiled —v0.2026297.2108— and cited plugin-task's source by LINE NUMBER as well, and those line numbers moved with the version.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 currency report named exactly two pins not current, so the wave's diff is exactly two gitlinks — and it is:charlyf1f85d19e85a83e03875plugin-task30c57809b2b523e8780bThe re-key, and why it is not only a version. The umbrella's prose cites plugin-task's source by line number as well as by version, and two of those citations moved with the release: the step's PASS message was
verbs.go:736and isverbs.go:739inv0.2026299.2314, andancestryClasswasverbs.go:916and isverbs.go:919. The twocli.gocitations (:210and:261) did not move. The version gate (scripts/check-cited-plugin-task-version.mjs) judges version LITERALS only — it cannot see a line number — so a version-only re-key would have left three citations pointing at the wrong line with the gate green. That is the same defect class the validator caught on the previous leg's body, and the version gate cannot see it. Every cited line was re-read in BOTH module versions in the module cache before being cited, and the proof is pasted under How tested.charlyf1f85d19e8→5a83e03875plugin-task30c57809b2→b523e8780bcharly.ymlscripts/check-retired-claims.mjsancestryClasscitation: the version, and the line number it moved toscripts/sync-pr-body.shscripts/check-cited-plugin-task-version.mjsHow 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 gate's own commit-carried citation check ran inside it, and it judges the INDEX — the tree a commit ships — which is why the re-key was staged before the gate was read:
The wave itself — sync → init → verify, the order the pin contract names. The sync advanced the pins in the index, the init materialized the checkouts at those pins, and the verify judged them. The binary was rebuilt from the leg's own pinned charly between the wave and the init, so the refusal the producer shipped is the one that ran.
The currency question, before and after the wave — the question this change is about, asked with the one verb that answers it. Before: two pins not current —
charlybehind, andplugin-taskwith no checkout to judge ancestry. After: none.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.
The line-number proof — every cited line, read in BOTH module versions, in the module cache. This is the part the version gate cannot see. The OLD module is
v0.2026297.2108(what the umbrella's pinned charly compiled before this PR); the NEW one isv0.2026299.2314(what it compiles now). The twoverbs.gocitations MOVED; the twocli.gocitations did not.Read against the OLD module,
verbs.go:739is acase "verify":arm andverbs.go:919is anis-ancestorSprintf— neither is what the umbrella's prose cites. Read against the NEW module,verbs.go:739IS the PASS step message andverbs.go:919ISancestryClass— which are exactly the two claims the prose makes. The twocli.golines are byte-identical in both.The re-keyed citations, read in the tree being pushed — each line resolves at the number the prose now cites:
The claim-keyed sweep — the old version and the two moved line numbers are gone from every current-claim surface.
CHANGELOG/is excluded because history is immutable and belongs only there; the gate's own scan unit is the same set.And every plugin-task version literal and every source line citation that SURVIVES in the current-claim set, which is the complete inventory of what the prose now claims:
The retired-claim gate, on the tree this body describes
The materialized checkouts sit at their recorded gitlinks, and charly's own nested level carries no drift — the wave's reconcile touches the charly checkout's
box/*level, so that level was measured before and after:No
+,Uor-marker — no drift.The gate's own builders' self-tests, and the pin check the commit gate runs on a gitlink diff — both green on this tree:
Rulebook compliance
AGENTS.mddispatcher selected/charly-internals:git-workflow(the git/ghworkflow, the pin contract, the wave's order, the PR body) and/charly-check:check(the R10 gate by change class). This harness resolves the/charly-check:checkform only by path, so it was read from the corpus (marketplace/check/skills/check/SKILL.md) — the rulebook's named fallback for a harness that cannot resolve the addressed form. It was read after this leg's first tool actions, so its conclusions were re-derived against this tree before the push: the change class of a gitlink diff (the umbrella's owncharly task verify), the wave's order (sync → init → verify), and the currency question answered bycharly task pins --param MODE=currencyrather than by hand.charly.yml,scripts/sync-pr-body.shandscripts/check-retired-claims.mjs, plus the gate's own example citation, all of which assert what plugin-task's source says at a named line; root fix — every cited line was re-read in BOTH module versions in the module cache and re-keyed to the line that actually carries the claim, and the proof is pasted under How tested. The second finding — the umbrella'scharlygitlink behind the merged charly — is fixed in the same cut. The currency report named exactly two pins not current and BOTH were advanced, so no row was left behind.go.modby ONE gate, and the line numbers are re-read from the module the binary is built from, not maintained as a second copy of the source. The one place a shape is rendered (the umbrella's PR-body builder) reads it from the product's own source, and the arms' expectations are independent literals.charly task sync, the materialization throughcharly task init, the judgement throughcharly task verify— no hand-pin, no branch checkout, no sleep, no retry, no suppressed finding, no ad-hoc container or service command. The version was not hand-written either: the gate derives it from the index gitlink.CHANGELOG/, and history belongs only there..worktrees/pt-299/opencharly) branched off freshorigin/main92e7c1314;git statuswas empty before every commit; no git command ran in this worktree while the wave held the index lock; no history was rewritten, no force-push, no hook bypass, and nothing was pushed tomain. The one local commit was amended before the first push, to re-tier the attribution trailer to the tier the gate earned.verbs.go:739is acase "verify":arm and NOT the step message, so a citation left at the old number would be false.2026.300.0236), produced by this worktree's own bootstrap from its own pinned charly; no shared host install was used. The version it compiles is the version the citations now name.charly task verify— which carries the pin check, the currency report, the branch audit, the citation gate, the retired-claim gate and the committed builders' self-tests — run on the committed tree:40 step(s), 0 failed, 0 skipped, exit 0, with zero warning lines in its output.Change classification
A pin wave plus a prose re-key — no product-runtime change. The diff moves two gitlinks to their producers' served mains and re-keys five citation lines across four prose files. It changes no Go source and no schema.
charly's Go andplugin-task's Go — so this is not the documentation-only submodule-pointer class, and the tier is a runtime tier.charly task verifyon the committed tree —40 step(s), 0 failed, 0 skipped, exit 0, zero warning lines — plus the wave's sync → init → verify, the currency report that answers is this repo CURRENT?, the per-pin fast-forward compares against the remotes, the module-cache line-number proof in both versions, and the claim-keyed sweep above.fully tested and validated— the change-class gate passed on the final tree with zero warnings, and the changed paths executed live. Thedocumentation reviewedtier is forbidden here: the diff moves pins.charly/charly/go.mod's module pin, which this diff does not touch. The umbrella's own binary was nevertheless rebuilt from the new pin before the init, so the producer's refusal is the one that ran.Filed issues
No new issue is filed by this PR. Every finding this change raises is fixed in it.
The one issue this PR resolves is #722, filed by this session as the leg's coordination point and claimed on it before the branch was cut; it is closed by this PR's landing.
Agent: charly
Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)