Skip to content
Draft
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.9.2",
"version": "0.9.3",
"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), and a course-digest pipeline (extract and synthesize online video courses — Dometrain, Teachable — into repo-applicable recommendations), 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
17 changes: 17 additions & 0 deletions plugins/knowledge/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,23 @@ 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.9.3]

### Fixed

- **youtube-digest: contact-sheet retention wording + `--target` resolution gap**
(#1015): the intro paragraph called the `key-frames/contact-sheets/` snapshot
"temp-only handling," contradicting the Output contract's "local DR snapshot,
gitignored" characterization of the same directory; reworded to "never-committed
handling" so the snapshot reads as a durable-on-disk-but-gitignored instance, not
temp state. `--target <repo>` resolution now requires a **local working tree on
disk** (not just a name) because `templates/synthesis-item.md`'s grep-backed
**Target touchpoints** need a tree to grep; an explicit `--target` with no local
checkout now halts and asks for its path instead of falling through to
`CLAUDE_PROJECT_DIR`/CWD or inventing paths, and both the target name and its
resolved local tree path are recorded in `README.md`'s `**Target:**` line so
`resume` re-greps the same tree.

## [0.9.2]

### Fixed
Expand Down
4 changes: 2 additions & 2 deletions plugins/knowledge/skills/youtube-digest/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ ImageMagick: !`magick -version 2>/dev/null | head -1 || echo "MISSING — instal

# YouTube

Absorb a single public YouTube video (transcript + visual frames), harvest reference links, fact-check claims through deeper external research, and produce a prioritized repo-applicability menu. Video download, bulk frames, working contact sheets, and shallow git clones use the OS temp directory — durable artifacts live under `.work/<watch-epic>/<video-slug>/` per the video-digest slice convention. One contact-sheet exception: `snapshot-bootstrap.js` copies the sheets into the slice at `key-frames/contact-sheets/*.jpg` as a **local disaster-recovery snapshot** — durable on disk (it survives `tempSession` cleanup, so recovering the sheets does not require re-running acquisition) but gitignored, so it is never committed (see the Output contract). That temp-only handling is otherwise a fixed, non-configurable part of this contract: a consumer that wants the source video, bulk frames, or contact sheets retained as a **committed**, re-runnable substrate (rather than regenerable temp state or a gitignored local snapshot) does not get that from this skill today — a documented, LFS-aware retention path is a tracked follow-up, not yet built.
Absorb a single public YouTube video (transcript + visual frames), harvest reference links, fact-check claims through deeper external research, and produce a prioritized repo-applicability menu. Video download, bulk frames, working contact sheets, and shallow git clones use the OS temp directory — durable artifacts live under `.work/<watch-epic>/<video-slug>/` per the video-digest slice convention. One contact-sheet exception: `snapshot-bootstrap.js` copies the sheets into the slice at `key-frames/contact-sheets/*.jpg` as a **local disaster-recovery snapshot** — durable on disk (it survives `tempSession` cleanup, so recovering the sheets does not require re-running acquisition) but gitignored, so it is never committed (see the Output contract). That never-committed handling is a fixed, non-configurable part of this contract: a consumer that wants the source video, bulk frames, or contact sheets retained as a **committed**, re-runnable substrate (rather than regenerable temp state or a gitignored local snapshot) does not get that from this skill today — a documented, LFS-aware retention path is a tracked follow-up, not yet built.

Where this skill says "deeper research," use whatever external-research capability your project provides — for example the discovery plugin's `/discovery:research` / `/discovery:research-deep` when installed. Treat those as the reference implementation, not a hard dependency.

Expand Down Expand Up @@ -286,7 +286,7 @@ node "${CLAUDE_PLUGIN_ROOT}/skills/youtube-digest/extraction/run.mjs" evals/chec

1. **Synthesis** (after research gate) — template: `templates/synthesis-item.md`

**Synthesis target resolution** — every menu item and `templates/readme-journey.md`'s TLDR are framed against one resolved target, never an implicit "the repo I'm in": explicit `--target <repo>` argument → the consuming project (`CLAUDE_PROJECT_DIR`) when `watch` is invoked directly inside a repo, with no separate corpus session → ask. Whichever rung resolves it, record the target name in `README.md`'s `**Target:**` line (`templates/readme-journey.md`) so a later `resume` or downstream consumer never has to re-infer it. This aligns with (but does not depend on) the `/knowledge:apply` design (`docs/knowledge-integration-design.md`), which will eventually take over repo-fitting via its own `--target` argument from a corpus session; when that skill is installed and built, prefer it for cross-repo fitting and treat this skill's menu as its input, not a replacement.
**Synthesis target resolution** — every menu item and `templates/readme-journey.md`'s TLDR are framed against one resolved target, never an implicit "the repo I'm in". Because `templates/synthesis-item.md`'s **Target touchpoints** are grep-backed, the target must resolve to a **local working tree on disk**, not merely a name: explicit `--target <repo>`, resolved to a local checkout of that repo → the consuming project (`CLAUDE_PROJECT_DIR`) when `watch` runs directly inside a repo, with no separate corpus session → ask. An explicit `--target <repo>` that has no local checkout (e.g. run from a separate corpus session where that repo isn't cloned locally) does **not** resolve — stop and ask for its local checkout path rather than falling through to `CLAUDE_PROJECT_DIR`, grepping the current directory, or inventing touchpoint paths. Whichever rung resolves it, record both the target name and its resolved local tree path in `README.md`'s `**Target:**` line (`templates/readme-journey.md`) so a later `resume` or downstream consumer re-greps the same tree instead of re-inferring it. This aligns with (but does not depend on) the `/knowledge:apply` design (`docs/knowledge-integration-design.md`), which will eventually take over repo-fitting via its own `--target` argument from a corpus session (auto-cloning the resolved repo); when that skill is installed and built, prefer it for cross-repo fitting and treat this skill's menu as its input, not a replacement.

- Materialize `recommendations/` from `templates/recommendations/` (hub README links all docs)
- `recommendations/menu.md` — categories: `immediate-takeaway` | `worth-investigating` | `poc-candidate` | `full-slice` | `no-go`; P0–P2 + consensus notes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ updated: YYYY-MM-DDTHH:MM:SSZ

# {Video Title}

**Target:** {resolved synthesis target — SKILL.md "Synthesis target resolution"}
**Target:** {resolved synthesis target — name + local tree path; SKILL.md "Synthesis target resolution"}

## TLDR

Expand Down
Loading