WORK-005 changeset-release/main
Build stat Rune Work Items
Draft 13
WORK-006 changeset-release/main
Build math Rune WORK-007 changeset-release/main
Build concept Rune WORK-008 changeset-release/main
Build exercise Rune WORK-010 changeset-release/main
Build glossary Rune WORK-018 changeset-release/main
Build video Rune WORK-009 changeset-release/main
Build quiz Rune WORK-011 changeset-release/main
Build prerequisite Rune WORK-012 changeset-release/main
Build objective Rune WORK-013 changeset-release/main
Build partner Rune WORK-014 changeset-release/main
Build job Rune WORK-016 changeset-release/main
Build album Rune WORK-017 changeset-release/main
Build artist Rune Ready 13
WORK-094 changeset-release/main
Create @refrakt-md/vite plugin — Level 1 static transform Build the core Vite plugin that intercepts .md files and emits JS modules with rendered HTML, frontmatter, SEO data, and serialized tree. This is the Level 1 (static, per-file) integration — no cross-page awareness.
0/13 criteria
WORK-095 changeset-release/main
Vite plugin — virtual CSS module and tree-shaking Implement virtual:refrakt/styles module that imports theme tokens, per-rune CSS, and package CSS. Supports tree-shaking to include only CSS for runes actually used in content.
0/9 criteria
WORK-096 changeset-release/main
Vite plugin — dev server HMR Implement hot module replacement for .md file changes during development. When a markdown file is saved, re-transform it and trigger a page update.
0/6 criteria
WORK-097 changeset-release/main
Vite plugin — Level 2 cross-page pipeline Implement the level: 'pipeline' mode that runs the full four-phase cross-page pipeline at build time, enabling breadcrumbs, nav, glossary auto-linking, and other entity-dependent features.
0/11 criteria
WORK-115 changeset-release/main
Migrate community package postTransform uses to declarative config With WORK-110 through WORK-114 complete, convert the 5 postTransform uses identified in SPEC-033 to their declarative equivalents. Validate identical HTML output before and after each migration.
0/7 criteria
WORK-116 changeset-release/main
Update inspect and contracts tooling for structure slots features Update refrakt inspect and refrakt contracts to surface the new SPEC-033 features: slot assignments, projection effects, and repeated elements.
0/7 criteria
WORK-098 changeset-release/main
Vite plugin — behavior init helper export Export a thin initBehaviors() wrapper from @refrakt-md/vite/behaviors that frameworks can call after navigation to re-initialize interactive rune behaviors (accordion, tabs, datatable, etc.).
0/6 criteria
In Progress · median 32d 2
WORK-089 28d changeset-release/main
Create @refrakt-md/astro adapter package Build the Astro framework adapter — the first non-SvelteKit target. Astro is MPA-first and SSG-focused, making it the simplest adapter to build and validate.
11/12 criteria
Review 0
Done · 5 archived 125
WORK-001 changeset-release/main
Official Rune Packages — Breakout Plan WORK-037 changeset-release/main
Define planLayout in @refrakt-md/transform Add a planLayout alongside the existing docsLayout and blogArticleLayout in the transform package's layout configs.The plan layout is structurally simple: a fixed sidebar slot for navigation and a main content area. No TOC, no breadcrumbs, no version switcher — just the two slots.
0/5 criteria
WORK-038 changeset-release/main
Build nav region builder for plan site Convert the existing buildNavigation() output (NavGroup[]) into a renderable tag tree that can be passed as a layout region to renderFullPage().Currently the sidebar HTML is hand-rolled in the HTML shell template. This work item replaces that with a buildNavRegion() function that produces serialized tags with BEM classes matching the existing .rf-plan-sidebar__* selectors.
0/6 criteria
WORK-039 changeset-release/main
Refactor plan render pipeline to use @refrakt-md/html The main refactor: replace the bespoke HTML shell template in @refrakt-md/plan with calls to renderFullPage() from @refrakt-md/html. This removes the hand-rolled document structure, inline styles, and direct HTML string concatenation.
0/13 criteria
WORK-044 changeset-release/main
Collapsible status groups in plan sidebar Replace the flat entity list in the plan sidebar with status-grouped, collapsible sections. Items are grouped by status within each entity type, with active statuses expanded and terminal statuses collapsed by default. Collapse state persists in localStorage.
8/8 criteria
WORK-045 changeset-release/main
Sidebar search and filter bar for plan site Add a text input at the top of the sidebar that filters visible items in real-time. Supports plain text fuzzy matching across ID, title, tags, assignee, and milestone, plus structured field:value filter syntax matching the {% backlog %} rune.
8/8 criteria
WORK-050 changeset-release/main
Converge plan site renderer with shared layout engine The plan site's renderPage() in runes/plan/src/commands/render-pipeline.ts manually assembles HTML using a local planTheme/planLayout definition, bypassing the shared layout engine in @refrakt-md/transform. Meanwhile, packages/transform/src/layouts.ts already exports a planLayout config (WORK-037) that goes through the standard layout engine but isn't used by the plan site's renderer.Converge the plan site's renderer to use the shared layout engine so it can leverage declarative layout features — computed ToC, conditional slots, behaviors array, computed content — rather than hand-building HTML. This unblocks ToC ("on this page"), dependency visualization (WORK-049), keyboard nav behaviors (WORK-048), and any future layout-level features without custom rendering code.
11/11 criteria
WORK-072 changeset-release/main
Add --resolve and --resolve-file flags to plan update Extend the refrakt plan update command to accept resolution content and append a ## Resolution section to work item and bug files.
9/9 criteria
WORK-080 changeset-release/main
Refactor Realm and Faction Transforms to Use Shared Utilities 0/8 criteria
WORK-084 changeset-release/main
Inject $file.created and $file.modified Variables into Content Pipeline 8/8 criteria
WORK-088 changeset-release/main
Extract shared utilities from @refrakt-md/svelte to @refrakt-md/transform Prerequisite for all framework adapters. Two modules in @refrakt-md/svelte are framework-agnostic and needed by every adapter package.
1/7 criteria
WORK-099 changeset-release/main
Migrate simple core runes from Model to createContentModelSchema Migrate the straightforward core runes that use @group decorators with sequential or sectioned patterns. These have no custom processChildren logic — they map directly to sequence, sections, or delimited content models.
7/7 criteria
WORK-100 changeset-release/main
Migrate simple community runes from Model to createContentModelSchema Migrate community package runes that use straightforward @group decorator patterns. These map directly to sequence or sections content models with no custom processChildren logic.
5/5 criteria
WORK-101 changeset-release/main
Migrate moderate-complexity runes from Model to createContentModelSchema Migrate runes that have multiple groups, context-dependent group logic, or light custom processing. These need more careful mapping but don't require the custom escape hatch.
7/7 criteria
WORK-102 changeset-release/main
Migrate complex runes from Model to createContentModelSchema Migrate the remaining runes that have custom processChildren overrides with stateful parsing, text pattern matching, or DOM surgery. All will use the custom content model type.
8/8 criteria
WORK-103 changeset-release/main
Remove legacy Model class, decorators, and createSchema Once all runes are migrated to createContentModelSchema, delete the legacy API surface from @refrakt-md/runes.
7/7 criteria
WORK-105 changeset-release/main
Add dual-signature support to createComponentRenderable and update RuneDescriptor Phase 1 of ADR-005. Update createComponentRenderable to accept either the current Type first argument or a new inline { rune: string, schemaOrgType?: string } form. Update RuneDescriptor and Rune class to carry typeName?: string and schemaOrgType?: string instead of type?: Type.Both signatures must work simultaneously so Phase 2 migration can happen incrementally.
6/6 criteria
WORK-106 changeset-release/main
Migrate core runes to inline rune identifiers Phase 2a of ADR-005. Update all ~37 core rune transforms in packages/runes/src/tags/ to use the new inline { rune: 'name' } signature for createComponentRenderable instead of importing schema.X from the registry. Each update is a 2-3 line change per file.Depends on WORK-105 (dual-signature support) being complete.
5/5 criteria
WORK-107 changeset-release/main
Migrate community package runes to inline rune identifiers Phase 2b of ADR-005. Update all ~65 community package rune transforms across 8 packages to use the new inline { rune: 'name' } signature for createComponentRenderable. Same mechanical change as WORK-106 but across community packages.Depends on WORK-105 (dual-signature support) being complete.
6/6 criteria
WORK-110 changeset-release/main
Add value mapping to modifier config Extend ModifierConfig with valueMap and mapTarget fields so that modifier values can be declaratively mapped to different data attribute values. This is the smallest SPEC-033 feature and eliminates 2 existing postTransform uses.
0/7 criteria
WORK-111 changeset-release/main
Replace hardcoded density contexts with configurable childDensity Remove the hardcoded COMPACT_CONTEXTS and MINIMAL_CONTEXTS sets from the identity transform engine and replace them with a childDensity field on RuneConfig. This lets community packages declare density behavior without modifying the engine.
0/8 criteria
WORK-112 changeset-release/main
Implement named slots with ordering for structure entries Add a slots array to RuneConfig and slot/order fields to StructureEntry. The engine assembles children by iterating slots in declared order instead of using binary before/after placement. This is the core structural change in SPEC-033 that enables multi-zone layouts.
0/10 criteria
WORK-117 changeset-release/main
Implement framework-agnostic extraction logic for component interface WORK-118 changeset-release/main
Validate property and ref name uniqueness in createComponentRenderable WORK-119 changeset-release/main
Update Svelte renderer to pass props and snippets to component overrides WORK-126 changeset-release/main
Parse Resolution sections in the plan scanner Extend the plan scanner to extract ## Resolution sections from work item and bug files into a structured resolution field on PlanEntity.
0/8 criteria
WORK-127 changeset-release/main
Fix plan schema bugs: pending status, severity mismatch, tag filtering Four small bugs identified in the SPEC-037 audit that need immediate fixes.
5/5 criteria
WORK-128 changeset-release/main
Add source, milestone, and complexity validation to plan validate The validate command has blind spots: source attribute references to non-existent specs/decisions go undetected, milestone references to non-existent milestones pass silently, and complexity values aren't checked at all. These gaps let broken references and invalid data persist.
5/5 criteria
WORK-134 changeset-release/main
Event model types and per-entity git history extraction Define the core TypeScript types for the git-native entity history system and implement the per-entity extraction algorithm that derives structured lifecycle events from git commits.This is the foundational piece that all other SPEC-038 work items depend on. The extraction algorithm walks a file's git history, parses each version's attributes/criteria/resolution, and diffs consecutive snapshots to emit typed HistoryEvent objects.
15/15 criteria
WORK-136 changeset-release/main
CLI plan history single-entity mode Implement the plan history <ID> CLI subcommand for viewing the git-derived lifecycle timeline of a single plan entity.
11/11 criteria
WORK-140 changeset-release/main
Tab layout for plan entity pages Add a tab panel to plan entity pages (spec, work, bug, decision) that separates the main authored content from pipeline-generated metadata views. Each entity page gets tabs:
12/12 criteria
WORK-002 changeset-release/main
Batch 3: Convert Runes Using sections Resolver WORK-003 changeset-release/main
Editor Visual Polish Plan WORK-004 changeset-release/main
Build gallery Rune WORK-015 changeset-release/main
Build track and playlist Runes WORK-019 changeset-release/main
Build audio Rune WORK-040 changeset-release/main
Add syntax highlighting to plan site Apply @refrakt-md/highlight to the plan render pipeline so code fences in plan content get proper syntax coloring. Currently code blocks render as plain <pre><code> with no highlighting.
0/7 criteria
WORK-041 changeset-release/main
Add client behaviors to plan site Wire @refrakt-md/behaviors into the plan site via initPage() from @refrakt-md/html/client. This enables copy-to-clipboard buttons on code blocks and provides the foundation for future interactive behaviors.
0/5 criteria
WORK-042 changeset-release/main
Config-aware theme resolution for plan site Update the plan site's resolveThemeCss() to read refrakt.config.json when no --theme flag is provided, so the plan site automatically uses the project's installed theme.When a theme package is specified in config, resolve its CSS (design tokens + base styles) and layer it under the plan rune CSS. When resolution fails or no config exists, fall back to the built-in default theme.
0/7 criteria
WORK-043 changeset-release/main
Token bridging — update plan CSS to use --rf-* tokens Update plan rune CSS to reference --rf-* tokens (the standard refrakt token namespace) as primary values, with --plan-* as fallbacks. This allows plan styles to adapt to any installed theme's token palette while remaining functional in standalone mode.
0/6 criteria
WORK-046 changeset-release/main
Enhanced plan dashboard with progress and milestone scoping Improve the auto-generated dashboard to show project health at a glance: status count summaries, a blocked items callout, per-milestone grouping when multiple milestones exist, and a recent activity section.
7/7 criteria
WORK-047 changeset-release/main
Tag-based cross-cutting view pages for plan site Auto-generate pages that group entities by tag, assignee, or milestone. These appear in a "Views" section in the sidebar and use the {% backlog %} rune with appropriate filters.
7/7 criteria
WORK-073 changeset-release/main
Add resolution validation checks to plan validate Add three resolution-related checks to refrakt plan validate as specified in SPEC-027.
5/5 criteria
WORK-074 changeset-release/main
Display resolution metadata in plan status and plan serve Show resolution data (completion date, PR link) in the plan status output and the plan serve dashboard.
0/5 criteria
WORK-086 changeset-release/main
Consolidate Plan Scanner with Shared Git Timestamp Utility 6/6 criteria
WORK-090 changeset-release/main
Create @refrakt-md/nuxt adapter package Build the Nuxt framework adapter. Nuxt is Vite-based like SvelteKit, so the existing Vite plugin logic (virtual modules, content HMR) can be substantially reused.
0/10 criteria
WORK-091 changeset-release/main
Create @refrakt-md/next adapter package Build the Next.js framework adapter. Uses React Server Components + renderToHtml() for zero-hydration content rendering, with a thin client component for behavior initialization.
0/11 criteria
WORK-093 changeset-release/main
Add multi-framework support to create-refrakt Extend create-refrakt to scaffold projects for Astro, Nuxt, Next.js, and Eleventy in addition to the existing SvelteKit and HTML targets.
1/11 criteria
WORK-104 changeset-release/main
Update authoring docs after legacy Model removal Remove or rewrite documentation that references the legacy Model class, decorators, and createSchema. After this work, the authoring docs present createContentModelSchema as the single path.
7/7 criteria
WORK-108 changeset-release/main
Update inspect tooling for string-based rune types Phase 2c of ADR-005. Update refrakt inspect and related tooling to use the Rune.typeName string field instead of rune.type?.name. Small change (~4 lines) but needed before Phase 3 cleanup can remove the Type class.Depends on WORK-105 (dual-signature support) being complete.
5/5 criteria
WORK-109 changeset-release/main
Remove Type system — delete schema classes, registries, and old signature Phase 3 of ADR-005 (breaking change). Once all runes are migrated (WORK-106, WORK-107) and tooling updated (WORK-108), remove the legacy Type class system entirely.Depends on WORK-106, WORK-107, and WORK-108 all being complete.
11/11 criteria
WORK-113 changeset-release/main
Add repeated element generation to structure entries Extend StructureEntry with a repeat field that generates N copies of a template element, with optional filled/unfilled distinction. Eliminates the testimonial rune's postTransform for star ratings.
0/8 criteria
WORK-114 changeset-release/main
Implement element projection (hide, group, relocate) Add a projection field to RuneConfig that enables declarative structural reshaping of the output tree. Projection runs as a distinct pass after BEM class application but before meta tag filtering, operating on data-name addresses. This is SPEC-033's most powerful feature, giving themes control over schema-produced elements.
0/11 criteria
WORK-120 changeset-release/main
Export generic type interfaces for rune component overrides WORK-121 changeset-release/main
Add component interface view to refrakt inspect WORK-122 changeset-release/main
Document framework-native component override interface WORK-123 changeset-release/main
Create @refrakt-md/react renderer with ADR-008 component interface The Next.js adapter currently renders all runes via renderToHtml() (identity transform only). To support React component overrides — where theme or site authors provide custom React components for specific runes — we need a @refrakt-md/react renderer package that dispatches on typeof/data-rune and provides the ADR-008 framework-native interface (props + named children).
12/12 criteria
WORK-124 changeset-release/main
Create @refrakt-md/vue renderer with ADR-008 component interface The Nuxt adapter currently renders all runes via renderToHtml() (identity transform only). To support Vue component overrides — where theme or site authors provide custom Vue components for specific runes — we need a @refrakt-md/vue renderer package that dispatches on typeof/data-rune and provides the ADR-008 framework-native interface (props + named slots).
12/12 criteria
WORK-125 changeset-release/main
Add Astro native component override support with ADR-008 named slots Astro is a special case per ADR-008: it is both an adapter (routing, build integration) and has its own component format with native named slots. Unlike Next.js and Nuxt which need separate renderer packages (@refrakt-md/react, @refrakt-md/vue), Astro component overrides can be handled directly in packages/astro/ using Astro's built-in <slot name="..."> mechanism.For interactive runes rendered inside Astro islands, the island's framework renderer (React, Svelte, or Vue) handles extraction — that is covered by WORK-123, WORK-124, and WORK-119 respectively. This work item covers static .astro component overrides only.
10/10 criteria
WORK-129 changeset-release/main
knownSections scanner integration: section-scoped refs and validation Once knownSections are declared in the plan rune content models (WORK-024), the scanner and validator need to become section-aware. Today, refs are extracted from the entire file without knowing which section they belong to. With knownSections, refs get tagged with their canonical section name, enabling the next command to distinguish blocking dependencies from informational references.
9/9 criteria
WORK-131 changeset-release/main
Update site docs and plan CLAUDE.md for plan package hardening changes After the SPEC-037 work items ship, the documentation needs to reflect the new capabilities: pending status, knownSections, attribute clearing, and the updated validation checks.
6/6 criteria
WORK-132 changeset-release/main
Convert plan content to machine-readable refs and adopt knownSections conventions The plan content has a systemic gap: most cross-references are plain text (- SPEC-028 (Standard 2)) rather than machine-readable ref tags ({% ref "SPEC-028" /%}). Out of ~125 work items, only 44 use ref tags. References sections are the worst: 79 use plain text vs 22 with ref tags. Dependencies sections are split roughly evenly (21 plain text, 20 with refs).This means the next command's dependency blocking is essentially non-functional for most work items — it can only resolve {% ref %} tags, so plain text ID mentions are invisible to it. The knownSections work (WORK-024, WORK-129) will make the system section-aware, but it's only useful if refs are actually machine-readable.This work item converts existing plan content to use ref tags and adopts the knownSections conventions so the full dependency graph comes alive.
WORK-133 changeset-release/main
Mobile plan section navigation and desktop TOC filtering Long plan entities (specs, work items, decisions) are hard to navigate on mobile — you have to scroll through the entire document to reach a section. The toolbar scrolls away so you can't even reach the sidebar nav. On desktop, the TOC sidebar lists every H2/H3 heading, which becomes a wall of text for detailed specs and is hard to scan.Plan runes already declare known sections with canonical names (Acceptance Criteria, Dependencies, Approach, etc.) and the transform wraps them in <section data-name="..."> elements. We can leverage this to build focused section navigation for both mobile and desktop.
10/10 criteria
WORK-135 changeset-release/main
Batch extraction and history caching Implement efficient batch extraction of history for all plan entities and integrate with the existing .plan-cache.json caching mechanism. Handle shallow clone edge cases.
9/9 criteria
WORK-137 changeset-release/main
CLI plan history global mode and filters Implement the global history feed and all filter flags for the plan history CLI command. The global mode shows recent events across all entities, grouped by commit.
13/13 criteria
WORK-138 changeset-release/main
plan-history site rune — tag definition and pipeline hooks Implement the plan-history Markdoc tag as a self-closing aggregation rune following the established plan rune pattern (sentinel + meta tags + placeholder → aggregate → postProcess resolution). Supports both per-entity and global feed modes.
13/13 criteria
WORK-141 changeset-release/main
Split plan entity header into primary badges, title, secondary badges Restructure the identity transform config for plan entity runes (spec, work, bug, decision, milestone) so the header badges are split into two groups around the title, matching the visual hierarchy already used by backlog cards:
12/12 criteria
WORK-142 changeset-release/main
Make plan init tool-agnostic refrakt plan init currently hardcodes writing workflow instructions to CLAUDE.md. Decouple the init command from any specific AI tool so the plan package works naturally for users of Cursor, GitHub Copilot, Windsurf, Cline, Aider, or no AI tool at all.
13/13 criteria
WORK-143 changeset-release/main
Rename plan directories to plural form Change the plan package's directory convention from singular to plural: spec/ to specs/, decision/ to decisions/, milestone/ to milestones/. Keep work/ unchanged (collective noun).
12/12 criteria
WORK-157 main
Add --type plan to create-refrakt Add a planning-only scaffold option to create-refrakt that produces a minimal package.json + .gitignore and delegates the plan/ tree creation to refrakt plan init. Single-command entry point for users who want refrakt just for plan management.
12/12 criteria
WORK-158 main
Adopt {ID}-{slug}.md filename convention for plan items Plan files currently live under plan/{work,specs,decisions}/ with slug-only filenames (e.g. plan-validate-command.md). The ID (WORK-033) lives in the {% work %} frontmatter tag but doesn't appear in the filename. A few recent items (WORK-149 through WORK-156) started prefixing the ID, producing an inconsistent mix: 8 prefixed vs. 196 unprefixed across work/specs/decisions.Standardising on {ID}-{slug}.md for every auto-ID type (work, bug, spec, decision) makes files grep-friendly, gives unambiguous references in commits/PRs/chat ("see WORK-158" points at exactly one file without a frontmatter scan), and sorts items by ID naturally in directory listings. Milestones keep their semver names (v1.0.0.md) since they don't use the numeric ID scheme.
12/12 criteria
WORK-048 changeset-release/main
Keyboard navigation for plan site Add keyboard shortcuts for fast navigation: / to focus search, j/k to move between sidebar items, Enter to navigate, [/] to jump between entity type groups, o to toggle collapse, Escape to clear.
8/8 criteria
WORK-049 changeset-release/main
Dependency visualization for plan site Surface cross-entity relationships by scanning content for ID references (WORK-XXX, SPEC-XXX, BUG-XXX, ADR-XXX). Build a bidirectional relationship index and render relationships in a dedicated layout slot on each entity page.
7/7 criteria
WORK-075 changeset-release/main
Update plan init CLAUDE.md template with resolution guidance Update the workflow section that refrakt plan init writes to CLAUDE.md to include guidance on using --resolve when completing work items.
3/3 criteria
WORK-092 changeset-release/main
Create @refrakt-md/eleventy adapter package Build the Eleventy (11ty v3) framework adapter. The simplest integration — no Vite, no bundler, no framework. Just global data files, templates, and renderToHtml().
0/10 criteria
WORK-130 changeset-release/main
Support attribute clearing in plan CLI update command The update command can set or replace attribute values but cannot remove them. Once you set --assignee claude or --milestone v1.0.0, there's no way to unset it. Support empty string as "clear": --assignee "" removes the attribute from the tag.
5/5 criteria
WORK-139 changeset-release/main
plan-history CSS rendering Style the plan-history rune with a vertical timeline layout following the design conventions established by the timeline rune (connected line, circle markers) and the diff rune (add/remove coloring).
12/12 criteria