@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 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.24",
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"
@@ -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-24 · **Status:** active
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-24 # recommended — enables standard-version drift tracking (#compliance)
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