docs(knowledge): youtube-digest synthesis target + named agnosticism gaps#854
Conversation
…gaps (#558) Externalizes the synthesis step's implicit "the repo I'm in" assumption behind an explicit `--target <repo>` argument and a documented resolution ladder, and names two remaining corpus-durability gaps (landing sub-path shape, binary retention) as tracked follow-ups instead of leaving them silent. Scoped as the doc/prose surface of issue #558; the sub-path templating and retention-path code changes are deliberately parked (see PR body). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01K1V3gkrfSf75isB8MiDy3o
|
Claude finished @kyle-sexton's task in 2m 51s —— View job PR Review — docs(knowledge): youtube-digest synthesis target + named agnosticism gaps
SummaryThis is a clean, well-scoped doc-only PR. The synthesis-target seam is logically sound, the resolution ladder is coherent, the template substitutions are internally consistent, and the two corpus-durability gaps are honestly documented rather than left silent. No code-behavior changes, no secrets, no security surface. Passes all REVIEW.md "always check" items (N/A for this scope). Three 🟡 Nits below. None are blockers. Findings🟡 Nit —
🟡 Nit —
🟡 Nit — Resolution ladder
Positive notes
|
|
Claude finished @kyle-sexton's task in 1m 30s —— View job Security Review — PR #854
No security issues found. This PR is documentation-only — all six changed files are markdown prose (skill instructions, agent-fill templates, a changelog entry, and a semver bump in Checked surfaces:
One thing to watch when the |
|
Post-green review classification (work lane):
No DEFER-FORBIDDEN class applies (doc-only change, no executable surface). No inline review threads to resolve (PR-level comments only). Flipping to ready, handing off to the babysit lane for ongoing watch. |
|
Claude finished @kyle-sexton's task in 1m 55s —— View job PR Review — docs(knowledge): youtube-digest synthesis target + named agnosticism gaps
SummaryDoc-only, well-scoped, internally consistent. All CI gates pass; a prior Claude review found three nits, all classified non-blocking by the author and deliberately deferred — I've verified that assessment holds. Nothing here is a blocker. FindingsVersion bump — CHANGELOG.md — the 0.8.4 entry accurately names both changes (synthesis target ladder, two named gaps), calls out the doc-only constraint, and matches the diff precisely. Format is consistent with prior entries. SKILL.md — five coherent additions:
Templates — all three changes are internally consistent:
Prior nits (confirmed non-blocking, no action needed): The three nits from the earlier automated review ( VerdictNo blockers. Clean doc-only PR, well-scoped to the stated issue, passes all CI gates, and the prior review's nits are correctly classified as non-blocking polish. Ready to merge. |
|
Claude finished @kyle-sexton's task in 1m 23s —— View job Security Review — PR #854
No security issues found. This PR is documentation-only. All six changed files are markdown prose — skill instructions, agent-fill templates, a changelog entry, and a semver bump in Surfaces reviewed
Forward-looking note (not a finding in this PR)The new No GitHub Actions files, permissions, secrets, dependency pins, or MCP server configuration were touched. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e9ea9d404d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…st-corpus-durability # Conflicts: # plugins/knowledge/CHANGELOG.md
|
Claude finished @kyle-sexton's task in 2m 20s —— View job PR Review — docs(knowledge): youtube-digest synthesis target + named agnosticism gaps
SummaryDoc-only, well-scoped, internally consistent. Prior automated reviews (two PR reviews + two security reviews) were thorough and I agree with their verdicts. The Codex P2 finding (target persistence before synthesis) was correctly classified by the babysitter as valid-deferred; I've verified it and concur. No blockers. Findings✅ Version bump — ✅ CHANGELOG.md — The 0.8.4 entry names both changes accurately, calls out the doc-only constraint, and matches the diff precisely. ✅ SKILL.md — five additions are coherent:
✅ Templates — all three are internally consistent:
On the Codex P2 findingThe babysitter's classification is correct: valid gap, appropriately deferred. I verified:
This is not a blocker for this PR because VerdictNo blockers. This is a clean, honest doc-only change that names limitations instead of leaving consumers to discover them by hand, and sets up the synthesis-target seam correctly for when the code implementation follows. The three prior nits (deferred) and the Codex P2 (deferred, non-blocking for this doc surface) are all correctly classified. Ready to merge. |
|
Claude finished @kyle-sexton's task in 1m 48s —— View job Security Review — PR #854
No security issues found. All six changed files are documentation-only (markdown prose, agent-fill templates, a changelog entry, and a semver bump in Surfaces reviewed
Forward-looking note (not a finding in this PR)When |
…st-corpus-durability Resolves a second version-claim collision on plugins/knowledge (0.9.0 landed via #894 for the library_dir portable-value-forms feature); re-derives this branch's bump to 0.9.1, one past main's current claim.
|
Claude finished @kyle-sexton's task in 2m 1s —— View job PR Review — docs(knowledge): youtube-digest synthesis target + named agnosticism gaps
Trigger contextThis review fires on a SummaryDoc-only, clean, and internally consistent. All REVIEW.md "always check" items are N/A or PASS for this diff. Prior reviews (two PR reviews + two security reviews) reached the same verdict; I've re-verified the diff independently and concur. Findings✅ Version bump — ✅ CHANGELOG.md — The ✅ SKILL.md — five additions verified coherent:
✅ Templates — all three changes internally consistent:
✅ REVIEW.md "always check" criteria — all N/A or PASS: no handlers, no tenant data paths, no secrets, no string-concatenated inputs, no audit-log surface, no multi-record atomicity concern. This is prose-only. Prior open findings — status unchanged
No new findings introduced by this PR sync. VerdictNo blockers. Ready to merge. The only observable change since the prior reviews is |
|
Claude finished @kyle-sexton's task in 1m 21s —— View job Security Review — PR #854
No security issues found. All six changed files are documentation-only — markdown prose, agent-fill templates, a changelog entry, and a semver bump in Surfaces reviewed
Forward-looking note (not a finding in this PR)When No GitHub Actions files, workflow permissions, secrets, dependency pins, or MCP server configuration were touched. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a97d5aa14a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
This was generated by AI (decide lane — decision-brief pass; parked PR-thread decision surfaced via periodic scan). Decision brief — persist the synthesis Target durably (re: parked thread #discussion_r3624067559, which the babysit rescan verified and deferred to the author with no ruling) Problem
Today (verified at PR head
|
The temp-only gap caveat labeled contact sheets as OS-temp-only, but snapshot-bootstrap.js copies them into key-frames/contact-sheets/*.jpg as a gitignored, slice-local disaster-recovery snapshot that survives tempSession cleanup. Recovering the sheets does not require re-running acquisition. Reframe the genuinely-absent capability as committed, LFS-aware retention, and reconcile the twin operational note and the CHANGELOG entry with the documented artifact inventory.
|
Claude finished @kyle-sexton's task in 1m 45s —— View job PR Review — docs(knowledge): youtube-digest synthesis target + named agnosticism gaps
Trigger contextThis review fires on a SummaryThe new commit correctly resolves the outstanding Codex P2 finding. The rest of the PR is unchanged from the prior reviews, which found no blockers. Ready to merge. New commit analysis —
|
| Finding | Source | Status |
|---|---|---|
<repo> format undefined in --target <repo> |
PR review (🟡 Nit) | Deferred — non-blocking polish for --target implementation |
Resume section doesn't reference README.md's **Target:** recovery |
PR review (🟡 Nit) | Deferred — same |
Resolution-ladder → notation reads as sequence |
PR review (🟡 Nit) | Deferred — "readable with care" |
| Codex P2 — target persistence before synthesis | Codex + babysit | Deferred, non-blocking for doc-only surface — implement when --target gets code; write resolved target to watch.json at bootstrap and add a recovery step in the Resume section |
| Codex P2 — contact sheets mislabeled as temp-only | Codex | ✅ Resolved by 43b64b9 |
Verdict
No blockers. The Codex P2 contact-sheet finding is correctly and precisely resolved. The three-way distinction (working sheets in temp / gitignored DR snapshot in slice / committed LFS-aware retention as the unbuilt thing) is now internally consistent across preamble, operational note, and the Output contract. All prior reviews found this PR sound; nothing in this commit changes that assessment.
|
Claude finished @kyle-sexton's task in 1m 35s —— View job Security Review — PR #854
No security issues found. All six changed files are documentation-only — markdown prose, agent-fill templates, a changelog entry, and a semver bump in Surfaces reviewed
Forward-looking note (not a finding in this PR)When No GitHub Actions files, workflow permissions, secrets, dependency pins, or MCP server configuration were touched. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 43b64b92a8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
… --target resolution gap (#1027) ## Summary Two deferred codex-P2 follow-ups from the 2026-07-21 babysit verifier session on merged PR #854, both confined to `plugins/knowledge/skills/youtube-digest/`. Documentation / behavior-contract fixes; no open design fork. ## Fix **Site 1 — contact-sheet retention wording (`SKILL.md`, intro paragraph).** The line called the `key-frames/contact-sheets/` snapshot "temp-only handling," which contradicts the Output contract's characterization of the same directory (`key-frames/contact-sheets/*.jpg` → "local DR snapshot, gitignored"). Reworded `That temp-only handling is otherwise a fixed…` → `That never-committed handling is a fixed…`. The snapshot now reads as a durable-on-disk-but-gitignored **instance** of never-committed handling, not an exception to a temp-only rule — consistent with the same paragraph's own "durable on disk (it survives `tempSession` cleanup)" and with the Output contract. **Site 2 — `--target` local-checkout resolution gap (`SKILL.md`, "Synthesis target resolution").** `--target <repo>` resolved to a target *name* only, but `templates/synthesis-item.md`'s **Target touchpoints** field is grep-backed and needs a real tree. A `watch --target <repo>` from a separate corpus session (where the named repo isn't checked out) had no tree to grep and could fall through to `CLAUDE_PROJECT_DIR`/CWD or invent paths. Fixed by: - Requiring the target to resolve to a **local working tree on disk**, not merely a name. - Adding a loud-fail rung on the explicit-`--target` case: no local checkout → **halt and ask for the local checkout path**, never fall through to `CLAUDE_PROJECT_DIR`, grep CWD, or invent touchpoint paths. (Auto-clone is left to the future `/knowledge:apply` design, which is unbuilt; "resolve-or-halt" fully satisfies the acceptance without new clone infra.) - Recording the target's **portable name** in `README.md`'s `**Target:**` line (`templates/readme-journey.md` updated to match) so a later `resume` reads the name and re-runs the same rungs against it, halting on the same no-local-checkout rung rather than re-inferring a different target. The resolved checkout path stays session-local and deliberately does **not** enter that line: root `README.md` is `Staged: yes` in the Output contract, so an absolute local path there would leak a username/directory layout and be invalid for every other collaborator or CI checkout — the same portability posture as the skill's `{tmp}` tokenization of `run-state/watch.json`. Persisting the target through the extraction runtime (`WatchState` + `buildContinuationPrompt()`) is a code change tracked in #1356. Knowledge plugin `0.9.2` → `0.9.3` + top-inserted `CHANGELOG.md` entry. ## Verification Site 1 — the umbrella term now matches the Output contract; the file no longer buckets the snapshot as temp-only: ``` $ grep -n "temp-only" plugins/knowledge/skills/youtube-digest/SKILL.md (no matches) $ grep -n "never-committed handling" SKILL.md 19: ... but gitignored, so it is never committed (see the Output contract). That never-committed handling is a fixed, non-configurable part of this contract ... $ grep -n "local DR snapshot" SKILL.md 369: | key-frames/contact-sheets/*.jpg | ... | never in git | METADATA | script (snapshot-bootstrap.js; local DR snapshot, gitignored) | ``` Site 2 — resolution now names a local tree and a loud-fail path; `synthesis-item.md`'s grep-backed field has a tree to grep, and the recorded Target line carries a portable name (no machine-local path) for `resume`: ``` $ grep -n "local working tree on disk" SKILL.md 289: ... the target must resolve to a **local working tree on disk**, not merely a name ... $ grep -n "does \*\*not\*\* resolve — stop and ask" SKILL.md 289: ... has no local checkout ... 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 ... $ grep -n "Target touchpoints" plugins/knowledge/skills/youtube-digest/templates/synthesis-item.md 6: - **Target touchpoints:** {paths/headings in the resolved target — grep-backed} $ grep -n "Target:" plugins/knowledge/skills/youtube-digest/templates/readme-journey.md 9: **Target:** {resolved synthesis target — portable name only, never a local checkout path; SKILL.md "Synthesis target resolution"} ``` - `markdownlint-cli2` on all three changed markdown files → **0 errors**. - Commit is SSH-signed (verified `G`) per the org ruleset. Closes #1015 ## Related - #1015 — this issue (batched from the #657 triage sweep). - #854 — originating PR whose review deferred both findings as codex-P2 follow-ups. - #657 — triage-sweep source (T8h batch conversion) that folded the finding lines into #1015. - #1356 — follow-up filed from this PR's Codex review: persist the resolved `--target` in `WatchState` / `buildContinuationPrompt()` so `resume` recovers it without re-asking (runtime change, out of this PR's documentation scope). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01Mu8bLN896ia5AeWmGPqAUv Work-class: C3 (bug-fix-shaped) — attended triage 2026-07-23, operator-ratified. 🤖 --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Summary
youtube-digest's synthesis step assumed an implicit "the repo I'm in" as the applicability target, and two corpus-durability gaps (landing sub-path shape, binary retention) were unstated limitations rather than named, documented ones. This PR ships the doc/prose surface of issue #558's backlog: an explicit synthesis-target seam plus honest documentation of what remains unbuilt.Fix
--target <repo>argument to anywatchform, plus a documented resolution ladder inSKILL.md(explicit--target→ the consuming project when invoked directly, no separate corpus session → ask).templates/recommendations/menu.md,templates/synthesis-item.md, andtemplates/readme-journey.mdnow frame against{target}instead of assuming the invoking repo;README.md's new**Target:**line records whichever rung resolved it, so a laterresumenever has to re-infer it.recommendations/**reframed as ephemeral/target-bound. Documented as this skill's own terminal deliverable for the resolved target, expected to be superseded by the designed-but-unbuilt/knowledge:applyreport→diff→PR flow (docs/knowledge-integration-design.md) once that skill ships — a presence-gated forward pointer, not a functional dependency.library_dirrelocates the.work/<watch-epic>/<video-slug>/work root, not that sub-path's shape — a corpus consumer whose own convention differs (e.g.sources/<type>/<slug>/) doesn't get that today.knowledge0.8.3 → 0.8.4 with a matchingCHANGELOG.mdentry.Doc-only —
extraction/**is untouched; nothing parses--targetor the renamed template fields yet (this is agent-followed prose, consistent with the rest of the skill's argument-routing style, same as every other action-router entry).Related
Parked, not addressed here — each requires a real code change, not a doc change:
.work/<watch-epic>/<video-slug>/swappable for a differently-shaped consumer convention (e.g.sources/<type>/<slug>/) means centralizing that literal path construction, which is currently scattered across ~10 extraction scripts (run-watch.js,watch-state.js,queue-claim.js, transcript scripts, etc.), not justSKILL.md. Open design call on the seam's shape (newuserConfigtemplate string? a tracked-convention file, per the plugin philosophy's four config seams?) plus a real refactor. Tracked in knowledge/youtube-digest: centralize .work/<epic>/<slug> sub-path shape + binary-retention landing — deferred from #558 #856..gitattributesawareness threads through), not a prose fix. Open design call. Tracked in knowledge/youtube-digest: centralize .work/<epic>/<slug> sub-path shape + binary-retention landing — deferred from #558 #856./knowledge:applyitself. Already fully speced indocs/knowledge-integration-design.md(wave-2 map, sub-issueimplement(knowledge-integration)) — unbuilt, out of scope here by design; this PR only makesyoutube-digestready to hand its menu to that skill once it exists..gitattributesLFS gaps, pre-LFS epub blobs) belongs tomelodic-software/knowledge-corpus, not this repo — tracked in the issue for visibility only.Closes #558
Verification
bash scripts/check-changelog-parity.sh --check— passbash scripts/check-changelog-parity.sh --check-bump origin/main— passnode scripts/validate-plugin-contracts.mjs— pass (1900 files, 35 setup skills)bash scripts/check-skill-portability.sh origin/main— pass (no unexcused coupling tokens)check-skill.sh youtube-digest) — PASS, 0 errors (SKILL.md 408/500 lines, within the hard cap)markdownlint-cli2on all changed markdown — 0 errors**Target:**line toreadme-journey.md; remaining SUGGESTIONS (terminology consistency, action-router table shape) addressed inline