Repository navigation
Jig 0.8.0
Everything here was found by handing Jig to agents that had never seen it and asking them to build something real — its own documentation site. None of it was found by the test suite, which passed throughout.
Minor rather than patch: explain prints lines it did not print before, and init can write a file it did not write before.
Fixed
jig explain discarded most of the reasoning in the rules. The parser kept the first ❌ and the first ✅ and threw away everything else. 41 of 104 rules carry prose outside that pair — 103 lines. A-04 explains why shadow-only definition cannot hold 3:1; C-22 loses sixteen lines; C-49 leads with a three-row table distinguishing when a link needs colour, when it needs an underline, and when neither is required — and its pair alone says "keep the underline". All of it shipped in the tarball, installed into every skill directory, and was unreachable through the command built to read it.
02-tokens.md documented a Tailwind arrangement that fails. It told every reader to write @theme { @import "./jig/theme.css"; } and claimed it yields utilities. Tailwind 4 rejects it: "@theme blocks must only contain custom properties or @Keyframes." The tokens cannot move into @theme regardless — it requires them top-level and unnested, while they live in :root and are redeclared under [data-theme="dark"] and a prefers-color-scheme query, which is what makes dark mode work.
A section headed "Notes for the author (not for the agent)" shipped to every agent. The heading was a label, not a mechanism. A probe read it, quoted the A-07/A-08 line back as "the author's own notes… license to go tighter than the shared default", and halved the radius scale on that authority.
The published package shipped no changelog, despite the repo holding 32KB of one.
A-01 had no stated scope for "then ask". Two agents given the same brief split on it — one shipped the unbranded default and deferred, the other proposed a hue and argued the proposal was the ask — both citing the same conflict-resolution clause. A proposal is now stated to be a question with a suggested answer, not a decision.
B-11 capped line length and stated no floor. Measured on the documentation site: two side-by-side panels rendering prose at 41 characters, in a mode whose --measure-prose selects 68.
Added
check reports what it examined. 0 errors · 104 rules, 0 fired was byte-identical whether forty components were examined and found clean or nothing was examined at all. It now reads · 26 files, 4 with styles, the JIG_CHECK: record carries files= and styled=, and a run where nothing carried a style region says "Nothing inspected."
init offers a Tailwind v4 alias block — and asks first. Utility classes change how every component in a project is written, and both they and plain var() are correct, so silence is no and --yes declines. Only the 18 Tailwind namespaces are aliased: 189 declared names filter to 87, and the filter also excludes every primitive 02-tokens.md says never to consume directly.
A guard that staged assets stay out of git. On its first run it caught a second, pre-existing hole.
Corrected
0.7.0's notes said the non-TTY refusal "names the three ways out". It names three; two work. The guard runs before any config is read, so jig.config.json alone still exits 1.
Documentation
The README covers both starting points. init behaves differently on an existing site than on a brand-new one — one derives its brand from your CSS and wires the import, the other resolves to the unbranded default and prints it — and only the first was documented. Both are now written from real runs.
It also still said the token layer lives at .jig/tokens/, in five places, including "Omit it and you get .jig/tokens/". That has been false since 0.7.0, and the 0.7.1 fix corrected the rules file and missed the README — which is worse, since it is the first thing anyone reads.
And Tailwind got one sentence, telling you to do the thing Tailwind rejects. Plain CSS and Tailwind v4 are now separate sections; both are the same single barrel import, with the optional alias block explained as the opt-in it is.
init's printed import is the barrel, like the wired one. Writing the brand-new-site section meant running init on an empty repo, which nothing had done. It printed the brand and mode files separately while the wiring path used theme.css, so anyone starting from an empty directory was told to set their project up differently from everyone else.
Anti-slop enforcement
Three detectors for section A, and a self-check that names its tells. Section A is Jig's answer to "what is AI slop" — fourteen rules for the defaults a model reaches for when nothing was specified. Three had detectors. The other eleven were enforced by one self-check question — "would this look different from a generic template?" — which an agent that has just produced a generic template answers yes to, and whose A-01 → A-10 range silently excluded four of the fourteen.
Jig's own documentation site shipped <span aria-hidden="true">❌</span> Don't in the chrome of all 104 rule pages, with check --all reporting zero findings.
A-05 (emoji as iconography) and A-10 (placeholder content) were never judgment calls. A-09 (marketing voice) is the first mode-gated detector: it fires in product and operator, stays silent in editorial where that register belongs, and stays silent when no mode is declared rather than guessing.
The remaining eight stay judgment, honestly — detecting "a container around every group" needs to know what an element is and how heavy it looks, and six noisy checks that fire on correct code is how a linter gets switched off.