Skip to content

the site's own charly and umbrella pins are 91 and 373 commits behind their merged mains, and nothing reports it #196

Closed

Description

@aitrawog

Problem

This repo's site is generated from three pinned inputs, and the currency report this repo owns (check_corpus_currency.sh) watches exactly one of them.

pinned input where the pin lives pin state against its remote's merged main
the guidance corpus this repo's marketplace gitlink 99a1bb4a6f10112f67e3ddd73d3e86b3f6bc3417 cur (advanced by the corpus leg — this repo's open PR)
charly .github/workflows/deploy.yml:164 bafd8dbc3110904872831998fb4caa701cc2990c 91 commits behind
the umbrella .github/workflows/deploy.yml:169 e631aacf32df4e26a66f2cb6a75fc9e85e212399 373 commits behind

Both are valid pins — each is an ancestor of its remote's merged main, so neither is a divergence — and both are stale. The site's narrative pages and its CLI/candy reference are a projection of a charly that is 91 commits old and an umbrella that is 373 commits old.

Evidence (measured, 2026-10-28)

Measured against the workflow's own pinned checkouts, with the remotes fetched first so the ancestry question is decidable:

$ git -C /tmp/docsgen-corpus99/charly rev-parse HEAD
bafd8dbc3110904872831998fb4caa701cc2990c
$ git -C /tmp/docsgen-corpus99/charly fetch --quiet origin main
$ git -C /tmp/docsgen-corpus99/charly rev-list --count bafd8dbc3110904872831998fb4caa701cc2990c..FETCH_HEAD
91
$ git -C /tmp/docsgen-corpus99/charly merge-base --is-ancestor bafd8dbc3110904872831998fb4caa701cc2990c FETCH_HEAD; echo "ancestor_exit=$?"
ancestor_exit=0

$ git -C /tmp/docsgen-corpus99/umbrella rev-parse HEAD
e631aacf32df4e26a66f2cb6a75fc9e85e212399
$ git -C /tmp/docsgen-corpus99/umbrella fetch --quiet origin main
$ git -C /tmp/docsgen-corpus99/umbrella rev-list --count e631aacf32df4e26a66f2cb6a75fc9e85e212399..FETCH_HEAD
373
$ git -C /tmp/docsgen-corpus99/umbrella merge-base --is-ancestor e631aacf32df4e26a66f2cb6a75fc9e85e212399 FETCH_HEAD; echo "ancestor_exit=$?"
ancestor_exit=0

ancestor_exit=0 is the load-bearing half: both pins are on the served line, so both are behind — the pin contract's reportable state, whose one remedy is a pin-bump PR.

Mechanism

The corpus's advance reaches this repo as a pin, and a pin moves only when somebody runs the leg. The two other inputs are pinned the same way, in the same file, by the same kind of manual act — and the corpus's currency report is hard-wired to one input:

$ grep -n 'corpus' .github/docs-corpus/check_corpus_currency.sh | head -8
22:# Usage: check_corpus_currency.sh <superproject-root> [<corpus-dir>]
24:# Prints exactly one line:
25:#   corpus pin: <pinned> is <state> (merged main: <tip>)

The script's own header states the blind spot it was written to cover:

The corpus pin is advanced by a MANUAL act after the corpus lands, so the site trails the corpus by however long nobody ran the regeneration — and the drift gate CANNOT see it: the PINNED corpus regenerates its own (old) pages perfectly, so a stale corpus is invisible to it.

That sentence is true of the corpus and it is equally true of charly and of the umbrella: the pinned charly regenerates its own (old) pages perfectly, so a stale charly is invisible to the drift gate too.

Missed control

There is no currency report for the site's other two pins — the report that exists watches the corpus only, and the drift gate, by its contract, answers a different question ("does the committed content match what the pinned inputs generate?" — yes, always, for any pin).

The org's own vocabulary already has the state these two are in: behind — "an advance available NOW". The producer side of the corpus has the same report (opencharly/marketplace's scripts/consumer-currency.sh, speaking the same vocabulary, state for state), so the consumer side of the other two inputs is the arm that does not exist.

Blast radius

The site's narrative and reference content: the landing and start pages, the concepts and guides, the CLI reference and the candy/box reference are all projections of the pinned charly and the pinned umbrella. Nothing in the repository records that those projections are old, and no check turns red when they are. The drift gate stays green on a site that is 91 and 373 commits behind its sources.

What this issue does NOT claim

  • It does not claim a divergence: both pins are ancestors of their remote's main (ancestor_exit=0 above).
  • It does not claim the site is wrong today. It claims the site is unfalsifiable about its age — nothing in this repo would ever say so.
  • It does not claim the fix is one PR. Advancing charly and the umbrella are two producer-first legs, each with its own gate and its own pages; the corpus leg (this repo's open PR) is the third.

The fix

  1. A currency report for every pinned input the site consumes, in one vocabulary — the corpus's own states (cur, behind, not-on-the-served-line, plus undecidable/unreadable), one line each, REPORTED and never failed, exactly as check_corpus_currency.sh behaves. The script already takes the corpus dir as its second argument, so the shape extends; the report must deepen a shallow checkout before it judges, or say undecidable rather than guess.
  2. Advance the two pins, one producer-first leg each, with the pages each advance projects carried in the same PR — the corpus leg's shape (this repo's open PR).
  3. The report's own tests, so the report cannot silently stop covering an input: a fixture whose pin is behind must be reported behind, and a fixture whose pin is cur must be reported cur.

Related

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

  1. self-assigned this
    on Oct 28, 2026
  2. aitrawog commented on Oct 28, 2026

    @aitrawog
    ContributorAuthor

    CLAIM — the site's two remaining pinned inputs, and the currency report that would see them.

    Taking this finding. It was filed by the corpus leg (the PR in this repo that advances the marketplace pin) as a non-blocking R1 finding, and it is now claimed here for its own PR.

    What the finding is. The site is generated from three pinned inputs, and this repo's currency report watches one of them. The other two are pinned in .github/workflows/deploy.yml — charly at bafd8dbc3110904872831998fb4caa701cc2990c and the umbrella at e631aacf32df4e26a66f2cb6a75fc9e85e212399 — and both are far behind their remotes' merged main (91 and 373 commits, measured, and both are ancestors of it, so both are behind and neither is a divergence).

    What the work is. Three parts, in one PR, in this order:

    1. A currency report for every pinned input the site consumes, in the corpus's own vocabulary and its own states (cur, behind, not-on-the-served-line, plus undecidable/unreadable), one line each, REPORTED and never failed — the shape check_corpus_currency.sh already has, extended past the corpus. It must deepen a shallow checkout before it judges, or report undecidable rather than guess, because a depth-1 clone cannot answer the ancestry question.
    2. The two pin advances, one producer-first leg each, with the pages each advance projects carried in the same PR — the corpus leg's shape.
    3. The report's own tests, so it cannot silently stop covering an input: a fixture whose pin is behind is reported behind, a fixture whose pin is cur is reported cur.

    Why it is not part of the corpus leg. The corpus leg's cutover is the corpus's advance reaching the site, and its gate proves exactly that. Advancing charly by 91 commits and the umbrella by 373 is a different cutover — a different producer's advance, a different set of pages, and its own gate — and the two pins are separable from the corpus's, so this finding is filed rather than folded in.

    Next update: when the report's shape is settled and the first leg's branch is open.

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
    Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (analysed on a live system)

  3. aitrawog commented on Oct 29, 2026

    @aitrawog
    ContributorAuthor

    STATUS

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0

    The corpus leg of this issue is up for review as #198 — feat/corpus-pin-wave-196, head 67a7eaa546134bb7eae29dd99c63f537f3f78581.

    What it carries. This repo's marketplace gitlink moves 99a1bb4a → 5feb9c8 (the corpus's merged main tip), the wiring candy's plugin-build pin moves v2026.242.0525 → v2026.296.1104 (the first plugin-build tag whose build.cue carries stage_parallelism?: int), and the 19 recipe/reference pages those two pins project are regenerated. The retired knob name is gone from the tree and from all 1699 built pages; the live site still carries 17 occurrences of --podman-jobs and none of --stage-parallelism until this merges.

    What it found, and where it went. The regression that taught the site the retired flag is a corpus-level ORPHAN — build/skills/build/SKILL.md existed at no tag the corpus's own refs list named, because the named owner (layer-charly-build) had been drained. The RCA, the missed control and the root fix are in #198's body; the CONTROL behind it is filed as opencharly/marketplace#592 and CLAIMED there. This repo's own scope is unaffected by that issue — the projection is now sourced from the owners directly.

    The gate (this repo's own generation workflow, on the committed tree, zero failures and zero warnings): the corpus projection; the drift check RED before the commit (DRIFT: the committed site does not match its pinned generation inputs.) and a no-op after it; the corpus-currency report (corpus pin: 5feb9c8… is cur); the dependency-advisory gate and its mutation harness; the step-deadline gate and its mutation harness; npm ci && npm run build → 1699 pages, dist/index.html present, the built site free of the retired name.

    Next update: when the validator's verdict lands on #198 — or by the end of the day, whichever comes first.

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
    Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)

  4. aitrawog commented on Oct 29, 2026

    @aitrawog
    ContributorAuthor

    STATUS

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0

    This issue's PR is being built. Branch feat/pin-currency-report-196 off this repo's fresh origin/main (a166ee1), in the session worktree .worktrees/docs-196/docs.

    What it carries — part 1, the report. .github/scripts/check_pin_currency.sh replaces .github/docs-corpus/check_corpus_currency.sh, and the report's scope widens from the corpus alone to all three of the site's source pins: the corpus gitlink, the charly commit and the umbrella commit. It speaks the pin contract's own states (cur, behind, not-on-the-served-line) plus two of its own for the cases it refuses to guess (undecidable — the history could not be deepened, so ancestry cannot be judged; unreadable — the pin, or the producer's merged main, could not be read), one line each, REPORTED and never failed. Its own fixtures are .github/scripts/test_check_pin_currency.sh — 40 assertions, and three mutations proven to turn the suite red.

    The two CI-time pins now live ONCE, in the workflow's own env: block, which the clone step consumes and the report reads — so a SHA can no longer be written in one place and forgotten in the other.

    What it carries — part 2, the two advances. charly moves bafd8dbc → be7a505f (97 commits behind, now cur) and the umbrella e631aacf → 1c88fcf1 (413 commits behind, now cur). The pages each advance projects are regenerated in the same PR; the umbrella's four root narratives are byte-identical across those 413 commits, so the umbrella's advance changes no narrative page.

    What it found, and where it went. The release-TAG class of pins is unobserved: the generator is pinned at v2026.289.0814 while opencharly/plugin-docs has published v2026.295.2045, and 64 of the 65 wiring-candy plugin pins name a tag older than their repo's newest. That is a DIFFERENT pin class — a tag's currency question is "is there a newer RELEASE?", not "is this commit behind the merged main?", and the org has not given that question a state (opencharly/opencharly#793). So it is FILED, not folded in: #199, CLAIMED there, with the measurement and the RCA.

    The gate (this repo's own generation workflow, on the committed tree): the regeneration, the drift check, the pin-currency report, the dependency-advisory gate and its mutation harness, the step-deadline gate, and the Astro build.

    Next update: when the PR is open, or when the regeneration lands the page diff — whichever comes first.

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
    Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)

  5. aitrawog commented on Oct 29, 2026

    @aitrawog
    ContributorAuthor

    STATUS

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0

    PR open: #200 — docs(pins)!: report every pinned input's currency, and advance the charly and umbrella pins. Head 4f824fca41725e9d133944ad9c4e67af61adf4dd, branch feat/pin-currency-report-196 off this repo's fresh origin/main (a166ee1), worktree .worktrees/docs-196/docs.

    What is done. The report is in and green: .github/scripts/check_pin_currency.sh watches all THREE pinned inputs the site consumes (the corpus gitlink, the charly commit the deploy clones, the umbrella commit the deploy clones), in the pin contract's own states (cur, behind, not-on-the-served-line) plus undecidable and unreadable for the cases it refuses to guess. It REPORTS and never fails, and it DEEPENS a shallow history before judging it — a depth-1 checkout cannot answer the ancestry question, and a false state is worse than no report. The corpus-only report it replaces is deleted in the same cutover.

    Both CI-time pins are advanced to their producers' merged tips (charly bafd8dbc → be7a505f, 97 commits behind; umbrella e631aacf → 1c88fcf1, 413 commits behind), the pins are recorded ONCE (the workflow's own env: block), and every page each advance projects is regenerated in the same PR — 127 page files, net +1992.

    The proof, on the committed tree. 14 fixtures / 40 assertions, 0 FAIL, and three proven mutations (the deepening removed → 34 failing assertions; behind rewritten as cur → 3; the umbrella dropped → 4). A fresh CI-faithful regeneration over the committed tree leaves ZERO changes and the drift gate is green. The Astro build assembles 1749 pages with no warning and no error.

    Two findings filed, not folded in. #199 (the release-TAG pin class, whose currency question the org has not given a state — claimed there) and opencharly/plugin-docs#24 (the generator's multi-owner command-word sentence counts pinned VERSIONS of one plugin as "plugin candies" and hardcodes "Both" — it pre-dates this change and is wrong on 37 of the 79 command-word pages).

    What is next. Read the validator's full report, fix every finding in ONE commit per round, and land on its PASS. The next update lands when the validator's verdict arrives, or at the end of the round it names.

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
    Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)

  6. aitrawog commented on Oct 29, 2026

    @aitrawog
    ContributorAuthor

    RESOLVED

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0

    Landed as #200 — squash 2d8020c88e0876a2b404e7035498b7aa4051a457, tag v2026.302.0237.

    What shipped. The site's own pinned inputs are now watched and REPORTED. .github/scripts/check_pin_currency.sh reads all THREE pins the site consumes — the corpus gitlink, the charly commit the deploy clones, and the umbrella commit the deploy clones — and names each in the pin contract's own states (cur, behind, not-on-the-served-line), plus undecidable and unreadable for the cases it refuses to guess. It reports and never fails, and it DEEPENS a shallow history before judging it: a depth-1 checkout cannot answer the ancestry question, and a false state is worse than no report.

    Both CI-time pins are advanced to their producers' merged tips (charly bafd8dbc → be7a505f, 97 commits behind; umbrella e631aacf → 1c88fcf1, 413 commits behind), and every page each advance projects is regenerated in the same PR — 127 page files, net +1992.

    The proof, on the committed tree. 14 fixtures / 40 assertions, 0 FAIL, and three proven mutations (the deepening removed → 34 failing assertions; behind rewritten as cur → 3; the umbrella dropped → 4). A fresh CI-faithful regeneration over the committed tree leaves ZERO changes and the drift gate is green; the Astro build assembles 1749 pages with no warning.

    Two findings filed, not folded in. #199 (the release-TAG pin class, whose currency question the org has not given a state) and opencharly/plugin-docs#24 (the generator's multi-owner command-word sentence counts pinned VERSIONS of one plugin as "plugin candies" and hardcodes "Both" — it pre-dates this change and is wrong on 37 of the site's 79 command-word pages).

    Agent: charly · session ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0
    Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)

  7. aitrawog commented on Oct 29, 2026

    @aitrawog
    ContributorAuthor

    Closed by #200 (squash 2d8020c, tag v2026.302.0237).

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

Metadata

Metadata

Assignees

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