@piercebarney/whs-eleventy 2026.9.24 → 2026.9.26
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/lib/compliance.js +9 -1
- package/package.json +1 -1
- package/standard/CHANGELOG.md +59 -0
- package/standard/core.md +2 -2
package/lib/compliance.js
CHANGED
|
@@ -367,11 +367,19 @@ const CHECKS = {
|
|
|
367
367
|
for (const rel of existing) {
|
|
368
368
|
const t = read(rel);
|
|
369
369
|
if (!t) continue;
|
|
370
|
+
let inFontFace = false;
|
|
371
|
+
let depth = 0;
|
|
370
372
|
for (const line of t.split("\n")) {
|
|
371
373
|
if (/^\s*(\/\/|\/\*|\*|#|<!--)/.test(line)) continue;
|
|
374
|
+
if (!inFontFace && /@font-face\b/.test(line)) inFontFace = true;
|
|
375
|
+
if (inFontFace) {
|
|
376
|
+
depth += (line.match(/\{/g) || []).length;
|
|
377
|
+
depth -= (line.match(/\}/g) || []).length;
|
|
378
|
+
if (depth <= 0 && /\}/.test(line)) inFontFace = false;
|
|
379
|
+
}
|
|
372
380
|
if (/#[0-9a-fA-F]{3}(?:[0-9a-fA-F]{3})?\b/.test(line) && !/\{\{/.test(line))
|
|
373
381
|
bad.push(`${rel} (hex)`);
|
|
374
|
-
else if (/font-family\s*:/.test(line) && !/var\(--brand/.test(line))
|
|
382
|
+
else if (!inFontFace && /font-family\s*:/.test(line) && !/var\(--brand/.test(line))
|
|
375
383
|
bad.push(`${rel} (font-family)`);
|
|
376
384
|
}
|
|
377
385
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@piercebarney/whs-eleventy",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.26",
|
|
4
4
|
"description": "The web house style's Eleventy + Netlify tooling — the compliance sweep, the infra doctor, the link/CSP integrity check, and the a11y scan, shared by every project on the stack.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"whs": "cli.js"
|
package/standard/CHANGELOG.md
CHANGED
|
@@ -21,6 +21,65 @@ enforced, new *opt-in* chapters/capabilities, tooling-only changes — is
|
|
|
21
21
|
|
|
22
22
|
---
|
|
23
23
|
|
|
24
|
+
## 2026-09-26 [non-breaking]
|
|
25
|
+
|
|
26
|
+
### stacks/eleventy-netlify.md
|
|
27
|
+
|
|
28
|
+
Its `#adopting` section's documented House-style block was missing a
|
|
29
|
+
paragraph the real `templates/eleventy-netlify/CLAUDE.md` already carries:
|
|
30
|
+
"Implementation runs through an agent, not inline," naming the plan →
|
|
31
|
+
delegate → verify → commit discipline and the `agent-only.js` hook that
|
|
32
|
+
mechanically enforces it. The doc and the template it's supposed to mirror
|
|
33
|
+
had drifted apart — fixed so `#adopting` documents the same block a
|
|
34
|
+
`/whs:new`-scaffolded project actually gets, and so `/whs:adopt` (below)
|
|
35
|
+
has a correct canonical source to copy from instead of a second copy that
|
|
36
|
+
could drift on its own.
|
|
37
|
+
|
|
38
|
+
### templates/commands
|
|
39
|
+
|
|
40
|
+
`templates/commands/whs/adopt.md` — for an Eleventy-detected project only —
|
|
41
|
+
now appends the "Implementation runs through an agent, not inline"
|
|
42
|
+
paragraph (read fresh from `stacks/eleventy-netlify.md#adopting`, not
|
|
43
|
+
paraphrased) to the CLAUDE.md it writes, and its tooling step proposes
|
|
44
|
+
copying the same agent-delegation setup `templates/eleventy-netlify/`
|
|
45
|
+
ships: the five stage agents (`brand`, `content`, `infra`, `layout`,
|
|
46
|
+
`pack`), `.claude/hooks/agent-only.js`, and a matching `PreToolUse` entry
|
|
47
|
+
in `.claude/settings.json` — merged into an existing settings file without
|
|
48
|
+
disturbing other hooks, or created fresh if none exists, and asked first
|
|
49
|
+
if any of those already exist. This brings an adopted Eleventy project's
|
|
50
|
+
ongoing-work tooling up to parity with what a `/whs:new`-scaffolded project
|
|
51
|
+
already gets via the template. Phoenix, SvelteKit, and Other are
|
|
52
|
+
unaffected — their `/whs:adopt` paths are unchanged.
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 2026-09-25 [non-breaking]
|
|
57
|
+
|
|
58
|
+
### packages/whs-eleventy
|
|
59
|
+
|
|
60
|
+
`brand-source`'s font check flagged the `font-family:` declaration required
|
|
61
|
+
inside a self-hosted `@font-face { ... }` block — even though that
|
|
62
|
+
declaration is structurally different from every other `font-family` use
|
|
63
|
+
the check exists to catch. Elsewhere, `font-family: <literal>` is a font
|
|
64
|
+
*choice* that should instead reference `var(--brand-font-*)`; inside
|
|
65
|
+
`@font-face`, `font-family: <literal>` is the *name* the block is defining,
|
|
66
|
+
and CSS gives no way to write it as a custom-property reference — `var()`
|
|
67
|
+
isn't available to `@font-face` descriptors at all, so there's no
|
|
68
|
+
compliant rewrite, only a structurally forced literal. The fix tracks
|
|
69
|
+
brace depth after an `@font-face` line and skips the `font-family`
|
|
70
|
+
sub-check only within that block; the hex-literal check and `font-family`
|
|
71
|
+
checks anywhere else in the file are unchanged. Found while
|
|
72
|
+
covenant-in-color self-hosted a font for real and filed as
|
|
73
|
+
`feedback/2026-09-23-brand-source-font-face-false-positive.md`; fixed in
|
|
74
|
+
`1ab3feb`.
|
|
75
|
+
|
|
76
|
+
This is the fifth `packages/whs-eleventy`-only fix shipped this week (the
|
|
77
|
+
fourth, 2026.9.24, already published and live) — `core.md`, `stacks/*.md`,
|
|
78
|
+
and `index.json` content are unchanged; only the doc pins and
|
|
79
|
+
`packages/whs-eleventy/package.json` (now `2026.9.25`) moved.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
24
83
|
## 2026-09-24 [non-breaking]
|
|
25
84
|
|
|
26
85
|
### packages/whs-eleventy
|
package/standard/core.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Web project house style — CORE (stack-agnostic)
|
|
2
2
|
|
|
3
|
-
**Version:** 2026-09-
|
|
3
|
+
**Version:** 2026-09-26 · **Status:** active
|
|
4
4
|
|
|
5
5
|
This is the stack-agnostic contract every web project follows, regardless of
|
|
6
6
|
framework, host, or CSS system. It says **what** must be true, with concrete
|
|
@@ -1467,7 +1467,7 @@ governs it and follow that chapter — the slugs are the index (a `<script>` →
|
|
|
1467
1467
|
- production-url: https://example.com
|
|
1468
1468
|
- content-type: tool # tool | article (article => feeds)
|
|
1469
1469
|
- publishing-rate: ~5 pages/week
|
|
1470
|
-
- standard-version: 2026-09-
|
|
1470
|
+
- standard-version: 2026-09-26 # recommended — enables standard-version drift tracking (#compliance)
|
|
1471
1471
|
```
|
|
1472
1472
|
|
|
1473
1473
|
If the section is absent, the assistant's first action is to run the flow above
|