1. The block, verbatim
Every write authors the article in exactly one of two ways, and supplying both or neither is refused. Either you write prose and the template owns the markup (--claim is the one load-bearing sentence and becomes the <mark> claim span and files.gist, and each --body is one paragraph after it) or you supply --article-html and own the markup yourself. On a memhtml apply line the prose form is the body field, whose first sentence becomes the claim, and the markup form is article_html. When you supply markup you own two constraints. It must contain EXACTLY ONE <mark>, and that <mark> must sit in the article’s first <p> or <li> and not inside an <aside> or <details>. The claim leads the article and is never a caveat or behind a fold. And the first <time datetime> in your markup becomes the memory’s event time, which is what recency ranks on, so a memory about something that happened last year should say so rather than being ranked as today’s news. Markup is checked before anything is written: the store renders your article, runs the format check, and refuses with the list of violations before it creates a file, stages it, or commits. A refused write leaves the tree byte-identical, so a failed attempt costs nothing and you can fix the markup and retry. Code goes in the prose path as a fenced block: a body paragraph that is entirely a fence becomes <figure><pre><code>, whitespace preserved verbatim, and the fence's info string (ts) is stamped as data-lang and promoted to a lang:ts entity, so memhtml list --entity lang:ts finds every memory carrying TypeScript. A blank line inside a fence does NOT split paragraphs. On the markup path write the same <figure><pre><code data-lang=“ts”> yourself; never class (forbidden) and never lang= (that attribute names human languages).
2. Commands it names
3. Provenance
A loader generates this page from apps/cli/src/commands.ts while the site builds, so no file in the repository holds it: the block is authored beside COMMANDS and is served verbatim by memhtml manifest, so this page and the live answer are the same bytes. Change the registry and this page changes with it.