remarque-tokens 0.25.0 → 0.26.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/AGENT_RULES.md CHANGED
@@ -325,9 +325,10 @@ the documented DTCG divergences.
325
325
 
326
326
  ## Installing the Skills
327
327
 
328
- This package ships two Claude Code skills under the npm subpath exports
329
- `remarque-tokens/skills/remarque` and `remarque-tokens/skills/adopt`
330
- (resolving to `skills/remarque/SKILL.md` and `skills/remarque-adopt/
328
+ This package ships three Claude Code skills under the npm subpath
329
+ exports `remarque-tokens/skills/remarque`, `remarque-tokens/skills/adopt`,
330
+ and `remarque-tokens/skills/new-page` (resolving to `skills/remarque/
331
+ SKILL.md`, `skills/remarque-adopt/SKILL.md`, and `skills/remarque-new-page/
331
332
  SKILL.md` in the installed package). Claude Code only discovers skills
332
333
  from a project's own `.claude/skills/` (or `~/.claude/skills/`), never
333
334
  from `node_modules` — copy them in explicitly, one `cp` per skill:
@@ -336,14 +337,16 @@ from `node_modules` — copy them in explicitly, one `cp` per skill:
336
337
  mkdir -p .claude/skills
337
338
  cp -r node_modules/remarque-tokens/skills/remarque .claude/skills/remarque
338
339
  cp -r node_modules/remarque-tokens/skills/remarque-adopt .claude/skills/remarque-adopt
340
+ cp -r node_modules/remarque-tokens/skills/remarque-new-page .claude/skills/remarque-new-page
339
341
  ```
340
342
 
341
343
  The copies are versioned with the installed package, not auto-updating —
342
- re-copy both after a MAJOR bump, or any time this file's
344
+ re-copy all three after a MAJOR bump, or any time this file's
343
345
  "Machine-Readable Output" shape changes.
344
346
 
345
347
  - `remarque` — the build/review contract for pages on the current version (tier rules, archetypes, pitfalls #6/#7).
346
348
  - `remarque-adopt` — the version-bump/migration playbook (this file's "Machine-Readable Output" section is its main dependency): verify the resolved version past the 0.x caret freeze, discover newly-required tokens from `remarque-audit --json`, solve missing values against the consumer's own backgrounds, classify `remarque-drift --json` output, report against a fixed PR-body contract.
349
+ - `remarque-new-page` — the page-building procedure, companion to (not a restatement of) the `remarque` loader skill: pick the archetype, fetch-and-verify the relevant registry item instead of transcribing its markup, wire the page per the pitfalls above, gate acceptance on `remarque-audit --json` plus the registry item's own markup-contract assertions.
347
350
 
348
351
  ---
349
352
 
package/CHANGELOG.md CHANGED
@@ -4,6 +4,19 @@ All notable changes to `remarque-tokens` are documented here. Token value
4
4
  changes always state the design rationale — downstream sites pin against
5
5
  these entries when syncing.
6
6
 
7
+ ## 0.26.0 — 2026-07-23
8
+
9
+ `remarque-new-page` skill (closes #108) + `token-drift.yml` optional audit input (closes #110) — the last two items of the skill-suite/CI program.
10
+
11
+ ### Added
12
+
13
+ - **`.claude/skills/remarque-new-page/SKILL.md`** — a third Claude Code skill, a companion to (not a restatement of) the existing `remarque` loader skill: five steps, each ending in a machine gate. (1) load the loader skill's three files rather than build from training-data token values; (2) pick one of REMARQUE.md's seven archetypes, never an invented eighth; (3) for module-backed pages (Essay/Broadsheet/Forms/Palette Deck) fetch the registry item — `node_modules/remarque-tokens/registry/<name>.json` or the served URL — and **verify its sha256 against the `integrity` pin before applying anything** (the same transcription bug issue #89 documents, a hand-copied sidenote `aria-label` that drifted out of DOM order); (4) wire the page per AGENT_RULES pitfalls #6 (string-form `@import` only)/#7 (unlayered tokens import) and the `.remarque-prose`/`.content-reading` pairing (`.remarque-prose` supplies typography only, never centers the column); (5) gate acceptance on `remarque-audit --json` reporting `passed: true` **and** the registry item's own markup-contract assertions (sidenote DOM-order, `data-entry-number`/`attr()`, label/`aria-describedby` pairing, `data-palette`/`data-theme` co-location — per module).
14
+ - **All three skills now ship in the npm tarball.** `scripts/lib/skills.mjs`'s shared `SKILLS` table gains the new skill (canonical `.claude/skills/remarque-new-page/SKILL.md`, packaged `skills/remarque-new-page/SKILL.md`) — `scripts/build-skills.mjs`/`scripts/test-skills.mjs` cover it automatically through that shared table, no separate wiring needed for the freshness/frontmatter/flag/path checks. `scripts/test-pack.mjs`'s hardcoded tarball-listing and installed-package assertions are extended to check for the third skill explicitly (that script doesn't read the shared table). New export: `remarque-tokens/skills/new-page` (→ `skills/remarque-new-page/SKILL.md`). `package.json`'s existing `skills/` files entry already covers the new directory; no `files` change needed.
15
+ - **README + AGENT_RULES.md "Installing the Skills"** — both updated for three skills (three `cp` commands instead of two) and both skill-listing bullets extended with a `remarque-new-page` entry.
16
+ - **`.github/workflows/token-drift.yml`: three new OPTIONAL `workflow_call` inputs** — `run-audit` (boolean, default `false`), `palette-path` (string, default `''`), `src-dir` (string, default `'.'`). When `run-audit: true`, a new step runs `npx remarque-audit --palette <palette-path> --src <src-dir>` from the consumer's own checkout, against the remarque-tokens the consumer already installed under `package-dir` — one workflow call now covers both the drift and audit gates instead of a caller wiring a second script step by hand. `palette-path`/`src-dir` are relative to `package-dir` (the audit step's working directory), matching how `npx remarque-audit` is normally invoked locally. The step fails fast with a clear `::error::` if `run-audit: true` but `palette-path` is left blank (workflow_call has no conditional-required-input mechanism). **Backward compatible by construction:** `run-audit` defaults to `false`, and both existing callers — williamzujkowski.github.io's `audits.yml` and tsundoku's `deploy.yml`, both read on their own `main` branches for this release — call this workflow today with only `css-file`/`package-dir`/`remarque-ref`, so neither is affected without opting in.
17
+ - **`run-golden` deliberately NOT added**, despite the issue text raising it alongside `run-audit`. `scripts/palette-golden.mjs` is remarque-internal tooling: it binds THIS package's own `tokens-palette.css` to the `remarque-light`/`remarque-dark` reference palettes from `@williamzujkowski/oklch-terminal-themes` and checks remarque's own release hasn't drifted from its golden values. It ships no CLI bin (`package.json`'s `bin` only exports `remarque-audit`/`remarque-drift`/`remarque-theme`) and takes no `--palette`/`--src` arguments a generic consumer could point at their own stylesheet — there is no consumer-facing analog to generify, unlike `run-audit`/`remarque-audit`. Documented inline in the workflow's own header comment.
18
+ - Version-only regeneration of `tokens.json`/`tokens.d.ts`/`registry.json`/`registry/*.json` (no token, CSS, or registry-content changes this release — `tokens.schema.json` unchanged).
19
+
7
20
  ## 0.25.0 — 2026-07-23
8
21
 
9
22
  `remarque-adopt` skill + skills npm export (closes #107) — ratified 3-0 (skill-suite vote, 2026-07-23), the anchor item of the skill suite. Codifies the consumer-conformance playbook run five times in one day as hand-written agent briefs (williamzujkowski.github.io#381, tsundoku#243/#237, remarque-starter#7/#8) into a procedural, machine-gated skill.
package/README.md CHANGED
@@ -69,11 +69,12 @@ The agent rules define build order, non-negotiable rules, disallowed patterns, a
69
69
 
70
70
  Packaging for agent tooling:
71
71
  - **npm exports:** `remarque-tokens/agent-rules` (→ `AGENT_RULES.md`) and `remarque-tokens/spec` (→ `REMARQUE.md`), alongside the existing `remarque-tokens/tokens.json`, so a project can point an agent at `node_modules/remarque-tokens/AGENT_RULES.md` without hardcoding a filename.
72
- - **Claude Code skills (two):**
72
+ - **Claude Code skills (three):**
73
73
  - [`.claude/skills/remarque/SKILL.md`](.claude/skills/remarque/SKILL.md) — triggers on "remarque" / "design system" / new-page work, loads all three files, and states the tier rules, the audit command, and the two build-time pitfalls (unlayered-token-import, string-form `@import`) that pass a green build while silently breaking.
74
74
  - [`.claude/skills/remarque-adopt/SKILL.md`](.claude/skills/remarque-adopt/SKILL.md) — triggers on "bump remarque-tokens" / "upgrade the design system" / "adopt remarque in an existing site" / an audit that starts failing after a version bump. The consumer-conformance playbook (issue #107): verify the resolved version past the 0.x caret freeze, discover newly-required tokens from `remarque-audit --json` mechanically, solve missing values against the *consumer's own* backgrounds (keep-if-passing), classify `remarque-drift --json` output (FAIL/WARN/INFO), and report against a fixed PR-body contract. Every step ends in a machine gate — `passed: true`, not agent judgment.
75
+ - [`.claude/skills/remarque-new-page/SKILL.md`](.claude/skills/remarque-new-page/SKILL.md) — triggers on "new page" / "add a page" / "build an essay/archive/landing page" / "use an archetype". A companion to the `remarque` loader skill, not a parallel restatement of it: pick the archetype from REMARQUE.md, fetch the relevant registry item and verify its sha256 against the `registry.json` pin before applying it (issue #89's transcription-bug prevention), wire the page per AGENT_RULES pitfalls, and gate acceptance on `remarque-audit --json` plus the registry item's own markup-contract assertions (issue #108).
75
76
 
76
- Both ship in the npm tarball under `skills/` (see "Installing the skills" below) as well as living at `.claude/skills/` in this repo.
77
+ All three ship in the npm tarball under `skills/` (see "Installing the skills" below) as well as living at `.claude/skills/` in this repo.
77
78
  - **Live tokens endpoint:** the demo site serves the current `tokens.json` at **https://williamzujkowski.github.io/remarque/tokens.json**, and its schema at **https://williamzujkowski.github.io/remarque/tokens.schema.json** — a remote agent can fetch current token values (and validate their shape) directly instead of trusting training data.
78
79
  - **Markup-contract registry:** a shadcn-`registry-item.json`-shaped, version-pinned, hash-verified registry of known-good markup for the Essay/Broadsheet/Forms/Palette Deck modules — **https://williamzujkowski.github.io/remarque/registry.json** (index) and **https://williamzujkowski.github.io/remarque/registry/essay.json** (per item; also `broadsheet`/`forms`/`palette-deck`). Fetch and apply the markup instead of transcribing it from spec prose — see REMARQUE.md's "The Registry" and AGENT_RULES.md's "Prefer the Registry Over Transcribing Prose."
79
80
 
@@ -88,11 +89,12 @@ in explicitly, one `cp` per skill:
88
89
  mkdir -p .claude/skills
89
90
  cp -r node_modules/remarque-tokens/skills/remarque .claude/skills/remarque
90
91
  cp -r node_modules/remarque-tokens/skills/remarque-adopt .claude/skills/remarque-adopt
92
+ cp -r node_modules/remarque-tokens/skills/remarque-new-page .claude/skills/remarque-new-page
91
93
  ```
92
94
 
93
95
  The copies are versioned with whatever `remarque-tokens` version is
94
- installed at copy time, not auto-updating — re-run both `cp` commands
95
- after any MAJOR bump (and any time `AGENT_RULES.md`'s "Machine-Readable
96
+ installed at copy time, not auto-updating — re-run all three `cp`
97
+ commands after any MAJOR bump (and any time `AGENT_RULES.md`'s "Machine-Readable
96
98
  Output" shape changes) to pick up the current playbook.
97
99
 
98
100
  ## Files
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "remarque-tokens",
3
- "version": "0.25.0",
3
+ "version": "0.26.0",
4
4
  "engines": {
5
5
  "node": ">=18"
6
6
  },
@@ -87,6 +87,7 @@
87
87
  "./registry/*": "./registry/*.json",
88
88
  "./skills/remarque": "./skills/remarque/SKILL.md",
89
89
  "./skills/adopt": "./skills/remarque-adopt/SKILL.md",
90
+ "./skills/new-page": "./skills/remarque-new-page/SKILL.md",
90
91
  "./package.json": "./package.json"
91
92
  },
92
93
  "files": [
@@ -4,7 +4,7 @@
4
4
  "type": "remarque:contract",
5
5
  "title": "Broadsheet Pattern",
6
6
  "description": "The editorial Landing/archive pattern: masthead, lead article, numbered entry list, and post-header kicker. Entry numerals are generated from `data-entry-number` via `attr()`, never `counter()`, and every kicker/dateline row is true `font-variant-caps: all-small-caps`, never `text-transform: uppercase`.",
7
- "version": "0.25.0",
7
+ "version": "0.26.0",
8
8
  "integrity": "sha256-BZea38PRdob4OfmdGN0eDw3U0adl7SEsdrjKgSewK9A=",
9
9
  "dependencies": [
10
10
  "remarque-tokens"
@@ -4,7 +4,7 @@
4
4
  "type": "remarque:contract",
5
5
  "title": "Essay Module",
6
6
  "description": "Sidenotes + sticky TOC rail for long-form Essay pages: margin notes relocated into real DOM order, right after the paragraph that cites them, numbered by CSS counter and labeled `aria-label=\"Note N\"` in the same order the counter advances — the mechanism that prevents the sidenote aria-label/DOM-order transcription bug found in the flagship migration (#89, williamzujkowski.github.io#380).",
7
- "version": "0.25.0",
7
+ "version": "0.26.0",
8
8
  "integrity": "sha256-zr04H0+0xf01OWLk6B2A9ziZOYJd4Sq5q5/cib65lbU=",
9
9
  "dependencies": [
10
10
  "remarque-tokens"
@@ -4,7 +4,7 @@
4
4
  "type": "remarque:contract",
5
5
  "title": "Forms Primitives",
6
6
  "description": "Native field/input/checkbox/radio/button primitives with state-color wiring. Every `.remarque-input` pairs `for`/`id` with its `.remarque-field-label`, and every `.remarque-field-message` is wired via `aria-describedby` on the control — the paint-layer `data-state` attribute is never the only signal; `aria-invalid`/`aria-describedby` on the input carry the real accessibility contract.",
7
- "version": "0.25.0",
7
+ "version": "0.26.0",
8
8
  "integrity": "sha256-WfYjcf04Dxxx7X21U5b6DrY90Qw95p0zkCQszoh77tE=",
9
9
  "dependencies": [
10
10
  "remarque-tokens"
@@ -4,7 +4,7 @@
4
4
  "type": "remarque:contract",
5
5
  "title": "Palette Deck (markup contract only — no executable content)",
6
6
  "description": "Markup/wiring contract for the Palette Deck: set `data-palette` on the same root element as `data-theme` and the two compose independently. This item ships ONLY that HTML fragment. `deck.js` — the runtime module itself, a dependency-free ~60-line ESM file — is deliberately NOT embedded here: the registry’s blocking no-executable-content condition is held to an unambiguous zero-`<script>`-tag bar across every item, so neither `deck.js` nor the FOUC-restore `<script>` sample documented alongside it in REMARQUE.md is included. Consume `deck.js` the normal way, via the `remarque-tokens/deck` package import (`dependencies` below); read the FOUC-restore snippet from the `docs` URL.",
7
- "version": "0.25.0",
7
+ "version": "0.26.0",
8
8
  "integrity": "sha256-WGgBZ2j0VnLPRAZlzv/4G1Wu9rKqTdXf1536dWWu8nU=",
9
9
  "dependencies": [
10
10
  "remarque-tokens"
package/registry.json CHANGED
@@ -2,14 +2,14 @@
2
2
  "$schema": "https://williamzujkowski.github.io/remarque/registry.schema.json",
3
3
  "name": "remarque-tokens",
4
4
  "homepage": "https://williamzujkowski.github.io/remarque/",
5
- "version": "0.25.0",
5
+ "version": "0.26.0",
6
6
  "items": [
7
7
  {
8
8
  "name": "essay",
9
9
  "type": "remarque:contract",
10
10
  "title": "Essay Module",
11
11
  "description": "Sidenotes + sticky TOC rail for long-form Essay pages: margin notes relocated into real DOM order, right after the paragraph that cites them, numbered by CSS counter and labeled `aria-label=\"Note N\"` in the same order the counter advances — the mechanism that prevents the sidenote aria-label/DOM-order transcription bug found in the flagship migration (#89, williamzujkowski.github.io#380).",
12
- "version": "0.25.0",
12
+ "version": "0.26.0",
13
13
  "integrity": "sha256-zr04H0+0xf01OWLk6B2A9ziZOYJd4Sq5q5/cib65lbU=",
14
14
  "file": "registry/essay.json"
15
15
  },
@@ -18,7 +18,7 @@
18
18
  "type": "remarque:contract",
19
19
  "title": "Broadsheet Pattern",
20
20
  "description": "The editorial Landing/archive pattern: masthead, lead article, numbered entry list, and post-header kicker. Entry numerals are generated from `data-entry-number` via `attr()`, never `counter()`, and every kicker/dateline row is true `font-variant-caps: all-small-caps`, never `text-transform: uppercase`.",
21
- "version": "0.25.0",
21
+ "version": "0.26.0",
22
22
  "integrity": "sha256-BZea38PRdob4OfmdGN0eDw3U0adl7SEsdrjKgSewK9A=",
23
23
  "file": "registry/broadsheet.json"
24
24
  },
@@ -27,7 +27,7 @@
27
27
  "type": "remarque:contract",
28
28
  "title": "Forms Primitives",
29
29
  "description": "Native field/input/checkbox/radio/button primitives with state-color wiring. Every `.remarque-input` pairs `for`/`id` with its `.remarque-field-label`, and every `.remarque-field-message` is wired via `aria-describedby` on the control — the paint-layer `data-state` attribute is never the only signal; `aria-invalid`/`aria-describedby` on the input carry the real accessibility contract.",
30
- "version": "0.25.0",
30
+ "version": "0.26.0",
31
31
  "integrity": "sha256-WfYjcf04Dxxx7X21U5b6DrY90Qw95p0zkCQszoh77tE=",
32
32
  "file": "registry/forms.json"
33
33
  },
@@ -36,7 +36,7 @@
36
36
  "type": "remarque:contract",
37
37
  "title": "Palette Deck (markup contract only — no executable content)",
38
38
  "description": "Markup/wiring contract for the Palette Deck: set `data-palette` on the same root element as `data-theme` and the two compose independently. This item ships ONLY that HTML fragment. `deck.js` — the runtime module itself, a dependency-free ~60-line ESM file — is deliberately NOT embedded here: the registry’s blocking no-executable-content condition is held to an unambiguous zero-`<script>`-tag bar across every item, so neither `deck.js` nor the FOUC-restore `<script>` sample documented alongside it in REMARQUE.md is included. Consume `deck.js` the normal way, via the `remarque-tokens/deck` package import (`dependencies` below); read the FOUC-restore snippet from the `docs` URL.",
39
- "version": "0.25.0",
39
+ "version": "0.26.0",
40
40
  "integrity": "sha256-WGgBZ2j0VnLPRAZlzv/4G1Wu9rKqTdXf1536dWWu8nU=",
41
41
  "file": "registry/palette-deck.json"
42
42
  }
@@ -1,7 +1,8 @@
1
1
  /*
2
- * Shared table + tiny helpers for the two Claude Code skills this package
3
- * ships and packages — used by scripts/build-skills.mjs (prepack copy +
4
- * CI freshness gate) and scripts/test-skills.mjs (content validation).
2
+ * Shared table + tiny helpers for the three Claude Code skills this
3
+ * package ships and packages — used by scripts/build-skills.mjs (prepack
4
+ * copy + CI freshness gate) and scripts/test-skills.mjs (content
5
+ * validation).
5
6
  *
6
7
  * `.claude/skills/<name>/SKILL.md` is the ONE canonical, hand-authored
7
8
  * copy of each skill (also what a local Claude Code session in this repo
@@ -24,6 +25,12 @@ export const SKILLS = [
24
25
  packaged: 'skills/remarque-adopt/SKILL.md',
25
26
  exportName: './skills/adopt',
26
27
  },
28
+ {
29
+ name: 'remarque-new-page',
30
+ canonical: '.claude/skills/remarque-new-page/SKILL.md',
31
+ packaged: 'skills/remarque-new-page/SKILL.md',
32
+ exportName: './skills/new-page',
33
+ },
27
34
  ];
28
35
 
29
36
  /*
@@ -0,0 +1,121 @@
1
+ ---
2
+ name: remarque-new-page
3
+ description: >
4
+ Build a new page in a project that consumes `remarque-tokens` — pick the
5
+ right archetype, fetch registry items instead of transcribing markup,
6
+ wire the page per AGENT_RULES pitfalls, and gate on remarque-audit plus
7
+ the registry's own markup-contract assertions. Use when the user says
8
+ "new page", "add a page", "build an essay", "build an archive page",
9
+ "build a landing page", "use an archetype", or asks for a page in a
10
+ Remarque-consuming project. Companion to the `remarque` loader skill —
11
+ load that one first for the tier rules and the two build-time pitfalls;
12
+ this skill is the page-building procedure on top of it, not a
13
+ restatement of it.
14
+ license: MIT
15
+ ---
16
+
17
+ # remarque-new-page
18
+
19
+ Five steps, each ending in a gate. This sits on top of the `remarque`
20
+ loader skill and does not restate its tier rules or pitfalls — it applies
21
+ them to the specific job of adding one new page.
22
+
23
+ ## 1. Load the loader skill's three files
24
+
25
+ Run the `remarque` skill first. If skill resolution isn't available in
26
+ this context, read `AGENT_RULES.md`, `REMARQUE.md`, and `tokens.json`
27
+ yourself — see that skill's file table for the consumer-project vs.
28
+ in-repo paths. Do not build from training-data memory of token values or
29
+ tier rules; both change across releases and the current values live only
30
+ in those three files.
31
+
32
+ - Gate: you can name which tier (`core`/`palette`) governs the tokens
33
+ this page will touch, and you have the CURRENT `tokens.json` open —
34
+ not a cached mental model from an older version.
35
+
36
+ ## 2. Pick the archetype
37
+
38
+ `REMARQUE.md`'s "Page Archetypes" section defines seven: Essay, Project
39
+ Dossier, Notebook, Landing, Reference/Docs, Changelog, Gallery. Match the
40
+ request to exactly one — "essay"/"blog post" → Essay; "archive"/"index of
41
+ posts" → Landing (often paired with the Broadsheet pattern below);
42
+ "docs"/"reference" → Reference/Docs. Do not invent an eighth.
43
+
44
+ - Gate: you can quote the chosen archetype's "Always includes"/"Never
45
+ includes" lists from the spec, not paraphrase them from memory.
46
+
47
+ ## 3. Module-backed pages: fetch the registry item, verify, apply
48
+
49
+ If the archetype uses one of the four registry-backed modules — Essay
50
+ (sidenotes/TOC rail), Broadsheet (Landing/archive pattern), Forms, or
51
+ Palette Deck — do not transcribe markup from REMARQUE.md's prose. That is
52
+ the exact failure mode issue #89 documents: a hand-copied sidenote
53
+ `aria-label` drifted out of DOM order. Fetch the item instead:
54
+
55
+ ```bash
56
+ cat node_modules/remarque-tokens/registry/essay.json # or broadsheet/forms/palette-deck
57
+ # or, if not installed locally:
58
+ curl -s https://williamzujkowski.github.io/remarque/registry/essay.json
59
+ ```
60
+
61
+ Then **verify integrity before applying anything** — recompute the sha256
62
+ over the fetched item's `files[].content` and compare it to that item's
63
+ own `integrity` field (both are the pin recorded in `registry.json`'s
64
+ index):
65
+
66
+ ```bash
67
+ node -e '
68
+ const fs = require("fs"), crypto = require("crypto");
69
+ const item = JSON.parse(fs.readFileSync(process.argv[1], "utf8"));
70
+ const bytes = Buffer.from(item.files.map(f => f.content).join(""));
71
+ console.log("sha256-" + crypto.createHash("sha256").update(bytes).digest("base64"));
72
+ ' node_modules/remarque-tokens/registry/essay.json
73
+ # compare stdout, byte for byte, to that same file's "integrity" field
74
+ ```
75
+
76
+ Apply `files[].content` verbatim — the `remarque:css` entry as the CSS
77
+ module, the `remarque:markup` entry's `usage.html` as the page's starting
78
+ DOM — rather than retyping either from memory.
79
+
80
+ - Gate: the computed hash matches `integrity` exactly. A mismatch means
81
+ stop and re-fetch; never apply an unverified payload.
82
+
83
+ ## 4. Wire it per AGENT_RULES pitfalls
84
+
85
+ Three mistakes pass a green build with no warning, so verify them
86
+ explicitly:
87
+
88
+ - **Unlayered tokens import (Pitfall #7).** Never `@import
89
+ "remarque-tokens" layer(...)` — layering makes every `@theme inline`
90
+ mapped utility circular and invalid.
91
+ - **String-form `@import` only (Pitfall #6).** `@import './tokens.css';`,
92
+ never `@import url(...)` — Tailwind v4/Lightning CSS silently drops the
93
+ latter for local files. Verify the built CSS contains `.remarque-prose`
94
+ after touching any import.
95
+ - **`.remarque-prose` + `.content-reading` pairing.** `.remarque-prose`
96
+ supplies typography only; it does not center the column. Every reading
97
+ column needs both classes together, and (Pitfall #2) the page's header
98
+ must share the same centered measure the prose body uses, or the two
99
+ misalign.
100
+
101
+ - Gate: grep the built CSS for `.remarque-prose` (proves the import
102
+ survived), and confirm every prose block in the new page carries
103
+ `content-reading` alongside it.
104
+
105
+ ## 5. Acceptance
106
+
107
+ ```bash
108
+ npx remarque-audit --palette <file> --src <dir> --json
109
+ ```
110
+
111
+ Requires `passed: true` in the JSON — not "looks close." If the page used
112
+ a registry module, also re-check it against that module's own
113
+ markup-contract rule from AGENT_RULES.md's Quality Checklist: Essay's
114
+ sidenote/TOC-rail DOM-order + `aria-label` rule, Broadsheet's
115
+ `data-entry-number`/`attr()` + small-caps rule, Forms' label/
116
+ `aria-describedby` pairing rule, or Palette Deck's `data-palette`/
117
+ `data-theme` co-location rule.
118
+
119
+ - Gate: `remarque-audit --json` reports `passed: true`, AND the
120
+ module-specific markup-contract rule above holds. Either failing means
121
+ the page isn't done.
package/tokens.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Remarque design tokens — GENERATED from tokens.json by
3
- * scripts/tokens-json.mjs (v0.25.0). Do not edit — the CSS
3
+ * scripts/tokens-json.mjs (v0.26.0). Do not edit — the CSS
4
4
  * (tokens-core.css + tokens-palette.css) is the source of truth;
5
5
  * tokens.json is the intermediate machine-readable form this file is
6
6
  * generated from. Regenerate with: node scripts/tokens-json.mjs
package/tokens.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "$description": "Remarque design tokens — GENERATED from tokens-core.css + tokens-palette.css by scripts/tokens-json.mjs. Do not edit; the CSS is the source of truth.",
4
4
  "$extensions": {
5
5
  "remarque": {
6
- "version": "0.25.0",
6
+ "version": "0.26.0",
7
7
  "tiers": {
8
8
  "core": "immutable identity — overriding forks the system",
9
9
  "palette": "sanctioned personalization surface — override freely, then run remarque-audit"