Canonical cite-sources skill: citation requirements by provenance (book/vault/web), verification of external sources cited in drafts, and web fact-checks of existing vault notes. Prevents circular verification via WebFetch, enforces evidence tiers, defines the dated-correction convention, and pairs with a pre-write lint intake gate. Trigger keywords: cite sources, cite-sources, citation requirements, verify sources, fact-check, cited claim, publication ready, source URL, WebFetch verification, dead link, rectify inaccuracies.
Installation
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Live primary source (paper/DOI, author's post, book+page) — URL visited directly by user, not just WebFetch
Cite with confidence
2
Live credible secondary (news, podcast+timestamp)
Cite as "as reported by"
3
Single offline secondary (Wayback Machine archive exists)
Cite with archive link, flag
4
Unverifiable (dead source, no archive, WebFetch-only)
Cut or rewrite without attribution
Verification Protocol
Classify: Primary vs. secondary? URL live?
Cross-reference: Appears in 2+ independent sources? Flag single-source as fragile. For a captured case/story, don't stop at flagging: when a well-known parallel account exists (a second vendor's account, an interview, a paper), fetch and cite that corroborating primary too. (Origin: 2026-07-16 capture calibration — 0/4 cold-tier runs added the known interview corroboration to a vendor's self-account of its own product pivot; the premium run did.)
WebFetch check: WebFetch generates plausible content for dead/paywalled pages. If output contained no info you did NOT already know, treat as Tier 4 unverified.
Quote exactness: Confirm exact wording from live source.
Mine the full primary, not just the famous line. When the anchor is a paper or book chapter whose full text is legitimately accessible, read the FULL text before writing — if the canonical host is paywalled or 403s (ACM/DOI), hunt an accessible mirror (university course pages routinely host classic PDFs) rather than settling for the abstract or secondary summaries. Foundational texts usually contain statements bearing on your thesis beyond the one claim everyone quotes; those are the catches that differentiate a capture. Subject to the step-3 WebFetch caveat. (Origin: 2026-07-16 capture calibration — the premium run's differentiating catch, Codd 1970 §1.2.2 "an index is a redundant component of the data representation", came only from reading the paper end-to-end via a course-page mirror after the ACM 403; 0/4 cold-tier runs that faced this anchor (sonnet + haiku, two rounds) hunted a mirror, and none surfaced any in-paper statement beyond the famous normalization claim.)
Pin the edition when citing numbered book units. Tip/chapter/topic numbers renumber across editions (The Pragmatic Programmer: Tip 20 in the 1999 1st ed = Tip 25 in the 2019 20th Anniversary ed). Verify the number against the publisher's canonical current-edition page and name the edition inline in the citation — a number cited without its edition is unverifiable. (Origin: 2026-07-16 capture calibration — one cold run cited the 20th Anniversary Edition while verifying the tip number against a 1st-edition summary; the publisher's own tips page resolves it in one fetch.)
X/Twitter status verification (WebFetch fails on x.com)
Direct WebFetch/curl of x.com/<handle>/status/<id> returns 402/blocked — a fetch failure there is NOT evidence the post is dead. Two mechanical routes:
Content: https://api.fxtwitter.com/<handle>/status/<id> returns the tweet JSON (.tweet.text, plus .tweet.thread when present). Treat a match as Tier-2 wording confirmation; Tier 1 still requires the user visiting the real URL. An empty thread array is evidence a claimed thread-only detail has no live source.
Post DATE, no fetch at all: the status ID is a snowflake — (id >> 22) + 1288834974657 = ms since Unix epoch, UTC. Cite tweet dates from this, never from an archive's saved_at/updated_at fields. (Origin 2026-07-14: two note footers carried the read-later archive's saved date, both off by one day from the snowflake-derived post date.)
Status semantics: VERIFIED means independently confirmed — never merely "the cited page asserts it". A practitioner blog repeating a number is evidence that the blog says it, not that it is true; log source states X when that is all you have. (Origin: 2026-07-16 capture calibration — a cold-tier log stamped "Verified" on unnamed-customer cost figures from a Medium post and a competing vendor's pricing blog.)
Citation Requirements by Provenance (vault notes)
What a note's source: field and Source footer must carry depends on where the content came from. Enforce at write time with a pre-write lint gate.
Provenance
Required citation
Book synthesis
[[Book]] wikilink + chapter: field + visible body footer (enforce via your lint gate)
Vault-internal synthesis
[[wikilinks]] to the actual source notes/documents — a bare topic-folder link is weak; link the specific notes
Full https:// URL — a domain name is not a citation; the claim must be re-verifiable (REQUIRE_URL=1)
Conversation/original thought
Say so explicitly ("Conversation YYYY-MM-DD" + any seed link) — never the [[TODO - add source]] placeholder
Backfilling sources onto EXISTING notes is a separate backfill workflow.
Vault Note Fact-Check (existing notes)
For "fact-check this note" / "rectify inaccuracies" requests on a note already in the vault:
Read the note; rank claims by load — the claim other notes or decisions hang on (a designer attribution, a date, a who-did-what) gets web verification first; trivia can ride on model knowledge.
Verify against primary sources — the subject's own site/portfolio beats aggregators. Quote the exact sentence in your findings.
Findings before fixes — present ❌ false / ✅ verified / ⚠️ imprecise with sources; edit only on the user's go (or an explicit "rectify" instruction).
Correct with a dated correction block, never silently — keep the false claim visible as corrected: **Correction (YYYY-MM-DD, web fact-check)**: An earlier version claimed X. False — Y, per <sources>. Silent rewrites destroy the record that the vault once asserted X.
Update the Source footer with FULL URLs — append fact-checked and corrected YYYY-MM-DD against: followed by a bullet per source: the complete URL plus the key fact it supports (quote the load-bearing sentence for the primary source). Domain names alone are not citations — the whole point of the web check is that the claim becomes re-verifiable, and a bare domain can't be re-verified.
Grep for propagation — synthesis batches share false claims across sibling notes. git grep -il the key entities; fix every copy in the same pass. Fabricated citations (a "source" naming the false fact) get removed, named in the correction block.
Scoped commits — explicit pathspec per the commit skill; reference the first correction commit from the propagation commit.
Watch for the conversational-synthesis signature: plausible-but-wrong specifics (dates, places, attributions) plus an invented citation that "supports" them. A note authored as "research synthesis" from a chat, with no URL in its Source field, is unverified by default.
Source Overreach Spot-Check (note exceeds a correctly-cited source)
A different failure from fact-check: the source: is right and the claim isn't web-false — but the atomic note asserts far more than the source supports. Trigger: "cite the source," "spot-check for overreach," or reviewing thin-sourced synthesis.
Trace the full chain to the real origin — atomic note → source: note (often a your read-later archive doc) → its frontmatter author + source_url. Cite to the external origin (author, platform, URL, saved date), not the intermediate vault note.
Read the actual source content — the source's BODY, never an archive doc's own summary layers. If the intermediate archive doc carries a Progressive Summary (or any synthesized executive-summary block) above the original content, verify claims against the original content below it: the summary is itself synthesis and can overreach the body it sits on, and a note verified against the summary inherits that overreach. When a doc's summary and body contradict each other, the body wins — surface the contradiction. (Origin 2026-07-13/14: an archive doc's L3 summary said "4 declassified tradecraft techniques" while its own body attributed only 2 to that source; a premium pass and a Sonnet agent caught it from the body, a Haiku agent verified against the summary and certified the defective note CLEAN.) Attribution-scope sub-check (mechanical): when the note credits N enumerated items to one named authority (" names the techniques: A, B, C, D"), check each item INDIVIDUALLY against the body's own enumeration of what that authority contains — confirming that all N items appear in the source is not the check; the check is whether the source ties each item to that authority. A partial-attribution lead-in over a mixed list is the failure shape, and it survives reviewers who quote the body but never compare the lists item-by-item (failed cheap-tier transfer 2026-07-14: the reviewer cited body lines yet scored the mixed list "all four match"; the mechanical rewording ALSO failed at the cheapest tier 2026-07-15 — a byte-identical variance pair both certified the defective note CLEAN, one even scoring the true per-item attributions correctly in adjacent claims without noticing they contradicted the note's lead-in). This check does not transfer to the cheapest model tier (four samples, two wordings, zero catches; a mid-tier reviewer caught the same defect unaided) — route absorption-shaped attribution defects to a mid-tier-or-above reviewer; do not treat a cheapest-tier CLEAN as clearing this class. Then compare the note's claims to what the source literally says. Flag these overreach classes:
Fabricated metric — a number the source never stated (e.g. note says "18× speedup" when the tweet said only "4 hours vs 3 days" — ≈6× on a workday basis).
Confabulated gloss — an invented explanation of a term/metaphor the source used but never defined (e.g. a "Gas Town = fuel/road" reading the source never gave).
Invented scaling law / mechanism — "X scales with Y" claims absent from the source.
Unsupported predictions/prescriptions — "the industry will…", tooling recommendations, not in the source.
Over-dignified anecdote — calling a hype-account's third-hand story "the documented case."
Severity correlates inversely with source substance. A two-sentence tweet expanded into a named "pattern" with evidence bullets and implications is almost entirely fabricated scaffolding; a substantial multi-paragraph source leaves little room for overreach. The thinner the source, the harder the spot-check.
Remediate by class: source-scope overreach → non-destructive blockquote caveat naming exactly which claims exceed the source (preserve the synthesis, don't gut it: > *Source caveat: …*). Outright factual error (wrong affiliation, misattributed quote) → fix inline. Never silently rewrite.
High-prior flag: a thin AI-compilation source — a tweet, or a Perplexity / AI-search answer (often citing secondary media + commercial pages) — expect the note to assert confident domain claims beyond it. Strongest when the note also carries a synthesized_by: field naming an automated synthesis agent. Health/clinical notes raise the stakes: flag diagnostic claims [Unverified] against the source. Candidate broad sweep when reviewing that cohort.
Faithful ≠ reliable — also judge the source's standing, not just fidelity. A note can paraphrase its source perfectly and still mislead, because the source itself is unreliable: a vendor/creator promoting their own product, or an unfalsifiable forecast ("the next wave," "the skills that matter most next") presented as established insight. The overreach checks above miss this — the claims do trace to the source. Catch it by asking: who is the author and what are they selling? is the claim testable, or just a confident prediction? The fix differs from overreach — caveat the source's nature (interested party / speculation); the note body can stay accurate. Two distinct failure modes, then: note overreaches source (caveat the note) vs note faithfully transcribes an unreliable source (caveat the source).
A third failure mode, distinct from the two above: the quoted words are authentic but the attribution is false. The note faithfully transcribes a real saying — the problem is who it is pinned on. Not an overreach (the note does not exceed the quote) and not an unreliable source (the words are genuine). Trigger: a note cites a punchy aphorism attributed to a named historical / religious / famous figure, especially one captured from social media or a screenshot/image — those carry false attributions at high frequency (the internet's fake-quote economy).
Verify the ATTRIBUTION, not just the wording. Search the quote in quotes plus the claimed author, and read the skeptical hits first: fake-quote scholarship (e.g. roger-pearse.com for patristics), Wikiquote "Misattributed" sections, Goodreads/Quote Investigator misattribution flags. A saying can be real and ancient while the named speaker is a modern invention.
Two independent sources before accepting OR rejecting an attribution — a single quote-site is Tier 4. Confirm the real origin (collection, work, page) and any secondary figures it also circulates under.
Watch the compound error. A false attribution usually drags a false descriptor with it (tradition, era, nationality, religion). Verify those too — they are stated as fact and derived notes inherit them.
Remediate with a dated correction block, never a silent reattribution (Vault Note Fact-Check §4): keep the false claim visible as corrected, cite the skeptical source URL, quote the authentic wording. Reattribute in-body across the whole cluster — one image/quote often seeds N derived notes.
Propagation is wider than the folder. A load-bearing quote leaks into published articles and their drafts. git grep -il the quote AND the figure's name vault-wide; fix live notes + the published piece.