cite-wide 0.3.0

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 to Citations/_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:

MARKDOWN
[^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:

  1. 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.com URL, so it picks Battery Ventures as the publisher, and it doesn't take the "2021" in a title for the date.

  2. The existing light file, if Citations/80nyxu.md exists. Its properties, usage count, and filesUsedIn are kept.

  3. Tier 1: the page's <meta> tags. One GET, with a 10-second limit.

  4. 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 adds citation_title, citation_publisher, a scholarly flag, 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 from crypto.randomUUID()), reference_hexcode, default_slug, title, subtitle, authors, date_published (partial ISO: 2021-11 is 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, and source_text_path. Every light-format key stays, so the Dataview queries in examples/ keep working.

  • source_text_path is new to the standard. It points at the markdown text, which is distinct from structured_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 requestUrl and no network. pnpm test: 59 pass.

What's Next

  • Operator check in Obsidian: promote [^80nyxu] in Vocabulary/Open Source Software.md and inspect Citations/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.