CLN Wiki · Specification
Addressing v2.1
01//
Line Anchors
##id
Syntax
##identifier — double hash + alphanumeric + hyphens= Redis is the primary cache ##redis! Memory limit 4GB — hard ceiling ##mem-limit→ Ship v2.1 in Sprint 3 ##decision-ship? Latency budget unresolved ##q-latency##redis is self-explanatory without rendering
02//
Block Labels
// ##id
Syntax
// ##id Title Text##id comes immediately after //// ##arch Architecture Overview// ##risks · Known Risks// ##verdict 04 · Final Decision// ##q-open Open Questions##id — points to one specific line// ##id Title — addresses a whole semantic section
03//
Cross-References
»[text]##id
Syntax
»[display text]##target-id» is the guillemet right-double-angle — U+00BB= See »[Architecture]##arch for full context! This risk depends on »[Memory Limit]##mem-limit→ Resolved via »[Sprint 3 decision]##decision-ship~ Blocks »[latency]##q-latency vs »[throughput]##q-thru»[text] is visually distinct — guillemet signals "this is a reference"grep '»\[' finds all cross-references in a document<a href="#target-id"> trivially
04//
Line Anatomy
Reference
OPERATOR · CONTENT · #tags · ##anchor · STATUS
!
operator
·
DB connection fails under load
content text
·
#infra
tag
·
##db-risk
anchor
·
!! critical
status
=
operator
·
Redis cache — 4GB hard limit
content text
·
#cache
tag
·
##redis
anchor
·
—
optional
#tag ##id is correct; ##id #tag is not##db-risk not ##db risk
05//
vs Markdown Anchors
Comparison
Markdown
- anchors only on headings —
- no line-level granularity
- id derived from heading text — breaks on rename
- not greppable in plain text
+ auto-generated — no manual work
+ universal — every Markdown renderer supports it
## Section → #section
CLN v2.1
+ any line can be anchored — not just headings
+ explicit id — survives text changes
+
+ cross-refs visible as
- manual — author assigns every id
- requires CLN-aware renderer for HTML links
##id readable and greppable as plain text»[text]##id without rendering| Feature | Markdown | CLN v2.1 |
|---|---|---|
| Anchor scope | Headings only | Any line |
| Id stability | Breaks on heading rename | Explicit — rename-safe |
| Plain text read | [text](#id) — partial |
»[text]##id — fully readable |
| Block labels | No equivalent | // ##id Title |
| Grep-ability | Poor | grep '##' finds all anchors |
06//
Live Demo
Example
Project Alpha · Architecture Decision
addressing demo
Raw CLN
// ##arch Architecture Overview
= Redis is the primary cache #infra ##redis
= Postgres for persistent storage #infra ##postgres
. All services behind API gateway ##gateway
// ##risks · Known Risks
! Redis eviction under peak load #infra ##redis-risk
depends on »[cache config]##redis
! Gateway single point of failure ##gw-risk !! critical
see »[gateway spec]##gateway
// ##verdict · Decision
→ Accept »[redis risk]##redis-risk — add replica
→ Resolve »[gw risk]##gw-risk before launch ✔
Rendered
// ##arch · Architecture Overview
= Redis is the primary cache #infra ##redis
= Postgres for persistent storage #infra ##postgres
. All services behind API gateway ##gateway
// ##risks · Known Risks
! Redis eviction under peak load #infra ##redis-risk
. depends on »[cache config]##redis
! Gateway single point of failure ##gw-risk
. see »[gateway spec]##gateway
// ##verdict · Decision
→ Accept »[redis risk]##redis-risk — add replica
→ Resolve »[gw risk]##gw-risk before launch ✔
// ##risks addresses the whole risk section##redis-risk addresses one specific claim»[redis risk]##redis-risk links verdict back to the exact risk line