Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
707f110
tokens: D-037 display and title type sizes (proposed)
j3w1 Oct 14, 2026
c495cf7
spec: regroup the decision log by topic and condense entries
j3w1 Oct 14, 2026
6c26ea7
docs: condense the README, consumer protocol and docs
j3w1 Oct 14, 2026
62cd1a4
chore: regenerate
j3w1 Oct 14, 2026
492b6c5
refactor: centralize Node helpers and fix generated consumption guidance
j3w1 Oct 14, 2026
0b23e8a
chore: regenerate
j3w1 Oct 14, 2026
dc0d461
spec: state each component rule once, without hand-written ratios
j3w1 Oct 14, 2026
5cdf5c1
spec: condense the foundation documents and add the D-037 sizes
j3w1 Oct 14, 2026
d3a99d9
docs: condense the port guides and state shared installer behaviour once
j3w1 Oct 14, 2026
5fe4ac5
chore: regenerate
j3w1 Oct 14, 2026
a99d63d
docs: restore facts the ledger found without another home
j3w1 Oct 14, 2026
46e6709
chore: regenerate
j3w1 Oct 14, 2026
a3816b4
Merge worker D2: state each spec and port-guide fact once
j3w1 Oct 14, 2026
41d872c
fix(site): control enhancement themes only bare controls (R-b)
j3w1 Oct 14, 2026
81ba5f6
fix(site): one copyWithStatus helper; copy labels cannot stick (R-g)
j3w1 Oct 14, 2026
c110c26
site: one shell built from the components it documents
j3w1 Oct 14, 2026
cf86a12
site: wide generated tables scroll instead of wrapping every cell
j3w1 Oct 14, 2026
12fe442
Merge branch 'orca/site-modernize' into orca/site-modernize-b
j3w1 Oct 14, 2026
937da3c
Merge worker D1: regroup the decision log and condense the docs
j3w1 Oct 14, 2026
0071724
spec: D-038 compact is the default density
j3w1 Oct 14, 2026
c8ab931
refactor(components): one button partial; composite actions reuse its…
j3w1 Oct 14, 2026
ea016f9
site: G1 corrections: compact chrome, readable tables, attached sources
j3w1 Oct 14, 2026
0757c6b
fix(components): focus at −2px, link hover per D-027, compact fallbacks
j3w1 Oct 14, 2026
dc73dcf
Merge branch 'orca/site-modernize' into orca/site-modernize-b
j3w1 Oct 14, 2026
c3df41d
fix(components): template button controls are the secondary button
j3w1 Oct 14, 2026
6d1fa34
build: recipes inline their relative style imports
j3w1 Oct 14, 2026
6ca4cbc
site: re-wrap one-line templates by hand
j3w1 Oct 14, 2026
75d0880
test: browser guard for one control language in the chrome
j3w1 Oct 14, 2026
e19d38a
spec: move rule detail out of the decision log into the sections it g…
j3w1 Oct 14, 2026
bf94f5a
docs: condense the UI consumption guide to what a consumer needs
j3w1 Oct 14, 2026
0e6d2d0
chore: regenerate
j3w1 Oct 14, 2026
e80de07
refactor(components): field parts live in one partial
j3w1 Oct 14, 2026
8a7e1f1
test: align link hover and recipe density with the accepted decisions
j3w1 Oct 14, 2026
7780141
site: drop release comparison rules nothing uses any more
j3w1 Oct 14, 2026
979ebe0
Merge worker D3: decisions keep the choice, rules live in spec
j3w1 Oct 14, 2026
6774d45
feat(demo): the Vue demo uses the canonical components throughout
j3w1 Oct 14, 2026
462c871
test: source guard for one control language in the chrome
j3w1 Oct 14, 2026
36db8f1
Merge branch 'orca/site-modernize' into orca/site-modernize-b
j3w1 Oct 14, 2026
28da53c
fix(site): the reference's sticky contents are screen-only
j3w1 Oct 14, 2026
bb6480b
test: a copy button recovers its label after quick repeated copies (R-g)
j3w1 Oct 14, 2026
50d91de
site: the shell declares the default compact density
j3w1 Oct 14, 2026
76273b4
test: workbench specs measure the specimen's button, not the preview's
j3w1 Oct 14, 2026
94e9a60
site: generated table cells wrap at word boundaries
j3w1 Oct 14, 2026
72ea771
site: the workbench's motion endpoints are marked as specimens
j3w1 Oct 14, 2026
f8272c0
chore: regenerate
j3w1 Oct 14, 2026
017efc2
site: split the reference into a static hub and focused detail pages
j3w1 Oct 14, 2026
a24c9db
chore: regenerate
j3w1 Oct 14, 2026
15dd5c7
fix: read matrix CSS through the static build graph
j3w1 Oct 14, 2026
af8c8ab
fix: resolve specimen destinations and preserve historical records
j3w1 Oct 14, 2026
f766871
chore: regenerate
j3w1 Oct 14, 2026
88b50dc
test: verify reference navigation and search against visible results
j3w1 Oct 14, 2026
ffcac05
chore: regenerate
j3w1 Oct 14, 2026
8ef356c
test: keep the static specification checks on every detail page
j3w1 Oct 14, 2026
01ac24b
chore: regenerate
j3w1 Oct 14, 2026
0af18b1
fix: preserve forced matrix states inside the compact shell
j3w1 Oct 14, 2026
67441a2
chore: regenerate
j3w1 Oct 14, 2026
ec5f91b
test: retain WCAG scans across the split specification
j3w1 Oct 14, 2026
1ee42bf
chore: regenerate
j3w1 Oct 14, 2026
dc0bb18
fix: make component source and decorative editor markers accessible
j3w1 Oct 14, 2026
86e527a
chore: regenerate
j3w1 Oct 14, 2026
e73a2e2
fix: resolve matrix styles from the raw composed specimens
j3w1 Oct 14, 2026
06df0bc
chore: regenerate
j3w1 Oct 14, 2026
a84f877
test: keep component evidence and token descriptions at their new homes
j3w1 Oct 14, 2026
b0a5ebc
chore: regenerate
j3w1 Oct 14, 2026
349d39b
docs: describe the site as a reference hub with detail pages
j3w1 Oct 14, 2026
60b2b94
docs: condense AGENTS.md and describe the reference hub (owner approv…
j3w1 Oct 14, 2026
054f9cf
fix: align component states with accepted theme decisions
j3w1 Oct 14, 2026
fefac38
chore: regenerate
j3w1 Oct 14, 2026
6ae7ef3
Merge worker E: components follow the accepted decisions
j3w1 Oct 14, 2026
149cc67
fix: address the code and meaning reviews of the modernized site
j3w1 Oct 15, 2026
983741d
spec: accept D-037 display and title type sizes
j3w1 Oct 15, 2026
4e48e6d
docs: state only what the branch does in the changelog
j3w1 Oct 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
111 changes: 47 additions & 64 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
# j3w1/theme agent instructions

This repository **defines** the j3w1 theme: one versioned specification with
exact tokens, component rules, a generated single-page visual reference at
`https://j3w1.github.io/theme/`, and machine exports for agents. If you are
applying the theme somewhere else, read `agents/consume.md` instead of this
file.
exact tokens, component rules, machine exports for agents, and a portal at
`https://j3w1.github.io/theme/` with a compact `/reference/` hub, component
detail on `/components/<id>/`, and `/reference/contrast/` and
`/reference/decisions/`. If you are applying the theme somewhere else, read
`agents/consume.md` instead of this file.

## Required reading, in order

Expand All @@ -23,57 +24,46 @@ Images never override tokens.

## Source of truth

Literal values live in `tokens/`. Meaning and permitted uses live in `spec/`.
Native keys live in port mappings. Test facts live in evidence records.
Literal values live in `tokens/`, meaning and permitted uses in `spec/`, native
keys in port mappings, test facts in evidence records (D-000). A contradiction
between spec and tokens is a defect to resolve, not a choice to make.

These files are generated: `exports/`, `schemas/json/`,
`site/src/styles/tokens.generated.css`, the port files under `ports/*/dist/`,
`ports/orca/install/specimen.json`, `packages/ui/README.md` (a copy of
`docs/ui-consumption.md`), and the marker blocks in `README.md` and the port
guides. Edit their sources and run `npm run generate`; never edit them by
hand. A contradiction between spec and tokens is a defect to resolve, not a
choice to make.
Generated, never edited by hand: `exports/`, `schemas/json/`,
`site/src/styles/tokens.generated.css`, `packages/ui/dist/`,
`packages/ui/README.md` (a copy of `docs/ui-consumption.md`), the port files
under `ports/*/dist/`, `ports/orca/install/specimen.json`, and the marker
blocks in `README.md`, `agents/consume.md` and the port guides. Edit their
sources and run `npm run generate`.

## The check loop

CI picks the checks a change needs (D-031). You can see its choice before you
CI picks the checks a change needs (D-031); `release-gate` is the only required
check and passes when every selected check passed. See the plan before you
push:

```
node scripts/ci/select.mjs --event pull_request --base origin/main --head HEAD
```

`release-gate` is the only required check: it passes when every selected check
passed.
Run what it selects, usually `npm run generate` (after any source change; `npm
run check` only reports drift), `npm run validate`, `npm run check`, `npm
test`, `npm run build && npm run test:dist`, and `npm run test:smoke`. Build
like CI with `GITHUB_SHA` set to the full commit; a pinned build refuses
uncommitted generated files, so commit first. Browser runs use port 4173; set
`PW_PORT` to a free port when another checkout is testing.

**Before you push.** Run what the plan selects. The usual set:
`npm run test:all` is the whole suite, with the browser part in parallel. Run
it when you changed rendering, tokens, components or the package, and say so
in the pull request. On `main`, CI runs the whole matrix for every site change
before it deploys; the workflow dispatch runs it on any branch.

```
npm run generate # rewrite every generated file (run it after any source change)
npm run validate # sources: manifest, decisions, tokens, docs, spec, contrast, ports, references, private material
npm run check # generated files are current, no orphans
npm test # node --test over sources and exports
npm run build && npm run test:dist # the site under /theme/
npm run test:smoke # the built site loads, renders from the tokens, takes a keyboard
```

`npm run check` only reports drift; `npm run generate` fixes it.

**The whole suite.** `npm run test:all` runs everything; the browser part runs
in parallel. Run it when you changed rendering, tokens, components or the package,
and say in the pull request that you did. On `main`, CI runs the whole matrix
for every change to the site before it deploys. From the Actions tab, the
workflow dispatch runs it on any branch.
Only the whole suite writes execution evidence. A subset (`test:smoke`, the
specs a pull request selects, one spec, shard or project) writes none and
never claims coverage. Report checks that were not run separately from checks
that passed.

**Evidence.** Only the whole suite writes execution evidence. A subset, such as
`test:smoke`, the specs a pull request selects, or a local run of one spec,
shard or project, writes none and never claims coverage.

Report checks that were not run separately from checks that passed.

**Design mode is a working tool, not a gate.** `npm run design` compares the
site at an anchored commit with the live dev server (`docs/design-mode.md`).
Nothing it shows is evidence, and it approves nothing.
Design mode (`npm run design`, `docs/design-mode.md`) is a working tool, not a
gate: nothing it shows is evidence, and it approves nothing.

## What you may do without a decision

Expand Down Expand Up @@ -115,34 +105,27 @@ exists) and the install commands generated from it into the port guides.
Commits are conventional (`feat:`, `fix:`, `docs:`, `spec:`, `tokens:`,
`site:`, `chore:`) and explain why.

## Specification UI maintenance

Every CSS hex literal a person can see on the j3w1 UI Theme Spec must get its
generated inline color swatch (D-014).
## Hex swatches (D-014)

- New sections and components get swatches from the whole-page build
transform. Never add or maintain swatches by hand.
- Explicit runtime renderers, such as the token inspector, use the same
literal parser and presentation helpers. Never scan the runtime DOM for
colors.
- Keep source text, copied text and machine exports unchanged.
- Run the three hex gates: source (`tests/hex-literals.test.js`), dist
(`tests/dist/hex-swatches.test.js`) and browser
(`tests/browser/hex-swatches.spec.js`).
Every visible CSS hex literal on the site gets its generated inline swatch from
the whole-page build transform; never add or maintain one by hand. Runtime
renderers, such as the token inspector, use the same literal parser and
presentation helpers and never scan the DOM for colours. Source text, copied
text and machine exports stay unchanged. The three gates are
`tests/hex-literals.test.js`, `tests/dist/hex-swatches.test.js` and
`tests/browser/hex-swatches.spec.js`.

## Execution evidence

- `tested` stays the compatibility alias for `testImplemented`. It is never a
pass.
- Every browser test needs an explicit `verification` annotation that names its
component, category, states, variants and limits.
- Use the shared evidence fixture for the real environment metadata.
- A test in the matrix proves rendering coverage only.
- `tested` stays the compatibility alias for `testImplemented`; it is never a
pass. A test in the matrix proves rendering coverage only.
- Every browser test needs an explicit `verification` annotation naming its
component, category, states, variants and limits, and uses the shared
evidence fixture for the real environment metadata.
- After the browser suite, run `npm run verification:report`, then
`npm run verification:check`, then `npm run test:verification`.
- Keep the exact specimen bytes.
- Run records go in the ignored `test-results/` and the published
`dist/verification/`, never in the deterministic committed exports.
- Keep the exact specimen bytes. Run records go in the ignored `test-results/`
and the published `dist/verification/`, never in the committed exports.
- Do not claim a manual keyboard or screen-reader pass without a recorded
protocol and environment.

Expand Down
32 changes: 32 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,38 @@

## [Unreleased]

- **Display and title type sizes** (D-037): `font.size.display` 32/40 and
`font.size.title` 24/32 with their line heights, for page heroes, metric
figures and page titles.
- **Compact is the default density** (D-038). `:root` and bare recipe
wrappers carry the compact density values; `data-density="comfortable"`
opts in. A consumer that relied on the old comfortable default sets it.
- **Components follow the spec.** Ordinary controls and rows draw their
focus ring at `focus.offset` (−2px), as foundations rule 2 says (D-006,
proposed); containers and invalid fields keep their own offsets. A
selected item takes the ordinary 1px dashed ring on the selection fill,
and links hover on `interaction.hover.bg` (D-027). Composite actions reuse
the button tone slots; field parts share one partial.
- **Site.** One shell built from the documented components, one primary
action per view, and calls to action as standalone links. `/reference/`
is a static hub (about 0.5 MB, from 4.6 MB); state matrices, token tables
and computed contrast pairs live on `/components/<id>/`, and the contrast
report, decision log and fixtures on their own `/reference/` pages. Every
published anchor still resolves. The per-row copy buttons of the reference
token tables are gone: each token's page, `/tokens/<path>/`, copies its
path and CSS variable, and the surface and text grids still copy values.
- **Documentation.** The decision log is grouped by topic. Entries keep the
choice, reason and status, and most rule detail moved to the spec section
it governs. README, guides and component specs drop most repeated text.
- **Fixed.** The install guide pins the released package version. Control
enhancement no longer restyles component buttons. Contents search and the
family filter keep each other's results, and search retries a failed index
load. Copy labels cannot stick. The surface and text grids' hex values get
their swatches. The token inspector adds no tab stops and 404 ships no
inspector data. Generated form workflows have one primary action.
Foundation and component spec prose no longer states measured contrast
ratios; the computed report carries them, and the decision log keeps its
historical measurements.
- **`color.surface.accent`** (D-035). A new surface for the user's own content,
such as outgoing chat messages, on the new primitive `color.primitive.red.40`
(`#3d0c0a`), chosen by the owner from a side-by-side comparison; links keep
Expand Down
Loading
Loading