Promote to canonical source: one command turns a footnote into a source you keep
For the few sources worth keeping, Cite Wide now saves the PDF, imports the text, and writes a complete citation record.
Promote to canonical source: one command turns a footnote into a source you keep
Why Care?
A research memo can cite forty sources. Most are passing references. A handful matter for years: the industry report everyone quotes, the book that frames the argument. Until now, Cite Wide saved all forty the same thin way, a footnote line and a URL. When the publisher moved the report, or took it down, the link was all you had.
Promote to canonical source is for the handful. Put the cursor on the footnote, run the command, and Cite Wide builds a complete record: who wrote it, who published it, when, what kind of thing it is. It saves the PDF into your vault and imports the text as markdown, so the source stays readable, searchable, and quotable even if the original disappears.
What's New?
A new command: Promote to canonical source. It works from an inline
[^id]or from its definition line.Metadata from the source itself. Cite Wide reads the page's Open Graph, article, and scholarly
citation_*tags, so a five-author paper keeps all five authors. When those leave the title or authors empty, it asks Jina Reader.You confirm before anything is written. A modal shows title, subtitle, authors, date published, publisher, publication type, and URL, all editable.
The source, captured. PDFs, EPUBs, and Office files are saved to
Citations/_files/. The text is imported as markdown toCitations/_text/, with a link back to the citation. It's on by default and can be switched off per promotion.A canonical record that's safe to re-run. Promoting again refreshes the details, but the source's identity (
internal_uuid), its original URL, and the date you added it never change.
How it works
The State of the OpenCloud 2021 report is cited in the vault as:
[^80nyxu]: 2021, Nov. ["State of the OpenCloud 2021"](https://www.scribd.com/document/536774580/...). Scribd. Battery Ventures. Promotion gathers what's knowable without AI, in this order:
The footnote. The parser reads Lossless house style: date, authors, linked or quoted title, publisher. It knows "Scribd" is just the host of a
scribd.comURL, so it picks Battery Ventures as the publisher, and it doesn't take the "2021" in a title for the date.The existing light file, if
Citations/80nyxu.mdexists. Its properties, usage count, andfilesUsedInare kept.Tier 1: the page's
<meta>tags. One GET, with a 10-second limit.Tier 2: Jina Reader, only if tier 1 left the title or authors empty.
When sources disagree, the modal's starting values favor, in order: what you confirmed last time, scholarly citation_* tags, the footnote, generic page tags, then Jina. Footnotes beat og:title because a person wrote them, and og:title is often decorated (Scribd's reads "… | PDF").
Under the Hood
Tier 1 is a copy of Metafetch's extractor, not an import, because each Lossless plugin ships standalone. It's credited in
src/services/directFetchService.ts. Cite Wide's copy addscitation_title,citation_publisher, ascholarlyflag, and the response's content type, and skips HTML parsing when the response is a PDF or Office file.The fields written follow
context-v/blueprints/Lossless-Citation-Standards.md:canonical: true,internal_uuid(a v4 UUID fromcrypto.randomUUID()),reference_hexcode,default_slug,title,subtitle,authors,date_published(partial ISO:2021-11is fine),publisher,publisher_url,publication_type,first_accessed_at_url,date_added,date_recently_accessed,piece_og_image,publisher_favicon_url,cited_in_files,downloaded_content_path, andsource_text_path. Every light-format key stays, so the Dataview queries inexamples/keep working.source_text_pathis new to the standard. It points at the markdown text, which is distinct fromstructured_data_path's JSON.Writes go through
processFrontMatter. An existing citation file keeps its body.Tests first. 44 new tests ran red before the services existed: footnote parsing on real vault lines, the extractor (multi-author, both attribute orders, entities, favicon), both tiers, PDF capture, the Jina-failure path, and the frontmatter rules. They all run under Node with a stubbed
requestUrland no network.pnpm test: 59 pass.
What's Next
Operator check in Obsidian: promote
[^80nyxu]inVocabulary/Open Source Software.mdand inspectCitations/80nyxu.md,_files/, and_text/.Phase 2, the enrichment agent, is specified but not built: a separate "Enrich canonical source" command that summarizes the source and links and tags it, preferring the notes and tags the vault already has.