The cycle in which the specification stopped being a document you read with two other documents open.
Until now it named CommonMark 0.31.2 and GFM 0.29-gfm, declared both normative in full, and linked away. So reading it properly meant three specifications side by side — and the part that mattered most was in none of them. A fenced code block is CommonMark; that a [[link]] inside one produces no edge is this profile. A block quote is CommonMark; that one beginning [!warning] is a callout is this profile. CommonMark admits raw HTML; that a Reader here must not render it is this profile, as a security boundary. Every one of those joins is invisible from either side alone, and none of them was written down.
Added
- The base and the extended ring, restated in the document, in full — §3 covers CommonMark 0.31.2 and §4 covers GFM 0.29-gfm, every block and every inline, with the form as it is typed and what it produces. §2.1 states what a restatement is: where it and its source disagree, the source governs and this document is in error. The compatibility promise is exactly what it was; what changes is that the reader no longer has to reconstruct it. Each crossing into the third ring is stated where an author meets it, and again in the section that governs it.
profile.jsoncarries the base and extended forms — 23 entries, 54 in all. An implementation that builds its documentation from the data now gets the whole notation and not only the third ring.- Appendix B, the notation at a glance — every form in one table, with what it does beyond being rendered, including the rows whose answer is nothing.
- The repository gained the rules of working on it —
CONTRIBUTING.md,CLAUDE.md, two issue forms, a pull request template, andnpm run check: a dependency-free consistency check that refusesSPEC.md,profile.jsonandtests/conformance.jsondrifting apart, now required on every pull request.
Changed
- The third ring is named MemorySmith, and no longer Vault. In a document that uses "vault" on nearly every page for the thing a person keeps — the folder resolution may not cross, the boundary an edge stays inside — the same word named a layer of the specification, and the reader had to tell the two apart from context. A ring is named after the specification that governs it, and the one that governs this ring is this document.
- The sections after the two new rings are renumbered. Links, frontmatter, the reading surface and the rejections move from §3–§6 to §5–§8, and everything after them by the same two.
Fixed
- The header of
SPEC.mdsaid 0.1.0 whileprofile.jsonsaid 0.2.0 — released and tagged that way. It was the first thing the new check caught, on its first run, and the reason it now holds every file carrying the version to the one inprofile.json. - The
task-listentry pointed at §5.5, which stopped being "Task lists" when 0.2.0 inserted "Marked text" at that number.
Compatibility
Minor, and the whole of it is one field: read memorysmith where you read vault in the ring field of profile.json.
No notation was added, removed or given a different effect. tests/conformance.json is unchanged apart from its version, so a suite that passed against 0.2.0 passes against 0.3.0 with nothing touched. Anything citing section numbers of this profile in its own documentation should re-check them against §5 to §8.
pnpm add github:memorysmithapp/markdown-profile#v0.3.0