docs(knowledge): make map-corpus self-contained instead of citing a pruned Brief - #2719
Conversation
…runed Brief The shipped skill cited its authoring-time planning document by label (`Q19`, "Brief criterion 2/6", "Brief acceptance criterion 4"). That document lived at docs/topics/docsite-digest/PLAN.md, which exists in no git ref — it was never committed, so no pointer the topic-docs lifecycle accepts can be built for it, and a consumer never had it at all. Each site now states what it needs: the deferred rung-3 decision carries its own fork (a presence-gated /firecrawl:firecrawl map seam versus a recorded reimplementation), its user-reserved arbiter, and its trigger; the deferred repo-tree enumeration rung carries its trigger; the `Q19` label is dropped from SKILL.md, discovery/link-map-format.md, discovery/check_linkmap.py and the eval set; and the whole-snapshot hash in extraction/node-manifest-format.md points at reference/citation-shape.md, which owns that fact. No behavior, schema, gate, exit code, or argument change. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Claude finished @kyle-sexton's task in 2m 15s —— View job CI code review — complete
Skip gate: none apply — PR is open, not a draft, and the change (9 files, +44/-25) has a real review surface even though it's docs/prose-only. FindingsNo high-signal correctness or maintainability issues found. This is a clean, self-consistent prose/doc-string/error-string edit with no behavior, schema, gate, exit-code, or argument changes, matching what the PR body claims. Checks I ran myself (not just restating the author's Test plan):
One thing I could not independently verify (blocked by sandbox approval on running arbitrary No inline comments posted — no findings met the bar. |
|
Claude finished @kyle-sexton's task in 47s —— View job Security review —
|
|
Last security-reviewed head: |
|
Claude has reviewed this PR 1 time. The lane skips further automatic reviews after 5; deleting this comment resets the count. |
…2.1 entry (#2743) ## What Drops two words from the shipped `knowledge` 0.12.1 changelog entry: "Pays down the ~~Brief-captured~~ debt `map-corpus` recorded". ## Why `Brief-captured` attributes the debt to an authoring-time planning document that **exists in no git ref** — `git log --all -- docs/topics/docsite-digest` is empty, and the mapper's own working slice is untracked and self-ignoring by design. A consumer reading the changelog cannot follow it, and never could. This is the same unresolvable-reference shape #2719 removed from the `map-corpus` skill body one version later. #2719 scoped it out deliberately, because editing a *shipped* entry is a different judgment call than fixing an unreleased one. This PR makes that call explicitly rather than leaving the residue in place. ## Why this does not rewrite history The debt itself is quoted inline in the same sentence — "that citation shape still needs an owner doc before a second skill emits it" — so the entry still records what was owed and what paid it down. Only the unfollowable attribution goes. No version heading is touched, no entry is added or removed, and no ordering changes. ## Verification Ran locally before pushing, all exit 0: - `check-changelog-parity.sh --check` — every versioned plugin has a CHANGELOG, none documents a version above its manifest. - `check-changelog-parity.sh --check-preserved origin/main` — all 1 changed changelog preserves every version heading it carried at `a326a877`, 58 headings compared. - `check-changelog-parity.sh --check-bump origin/main` — every plugin whose version changed has a matching entry (none changed here; prose only). No version bump: nothing a consumer receives changes behavior, and the changelog header's own rule ties the version to delivered change. ## Related Completes the reference-debt cleanup begun in #2719, which established that `docs/topics/docsite-digest/` exists in no ref and that self-containment was therefore the only conforming outcome. No related issue: routine hygiene on a shipped surface, found by the verifier on #2719 and deferred out of that PR's scope. Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Summary
map-corpusshipped with references to the planning document that produced it — theQ19label inSKILL.md,discovery/link-map-format.md,discovery/check_linkmap.pyand the eval set, plus"Brief criterion 2", "Brief criterion 6", "Brief acceptance criterion 4", "the rule the Brief owed
step 2", and "the Brief's captured content-hash assumption" across the spoke files.
That document was
docs/topics/docsite-digest/PLAN.md, and it exists in no git ref:That fact decides the shape of the fix. The topic-docs lifecycle allows a pruned slice to be cited
by pointer, but only a followable one —
docs/conventions/topic-docs/README.md:429, "a pointerwithout a followable ref is not a preservation" — which is exactly the pattern #2686 used
(
git show 5341117c:docs/topics/boris-routines-adoption/PLAN.md). Here there is no commit to pointat, so no pointer form the convention accepts can be constructed. The alternative — committing
the slice instead — is affirmatively blocked:
docsite-digestappears nowhere inscripts/contract-slice-baseline.txt, socheck-contract-slice-prune.sh --check-diffred-lines anew slice by design. Making each site self-contained is therefore the only conforming outcome, not
a stylistic preference.
So each site now states what it needs, in consumer terms:
SKILL.md,discovery/link-map-format.md) states its own fork —a presence-gated
/firecrawl:firecrawl mapseam versus a recorded reason to reimplement in-pageextraction — its user-reserved arbiter, and its trigger (the first corpus whose seeds resolve
neither
llms.txtnor a sitemap).half is too large to enumerate by hand).
discovery/link-map-format.mdstates classification coverage and the boundbreach as the gate's own reasons to exist, rather than as external criterion numbers.
extraction/node-manifest-format.mdnow points at${CLAUDE_PLUGIN_ROOT}/reference/citation-shape.md, which actually owns that fact(
citation-shape.md:24defines the hash;:41-42ties it to map-corpus'ssnapshot_sha256).verification/inventory-format.mdandverification/test_check_inventory.pykeep the substantiverationale (two prior gates in this codebase shipped fail-open and were caught by verifiers) and
drop only the criterion-number citation.
No behavior, schema, gate, exit code, or argument change. Only prose, one Python docstring, one
Python error-message string, and the eval set's wording of an existing expectation.
Test plan
Every command run locally against this branch.
python verification/test_check_inventory.pyRan 29 tests—OKpython discovery/test_discovery.pyRan 30 tests—OK(incl.test_no_discovery_inputs_rejected, which covers the edited branch)check_linkmap.pyno-discovery path (the edited string)check_linkmap.py --help--linkmap, repeatable--discovery)scripts/check-changed-skills.sh origin/mainCHECK-SKILL map-corpus: PASS — 0 errors, 1 warning(s)(warning is the pre-existing 204/200-line soft target)npx markdownlint-cli2over the changed markdownSummary: 0 error(s)across 5 filesajvvs the skill-quality bundled schema)evals.json validcheck-evals-quality.shPASS (0 warning(s))scripts/check-contract-slice-prune.sh --check-diff origin/maindocs/topics/"scripts/check-contract-slice-prune.sh --checkscripts/check-changelog-parity.sh --check/--check-bump/--check-preservedGhost-ref sweep across the repo (excluding
.git/and the gitignored memory tier): no survivingQ19ordocsite-digestreference in any shipped surface, and no survivingBrief/criterionback-reference anywhere under
plugins/knowledge/skills/map-corpus/. The two remainingQ19hitsare a different topic's own question numbering in
docs/topics/ladder-climb-roadmap/.An independent fresh-context verifier re-derived the prune decision, read the gate script, re-swept
for ghost refs, and re-ran the tests with the authoring rationale withheld. It returned
PASS-WITH-FINDINGS, all findings advisory. Two are worth recording here:
fail(2, …)branch is covered for its exit code, not its message.discovery/test_discovery.py:354(test_no_discovery_inputs_rejected) runs the gate with no--discoveryand asserts exit 2; its assertion substring (at least one --discovery) sitsbefore the reworded text, so the test pins the contract that matters and is indifferent to the
wording — which is why it passes unchanged.
${CLAUDE_PLUGIN_ROOT}pointer sits outside the skill gate's scope.check-skill.shcheck 5 walks
SKILL.mdonly (:529-530), so the ref inextraction/node-manifest-format.mdisnot machine-checked. The identical form on
SKILL.md:204is in scope and passes, and the targetwas verified by hand. Flagged as the one line here CI would not catch if it rotted.
Anchor check, since renaming
## Evidence-token byte mapping (the rule the Brief owed step 2)to## Evidence-token byte mappingchanges its slug: repo-wide grep forinventory-format.md#,the-rule-the-brief-owed, andevidence-token-byte-mappingreturns zero hits. No dangling anchor.The two new normative claims added to
SKILL.md(a bare unguarded cross-plugin reference is barred;dependenciesare reserved for hard requires) were checked against their owner,docs/PLUGIN-PHILOSOPHY.md:25-26,33, and are accurate.Related
Follows the contract-slice prune pattern established by #2686, and pays down the last reference debt
left by the working slice that produced
map-corpus.No related issue: routine hygiene on a shipped skill, found while pruning the working slice that
produced it.