Skip to content

knowledge/youtube-digest: centralize .work/<epic>/<slug> sub-path shape + binary-retention landing — deferred from #558 #856

Description

@kyle-sexton

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    automatedOpened by automation.needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.priority: mediumReal value, no hard deadline; normal backlog flow.wayfind: designWayfind decision item: design-space or domain-model decision; human in the loop.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions