V0.27.0
Name:v0.27.0Status:planning

v0.27.0 — External data & hosted content

Two threads that together let the pipeline ingest real data from outside the content tree and run without a local filesystem. The first feeds charts and sortable tables from actual data files; the second consolidates the remaining ad-hoc fs seams into one injectable interface so a hosted renderer (the GitHub-app product) can build a tenant's repo straight from the API.

Milestone burndown: 0 open work items remaining; peak 9, started Jun 1202468Jun 12Jul 11
Open work items Ideal burndown
Progress 9/9 work items
Related 14
History 4
  1. 069cc69
    Created (planning)by bjornolofandersson
  2. 4eab338
    Content editedby Claude
    plan: accept SPEC-103 + SPEC-113, break into v0.27.0 work items
  3. 3fd0373
    Content editedby Claude
    plan: renumber ProjectFiles seam spec to SPEC-113
  4. ac87471
    Content editedby Claude
    plan: scaffold v0.25.0–v0.27.0 milestones from recent specs

Work Items

Done 9
WORK-417 main
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
6/6 criteria
WORK-481 main
ProjectFiles interface + fs/memory providers
The foundation of SPEC-113: one synchronous ProjectFiles interface in @refrakt-md/types, with filesystem and in-memory providers, that replaces the four ad-hoc fs seams. Containment becomes an interface contract, so no consumer re-implements path-safety. Also lands the recordable-read wrapper that ADR-025 names as the one piece of groundwork for future incremental rebuild.
high moderate
5/5 criteria
WORK-482 main
Migrate sandbox reads to ProjectFiles + close the src traversal gap
Move the sandbox example read seam (__sandboxReadFile family + preprocess sandbox hooks) onto the WORK-481 ProjectFiles provider, and route the sandbox src directory join through it so it inherits containment — closing the unguarded examplesDir + '/' + src path-traversal gap.
high moderate
3/3 criteria
WORK-483 main
snippet / expand / file-ref readers delegate I/O to ProjectFiles
Close the main gap in SPEC-113: read-file.ts (and the snippet/expand/file-ref pipelines) call node:fs directly today, bypassing the injectable seam — so tree mode is not actually fs-free for snippets. Delegate the I/O to the WORK-481 provider, keeping line-slicing and diagnostics intact.
high moderate
3/3 criteria
WORK-484 main
fileRoots + plan scan + loadContentFromTree plumbs; in-memory full-build test
Finish the consumer migration and the virtual entry point: scan fileRoots and the plan plugin's configure scan through the provider, expose projectFiles + gitTimestamps on loadContentFromTree, and prove a full site builds from a pure in-memory map.
high moderate
3/3 criteria
WORK-485 main
Docs — ProjectFiles contract + fetch-then-build materialization
Document the ProjectFiles contract and the fetch-then-build materialization pattern for remote hosts, so plugin and adapter authors know the seam and how a hosted renderer feeds it.
medium simple
2/2 criteria
WORK-486 main
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
4/4 criteria
WORK-487 main
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
3/3 criteria
WORK-488 main
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
3/3 criteria