One renderer, three widgets, three JSON objects

The three widgets we ship were written as three separate files. This page draws them from the configuration on the left with one renderer — so what makes the rubric editor different from the voice pills is the JSON, not the code. That is the claim behind letting Claude author a moment for the form in front of it.

Nothing here is a lookalike. The card, the tokens, the wordmark and every row are read out of the shipped rubric-editor build at build time, and the rows are drawn by the product's own frRender. A separate node check compares these same three configs against the built HTML of all three widgets — title, boot line, act label and section labels match.

One gap, left visible. minLabel / maxLabel shipped into the contract and the web form, but field-render.ts has no control for them, so the connector would draw "Pick your side" as two bare sliders. The marked rows are what it should draw. That is the next piece of work, not a rendering trick on this page.

Where the boundary sits. The importance words — Nice to have, Useful, Important, Decides it — belong to the renderer, not the config. A config chooses how many steps; it cannot reword them. If each form could, two rubrics would stop meaning the same thing. Copy that describes this form is Claude's; vocabulary that has to compare across forms is ours.

What this page is not. It does not park, hydrate from a tool result, report its height or save — that is the shipped widgets' real work and none of it runs here. The question this answers is narrower and had to come first: can the schema say everything the three widgets say?