Choosing the consumer
SPEC-153 names @refrakt-md/plan as the first consumer. Pick a plan rune whose composed form reproduces its output, or whose differences can be explained, and record the choice. If no plan rune fits without changing published output, ship the proof through a fixture plugin that the harness packs, and record why plan was not used. Do not add a rune only to have something to ship.
Acceptance Criteria
- A composed rune file loads identically from a project directory and from a plugin's declared rune directory, asserted by loading the same file both ways and comparing the resulting
Rune (D1) - A plugin's composed rune survives
npm pack → install → load in a fixture project outside the workspace, asserted with the WORK-627 harness; the plugin used, and why, is recorded - A plugin whose declared rune directory is missing from
files, or whose package is unresolvable, fails refrakt plugin validate with the resolved path and the cause (D6) - A plugin rune read failure throws rather than yielding an empty set, asserted by a fixture plugin with a blocked
./package.json export (D3) - A composed rune is named
<rune>.md, its name is read from the filename, and a frontmatter key restating it is rejected rather than silently preferred (D9) - A rune in
runeDir and a code-defined PluginRune with the same name in one plugin is rejected, naming both refrakt inspect, refrakt reference and refrakt contracts show a directory-loaded rune exactly as they show a code-defined composed onenpm run seo:baseline:check and refrakt contracts --check report no drift on either contract copy, unless the chosen plan rune moves them, in which case every difference is reviewed and explained