jig-ui 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +67 -0
- package/README.md +16 -7
- package/dist/index.js +288 -169
- package/package.json +1 -1
- package/rules/00-anti-patterns.md +3 -3
- package/templates/COMMAND.md.tmpl +21 -8
- package/templates/SKILL.md.tmpl +10 -7
- package/templates/command-metadata.json +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jig-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "A design system for coding agents. 130 numbered UI rules, brand x mode design tokens, and an installer for Claude Code, Codex, Cursor and opencode.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -608,9 +608,9 @@ The budget is not a style preference; it is the width of the box someone else re
|
|
|
608
608
|
`robots.txt` is not this. It is public, advisory, and read by strangers as a list of interesting places: naming `/admin` there tells everyone where it is. A path is safe to name only when something else protects it — a session guard, an authenticating API — and never because the file asked politely.
|
|
609
609
|
|
|
610
610
|
### J-124 A sitemap that contradicts the page
|
|
611
|
-
❌ A route listed in the sitemap whose own metadata says `noindex`; a sitemap entry for a page that does not exist
|
|
612
|
-
✅ One answer per route. The sitemap lists what is indexable, and nothing else.
|
|
613
|
-
Contradicting yourself in two files tells a crawler you do not know which is true, and it will decide for you.
|
|
611
|
+
❌ A route listed in the sitemap whose own metadata says `noindex`; a sitemap entry for a page that does not exist; a `<loc>` written as a path, `/pricing`, which the format does not accept and a crawler drops
|
|
612
|
+
✅ One answer per route. The sitemap lists what is indexable, as full URLs, and nothing else.
|
|
613
|
+
Contradicting yourself in two files tells a crawler you do not know which is true, and it will decide for you. A sitemap needs the site's origin, so a project that has none yet has nothing to write: no sitemap is honest, and one full of paths is not.
|
|
614
614
|
|
|
615
615
|
### J-125 Invented facts in metadata
|
|
616
616
|
❌ `lastModified: new Date()` in a sitemap; a `datePublished` filled in because the field existed; an author, rating or price nobody supplied
|
|
@@ -759,8 +759,9 @@ menu and reported "matched exactly".
|
|
|
759
759
|
**1. `check` passes.** Run `{{scripts_path}} check --all` and paste its
|
|
760
760
|
`JIG_CHECK:` line into your report, as printed. `mechanical=fail:<n>` means not done:
|
|
761
761
|
fix every error and run it again. No mechanical finding is non-blocking, and you do
|
|
762
|
-
not get to decide one is.
|
|
763
|
-
|
|
762
|
+
not get to decide one is. Every warning is fixed, or waived on its own line with
|
|
763
|
+
`jig-allow <ID>: <why>` (see `gate`); an explanation in your report is not a waiver.
|
|
764
|
+
A report with no `JIG_CHECK:` line, or one you typed yourself, is not a finished
|
|
764
765
|
build.
|
|
765
766
|
|
|
766
767
|
**2. The build matches the approved mockup at each size.** Skip only when
|
|
@@ -1160,8 +1161,12 @@ Run `{{scripts_path}} seo` and report what it says. It needs no `DECISIONS.md`,
|
|
|
1160
1161
|
no spec and no confirmation: it reads what the project already serves, so it is
|
|
1161
1162
|
safe to run on the first day and on somebody else's codebase. It audits the whole project,
|
|
1162
1163
|
which is what one file cannot: a route whose metadata says `noindex` sitting in
|
|
1163
|
-
the sitemap, two pages claiming the same title,
|
|
1164
|
-
|
|
1164
|
+
the sitemap, two pages claiming the same title, a sitemap that lists nothing or
|
|
1165
|
+
lists paths instead of full URLs. It counts the pages it found, a dynamic route
|
|
1166
|
+
once and an endpoint (`rss.xml.ts`, `[id].txt.ts`, `api/`) not at all, since it
|
|
1167
|
+
serves no page. It also counts whether a sitemap and a robots file exist;
|
|
1168
|
+
neither is a finding, since no rule asks for them and a project with no domain
|
|
1169
|
+
yet cannot write an honest sitemap. Do not invent one to clear a count.
|
|
1165
1170
|
|
|
1166
1171
|
It is not a phase. The per-page half belongs where the copy is decided and
|
|
1167
1172
|
written — `spec` records whether a page is indexable and what it claims, `make`
|
|
@@ -1173,10 +1178,18 @@ positioning it had already dropped.
|
|
|
1173
1178
|
## gate
|
|
1174
1179
|
|
|
1175
1180
|
Not a command to run. In Claude Code, `install` adds a Stop hook that runs
|
|
1176
|
-
`{{scripts_path}} gate` whenever you try to finish. If files you changed
|
|
1177
|
-
or a critique's verdict files fail `verdicts`, it refuses
|
|
1178
|
-
you the failures as the reason. **Fix what it names.** Do
|
|
1179
|
-
satisfy it, and do not report the work as done while it is
|
|
1181
|
+
`{{scripts_path}} gate` whenever you try to finish. If files you changed have a
|
|
1182
|
+
`check` error or warning, or a critique's verdict files fail `verdicts`, it refuses
|
|
1183
|
+
to let you stop and hands you the failures as the reason. **Fix what it names.** Do
|
|
1184
|
+
not edit verdict files to satisfy it, and do not report the work as done while it is
|
|
1185
|
+
blocking.
|
|
1186
|
+
|
|
1187
|
+
A warning you are sure is right as it stands, because the detector guessed and the
|
|
1188
|
+
guess is wrong here, is waived on its own line or the line above, in the file's
|
|
1189
|
+
comment syntax: `jig-allow <ID>: <why>`. The reason is what the user reads, so write
|
|
1190
|
+
the case, not "intended". An error cannot be waived, a waiver with no reason waives
|
|
1191
|
+
nothing, and `check` prints every waiver it honoured. Waiving a warning to get past
|
|
1192
|
+
the gate, when the fix was available, is the failure the gate exists to catch. After three
|
|
1180
1193
|
refusals in one session it lets you stop; then tell the user plainly that the work is
|
|
1181
1194
|
not finished and what is still failing.
|
|
1182
1195
|
|
package/templates/SKILL.md.tmpl
CHANGED
|
@@ -14,18 +14,21 @@ cite the number when you follow or deliberately break one.
|
|
|
14
14
|
b. `DECISIONS.md` exists beside the token files — `jig/DECISIONS.md` by
|
|
15
15
|
default, or wherever `brand` in `{{config_file}}` puts them — and has
|
|
16
16
|
substance: not empty, no `[TODO]` markers left in it, more than a few
|
|
17
|
-
lines. If it does not,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
lines. If it does not, stop and ask the user to run
|
|
18
|
+
`{{command_prefix}}decide`. The interview lives in that command, not in
|
|
19
|
+
this file: questions you make up from here are not `decide`, and neither
|
|
20
|
+
is a file written from their answers. Do not write it yourself from this
|
|
21
|
+
task's prompt — it records decisions the project has made, and a file you
|
|
22
|
+
author alone records decisions *you* have made, which is the opposite
|
|
23
|
+
thing wearing the same name.
|
|
22
24
|
1. Load `{{rules_path}}/00-anti-patterns.md` and `{{rules_path}}/01-modes.md`.
|
|
23
25
|
2. Determine the mode from `{{config_file}}`, or infer it using the procedure in
|
|
24
26
|
`{{rules_path}}/01-modes.md` and state the inference in one line before building.
|
|
25
|
-
3. **Building a page, feature or functionality?**
|
|
27
|
+
3. **Building a page, feature or functionality?** It goes through
|
|
26
28
|
`{{command_prefix}}spec` → `{{command_prefix}}mockup` (low fidelity) →
|
|
27
29
|
`{{command_prefix}}make` (high fidelity) → `{{command_prefix}}critique`, one at a
|
|
28
|
-
time
|
|
30
|
+
time, each one run by the user. The procedure for each step is in the command,
|
|
31
|
+
so ask for the step you need rather than doing it from this summary. Never design the whole product up front. Critique findings go back to
|
|
29
32
|
`make`, then `critique` again, until clean or accepted by the user — then the
|
|
30
33
|
next feature.
|
|
31
34
|
**Building a screen rather than a single component?** Read `L-01 · Layout
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"status": "available"
|
|
26
26
|
},
|
|
27
27
|
"seo": {
|
|
28
|
-
"description": "Audit what a search engine and a link preview read, across the whole project: a noindex route in the sitemap, two pages with one title,
|
|
28
|
+
"description": "Audit what a search engine and a link preview read, across the whole project: a noindex route in the sitemap, two pages with one title, a sitemap that lists nothing or lists paths instead of URLs. The per-page half lives in spec, make and check.",
|
|
29
29
|
"argumentHint": "[--json]",
|
|
30
30
|
"status": "available"
|
|
31
31
|
},
|