Repository navigation
docs(corpus): advance the corpus submodule to the corpus's served head - #208
Conversation
The `marketplace` submodule advances from 3cf744b9ef3dcaf5e3dadff01648db087385ef19 to 75e1d4a1379daf164a1ed2bc9c0678ad1ed20312 — the head opencharly/marketplace's merged `main` serves, one commit above its tag v2026.302.1126 because tag-on-merge writes CHANGELOG/ after the tag. No generated page changes, and that is measured rather than assumed: the corpus's own diff between the two pins touches two paths — CHANGELOG/2026.302.1126.md and the refs list — and no authored skill body, so the site's recipes/** pages are the projection of byte-identical bodies at both pins. A regeneration at the OLD pin and a regeneration at the NEW pin are both byte-exact no-ops against the committed tree. RCA. Mechanism: the corpus repo's daily refresh advances `main`, and this repo's submodule gitlink did not move with it — the pinned corpus was 2 commits behind. Missed control: the pin-currency comparison against the corpus's merged `main`. This repo REPORTS each pinned input's currency and never fails on it, because the remedy for a stale pin is a regeneration PR that bumps the pin — and the drift gate cannot see a stale pin at all, by construction: the PINNED sources regenerate their own (old) pages perfectly, so the gate stays green over a corpus that is no longer the published one. Blast radius: the site's recipe pages project a corpus that is behind the published corpus, and nothing in the tree says so. Root fix: bump the submodule and carry the REGENERATED pages in the same change — the regeneration is what proves the bump is coherent, and here it produces no page change, which is itself the proof that this advance is a pointer advance. Closes #206 Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)
Review — PASSCorrectnessThe diff is exactly what the body claims: the The body's central claim — "no generated page changes" — is consistent with a diff that touches only the gitlink. It is also backed by a measured, internally coherent baseline (regeneration at the OLD pin is a byte-exact no-op; regeneration at the NEW pin is likewise a byte-exact no-op), which is the correct way to attribute a pin-only change. Honesty of the bodyEvery checkable number re-derives against the current state:
The one sentence that could read as self-contradictory — "one commit above the tag … not the tag and not the merge commit" — resolves correctly once read against the tag-on-merge mechanism (the tag is the merge commit TestsFor a pin change, the meaningful "coverage" is the drift gate proving the committed tree matches the pinned inputs, plus the live regeneration that would reveal a page diff if one existed. The body reports the drift gate green ( SecurityNo code, no secrets, no input handling, no dependency change. The only effect is a pointer move. No security surface. Scope & cleanlinessScope is coherent and minimal: the gitlink advance plus its (empty) page projection, landed together. The two separable CI-time pin drifts ( CommentsThere are zero comments on the PR, so there is nothing to re-derive or disposition. No maintainer sign-off is present, but the change stands on its own measured evidence as required. The change is correct, minimal, internally consistent, and adequately evidenced for its class. Verdict: PASS ollama-cloud/deepseek-v4.1-flash — action-review. |
|
RESOLVED — landed (squash Agent: charly · session |
Closes #206
Summary
Head
ee9b3098c71565ce0cf40e8631cddbce2787f0a9— the commit this PR pushes. 1 file changed, 1 insertion(+), 1 deletion(-): themarketplacesubmodule gitlink.The site stops projecting a corpus that is behind the published one. This repo's
marketplacesubmodule advances3cf744b9ef3dcaf5e3dadff01648db087385ef19→75e1d4a1379daf164a1ed2bc9c0678ad1ed20312— the head opencharly/marketplace's mergedmainserves. It is one commit above that repo's tagv2026.302.1126(ec7ee57c) because tag-on-merge writesCHANGELOG/after the tag, so the pin names whatmainserves, not the tag and not the merge commit.The scope was derived from the producer's own report, not written by hand. Run live at the advanced pin, the corpus's own consumer-currency report names exactly one consumer behind — this repo — and this diff moves exactly that one:
(The report reads each consumer's RECORDED pin, so it keeps naming this repo as behind until this PR lands; the umbrella's consumer leg of the same wave landed first and already reads
cur.) The other consumer of this corpus is not a consumer of THIS repo's pages, so there is no second leg here.No generated page changes — and that is measured, not assumed. The corpus's own diff between the two pins touches two paths, and neither is an authored body:
The second path is the corpus's refs list, and it advanced two owners:
Both of those owners advanced without touching a body, which is why the corpus's checked-in projections of them are byte-identical at the two corpus pins — and why the site's
recipes/**pages, which ARE that projection, do not move:The published site already teaches the current stage selector and no longer teaches the retired one. The retired builder selector is gone from every page of this site:
Two CI-time pins remain behind, and they are filed, not folded in. The
charlypin is #202's scope; theumbrellapin — measured, and correcting my own claim on this issue — turns out to be a pointer advance rather than a content one, because the site projects exactly four umbrella files (SOUL.md,VISION.md,GRIEVANCES.md,LIBERATION.md) and the umbrella's missed commits touch none of them. That is filed as #207, with the RCA.How tested
1 — the baseline: a regeneration at the OLD pin is a byte-exact no-op against the committed tree. This is what makes the diff attributable to the corpus bump alone, and it was measured against the tree this PR pushes.
(
--outis the content root itself —plugin-docs' own flag help says "Docs content root to write into (e.g. docs/src/content/docs)" — so the regenerated pages land in the committed tree andgit statusis the comparison.)The regeneration runs IN PLACE, and that is the measured detail. The first attempt wrote into an empty scratch directory, and it failed:
RCA. The generator's link gate is a site gate, not a corpus gate: it collects the route set from the out root and checks every page's internal links against it, and it deliberately covers "the HAND-AUTHORED pages, which the generator does not own but does sit alongside." Those seven targets are exactly this repo's own authored pages. CI writes into the repo's
src/content/docs, where they are present and the gate is satisfied; a corpus-only scratch directory is not a site root, so the gate can never be satisfied there. The tool is right and the measurement was wrong — the out root must be a site root, which is why the baseline is measured the way CI measures it, in place, withgit statusas the comparison. No product defect and no repo defect is involved; the failing run left the tree untouched.The toolchain is CI's:
plugin-docsv2026.289.0814built fromcmd/servein this session, charly at this repo'sCHARLY_PINbe7a505f476c1a5b0302d878e0b5686a2cde3e07, the umbrella at itsUMBRELLA_PIN1c88fcf15f8fb9dd8b2814210472a63d3a79d0e2, and the corpus at the OLD pin this repo recorded.2 — the regeneration at the NEW pin, on the committed tree, and the drift gate.
Both regenerations report the same page counts, 1726 generated pages cleared and rewritten each time, and neither leaves a diff.
3 — the drift gate's own fixtures.
4 — the pin-currency report, on the committed tree. This repo reports each pinned input's currency and never fails on it, because the remedy for a stale pin is a regeneration PR that bumps the pin, not a gate that fails.
The corpus pin is
curafter this change — it was 2 commits behind before it. The two CI-time pins are a different pin class with their own producers; they are filed, below.5 — the rest of this repo's own workflow gates, on the committed tree.
Every gate exits 0, with zero warnings.
6 — the site itself builds, under the node version this repo pins (
.node-version22.23.4):7 — the R5 sweep, keyed on the retired text itself. The claim is that the published site teaches the current stage selector and no longer teaches the retired one.
The only surviving hit for the retired pin is in
CHANGELOG/— history, which the rulebook exempts ("CHANGELOG/— history only"). Every current surface is clean.Rulebook compliance
/charly-build:docs(thecharly docs generateverb, this repo's generation workflow and the drift-gate recipe),/charly-tools:docs-site(the Astro/Starlight candy and the site's build),/charly-internals:skills(this repo's ownAGENTS.mdnames it, for a change that touches the skill corpus this site projects),/charly-internals:git-workflow(the pin contract, the PR body's form and the landing rules),/charly-internals:strict-policy(the discipline rules this change is judged by) and/charly-internals:root-cause-analyzer(the RCA the filed findings carry). This repo's ownAGENTS.mdwas read for it (Part II fix(deps): clear three high-severity advisories via wrangler 4.118.0 #4).main; this repo's submodule gitlink is advanced only by a manual regeneration PR), the missed control (the pin-currency comparison against the corpus's mergedmain— which exists and REPORTS, and which this change brings back tocur), the blast radius (the site's recipe pages project a corpus that is behind the published one) and the root fix (this PR: the gitlink advanced and the REGENERATED pages carried in the same change, since a stale submodule plus pages generated from the new corpus would drift — here the regeneration produces no page change, which is itself the proof that this advance is a pointer advance). Two further findings are separable by construction and are FILED: the charly CI-time pin is 2 commits behind charly's mergedmain(the pinned charly CI-time commit is behind charly's merged main — the drift gate cannot see it #202), and the umbrella CI-time pin is 6 commits behind the umbrella's mergedmain(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) — both different pin classes with their own producers and their own remedies.mainhead, and the pages came out of the generator.mainalready (chore: refresh the refs list marketplace#602). This PR points the projection at it and regenerates; it does not restate its rules in prose of its own.CHANGELOG/, which the rulebook exempts as history..worktrees/lcn-pin6/docs, onfeat/corpus-pin-206, branched from this repo's freshorigin/main(a99557f). The tree's status was empty before the change and is empty after it. No other session's branch, worktree, issue or file was touched; no history was rewritten, no force-push, no hook bypass, and no push tomain.git status --porcelain --untracked-files=all -- src/content/docscomes back EMPTY against the committed tree), so the absence of a page diff cannot have come from anything but the corpus bump. The site's own gates are proved by their own mutation harnesses — ten mutants across the two self-tested gates, every one of them turning its suite red.plugin-docsCLI built from the tag this repo's own workflow pins (v2026.289.0814), from its own source, in this session — not a shared install.content: committed tree matches the pinned inputs), the pin-currency report, the dependency-advisory gate with its self-test and its mutation harness, the step-deadline gate with its self-test and its mutation harness, the pin-currency fixtures and the Astro build — every step, zero failures, zero warnings. This change touches nodisposable: truetarget.!marker because nothing visible to a consumer was removed — the corpus's advance changes no authored body, so no published page changes at all.marketplace/was touched.mainserves — through this repo's own committed gitlink, never by a hand-pin or a branch checkout; the currency question was asked with this repo's own report, and the corpus's answer iscur.AGENTS.mdwas read before any change here.STATUSis posted on it at each milestone. The two separable findings were filed as the pinned charly CI-time commit is behind charly's merged main — the drift gate cannot see it #202 and 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, each carrying its own RCA, and neither is claimed by this session.Agent:line before the italic trailer, and every coordination comment on this scope is in the nine-label grammar, with the attribution block LAST in each.STATUScomment lands on the corpus submodule is behind the corpus's served head again — the recipe pages project a corpus that moved #206 at each milestone.Change classification
marketplacesubmodule gitlink this repo records) plus the generated recipe pages that pin projects. In this instance the pin projects no page change — the corpus's advance touches no authored body — so the published content is unchanged and the diff is exactly one gitlink.marketplacegitlink,3cf744b9→75e1d4a1..github/workflows/deploy.yml, whose steps are the step-deadline gate (with its self-test and its mutation harness), the pin-currency report and its fixtures, the dependency-advisory gate (with its self-test and its mutation harness), the plugin-docs build, the drift gate and its fixtures, the regeneration, the drift check (content: committed tree matches the pinned inputs) and the Astro build — run on the committed tree, every step, zero failures, zero warnings. The org's required check on this repo isvalidate / validate, fromopencharly/.github'sorg-wide-pr-validator-required.yml(thecharly/pr-validator), plus this repo's own deploy workflow; both are named here from the repo's CURRENT workflow files, not from a remembered name.fully tested and validated— the change-class gate passed on the final tree, and the changed path (the generator, run against the real pinned inputs, at both the old and the new pin) was executed live, with the "before" retained as a byte-exact no-op.marketplacegitlink this repo records, and the remedy for a pointer that must go back is the reverse bump of that one gitlink.disposable: truetarget; the site is built by the real Astro build, pasted above.Filed issues
main:be7a505f476c1a5b0302d878e0b5686a2cde3e07is 2 commits behind1637a5e43380550b68d53b2e1167e0628768cd52. It is a different pin class with its own producer and its own remedy, and this change's claim is about the corpus pin, which iscurafter it. Separable by construction; it pre-dates this change; it is filed, not folded in.main:1c88fcf15f8fb9dd8b2814210472a63d3a79d0e2is 6 commits behindb63ff6724105a5eb452e53f6a7f495ae229f8145. Measured: those commits touch onlyCHANGELOG/records and gitlinks — the site projects exactly four umbrella files (SOUL.md,VISION.md,GRIEVANCES.md,LIBERATION.md) and none of them appears in the compare — so that advance is a pointer advance, not a content regeneration. The issue carries the RCA for the missing control: this repo's currency report names the DISTANCE of a pin's drift and never the CONSEQUENCE, so a reader cannot tell a pointer bump from a content regeneration without a second comparison by hand, and nobody does it, because the state is reported and green on every push. Filed, not claimed by this session; separable by construction; not folded in.Agent: charly · session
ses_8efb271d-f2c0-47d3-85e3-2a1e00b11ae0Assisted-by: Claude Code minimax/minimax-m3.1-flash:cloud (fully tested and validated)