Notes list ordering
2026-09-28 — Hierarchical list addresses
Lists need selectable containers and distinguishable checklist items, while all addresses must follow the same reading order as paragraphs. Separate counters hide the relationship between a paragraph and the list immediately after it.
Use p, ul, ol and li, matching the semantic HTML elements. List and
item IDs include their containing list/item path. A section might contain
s1.p1, s1.ul2, s1.ul2.li3, s1.ul2.li4, then s1.p5.
A nested ordered list extends the item path: s1.ul2.li4.ol5, with an item
s1.ul2.li4.ol5.li6. Numeric suffixes use one section-wide counter.
Checkboxes are item state: a task is still li, with data-checked="true"
or "false". Ordinary items omit the attribute. No tl, tli or cli
address type is needed. A mixed list remains its underlying ul or ol.
Traverse lists before their items, depth-first, using a single section counter.
Nested lists consume numbers too. Paragraph wrappers inside list items do not.
The counter resets per section, with pre-heading content under s0. A whole
list target includes its items; an item includes its continuation and nested
content. Preserve exact Unicode code-point source spans, including CRLF.
Addresses are snapshot-local. Clients must discover IDs from each snapshot, retain its revision and use conditional writes. Old per-type numbering is not an alias: retaining it would make the same address mean two different things. Historical source is rendered using the current addressing implementation, so rediscover addresses after a renderer upgrade even when reading an old revision.
Tests cover mixed paragraphs and lists, nested ordered and unordered lists, checked and unchecked items, preambles, section resets, emoji, CRLF, exact scoped source and native HTML checkboxes. Caller-supplied data attributes cannot forge checklist state. The Notes docs and action guides are the source for the public skill; generation, synchronization and live publication are separate checks.