The maturity layer · MRK-2.0 · reuse
Reuse without losing self-containment.
MRK asks every section to stand alone: restate your prerequisites inline, never "as described above". That is right for retrieval, and it manufactures duplication. The same prerequisite prose is copied into many sections, and when the source changes the copies drift, which is the exact failure the vocabulary layer exists to fight.
DITA answers with conref: assemble fragments at publish time. MRK keeps the Markdown human-authored and standalone, and moves reuse integrity to a gate instead: keep the inlined copy, declare where it came from, and fail the build when it goes stale.
A copy that names its source
Author the canonical prose once, in the section that owns it (the cause). Where another section needs it (the resolution), inline a restatement wrapped in a transclusion marker that names the source section. The section still reads as standalone, so the machine that lifts it gets its prerequisite inline; the marker records that this block is a managed copy.
The marker is an HTML comment, so it survives every Markdown renderer untouched and is invisible to a reader. Pair it with the edge in front matter: requires: [ck-ops-1#cause], the section-level link mrk:requires that the graph projection already turns into a typed edge. Body and front matter must agree, and that agreement is itself checked.
Because a copy is a fit-for-context restatement, not a byte copy, wording may differ. What the gate cares about is whether the source changed materially underneath it.
The gate: drift detection
For every transclusion block in a corpus, the drift linter asserts three things:
- The target exists. The named section resolves to a real section in the corpus, the same integrity the requires shape enforces on the graph.
- It is declared. The target appears in the enclosing section's
requires. - It is still grounded. The share of the copy's significant words that still appear in the source's body must be at least 50%. Below that, the source changed and the copy is stale.
The measure is lexical overlap, not equality and not an embedding: it flags a material change in the source while tolerating wording differences, and it adds no model dependency. A canonical edit that invalidates its copies surfaces instead of rotting silently, and the linter exits non-zero so it fails a build the way a bad schema does.
Byte-identical conref would need a resolver in the pipeline and would break the property that the .md is the artifact. Declared copy plus a gate keeps the file standalone and puts the guarantee where MRK already puts the rest of them, at a gate.
A worked example
Two small articles ship in the kit (reuse-demo/). Both explain a 403 on a bare URL and share the shape above. In the first, the resolution's inlined cause matches its source and the linter passes. In the second, the cause was rewritten: the real problem turned out to be content negotiation, not directory handling, yet the resolution still carries the old DirectorySlash restatement. Only 10% of the copy is still found in its source, and the build fails.
Nobody had to remember that the resolution copied the cause. The marker and the requires edge recorded it, and the gate did the remembering.
The drift linter is in the tools kit
python -m mrk drift ships in mrk-tools.zip alongside the other free MRK tools. Point it at a folder of articles; it needs no model and no service.
Reuse hygiene and the climb are the same motion. Markers and requires are the edges an article needs for L3 on the ladder, and a clean drift run joins the shape check as part of the L4 gate: a corpus whose inlined copies are stale is not reasoned. A consumer following clause §R benefits directly, since a section it lifts on its own is also a section that is still true.
Still open
The design questions are settled in the MRK-2.0 specification. The marker is an HTML comment, because renderers leave it alone. Grounding is a lexical score with a threshold of 0.5, which keeps tooling local and model-free. The marker's target is the canonical source, and a marker that points at its own section is an error. One issue remains open: the drift gate tolerates cycles, where A copies from B and B copies from A, and whether to forbid them is not yet settled.
The vocabulary the markers and edges map to is documented on the namespace page, and the projection that turns them into a graph is on the graph page.