@domandigital/craft 0.5.0 → 0.7.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 +110 -0
- package/CHARACTER.md +578 -0
- package/PRINCIPLES.md +14 -0
- package/README.md +36 -1
- package/STANDARD.md +4 -1
- package/art-direction.schema.json +59 -0
- package/dist/audit-YNODYB3U.js +20 -0
- package/dist/audit.cjs +2472 -0
- package/dist/audit.d.cts +389 -0
- package/dist/audit.d.ts +389 -0
- package/dist/audit.js +2439 -0
- package/dist/chunk-3AP4PJMX.js +2352 -0
- package/dist/chunk-CU5TZHOV.js +163 -0
- package/dist/chunk-GV3QOTQU.js +458 -0
- package/dist/chunk-IQTZWNEK.js +112 -0
- package/dist/chunk-J2BOAIHJ.js +175 -0
- package/dist/chunk-OA7SGPN4.js +419 -0
- package/dist/chunk-Q54JSNC5.js +105 -0
- package/dist/chunk-YYC4EGER.js +249 -0
- package/dist/cli-6Y5E32FS.js +334 -0
- package/dist/cli-IQT6QZ6U.js +16 -0
- package/dist/cli-MW3JAGX3.js +21 -0
- package/dist/cli-PD43TWX7.js +15 -0
- package/dist/cli-TM2HWYN7.js +312 -0
- package/dist/cli.js +22 -0
- package/dist/index.cjs +3385 -27
- package/dist/index.d.cts +1011 -1
- package/dist/index.d.ts +1011 -1
- package/dist/index.js +3311 -24
- package/package.json +28 -4
- package/word-lists.json +155 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,115 @@
|
|
|
1
1
|
# @domandigital/craft
|
|
2
2
|
|
|
3
|
+
## 0.7.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- dbdef56: Signal 2, the counterfactual. `craft null build --brief "..." --out <dir>` asks `claude -p` for about 20 home pages from the brief alone, renders and fingerprints each, and writes `null.json`. `craft audit <url> --null <dir>` scores how typical a page is against them: the share of the model's own pages that sit further out than this one, typical at 0.10 or above, with the choices it shares with most of them. `craft tells harvest <dir>` lists what recurs across null pages and which tell already catches it, so the next generation of tells comes from what the model builds now. `snapshotUrls` in `@domandigital/craft/audit` snapshots several pages through one browser. The rendered reveal check now also reads the text blocks inside a section, so reveals on cards two levels down are no longer read as a still page.
|
|
8
|
+
- f765c69: Signal 3, the estate. `craft estate add <url | snapshot.json> --id <id>` fingerprints a shipped site into `estate.json`; `craft estate compare` lists every pair, or one site against the rest, closest first, and marks siblings: two sites closer together than two pages Claude builds for one brief (0.31, or measured again from `--null`). What a pair shares is named in plain words ("Fraunces headline", "no accent"). `--strict` exits 1 on a sibling. `craft direction propose --estate estate.json` reads the register. The fingerprint no longer takes a small painted patch, such as a floating chat button, for the accent: a painted colour needs a panel's worth of area.
|
|
9
|
+
- f3c3dc0: The character report. `craft report <url | snapshot.json>` reads a site against all three signals and the reason rule (`--repo`, `--null`, `--estate`, `--direction`) and gives a verdict: default, mixed, decided, or unproven when something was not measured. The actions come in retrofit order, one per choice, with every reason that points at it. `craft retrofit` writes them as a Markdown checklist that names the art-direction choice settling each change, shows the decided value, and ends with what to leave alone. `characterReport` and `retrofitPlan` are exported. System font keywords such as `ui-monospace` no longer read as CSS variable names.
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 235b558: Export the copy catalogue's word and phrase lists as portable JSON
|
|
14
|
+
(`wordListsJson()`, checked in at `word-lists.json`), so a non-TypeScript
|
|
15
|
+
consumer can source from them instead of duplicating them by hand.
|
|
16
|
+
|
|
17
|
+
`claude-kit`'s `copy_check.py` hardcoded its own copies of these same lists
|
|
18
|
+
and had drifted from this package (documented in claude-kit's
|
|
19
|
+
`house-style/copy-rules.md`, "Note the enforcement gap"). `word-lists.json` is
|
|
20
|
+
the file that ends the drift: `install/sync-copy-wordlists.sh` on that side
|
|
21
|
+
copies it in verbatim, the same shape `sync-craft-standard.sh` already uses
|
|
22
|
+
for `STANDARD.md`.
|
|
23
|
+
|
|
24
|
+
No tell's detection or severity changed. Regenerate the checked-in file with
|
|
25
|
+
`pnpm --filter @domandigital/craft run docs` after editing any list in
|
|
26
|
+
`tells/copy.ts`.
|
|
27
|
+
|
|
28
|
+
## 0.6.0
|
|
29
|
+
|
|
30
|
+
### Minor Changes
|
|
31
|
+
|
|
32
|
+
- 8c6304b: Character, phase A: a tell catalogue, a source scanner, a copy engine, and the `craft` command.
|
|
33
|
+
|
|
34
|
+
The standard asks whether a surface is well made. The new CHARACTER.md asks
|
|
35
|
+
whether anyone decided how it looks. A site can pass every craft number and
|
|
36
|
+
still be the indigo-and-Inter answer a model gives any brief.
|
|
37
|
+
|
|
38
|
+
- `scanSource(files)` finds 21 design tells in markup, component code and CSS,
|
|
39
|
+
tagged by generation: the first wave (indigo, blue-to-purple gradients, Inter,
|
|
40
|
+
glass panels, hero straight into a trust strip, icon-card grids, reveal on
|
|
41
|
+
every section, pills everywhere, a stock shadcn dump) and the second (cream
|
|
42
|
+
grounds, italic serif display, eyebrow chips, icon tiles, bento grids, radial
|
|
43
|
+
glows, graph-paper backgrounds, marquees, hairline-border cards, intro
|
|
44
|
+
cinematics).
|
|
45
|
+
- It reads classes the way Tailwind does, through `cn()`, `clsx()` and `cva()`,
|
|
46
|
+
and colour in hex, `rgb()`, `hsl()` and `oklch()` in raw CSS, `@theme` blocks
|
|
47
|
+
and arbitrary values. Hue is judged in OKLCh, so a violet set as `#5a35d1` is
|
|
48
|
+
caught.
|
|
49
|
+
- `checkCopy(files)` finds 8 copy tells, including em dashes, "not just X, it's
|
|
50
|
+
Y", staccato triplets and "where X meets Y". The word and phrase lists are
|
|
51
|
+
exported data with a test per entry.
|
|
52
|
+
- `craft scan [--staged]`, `craft copy`, `craft tells list`. Exceptions are
|
|
53
|
+
declared in `art-direction.json` with a `because`; one without a reason is
|
|
54
|
+
not applied and is reported.
|
|
55
|
+
- Every tell ships as `warn`. Nothing blocks until its estate hits have been
|
|
56
|
+
read. Every entry has a flag case per detection path and a pass case, and
|
|
57
|
+
the test proves each one fires on its own.
|
|
58
|
+
|
|
59
|
+
STANDARD.md section 10 now hands layout defaults to CHARACTER.md. Still eleven sections.
|
|
60
|
+
|
|
61
|
+
- 161a771: The house copy rules move into craft, so `copy-check` can become a thin wrapper over `craft copy --json`.
|
|
62
|
+
|
|
63
|
+
- Ten tells carry the lists that claude-kit's `copy-check` hardcoded: `ai-phrase`,
|
|
64
|
+
`plainer-word`, `plain-english`, `buzzword`, `negative-reassurance`, `emoji`,
|
|
65
|
+
`no-x-no-y`, `no-x-badge`, `review-phrase` and `vague-word`. `not-just-but` now
|
|
66
|
+
covers every form of contrastive negation the house rules name, including the
|
|
67
|
+
parallel participle ("dispatched from here, not shipped in from Seoul").
|
|
68
|
+
Each word and phrase belongs to exactly one tell, with a test per entry.
|
|
69
|
+
Every tell still ships as `warn`. Catalogue `2026.09.2`, 39 tells.
|
|
70
|
+
- `copy-ok` or `craft-ok` on a finding's line, or the line above, suppresses it.
|
|
71
|
+
Suppressed findings are listed in `report.suppressed`, never hidden.
|
|
72
|
+
- `craft copy` never reads a comment as copy, reads JSX text that runs into an
|
|
73
|
+
expression, reads the text inside HTML held in a string, sees short strings
|
|
74
|
+
for the dash, emoji and badge tells, leaves a lone dash placeholder alone,
|
|
75
|
+
and reads `.jsonl` (a Sanity export) a document per line.
|
|
76
|
+
- Class lists written with arbitrary values (`bg-[var(--bg-elevated)]`) are no
|
|
77
|
+
longer read as prose.
|
|
78
|
+
|
|
79
|
+
- 8093ad7: Phase B: the rendered page. `craft snapshot`, `craft audit`, rendered detection paths and a fingerprint.
|
|
80
|
+
|
|
81
|
+
- `@domandigital/craft/audit` captures a snapshot of a live page in Chromium: faces by
|
|
82
|
+
text and headline, colours by painted area, button shape, sections in running order
|
|
83
|
+
and which wait for a scroll, glass, gradients, glows, grid backgrounds, marquees,
|
|
84
|
+
hairline-shadow cards, the eyebrow chip, and an intro that covers the page at load.
|
|
85
|
+
Playwright is an optional peer dependency; the core import never loads a browser.
|
|
86
|
+
`collectInPage` is exported for any caller already driving a page.
|
|
87
|
+
- 18 tells gain a rendered detection path, with their own flag and pass snapshots,
|
|
88
|
+
proved like every other path. `auditSnapshot(snapshot)` judges a saved snapshot
|
|
89
|
+
without a browser. Catalogue `2026.09.3`.
|
|
90
|
+
- `fingerprint(snapshot)` and `fingerprintDistance(a, b)`: accent and ground in
|
|
91
|
+
OKLCh, display and body faces, roundness, reveal density, effects and running order,
|
|
92
|
+
compared 0 to 1. `nearest()` ranks a set.
|
|
93
|
+
- `craft audit <url | snapshot.json> [--repo dir]` reports the page and its source
|
|
94
|
+
together, with the fingerprint. `HTTPS_PROXY` is honoured.
|
|
95
|
+
- Colour parsing reads `oklab()` and `color(srgb ...)`, which browsers return.
|
|
96
|
+
- First estate baseline recorded in CHARACTER.md and `calibration/estate/2026-09-23/`.
|
|
97
|
+
|
|
98
|
+
- ee6d6cd: Phase C: `art-direction.json`, the reason rule, and `craft direction init | validate | propose`.
|
|
99
|
+
|
|
100
|
+
- A schema for the seven expressive choices (accent, ground, display, body, shape, motif,
|
|
101
|
+
signature), the sources in the client's world they come from, and the tell exceptions
|
|
102
|
+
from phase A. Ships as `art-direction.schema.json` for editors.
|
|
103
|
+
- `validateDirection` applies the reason rule: a reason is a sentence, cites a declared
|
|
104
|
+
source and mentions what that source shows; preferences, mood boards and unconfirmed
|
|
105
|
+
proposals are rejected; a value on the tell catalogue needs an exception. Given a
|
|
106
|
+
fingerprint it warns where the page does not show what the file declares.
|
|
107
|
+
- `initDirection` writes today's choices with empty reasons. `propose` reads dominant
|
|
108
|
+
colours off PNG photos (`paletteFromPixels`, k-means in OKLab) and drafts choices ranked
|
|
109
|
+
away from the reflex band and the estate, every one marked `PROPOSED:` until a person
|
|
110
|
+
rewrites it.
|
|
111
|
+
- An exceptions-only file stays valid.
|
|
112
|
+
|
|
3
113
|
## 0.5.0
|
|
4
114
|
|
|
5
115
|
### Minor Changes
|