Skip to content

youtube-digest: externalize hardcoded assumptions + reconcile corpus durability (agnosticism + retention + synthesis split) #558

Description

@kyle-sexton

Priority: low. youtube-digest is a low-priority skill relative to the rest of the repo. Filed as one consolidated issue per owner preference. Surfaced during the first real run landing artifacts in the dedicated melodic-software/knowledge-corpus repo (video aVO6E181cNU). That run worked around every item below by hand, so nothing here blocks use today — it's the codification backlog to make the skill drop-in-agnostic and corpus-native.

A. Agnosticism — externalize hardcoded assumptions to userConfig / setup (four seams + resolution ladder)

Per docs/PLUGIN-PHILOSOPHY.md + docs/MIGRATION-PLAYBOOK.md, no consumer layout may be baked in.

  • Landing layout is hardcoded to .work/<watch-epic>/<video-slug>/. A corpus consumer's convention is sources/<type>/<slug>/ (see the corpus repo README). Landing path should be resolvable via a documented consumer seam, not fixed in the skill.
  • Synthesis target is hardcoded to a single repo — templates/recommendations/menu.md bakes Prioritized menu for **{repo name}** and synthesis-item.md assumes one grep-bound repo. Should be a per-invocation --target argument (aligns with the /knowledge:apply design), not an implicit "the repo I'm in."
  • General sweep for any other baked path/repo/OS assumptions while here (skill logic itself is otherwise env-driven and clean).

B. Durability / corpus-fit

  • Raw video, bulk frames, and contact sheets are discarded as "OS temp / never in repo" (SKILL.md Output contract; run-watch.js temp handling). A corpus wants them retained (the corpus README makes source video the durable substrate for re-runnable synthesis). Add a retention path; land binaries where the consumer's .gitattributes LFS-tracks them.
  • .work/ collides with the corpus's durable tier. .work/ is the topic-docs never-committed scratch tier, yet ingest-to-corpus needs a committable location (sources/youtube/<slug>/). Reconcile.
  • No commit / LFS awareness — the skill never commits and its contact-sheet .gitignore *.jpg + "Staged: yes" contract assume plain git; under a corpus with LFS-tracked binaries this silently excludes/misroutes.
  • SKILL.md self-contradiction (~line 36): the .work/ root "self-ignores (a .gitignore containing *) and is never committed" vs the Output-contract table marking ~35 artifacts Staged: yes. The lone-* ignore is unimplemented prose (only snapshot-bootstrap.js writes *.jpg). Pick one and make the docs consistent.

C. Synthesis split (aligns with an already-decided design)

docs/knowledge-integration-design.md routes repo-applicability recommendations to the target repo (report→diff→PR), not the corpus; the retarget capability is the unbuilt /knowledge:apply (implement(knowledge-integration) under wave-2 map #1369). youtube-digest still persists recommendations/** into the slice as a durable graded deliverable. It should treat synthesis as ephemeral / target-bound and defer to /knowledge:apply, keeping the corpus a bias-free source-of-record.

D. Cross-repo note (belongs to melodic-software/knowledge-corpus, not this repo)

Corpus .gitattributes LFS globs miss mkv (yt-dlp can merge to it), pptx/key (decks), and webp. Also the pre-existing Pat Pattison epubs were committed before .gitattributes and are pre-LFS blobs (needs git lfs migrate). Tracking here only for visibility.

Acceptance sketch

Landing path, retention policy, and synthesis target all configurable via the four seams + the setup skill's check/apply; no baked repo/layout; SKILL.md internally consistent; synthesis deferred to /knowledge:apply. Everything drop-in for a stranger's repo (including a non-repo temp folder when they don't want it checked in).

Metadata

Metadata

Assignees

Labels

priority: lowNice-to-have, cosmetic, or speculative; opportunistic.status: readyTriaged, unblocked, and fully specified; eligible to pick up.

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions