V0.30.1
Name:v0.30.1Status:complete

v0.30.1 — Transform engine facet decomposition

House-cleaning on the most central package in the project. transformRune in packages/transform/src/engine.ts resolves every universal rune axis — tint, density, width, spacing, reading, elevation, prominence, motion, background, frame, substrate, cover — in one ~800-line function whose steps are numbered 1, 1b, 1c … 1h, 2 … 9. This milestone replaces that section with a facet registry (SPEC-124): one module per axis, dependencies declared rather than implied by statement order, and a driver that merges their contributions.

No feature work. Every step is behaviour-preserving, and the governing rule is that the 630 pre-existing transform tests never change — they run through the public entry point, so an edit to accommodate a migration is a bug report, not a fix.

Milestone burndown: 0 open work items remaining; peak 9, started Aug 2702468Aug 27Sep 13
Open work items Ideal burndown
Progress 4/4 work items
History 4
  1. aface32
    statusplanningcomplete
    by bjornolofandersson
  2. 70b5550
    Created (planning)by bjornolofandersson
  3. 7b91f9a
    Content editedby Claude
    plan: retarget the facet milestone to v0.30.1 and require a patch change
  4. de0030a
    Content editedby Claude
    plan: draft facet registry for the transform engine's universal axes (SP

Work Items

Done 4
WORK-524 main
Consolidate warn-once diagnostics onto the facet collector
Retire the eight module-level *_WARNED sets in engine.ts, route every engine diagnostic through the facet WarningCollector, and settle the dedupe-scope question the migration deliberately deferred. Also convert the ten test files that currently spy on console.warn into assertions on returned warning data.
medium moderate
7/8 criteria
WORK-525 main
Derive structure contracts from facets
packages/transform/src/contracts.ts independently re-derives what the identity transform emits, from config — it imports types, helpers and merge, and never the engine. So refrakt contracts --check validates the contracts file against its own derivation, not against engine output: any engine change contracts does not mirror produces confidently wrong contracts while CI stays green. Now that the axes are facets, investigate whether each facet can declare its own contract contribution and collapse the two implementations into one.This is the spec's principal open question, and it may not pan out. Time-box the investigation and record the answer either way.
high complex
6/6 criteria
WORK-526 main
Let facets declare their own author attributes
transformRune still strips consumed author attributes from pass-through output using a fixed list naming eight facet-owned axes:
low simple
6/6 criteria
WORK-527 main
Universal axes are absent from structure contracts
refrakt contracts is documented as describing "the complete HTML structure the identity transform produces for every rune". It does not. Measured across the checked-in contracts/structures.json (132 runes), not one universal axis appears:
medium moderate
8/8 criteria