This is the first seed article in the content tree. It exists to exercise the happy path of the GitOps publish loop described in docs/DEV.md: commit the directory, push to main, and within two poll intervals the article renders live at /articles/hello-world.

Why the directory is the slug

There is no slug: key in the frontmatter on purpose — the directory name (hello-world) is the canonical slug. A frontmatter slug that disagrees with the directory name is an ingest error, so the simplest correct article omits it entirely:

---
title: Hello World — A Seed Article for the GitOps Publish Loop
tags: [Elixir, "#lead-gen", "Getting Started"]
status: published
---

No date: either

This article deliberately omits date: so the ingestion worker proves its commit-date fallback: the first-publish commit's date becomes published_at. An explicit ISO-8601 date: (see the draft example's frontmatter) overrides it when present.

What a real article looks like

A published article needs only the four required keys — title, description, tags, and status: published — plus a Markdown body. Colocated assets are referenced relatively, e.g. ![hero](./hero.png), and live in this same directory next to index.md.

How the hero image is served

The cover: ./hero.png key above points at the colocated hero asset in this directory. At render time the ingestion SHA rewrites it to a pinned URL — /articles/<sha>/hello-world/hero.png — which the git-backed plug streams straight from the content blob, immutable and cache-friendly.

Why pin the URL to the SHA

A SHA-pinned asset URL never goes stale: the bytes behind /articles/<sha>/... are, by construction, the exact bytes of that commit, so the browser can cache them forever and the page can never mix an old cover with a new body.