Quartz Public Site — TODO

Working list for improving the news.mohinika.com build and deployment. This note is maintained in alf-vault so the current state and restore risks remain visible.

  • hiro to educate himself on Quartz and watch some videos

Publication safety

  • Manually review all current public: true article notes; an article should not become public before it has been rated/reviewed.
  • Decide whether the deterministic publisher should enforce public: true and a non-empty rating for notes under News articles/, while allowing other future public analyses to use public: true without a rating.
  • Add a dry-run safety report listing newly public, newly private, unrated, and removed notes before pushing.
  • Check the generated site for accidental personal comments, private source material, health/financial details, and inaccessible wikilinks.
  • Consider a first-publication approval gate for newly selected notes.

Quartz capabilities to explore

  • Inventory the Quartz plugins currently enabled in quartz.config.ts and distinguish built-in emitters, transformers and filters from Obsidian plugins.
  • Test Quartz’s ExplicitPublish filter as a possible second publication safeguard.
  • Explore folder pages, tag pages, search, graph, backlinks, breadcrumbs, RSS and sitemap for the news site.
    • 2026-09-20: the site now publishes a generated Logged articles index at /News-articles/ — the news articles, the crisis maps and the envisioning work, newest first, with Created and Modified columns. It is built deterministically from the published notes, so a published note appears and an unpublished one drops out.
    • The subscribe feed (/index.xml) carries those same three areas and nothing else. Everything else published stays on the site (and in the sitemap), to be shared deliberately rather than listed or fed.
    • The generated index replaces the plain auto folder listing for the news section; per-topic folder pages are unchanged.
    • sitemap.xml lists every published page again (its URLs had been malformed).
  • Explore whether Quartz properties/frontmatter can replace or complement Dataview views.
  • Decide which public-facing indexes or landing-page sections would be useful for topics, dates, systems and polycrisis themes.
  • Test Mermaid/LaTeX/callouts only if they improve public articles rather than adding maintenance.
  • Document which Obsidian features do not render in Quartz and provide safe authoring guidance.

This is a public note that gets published

Dataview and Obsidian compatibility

  • Confirm which existing Dataview queries are used in alf-vault.
  • Identify queries that cannot be published directly through Quartz.
  • Replace useful public views with Quartz-native folders, tags, frontmatter, search or generated index notes where appropriate.
  • Keep Dataview as an Obsidian authoring aid unless a public Quartz equivalent is proven.

Build and deployment

  • Add a local preview/test procedure for news_alf before a production push.
  • Add link checking for internal and external links where practical.

Incident — 2026-10-02: the site silently froze for ~70 minutes

An Envisioning note (Envisioning/How Agents Extend Human Judgement.md, created 09:08 by another agent) carried invalid YAML frontmatter — source: … episode "Cancel Culture: What Happens When AI Agents Do Your Admin?" …; a plain YAML scalar cannot contain : . Quartz exited 1, Cloudflare kept serving the last good deployment, and every push in the window (09:31, 09:43, 10:01) built nothing. Nothing looked wrong from the vault or from git — the newly filed note simply never appeared.

  • Diagnosis: cd /opt/data/projects/news_alf && npx quartz build — the log names the file, the line and the column. Never diagnose this by waiting for a deploy.
  • Fix: quote the offending value (source: 'Text: with a colon'). A latent second case (260831 Dan Neidle …, public: false) would have broken the build the moment it was published; fixed in the same sweep. A full scan of 579 vault frontmatter blocks found those two and no others.
  • Restored 10:41 — feed 92 items, both blocked pages 200.
  • Guard added the same day: publish_news_alf.py now validates every selected note with PyYAML before writing anything and aborts with INVALID_FRONTMATTER <path>: <error> rather than pushing a build-breaking commit. A dry run prints frontmatter_check=ok (N notes).
  • Decide whether Cloudflare should build from GitHub or continue receiving a prebuilt/static workflow.
  • Add a documented manual Cloudflare Pages verification step for news.mohinika.com.
  • Review whether the repository should contain only Quartz source plus exported public content, or whether build artefacts should stay ignored.

Hermes automation and restore resilience

  • Preserve the editable landing page here: Projects/Intentional News/Public Landing Page.md.
  • Keep the no-agent publisher deterministic and restricted to exact public: true selection.
  • Keep current cron and model snapshots under /mnt/backup/hermes-state/.
  • Refresh the Hermes restore checklist whenever jobs, aliases, paths, publication rules or domains change.
  • Test restoring the cron/model snapshots in a safe or documented procedure.

Decisions to record

  • Record the final rating/publication rule in a dated note under Decisions/.
  • Record the selected Quartz plugin set and any Dataview replacement approach in a dated decision note.
  • Record whether the public site is an article archive, a living knowledge garden, or both.

Current implementation

  • Repository: hkhiro/news_alf
  • Local checkout: /opt/data/projects/news_alf
  • Source vault: /opt/data/obsidian/alf-vault
  • Landing-page source: Projects/Intentional News/Public Landing Page.md
  • Site: news.mohinika.com
  • Publisher: /opt/data/projects/publish_news_alf.py
  • Publisher mode: Hermes no-agent job, every 30 minutes
  • Publication selector: exact YAML public: true
  • Default REMOVED 2026-10-07 (the owner, verbatim): “There should not be any defaults for public: true. It should be public: false unless I specifically state it to be true.” The 2026-10-01 rule that a note filed into News articles/ publishes by default is dead. public: false is the default for EVERY note, News articles/ included; public: true only on the owner’s explicit instruction for that specific note. The reasoning behind the old rule still holds as a problem, not a default: a private news note under a public root gives readers a dead 404, so a published Crisis/Envisioning note should either avoid the wikilink or the owner publishes the target too (see the open item below). Rule now written into the file-news-article skill (alf-fin, 2026-10-07) and the vault privacy reference.
  • Open, not actioned (2026-10-01): 78 older News articles notes remain public: false (57 of them carry named-household/portfolio references in the body — scrub before publishing); a wider 157 links from public pages point at unpublished targets (private Envisioning/Crisis/Projects notes). Options: publish the targets, or make the Quartz transformer render unresolved links as plain text instead of 404 anchors.
  • Feed and page parity (verified 2026-10-01): /index.xml (the single RSS feed) and /News-articles/ (“Logged articles”) carry the same set — 86 articles: 53 News articles + 19 Crisis + 14 Envisioning, newest first. Feed scope is rssIncludeRoots: ["News articles","Crisis","Envisioning"] in quartz.config.ts, matched on file path.
  • Fixed 2026-10-01: the generated “Logged articles” page was being emitted as a feed item (it sat at the top of the feed, dated with each publish run). The vendored emitter now drops every index.md from the feed — a feed carries articles, not navigation. Private notes (public: false) are absent from both the feed and the page by design; flipping one to public shows it within the 30-minute cycle.

Last reviewed: 2026-10-07 (public-default reversal applied)