Context
Deferred scope from #558 ("youtube-digest: externalize hardcoded assumptions + reconcile corpus durability"), split out in #854. #854 shipped the doc/prose surface of #558 (synthesis-target --target argument, ephemeral/target-bound reframe, named-not-silent gap callouts). This issue tracks the two remaining items from #558 that require actual code changes, not documentation:
A. Landing sub-path shape
library_dir (existing userConfig seam) relocates the .work/<watch-epic>/<video-slug>/ work root, but the sub-path's shape is a literal hardcoded across roughly ten extraction scripts — run-watch.js, watch-state.js, queue-claim.js, run-transcript.js, derive-video-slug.js, preflight-metadata.js, and others under plugins/knowledge/skills/youtube-digest/extraction/. A corpus consumer whose own convention is sources/<type>/<slug>/ (see the melodic-software/knowledge-corpus README) cannot get that shape today; the shape is not represented as a single value anywhere, so there's no single seam to make configurable without first centralizing the path construction.
Open design call before implementation: what seam represents the shape (a new userConfig template string with {epic}/{slug} placeholders? a tracked-convention file the skill reads per the plugin philosophy's four config seams?), and whether centralizing the ~10 call sites is a pure refactor or needs test updates per site.
B. Binary retention (raw video / bulk frames / contact sheets)
Raw video, bulk frames, and contact sheets are OS-temp-only by design (never land in the repo) — the video-digest slice convention's rationale is reproducibility over storage cost. A corpus consumer wants these retained as a durable, re-runnable synthesis substrate (the corpus README makes source video the durable substrate). This needs:
- A retention trigger/policy (opt-in via a new seam, presumably
userConfig or the same shape-convention file from item A).
- LFS-aware landing: where binaries land, and how the pipeline behaves when the consumer's
.gitattributes LFS-tracks them vs. plain git.
- Reconciling
.work/'s "never-committed scratch" framing (per the topic-docs convention) against a committable sources/youtube/<slug>/ location for these specific binaries, without breaking the existing slice's other durable-but-plain-git artifacts.
Open design call before implementation: retention is presumably opt-in (default stays temp-only, preserving today's zero-config behavior per the plugin philosophy's "non-conflicting good-practice defaults" lane), but the trigger mechanism and LFS-detection logic are unspecified.
Out of scope (tracked elsewhere)
Section D of #558 (corpus .gitattributes LFS gaps, pre-LFS epub blobs) belongs to melodic-software/knowledge-corpus, not this repo.
Acceptance sketch
Context
Deferred scope from #558 ("youtube-digest: externalize hardcoded assumptions + reconcile corpus durability"), split out in #854. #854 shipped the doc/prose surface of #558 (synthesis-target
--targetargument, ephemeral/target-bound reframe, named-not-silent gap callouts). This issue tracks the two remaining items from #558 that require actual code changes, not documentation:A. Landing sub-path shape
library_dir(existinguserConfigseam) relocates the.work/<watch-epic>/<video-slug>/work root, but the sub-path's shape is a literal hardcoded across roughly ten extraction scripts —run-watch.js,watch-state.js,queue-claim.js,run-transcript.js,derive-video-slug.js,preflight-metadata.js, and others underplugins/knowledge/skills/youtube-digest/extraction/. A corpus consumer whose own convention issources/<type>/<slug>/(see themelodic-software/knowledge-corpusREADME) cannot get that shape today; the shape is not represented as a single value anywhere, so there's no single seam to make configurable without first centralizing the path construction.Open design call before implementation: what seam represents the shape (a new
userConfigtemplate string with{epic}/{slug}placeholders? a tracked-convention file the skill reads per the plugin philosophy's four config seams?), and whether centralizing the ~10 call sites is a pure refactor or needs test updates per site.B. Binary retention (raw video / bulk frames / contact sheets)
Raw video, bulk frames, and contact sheets are OS-temp-only by design (never land in the repo) — the video-digest slice convention's rationale is reproducibility over storage cost. A corpus consumer wants these retained as a durable, re-runnable synthesis substrate (the corpus README makes source video the durable substrate). This needs:
userConfigor the same shape-convention file from item A)..gitattributesLFS-tracks them vs. plain git..work/'s "never-committed scratch" framing (per the topic-docs convention) against a committablesources/youtube/<slug>/location for these specific binaries, without breaking the existing slice's other durable-but-plain-git artifacts.Open design call before implementation: retention is presumably opt-in (default stays temp-only, preserving today's zero-config behavior per the plugin philosophy's "non-conflicting good-practice defaults" lane), but the trigger mechanism and LFS-detection logic are unspecified.
Out of scope (tracked elsewhere)
Section D of #558 (corpus
.gitattributesLFS gaps, pre-LFS epub blobs) belongs tomelodic-software/knowledge-corpus, not this repo.Acceptance sketch
library_dirand the new seam compose without a split-root bug (see docs(knowledge): youtube-digest synthesis target + named agnosticism gaps #854's "share the same root" discipline forlibrary_diras the pattern to extend, not duplicate)..gitattributesrequires it.SKILL.md's two "tracked follow-up, not yet built" callouts (added in docs(knowledge): youtube-digest synthesis target + named agnosticism gaps #854) are resolved or narrowed once this lands.