Repository navigation
chore(pins): advance the umbrella's 55 gitlinks to their producers' merged mains - #640
Conversation
…erged mains The wave advances 55 gitlinks, every one of them to a MERGED ref of its own repo, and by the sanctioned path only: `charly task sync` (Part II #3). 50 leaves were behind their repos' merged mains; the 4 derived-from edges were blocked by `charly`, whose `box/*` twins moved with opencharly/charly#1039 — so 3 of the 4 edges re-pin to `cur`, and the 4th, `distro-ubuntu`, advances with its twin but stays `blocked-by charly:box/ubuntu (behind)`, a state the currency report names and the pin contract passes; and `docs` advanced because opencharly/docs#176 merged and carried the corpus pin with it. `crabbox` and `plugin-pod` were not behind and did not move. `distro-fedora` and `distro-omarchy` did not move because their twins did not move. The umbrella's own `marketplace` pin and the corpus pin the docs leg took agree: both are `1c156511`. The skill bindings are re-derived from the pinned corpus, which adds exactly one binding: `.dsh/skills/clawsweeper-review`. Closes #637 Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)
Review — PASSWhat the diff actually contains56 files, exactly matching the body's accounting:
Insertion/deletion math checks out: 55×(+1/−1) + 1×(+1/−0) = 56 insertions, 55 deletions, matching the body's Body/diff reconciliation (line by line)I compared every "was → now" row in the body's table against the diff. All 55 SHAs match the diff exactly (e.g. Honesty of the bodyThe body is notably candid rather than overclaiming:
These are cross-repo facts that cannot be independently re-derived from the gitlink diff alone, but they are internally consistent and are the class of evidence expected for a pin wave. Tests / gateThis is a pin wave; there is no new code, so there is no new unit test to add. The R10 gate is the umbrella's own Security / scope
CommentsThere are 0 comments, so no maintainer/operator sign-off exists and none is imported. The change stands on its own evidence, which is present and internally consistent. Minor (non-blocking) observations
Everything asserted in the body is reproduced by the diff and the supplied gate evidence. No contradiction, no missing coverage, no security concern rises to a block. Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
|
STATUS STATUS The validator's verdict is PASS, and its one minor observation is rebutted with evidence rather than filed away. The observation: ".dsh/skills/clawsweeper-review has no trailing newline; harmless for a path-style binding, but a trailing newline is tidier." The binding is a symlink, not a file with a body — and that is the form of all 361 bindings in the tree, without exception: A symlink's content is its target path, so "a trailing newline" is not a tidiness knob on this file: a newline byte in the blob would become part of the target's name, and the binding would point at a path that does not exist. The new binding is byte-identical in form to its siblings — the blob ends at the last character of the path, with no So the observation describes the mechanism, not a defect in this change: there is no form of this binding that carries a trailing newline without breaking the binding. The alternative — hand-writing this one binding as a regular file, or trimming a newline from the other 360 — would be a hand-edit of a derived artifact (the binding is re-derived from the pinned corpus by the one script that owns it), which the rulebook forbids, and it would make one binding differ in kind from the other 360. The validator's second observation — the State. Head Next. The merge and its merge-time tag, then Agent: |
Closes #637
Summary
The wave. Fifty-five pins move and one derived binding is added, every one of them
by the pin contract's own bump (
charly task sync) and never by hand.Head
99cfe4b5d4629c34abd01c29257420b2754e6804— 56 files changed, 56 insertions(+), 55 deletions(-).charly75c38eb8720698d6distro-arch9b84c67c59792cabbox/*twins to the refs their intent namesdistro-cachyos541398c042a3f078box/*twins to the refs their intent namesdistro-debiana586c1f4fad84d29box/*twins to the refs their intent namesdistro-ubuntu9731ef8ef23f751dbox/*twins to the refs their intent namesdocsc556831000b417d1dotgithubf38f312b9f3df6d8layer-charly-internalseb51da5407ea8b9blayer-docs-site199fb451e505b26elayer-hermes-playwright15509661d628581flayer-k3s46ce442d0c5c54cblayer-kind9f0ae70a1d473290layer-kubernetesac13afe66a4ce2c0layer-nerdctl647c924874814843layer-nvidia28e7bfb299408c79layer-openclaw3c1007a4a99b1437layer-playwright8557a90425e7b49flayer-python-ml84305cdd3c218547layer-tmux2560e7ddf49e150dlayer-wl-overlayb21dcb9c895de424marketplaceb879d7111c156511pkg-arch6e288e27b5ac552aplugin-agentd5195ae7955e89f5plugin-alias1e7f48413515147eplugin-box6f59dc9bb9ed1216plugin-build1f3c659d91bdb344plugin-clean79065551b4f9f019plugin-cmde43f9c598732a8eeplugin-deploy-local117648e821446688plugin-deploy-vm544e17fd54fe61b8plugin-doctor89e820b9f54e85e0plugin-egress5484c1f1c71add34plugin-enc9514a0e003f491e7plugin-helm86065082d6379ddcplugin-herdr0d0d923bb1d2dfd7plugin-kubeec4ba1f4e1b4fda7plugin-marketplacee59970151230071cplugin-sshb66d66ee076dae3aplugin-statuse14d89fac9d444d4plugin-task38c54817a802474atask:hop carries the nested run's own report; the tipa802474ais the tag-on-merge bot's own commit (opencharly/.github#192)plugin-tmuxfa897d6777a6644bplugin-udev01cfda196ac20557pod-comfyui8b21d1358731930fpod-dbus77dd69b12bb9be82pod-filebrowser077b5d42d0817857pod-herdr7e62b0a3ca1d8079pod-hermes51199e90f9a3c1ebpod-hermes-full800f0b0c872598bbpod-immiche3ff38d6ab245c8cpod-immich-ml4e3687d14bf2a002pod-jupyterbd7ca75aff91d9a7pod-jupyter-mle4dc1d1a4995cd55pod-openwebuidd2668220c8cb734pod-selkies-desktopba53d98bbeea508dpod-unsloth-studio17f51ea4f3144ada.dsh/skills/clawsweeper-reviewcheckskill (clawsweeper-review), bound by the re-derivation the bump runsThe accounting of this wave's scope. The pre-wave measurement, taken on the tree the
wave starts from, was 54 of 412 pins NOT current — fifty
behindleaves plus thefour
blocked-byedges.docswascurat that moment and wentbehindthe momentopencharly/docs#176 merged, so the wave's scope is 55 pins. Fifty-five in,
fifty-five moved. Two pins the currency report did not name also resolved without a
change —
crabboxandplugin-pod, whose checkouts were behind the refs their indexalready recorded, so the bump brought them forward and the gitlink did not move.
distro-fedoraanddistro-omarchydid not move because their twins did not move.Three of the four blocked edges resolve this time. An edge pin's value is its
source's recorded gitlink, and
charly's ownbox/*twins moved (opencharly/charly#1039).Four of the six twins moved and two did not:
After the wave,
distro-arch(59792cab),distro-cachyos(42a3f078) anddistro-debian(fad84d29) sit exactly on their repos' served mains, so those threeedges are
cur.distro-fedoraanddistro-omarchykeep the twins they already held,and both twins are still exactly their repos' served mains.
distro-ubuntuadvances, and is still behind — the report says so. Its twin moved9731ef8e->f23f751dwith charly#1039, so the umbrella's edge advanced by onedistro-ubuntucycle. Butdistro-ubuntumerged its own PR #59 — the changelog commit2026.296.1519, 15:19Z — after charly#1039 set that twin at 13:39Z, so the served mainis
7073f4c8and the twin is one cycle behind it again:The umbrella cannot advance that edge further: an edge's value is its source's
recorded gitlink. The leg is
charly's own pin operation —charly task sync, whichadvances the
box/*gitlinks to each distro's default-branch HEAD — and then the nextumbrella wave. The currency report names it as a
blocked-bythat names its producer,and the pin contract PASSES that state: a pin behind is an advance available now, in its
producer's repo. opencharly/charly#1035 — charly's stale nested
box/ubuntutwin — wasclosed by charly#1039's merge, which this wave carries; the twin has gone stale again
since, for the reason above.
The currency report on this very tree. The report is not decoration: it is the
question
verifyasks about every pin — is the pin at the ref its intent names? — andon this tree it answers:
The two pins the report names, and the legs that make them current. The report names
two of 412 pins as not current, and both are REPORTED and PASSING by the pin contract
— each names its producer, and each is an advance available now in that producer's repo:
marketplace: behind — recorded1c156511, served74be5fb914.chore(corpus): pin layer-nerdctl v2026.296.1649, regenerate, and retire the engine-word comment marketplace#561 — chore(corpus): pin layer-nerdctl v2026.296.1649,
regenerate, and retire the engine-word comment — merged at 18:09:28Z, after this
wave's bump read the repo, so the wave pinned the main that was current when it ran
and the corpus moved underneath it. the layer-strata pin is behind its remote (fb75a53f9e -> 8f733db63e) and no wave carries it #561 changed no skill's identity — it bumps a pin
inside the corpus's own manifest and edits one skill's prose — so the derived binding
this wave added is unaffected by it.
distro-ubuntu: blocked-by charly:box/ubuntu (behind) — the derived-from edge,named above with its leg.
Why the wave did not chase the first one. A wave's scope is the set its bump
measured, and the org's remotes move while the gate runs — #561 landed eleven minutes
after this wave's commit. The pin contract gives that state a name and a meaning:
behindis an advance available NOW in its producer's repo, it is REPORTED, and itPASSES. The umbrella's own currency report is the control that names it, and the next
wave takes it. Chasing it here would also cost the agreement the next paragraph
proves.
The corpus and the docs leg agree. The umbrella's
marketplacegitlink and thecorpus pin opencharly/docs#176 took are the same commit,
1c156511, so no two sides ofthis wave disagree about what the corpus's main is — and they still agree precisely
because the wave took the corpus's main as it stood when the bump ran, and left
marketplace#561 to the next wave.
The corpus's consumer legs. opencharly/marketplace#543 — the corpus's refresh
defect — has two consumer legs: opencharly/docs#176 (merged) and this wave, which
carries the umbrella's
marketplacegitlink to the corpus's merged main. This PR is thesecond leg.
One new derived binding. The bump's second step re-derives the harness skill
bindings from the corpus the bump just advanced, and the advanced corpus carries one new
skill —
check/clawsweeper-review. The binding.dsh/skills/clawsweeper-reviewisadded, pointing at
../../marketplace/check/skills/clawsweeper-review. It is derived,not hand-written: the script that writes it reads the pinned corpus.
How tested
The change class here is a pin wave, so the R10 gate is the umbrella's own
./charly/bin/charly task verify, run on the committed tree this PR pushes, withcharly task pins --param MODE=currencyas the currency evidence. Every command, outputand exit code is retained below.
The gate, on the committed tree:
The currency evidence, same tree:
The claim-keyed sweep (R5). The claim is "no superseded pin survives as live
state". The keys are the fifty-five values this wave replaced, one per line; the
sweep asks the index and the working tree whether any of them still serves a path:
The surviving hits, classified. The only hits are in
CHANGELOG/— nine files, andevery one of them quotes the pin values as they stood at the time (a past wave's
160000 <sha> 0 <path>line, or a quoted sha in prose). The rulebook puts history inCHANGELOG/and nowhere else, so a changelog entry that names the sha a wave pinnedthat day is history, not a live path; the live sweep, which excludes
CHANGELOG/,returns nothing.
The control, so that the green means something. The same instrument, keyed on a pin
the tree still serves, finds it and exits 0 — the sweep discriminates, so its silence on
the live tree is evidence and not a broken instrument.
Rulebook compliance
/charly-internals:git-workflowand/charly-internals:strict-policywereloaded before the first edit; the umbrella's own
AGENTS.mdwas read first.contention that cost three pins in chore(pins): the pin wave — 18 gitlinks to their producers' merged mains, and a currency report in
verify#623 is avoided by constructionhere). The currency report names two pins of 412 that are not current, and both are
REPORTED and PASSING by the pin contract rather than defects:
marketplaceis onemerge behind, because chore(corpus): pin layer-nerdctl v2026.296.1649, regenerate, and retire the engine-word comment marketplace#561 merged after the wave's bump read the
repo (an advance available now in its own repo, which the next wave takes), and
distro-ubuntu's derived-from edge is onedistro-ubuntucycle behind its served main(named above, with its leg). Neither is a failure, a warning, or a rule violation, so
neither was remediated here; both are named in the report above, with their legs. The
docspin, which wentbehindbetween the measurement and the wave, was advanced bythis wave.
charly task sync, and theharness bindings are re-derived by the one script that owns them, never hand-written.
every pin moved through the sanctioned verb.
describes the pins, so no prose had to change with them.
keyed on the fifty-five replaced values, the live tree returns nothing, and the only
hits are in
CHANGELOG/, which the rulebook holds history in.git statuswas read before every write; the change is confined to thisrepo's own worktree; no submodule was edited in place, no force-push, no bypass.
and the currency report names pins that are behind, so its silence on a clean tree is
a measurement rather than a gap.
charlysource — the build below, andcharly versionagrees with it.zero warnings.
Change classification
A pin wave. The diff advances 55 gitlinks and adds one derived harness binding, so
the R10 gate for this change class is the umbrella's own
./charly/bin/charly task verify— run on the committed tree, withcharly task pins --param MODE=currencyas the currency evidence. This repo is theumbrella itself: it pins other repos and is pinned by nothing, so this PR lands on its
own and no consumer follows it.
Filed issues
None — this wave filed no new issue. Every pin it advanced is at a MERGED ref of its
own repo. The two states the currency report names —
marketplaceone merge behind, anddistro-ubuntu's derived-from edge one cycle behind — are REPORTED and PASSING by the pincontract: each names its producer, and each is an advance available now in that
producer's repo, which is what the next wave takes. Neither is a failure, a warning, or a
rule violation, so neither carries an issue. The
docspin, which wentbehindbetweenthe measurement and the wave, was advanced by this wave, so it carries nothing to file
either.
Agent: charly
Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)