Inspiration

Most creators have published a number they misremembered. The research is usually already on the NAS, in the script folder and the saved PDFs, but checking a 20-minute recording against it means listening with a finger on the pause button. Cloud tools can transcribe, and chatbots can fact-check against the web, but neither sees the creator's own sources, and both want unreleased recordings uploaded. I wanted the NAS, which already holds both the recording and the research, to do the cross-check.

What it does

Said vs Sourced takes one recording and the folders that hold its research. It:

  • transcribes the recording on the NAS with timestamps and speaker labels;
  • lists every checkable claim (numbers, dates, names, quotes, comparisons) and lets you trim the list;
  • checks each claim against only your sources and marks it Supported, Rounded, Contradicted, Sources disagree, Not found or Not checked, with the quoted passage, file and page;
  • drafts replacement lines for re-recording, and builds a sources block for the description from the supported claims;
  • saves the fact check next to the recording only after you approve, and offers a "fact-checked" tag only when no contradiction is left open.

A recheck mode confirms the fixes after you re-record.

How it is built

It is a Uliya orchestration Skill: one SKILL.md plus three linked references (verdict rules, output format, disclosures), built with the official UGREEN Skill Kit. The parent Skill delegates to three registered NAS experts:

  • file-agent (ug-filesystem, ug-filemgr): finds the recording and sources, reads the duration, tags after approval;
  • knowledge-agent (ug-knowledge): transcription with timed segments, an evidence shortlist for large libraries, saving the fact check;
  • document-agent (ug-document): the claim check with quoted evidence, and drafting fixes.

Design choices: every instruction carries exact paths and claim text, because an expert sees only its own instruction. Each claim is checked separately with up to three passages, ten claims per batch, and libraries over 60 files are shortlisted first with one search per claim. If a video's soundtrack cannot be read, a matching SRT or VTT subtitle file can serve as the timed transcript. Untranscribed stretches over 30 seconds become "Not checked", so a silent failure never looks like a clean result. "Not found" means unsourced, never false. Nothing is written until the user approves.

Status and challenges

Built: the Skill package, which passes the official static checker with 0 errors and 0 warnings. It has not run on a NAS yet; Round 1 needs no NAS, and I will validate it on the finalist test day if selected. Open questions for that day: whether the transcription expert reads the soundtrack of video files (if not, the Skill uses a subtitle sidecar or asks for an audio export), whether it returns the transcript inline or as a file reference (both are handled), how precise the segment timestamps are, and how well the document expert separates Contradicted from Not found on real sources.

The hardest design problem was honesty. A fact-checker that guesses is worse than none, so every verdict needs a quoted passage returned by an expert, and a doubtful case always gets the weaker verdict.

What is next

  • Finalist day: a 10-minute talk with 10 planted errors among 30 claims, a two-speaker podcast, and a recording with an audio dropout, measuring how many planted errors are caught and how close the timecodes are.
  • A music-licence check for the same recording: which tracks have a licence on the NAS.
  • Rechecks that compare successive cuts of the same video.

Built With

  • claude
  • markdown
  • ug-document
  • ug-filemgr
  • ug-filesystem
  • ug-knowledge
  • ugos
Share this project:

Updates

Submission history