data rune preprocessor + CSV/TSV adapter + projection core The tier-1 spine of SPEC-103: a preprocess-time data rune that reads a sandboxed external file and emits a Markdoc table AST node, the CSV/TSV adapter, and the shared projection + typing core (incl. data-value emission) and table emitter that every adapter reuses. JSON/NDJSON adapters (WORK-486), the datatable sort change (WORK-487), SQLite, and remote sources are out of scope. Proves the headline claim — chart and datatable consume the emitted <table> with no structural edits.
high complex
data rune — JSON + NDJSON adapters The JSON-family adapters for SPEC-103, on top of the WORK-417 adapter contract + projection core. JSON is not inherently tabular, so its adapter owns the three knobs CSV doesn't; NDJSON is line-delimited records. Both reduce to the shared { headers, rows } shape and are indistinguishable downstream.
high moderate
datatable — data-value-aware sort The one host-side change SPEC-103 takes for typing: extend the datatable sort comparator to prefer a cell's data-value over its textContent, mirroring what chart already does (cell.dataset.value ?? textContent). This is what lets data's numeric typing produce correct sorts of human-formatted numbers (currency, thousands separators, units) — and it equally fixes hand-authored tables, so it is a general improvement, not a data-specific hack.
medium simple
data rune — docs page The author-facing documentation for SPEC-103: the data rune with CSV + JSON examples, the chart/datatable composition story, and the build-time-vs-runtime distinction so authors reach for the right layer.
medium simple