Repository navigation
0.10.0 — mobile-first, and a loop a weak model cannot skip
Mobile-first, and a design loop that a weak model cannot skip. Everything here
was measured on live runs at the capability floor (Haiku), and most of it exists
because an instruction the agent could choose to ignore was ignored.
Added
- The loop:
decide→spec→mockup→make→critique.decide
runs once per project. The other four run per page, feature or functionality.
mockupis new: a low-fidelity grayscale drawing, reviewed before any code,
in HTML (the default), Figma or Google Stitch. Every region is labelled with
its measured size, and the phone frame draws the menu open as well as closed. jig verdicts <surface>. A critique's reader arms write one verdict per
rule to.jig/critique/<surface>/screen.jsonandcode.json; this command
decides whether the review is complete and computes the counts the attestation
reports. It refuses invented ids, a rule filed by the wrong arm, a rule judged
twice, ann/awhose reason says the rule was never read, andrendered: true
with no artefact. A screen pass with no render isskipped, notran.jig probe. One expression the critique evaluates in any browser at 360,
768 and 1280. It operates the phone menu (does it open, doesaria-expanded
change, does the label read as close, does Escape close it), measures sideways
scroll, and reads whether the styles and tokens actually applied.verdicts
refuses a verdict the probe contradicts.jig gate, run by a Stop hook — off unless you ask for it with
install --hook, or say yes when an interactive install offers it. It blocks
an agent from finishing while the files it changed failcheck, or while the
/jigcommand it just ran left its work unfinished. After three attempts it
lets go and says the work is not done.--yesnever adds it: that is the
agent's path, and nobody is there to consent.updatemoves an existing hook
to the new version and never adds one.- Six mobile rules.
D-111a page that never adapts,D-112100vh,
F-113form text that zooms on iOS,D-114a bar under the notch,
D-115a page that scrolls sideways,E-116a menu that cannot be opened or
cannot say it is open. H-117a token name nothing declares. Avar()naming a property no file
declares makes its whole declaration invalid, so the page silently loses its
font, spacing and borders. Three of four live builds shipped exactly that,
and every file-based check passed them.P-14site navigation, composed for the phone first: what to show at each
width, a named menu control whose state is visible and announced,aria-current
styled from the attribute, and no sideways-scrolling nav row.
Changed
specwrites a whole composition per screen size, phone first, with
regions:andnav:at each — not one composition and a note about narrow
screens. A menu button at a width where the links fit is refused: where the
button sits is the project's decision, whether it exists at that width is not.makefinishes on three gates: a pastedJIG_CHECKwith no mechanical
errors, a region-by-region comparison with the approved mockup at each width,
and each size's spec fields accounted for.critiqueoperates the page instead of only looking at it, judges the
P-patterns the spec uses, and sends its findings back tomakeuntil the
page is clean or the user accepts what is left, by id.deciderecords what is still open in anUnresolvedsection, and writes
only reasons the owner gave.explainsearches every line of every rule, and the free sections of the
reference, not only titles and preambles.checkwarns whenjig.config.jsonis unreadable or declares a mode the
token layer does not import, and counts those warnings inJIG_CHECK.L-01's squint test runs on a grayscale render where a browser exists;
reading the source is the fallback, not the equal.init --yessays what it did not decide — no surface mapping, and
re-runninginitafter you declare one.