Summary
A Markdown code block was rendered with automatic line numbers, causing the content to appear as:
1 | abc
2 | def
This postmortem explains why this happens, what actually caused it, and how senior engineers prevent it in real systems.
Root Cause
The root cause was not Markdown itself, but the rendering environment (a theme, plugin, or documentation engine) that automatically injects line numbers into fenced code blocks.
Common culprits include:
- Static site generators with syntax‑highlighting plugins
- Browser extensions that modify code blocks
- Documentation frameworks that enable line numbering by default
- CSS rules that apply
counter-incrementtopre > code
Why This Happens in Real Systems
Real systems often layer multiple rendering tools:
- Markdown → HTML converter
- Syntax highlighter (Prism, Highlight.js, Rouge)
- Theme CSS
- Browser extensions
Any one of these can silently enable line numbering.
Because Markdown itself has no built‑in line numbering, the issue always originates from the rendering pipeline.
Real-World Impact
Unexpected line numbering can cause:
- Incorrect formatting in documentation
- Broken copy/paste behavior for code samples
- Confusion for users reading examples
- Inconsistent styling across pages or environments
Example or Code (if necessary and relevant)
Below is a minimal example of how a theme might force line numbers via CSS:
pre code {
counter-reset: line;
}
pre code > span {
counter-increment: line;
}
pre code > span::before {
content: counter(line) " | ";
}
Removing or overriding this CSS disables line numbering.
How Senior Engineers Fix It
Senior engineers approach this systematically:
- Identify the rendering layer (Markdown engine, theme, plugin)
- Disable line numbering in configuration (e.g., Prism:
lineNumbers: false) - Override CSS to remove counters
- Check for browser extensions that modify code blocks
- Ensure consistent rendering across environments (local, CI, production)
Why Juniors Miss It
Junior engineers often assume:
- Markdown itself is responsible
- The issue is caused by incorrect syntax
- The problem is inside the code block rather than the rendering pipeline
They may not yet recognize that Markdown is only the first step, and the final output depends heavily on the tools layered on top of it.