Skip to content

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

Open

Description

@aitrawog

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=0

The 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  spec

What 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's main. 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 at UMBRELLA_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_PIN in 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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions