Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion plugins/knowledge/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "knowledge",
"version": "0.10.15",
"version": "0.10.16",
"description": "Ingest external knowledge into durable, synthesized artifacts. Ships a book-distillation pipeline (PDF/EPUB into concept-organized, author-attributed skill reference files), a YouTube pipeline (watch, transcript, link harvest, and repo-applicability synthesis), a course-digest pipeline (extract and synthesize online video courses — Dometrain, Teachable — into repo-applicable recommendations), and a docpage-digest pipeline (single online documentation page into a verified knowledge slice with dual verification — one cross-vendor verifier — and an interview handoff), plus a re-runnable setup action; a configurable library directory governs where synthesized artifacts land in the consuming repo.",
"author": {
"name": "Melodic Software",
Expand Down
40 changes: 40 additions & 0 deletions plugins/knowledge/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,46 @@ All notable changes to the `knowledge` plugin are recorded here. The `version` i
`.claude-plugin/plugin.json` is the delivery vehicle — a consumer receives a change
only after that version increases.

## [0.10.16]

### Changed

- **`docpage-digest` — a second batch of the campaign's evidence-forced amendments.** Same standard
as 0.10.15: each rule below was forced by a defect the pipeline's own runs produced, and each
states its evidence inline. Not the last batch — the two classes held below say why.
- **Anthropic profile — what falsifies `api-only`, written down once.** Only the corpus documenting
the claim's *own specific assertion* falsifies the tag; topical overlap never does. Below that
line sits the **near-miss** — a harness page covering the row's subject without stating its
specific rule: the tag survives, and the row must name the near-miss by page and line, so an
affirmative "no surface" or "undisclosed" phrasing in such a row is simply false. Undisclosed
near-misses were the largest MINOR class in the slice that measured them — one unit disclosed 24
on its own — and the rule had been re-derived per unit rather than written down.
- **Anthropic profile — the two reproducible `claude.com/blog` extraction artifacts are recorded**
(H1 word-spacing collapse; reading-time value and unit split across lines) with reconstruction
from the canonical URL slug, labelled reconstructed because a slug recovers word boundaries only.
Both reproduced exactly across two blog runs, which is what the earlier deferral was waiting for.

Two classes of item are deliberately **not** applied here, for two different reasons.

Three change instruments that live in the campaign's untracked work root, not in the shipped plugin
— making the quote checker a required artifact (whose own precondition, unrecognized-row detection
erroring loudly, cannot be demonstrated as shipped), the command-replay gate reading only the first
number of a `→ N lines, M files` pair, and the absence-measurement script skipping positive rows.
Whether any of those graduates into the skill is a scope decision, not a forced one.

Five more are held for the dispositions interview, having been reclassified out of this batch. The
campaign's triage marks each `evidence-forced`, but the judgment-amendments file writes all five up
as judgment calls with two named readings apiece — vendor-voice attestation for blog material
embedded in a non-blog page (J-6), splitting the two questions a positive tag's row collapses (J-7),
naming the publisher's `llms.txt` index as the page-selection instrument (J-8), the scope of
"harness surface" for counterpart artifacts and same-workload mentions (J-12), and the standing
convention for site-injected matter in a snapshot (J-14). That file's own reasoning governs: J-14
says outright it is held "only because no defect was demonstrated, so the bar for the applied subset
is not met", and J-7 says it should be decided *after* the Decision-A ordering question already
escalated to the maintainer. All five now carry recommendations in the interview's decision block.
The contested tag-vocabulary questions therefore remain where 0.10.15 left them, and these five join
them: with the dispositions interview.

## [0.10.15]

### Changed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,20 @@ A second publisher joins as a sibling profile file; engine extraction waits for
(2026-07); **re-verify per doc** — precedent, not a guarantee. Fallback: fetch the rendered
page and record the degradation.
- **Blog posts (`claude.com/blog/...`):** no raw-markdown channel known; fetch rendered and
extract. Record the channel used.
extract. Record the channel used. **Two extraction artifacts reproduce on this channel; record
them, never repair them** — `source.*` is immutable, so the fix belongs in whatever reads the
snapshot, not in the snapshot. (a) The animated hero heading collapses every space in the H1.
Reconstruct the title from the canonical URL slug, which the checklist already records — but the
slug recovers word boundaries only, never punctuation or casing
(`claude-models-explained-choosing-the-best-model-for-your-use-case` cannot yield the colon in
"Claude models explained: choosing the best model for your use case"), so a title recovered that
way is labelled reconstructed. When the run also retained the rendered HTML, that file's
`<title>`/`<h1>` carries the exact form — but nothing in the pipeline contracts such a file, so
it is a bonus, not the method. (b) The reading-time widget splits its value and its unit onto
separate physical lines, so neither line reads as a duration on its own. (Both observed
identically in two runs, at each slice's `source.md:7`:
`# Claudemodelsexplained:choosingthebestmodelforyourusecase` with the reading time at lines
83/87, and `# BuildingverificationloopsinClaudeCodewithskills` with it at lines 45/49.)
- **PDFs (model/system cards):** download the original binary as `source.pdf` plus a text
extraction as `source.txt`; both are originals, the extraction tooling is named in the
checklist.
Expand All @@ -38,8 +51,9 @@ the tag asserts:
without a live-doc check, is additionally recorded as `unverified-inference` and becomes an
interview question, never a silent fact. (This rule exists because inference has already produced a
wrong tag once — the failure mode is real.)
- **`api-only` (a negative claim — "no harness surface exists"):** absence cannot be proven from
one page. Record the basis (the harness doc section(s) checked, or `unverified-inference` when
- **`api-only` (a negative claim — "no harness surface exists" for the claim's own specific
assertion; see the near-miss rule below):** absence cannot be proven from one page. Record the
basis (the harness doc section(s) checked, or `unverified-inference` when
none was); a contested or load-bearing `api-only` tag escalates to the interview rather than
standing on an absence citation. **The basis records the exact command run and its raw result
count**, not a prose summary of what was checked — an attested zero is not a reproducible zero,
Expand All @@ -55,6 +69,17 @@ the tag asserts:
still the most-violated rule in that slice; the cost is documented, not hypothetical — an
undisclosed `settings.md:727` near-miss was exactly what the unread portion of a 199-line hit set
contained.)
- **What falsifies `api-only`, and what only comes close — written down once, because the whole
class of defects here is the boundary being re-derived per row.** `api-only` asserts no harness
surface for **the claim's own specific assertion**, so only the corpus documenting *that
assertion* falsifies it; topical overlap never does. Below that falsifying line sits the
**near-miss** — a harness page covers the row's subject without stating the row's specific rule.
The tag survives, the row MUST name the near-miss by page and line (the term this profile already
uses of `settings.md:727` above), and an affirmative "no surface" or "undisclosed" phrasing in
such a row is simply false and goes. Silence here was the largest MINOR class in the slice that
measured it: one release-notes unit disclosed 24 near-miss rows on its own, and two sibling units
in that slice raised the same boundary independently, one of them asking outright for a standing
notation so a reader can tell "no surface at all" from "adjacent surface exists".
- **`cc-applicable`/`mixed` boundary:** a claim that names an API surface (parameter, endpoint,
SDK call) tags `mixed` even when its guidance transfers to the harness; `cc-applicable` is
reserved for claims naming no API surface.
Expand Down