Repository navigation
the pinned umbrella CI-time commit is behind the umbrella's merged main — the report says how far, never what the missed commits touch #207
Description
The site's own UMBRELLA_PIN trails the umbrella's merged main, and the repo's own
pin-currency report names it — but the report says how FAR behind the pin is, never
WHAT the missed commits touch, and for this site that distinction decides whether the
advance is a pointer bump or a regeneration with content.
This is the sibling of #202 (the CHARLY_PIN, which carries content)
for the workflow's third pinned input. It is not claimed by this session; it is
filed as a separable, non-blocking finding from the corpus-pin leg.
The measurement
The repo's own report, run in this repo's own worktree:
$ bash .github/scripts/check_pin_currency.sh .
corpus pin: 3cf744b9ef3dcaf5e3dadff01648db087385ef19 is behind — 2 commit(s) behind the corpus's merged main; an advance available NOW (a pin-bump PR in this repo) (merged main: 75e1d4a1379daf164a1ed2bc9c0678ad1ed20312)
charly pin: be7a505f476c1a5b0302d878e0b5686a2cde3e07 is behind — 2 commit(s) behind charly's merged main; an advance available NOW (a pin-bump PR in this repo) (merged main: 1637a5e43380550b68d53b2e1167e0628768cd52)
umbrella pin: 1c88fcf15f8fb9dd8b2814210472a63d3a79d0e2 is behind — 6 commit(s) behind the umbrella's merged main; an advance available NOW (a pin-bump PR in this repo) (merged main: b63ff6724105a5eb452e53f6a7f495ae229f8145)
CURRENCY_RC=0The pin is recorded once, in the workflow's own env: block, and the clone step and
the report both read it:
UMBRELLA_REPO: https://github.com/opencharly/opencharly.git
UMBRELLA_PIN: 1c88fcf15f8fb9dd8b2814210472a63d3a79d0e2
The pin is a fast-forward, not a divergence:
$ gh api repos/opencharly/opencharly/compare/1c88fcf15f8fb9dd8b2814210472a63d3a79d0e2...b63ff6724105a5eb452e53f6a7f495ae229f8145 \
--jq '"ahead_by=\(.ahead_by) behind_by=\(.behind_by) files=\(.files|length)", (.commits[] | " \(.sha[0,8]) \(.commit.message|split("\n")[0])"), (.files[]|" \(.status) +\(.additions) -\(.deletions) \(.filename)")'
ahead_by=6 behind_by=0 files=10
7bc7d974 chore(pins): the umbrella's pins are current against their producers' merged mains (#798)
ec9d448d docs: add CHANGELOG 2026.302.0738 for PR #798
8075e709 chore(pins)!: the umbrella's pins carry the retired-builder-selector cutover (#801)
280b4367 docs: add CHANGELOG 2026.302.1105 for PR #801
d3c3871c chore(pins): the umbrella's corpus pin is current against the corpus's merged main (#804)
b63ff672 docs: add CHANGELOG 2026.302.1219 for PR #804
added +334 -0 CHANGELOG/2026.302.0738.md
added +303 -0 CHANGELOG/2026.302.1105.md
added +299 -0 CHANGELOG/2026.302.1219.md
modified +1 -1 charly
modified +1 -1 docs
modified +1 -1 layer-container-nesting
modified +1 -1 layer-docs-site
modified +1 -1 marketplace
modified +1 -1 plugin-marketplace
modified +1 -1 specWhat the missed commits touch — and what this site projects from them
This site projects exactly four files from the umbrella checkout: SOUL.md,
VISION.md, GRIEVANCES.md and LIBERATION.md (the four root narratives; the
generator reads them through --narrative, and the workflow clones the umbrella
without its submodules for exactly that reason). None of the four appears in
the compare's file list — the ten changed files are three CHANGELOG/ records and
seven gitlinks — so the narrative pages this site publishes are byte-identical at
1c88fcf and at b63ff672 today. Measured, not read off the file list:
$ gh api "repos/opencharly/opencharly/compare/1c88fcf15f8fb9dd8b2814210472a63d3a79d0e2...b63ff6724105a5eb452e53f6a7f495ae229f8145" --jq '.files[].filename' | grep -E "^(SOUL|VISION|GRIEVANCES|LIBERATION)"
(no output — none of the four changed)That is the fact the report does not state, and it is the whole difference between two
different remedies:
| the missed commits touch | the advance is |
|---|---|
| a root narrative | a regeneration with content — the pin bump and the regenerated grievances/vision/liberation/soul pages land together |
only CHANGELOG/ and gitlinks (today) |
a pointer advance — the pin moves, the pages do not change |
RCA (R1)
- Mechanism: the workflow's CI-time pins are advanced only by a manual regeneration
PR, while their producers move on their own — the corpus's daily refresh advances the
corpus, and the umbrella's own pin waves advance the umbrella'smain. The two drift
apart at every producer release. - Missed control: the pin-currency report EXISTS and names the state (
behind, "an
advance available NOW"), but it reports the DISTANCE and not the CONSEQUENCE. Nothing
reads the missed commits and says whether they touch the four files this site
projects — so a reader cannot tell a pointer bump from a content regeneration without
doing that comparison by hand, and nobody does it, because the state is reported and
green on every push. - Blast radius: the site's four narrative pages are projected from the umbrella's
root files atUMBRELLA_PIN. The drift gate is blind to this by construction — the
PINNED sources regenerate their own (old) pages perfectly, so a stale pin is
invisible to it — and so is the pin-currency report's exit status. Today the
consequence is nil (measured above); the first umbrella release that edits a root
narrative would publish an older narrative with nothing on any green surface saying
so. - Root fix: advance
UMBRELLA_PINin a regeneration PR that carries whatever the
regeneration produces, in the same change — the regeneration is what proves the bump
is coherent — and have the report say WHAT the missed commits touch, so a reader can
tell the two remedies apart without a second query.
Relation to #199, #201, #202 and #206
- the release-TAG class of pins (the generator's own tag and the 65 wiring-candy plugin tags) is unobserved: the generator is one release behind and 64 of 65 plugin pins name a tag older than their repo's newest #199 is the release-TAG class of pins (the generator's own tag and the 65
wiring-candy plugin tags). This is the umbrella CI-time COMMIT — a different pin class. - the marketplace submodule is pinned behind the corpus's served head — the recipe pages are generated from an old corpus #201 was the corpus SUBMODULE, advanced by docs(corpus): advance the corpus submodule to the corpus's served head, and regenerate the site #203; it is advancing
again under the corpus submodule is behind the corpus's served head again — the recipe pages project a corpus that moved #206. - the pinned charly CI-time commit is behind charly's merged main — the drift gate cannot see it #202 is the
CHARLY_PIN— the sibling CI-time pin, and content-bearing (the
commits it misses adopt a new spec version). - the corpus submodule is behind the corpus's served head again — the recipe pages project a corpus that moved #206 is the corpus SUBMODULE leg this session is landing, and it does not depend
on this issue: it advances a different pin, and its own claim is about that pin.
Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (analysed on a live system)
Activity