Traceability
Can every piece of the output be traced back to where it was printed?
✅ NormativeSettled. The requirement holds as written.📄 Page ruleCan be applied from the page alone.Read §2.3 in the RFC ↗
Every element of the output MUST be attributable to the place on the page it was read from. When boxes are requested, every Markdown element MUST have a box, and every box MUST cover exactly the printed content of its element.
When it applies
Traceability is what lets a reader of the Markdown — a person or a model — go back to the page to check, cite or highlight a statement. It is also what makes the two principles checkable: a Markdown element with no printed source is invented; printed content with no Markdown element is dropped.
- An element is traced by its box: the region of the page its content occupies. What a box covers and how fine boxes go are defined in Boxes and Granularity (§3.3); how boxes are carried is defined in The Sidecar (§3.4).
- Content the protocol moves out of its printed position — a watermark placed first, a sidenote placed after its paragraph, a folio recorded on its own — still traces to where it was printed.
- A Markdown element that was synthesised rather than transcribed (for example a chart table built from marks) traces to the region of the page it was read from.
Reading the examples. Each one pairs a source page with the output the rule expects. ✅ Sample: the rule applies. ❌ Counter-sample: it looks like it applies and does not, or a rendering got it wrong. A non-conforming output, in red, is shown only for contrast. … marks content left out of an excerpt.
The point, in a small example
Follow each output element back to the same service page. The footer has its own location; word character ranges refer to each element’s Markdown, including its syntax. These pages are made up to isolate the rule.
The same service page at element granularity
This interior page has a level-2 section heading, one two-line paragraph and a footer. Element boxes were requested. The Markdown and sidecar below are separate deliverables; the footer is not part of the paragraph. Coordinates use the original 720×420 image, not its on-screen display size.
Source page

Expected output
<!-- el p=1 x=48 y=54 w=179 h=22 -->
## Service note
<!-- el p=1 x=48 y=131 w=159 h=62 -->
Check valve A.
Record 12 psi.
<!-- el p=1 x=48 y=369 w=74 h=17 -->
Rev B | 7Expected output · Sidecar JSON
{
"pages": [
{
"page": 1,
"width": 720,
"height": 420,
"items": [
{
"type": "Section-header",
"md": "## Service note",
"bBox": {
"x": 48,
"y": 54,
"w": 179,
"h": 22
}
},
{
"type": "Text",
"md": "Check valve A.\nRecord 12 psi.",
"bBox": {
"x": 48,
"y": 131,
"w": 159,
"h": 62
}
},
{
"type": "Page-footer",
"md": "Rev B | 7",
"bBox": {
"x": 48,
"y": 369,
"w": 74,
"h": 17
}
}
]
}
]
}The same service page at word granularity
This interior page has a level-2 section heading, one two-line paragraph and a footer. Word boxes were requested. The Markdown and sidecar below are separate deliverables; the footer is not part of the paragraph. Coordinates use the original 720×420 image, not its on-screen display size.
Source page

Expected output
<!-- el p=1 x=48 y=54 w=179 h=22 -->
## Service note
<!-- el p=1 x=48 y=131 w=159 h=62 -->
Check valve A.
Record 12 psi.
<!-- el p=1 x=48 y=369 w=74 h=17 -->
Rev B | 7Expected output · Sidecar JSON
{
"pages": [
{
"page": 1,
"width": 720,
"height": 420,
"items": [
{
"type": "Section-header",
"md": "## Service note",
"bBox": {
"x": 48,
"y": 54,
"w": 179,
"h": 22
},
"layoutAwareBbox": [
{
"x": 48.0,
"y": 54,
"w": 108.0,
"h": 22,
"startIndex": 3,
"endIndex": 10
},
{
"x": 164.0,
"y": 55,
"w": 63.0,
"h": 21,
"startIndex": 11,
"endIndex": 15
}
]
},
{
"type": "Text",
"md": "Check valve A.\nRecord 12 psi.",
"bBox": {
"x": 48,
"y": 131,
"w": 159,
"h": 62
},
"layoutAwareBbox": [
{
"x": 48.0,
"y": 131,
"w": 67.0,
"h": 17,
"startIndex": 0,
"endIndex": 5
},
{
"x": 122.0,
"y": 131,
"w": 55.0,
"h": 17,
"startIndex": 6,
"endIndex": 11
},
{
"x": 183.0,
"y": 131,
"w": 24.0,
"h": 17,
"startIndex": 12,
"endIndex": 14
},
{
"x": 48.0,
"y": 171,
"w": 76.0,
"h": 17,
"startIndex": 15,
"endIndex": 21
},
{
"x": 131.0,
"y": 171,
"w": 26.0,
"h": 17,
"startIndex": 22,
"endIndex": 24
},
{
"x": 164.0,
"y": 171,
"w": 37.0,
"h": 22,
"startIndex": 25,
"endIndex": 29
}
]
},
{
"type": "Page-footer",
"md": "Rev B | 7",
"bBox": {
"x": 48,
"y": 369,
"w": 74,
"h": 17
},
"layoutAwareBbox": [
{
"x": 48.0,
"y": 369,
"w": 32.0,
"h": 13,
"startIndex": 0,
"endIndex": 3
},
{
"x": 85.0,
"y": 369,
"w": 12.0,
"h": 13,
"startIndex": 4,
"endIndex": 5
},
{
"x": 102.0,
"y": 369,
"w": 5.0,
"h": 17,
"startIndex": 6,
"endIndex": 7
},
{
"x": 112.0,
"y": 369,
"w": 10.0,
"h": 13,
"startIndex": 8,
"endIndex": 9
}
]
}
]
}
]
}Neighbouring rules, and how they differ
More
Rule id principles-traceability · principles boxes