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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jig-ui",
3
- "version": "0.14.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. Warnings are listed and either fixed or explained one by
763
- one. A report with no `JIG_CHECK:` line, or one you typed yourself, is not a finished
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, indexable pages with no sitemap,
1164
- a sitemap that lists nothing.
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 fail `check`,
1177
- or a critique's verdict files fail `verdicts`, it refuses to let you stop and hands
1178
- you the failures as the reason. **Fix what it names.** Do not edit verdict files to
1179
- satisfy it, and do not report the work as done while it is blocking. After three
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
 
@@ -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, run `{{command_prefix}}decide` and stop until it has
18
- been written. Do not write it yourself from this task's prompt — it records
19
- decisions the project has made, and a file you author alone records
20
- decisions *you* have made, which is the opposite thing wearing the same
21
- name.
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?** Run it through
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. Never design the whole product up front. Critique findings go back to
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, indexable pages with no sitemap, a sitemap that lists nothing. The per-page half lives in spec, make and check.",
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
  },