@domandigital/craft 0.8.1 → 0.9.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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @domandigital/craft
2
2
 
3
+ ## 0.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - bbf1f54: `chatbot-residue` moves to the house blocking tier. A pasted chat reply (citation tokens, entity markers, "as an AI language model") now fails `craft copy --gate`, `copy-check` and `sanity-copy`. Its estate hits were read first: 15 of 15 real, no false alarms.
8
+
3
9
  ## 0.8.1
4
10
 
5
11
  ### Patch Changes
package/COPY.md CHANGED
@@ -45,6 +45,11 @@ A single hit fails the check. These are not judgment calls.
45
45
  a signed-in route (`/admin/`, `/portal/`, `/dashboard/`).
46
46
  - **"No X, no Y" as a list**, anywhere in a sentence. "No obligation, no
47
47
  spam." Defining the business by what it is not, itemised.
48
+ - **Chatbot residue.** "Certainly! Here's a revised version", "as an AI
49
+ language model", "let me know if you'd like me to", ChatGPT citation tokens
50
+ and entity markers, links tracked `utm_source=chatgpt.com`. This is not
51
+ style: it is proof a chat reply was pasted in whole. Remove it, then source
52
+ or cut any claim a citation token was backing. Never re-cite from memory.
48
53
  - The phrase list: `let's dive in`, `let's unpack`, `let's break this down`,
49
54
  `here's the thing`, `it's important to note`, `at its core`,
50
55
  `the key takeaway`, `the reality is`, `the truth is`,
@@ -96,14 +101,13 @@ person reading decides which instance earns its place.
96
101
  | `question-reveal` | "The result? Twice the bookings.", "What does this mean for you? It means...": a staged reveal |
97
102
  | `inline-label-list` | three or more bullets in a row opening "**Label:**", where the label repeats the line |
98
103
  | `placeholder` | "[Insert client name]", lorem ipsum, `TODO_PLACEHOLDER`. Fine in a draft commit; **zero in anything delivered** |
99
- | `chatbot-residue` | "Certainly! Here's a revised version", "as an AI language model", "let me know if you'd like me to", chat citation tokens, links tracked `utm_source=chatgpt.com`. **Zero in anything delivered**, and the first candidate for the blocking tier |
100
104
 
101
105
  ### Style is not evidence
102
106
 
103
107
  Most tells here are house style: they make copy generic, whoever wrote it. The
104
108
  research is clear that an em dash, a rule of three or a rhetorical question
105
109
  proves nothing about authorship, and em dash rates even run in opposite
106
- directions between models. Only `chatbot-residue` is evidence that a chat reply
110
+ directions between models. Only chatbot residue, in the blocking tier, is evidence that a chat reply
107
111
  was pasted. Report findings as an editorial diagnosis ("three benefit claims
108
112
  lack a mechanism; two stock phrases recur"), never as a score or an
109
113
  accusation.
@@ -6,9 +6,9 @@ import {
6
6
  snapshotPage,
7
7
  snapshotUrl,
8
8
  snapshotUrls
9
- } from "./chunk-UVBVYM5D.js";
10
- import "./chunk-DWZY5MWD.js";
11
- import "./chunk-OBVWDPQQ.js";
9
+ } from "./chunk-BYY32NIN.js";
10
+ import "./chunk-EHNEGKFR.js";
11
+ import "./chunk-ZT3WLN7R.js";
12
12
  export {
13
13
  audit,
14
14
  collectInPage,
package/dist/audit.cjs CHANGED
@@ -2294,6 +2294,9 @@ var HOUSE = {
2294
2294
  "plain-english": { tier: "block", label: 'use "properly explained"' },
2295
2295
  buzzword: { tier: "block", label: "forbidden phrase" },
2296
2296
  "negative-reassurance": { tier: "block", label: "negative reassurance, say what they get" },
2297
+ // Evidence of a pasted chat reply, not a matter of style. Moved from review
2298
+ // on 2026-09-24 after its estate hits were read (ROADMAP.md): 15 of 15 real.
2299
+ "chatbot-residue": { tier: "block", label: "chatbot residue. A chat reply was pasted in: remove it, and source or cut the claim it backed" },
2297
2300
  "review-phrase": { tier: "review", label: "review tier" },
2298
2301
  "ai-vocabulary": { tier: "review", label: "AI vocabulary" },
2299
2302
  "stock-phrase": { tier: "review", label: "stock phrase" },
@@ -2305,9 +2308,6 @@ var HOUSE = {
2305
2308
  "vague-attribution": { tier: "review", label: "unnamed source" },
2306
2309
  "closing-summary": { tier: "review", label: "closing summary" },
2307
2310
  "false-range": { tier: "review", label: "false range" },
2308
- // The first candidate for block: evidence of a pasted chat reply, not a
2309
- // matter of style. Blocks once its estate hits have been read (ROADMAP.md).
2310
- "chatbot-residue": { tier: "review", label: "chatbot residue" },
2311
2311
  "placeholder": { tier: "review", label: "unfilled placeholder" },
2312
2312
  "question-reveal": { tier: "review", label: "staged reveal" },
2313
2313
  "inline-label-list": { tier: "review", label: "bold-label bullets" },
package/dist/audit.js CHANGED
@@ -2262,6 +2262,9 @@ var HOUSE = {
2262
2262
  "plain-english": { tier: "block", label: 'use "properly explained"' },
2263
2263
  buzzword: { tier: "block", label: "forbidden phrase" },
2264
2264
  "negative-reassurance": { tier: "block", label: "negative reassurance, say what they get" },
2265
+ // Evidence of a pasted chat reply, not a matter of style. Moved from review
2266
+ // on 2026-09-24 after its estate hits were read (ROADMAP.md): 15 of 15 real.
2267
+ "chatbot-residue": { tier: "block", label: "chatbot residue. A chat reply was pasted in: remove it, and source or cut the claim it backed" },
2265
2268
  "review-phrase": { tier: "review", label: "review tier" },
2266
2269
  "ai-vocabulary": { tier: "review", label: "AI vocabulary" },
2267
2270
  "stock-phrase": { tier: "review", label: "stock phrase" },
@@ -2273,9 +2276,6 @@ var HOUSE = {
2273
2276
  "vague-attribution": { tier: "review", label: "unnamed source" },
2274
2277
  "closing-summary": { tier: "review", label: "closing summary" },
2275
2278
  "false-range": { tier: "review", label: "false range" },
2276
- // The first candidate for block: evidence of a pasted chat reply, not a
2277
- // matter of style. Blocks once its estate hits have been read (ROADMAP.md).
2278
- "chatbot-residue": { tier: "review", label: "chatbot residue" },
2279
2279
  "placeholder": { tier: "review", label: "unfilled placeholder" },
2280
2280
  "question-reveal": { tier: "review", label: "staged reveal" },
2281
2281
  "inline-label-list": { tier: "review", label: "bold-label bullets" },
@@ -3,18 +3,18 @@ import {
3
3
  hueName,
4
4
  loadNull,
5
5
  shapeName
6
- } from "./chunk-XEH4GK5K.js";
6
+ } from "./chunk-VKQDOUHO.js";
7
7
  import {
8
8
  parseFlags
9
- } from "./chunk-X6PHP22P.js";
9
+ } from "./chunk-YLQE35PN.js";
10
10
  import {
11
11
  fingerprint,
12
12
  fingerprintDistance
13
- } from "./chunk-DWZY5MWD.js";
13
+ } from "./chunk-EHNEGKFR.js";
14
14
  import {
15
15
  SNAPSHOT_VERSION,
16
16
  auditSnapshot
17
- } from "./chunk-OBVWDPQQ.js";
17
+ } from "./chunk-ZT3WLN7R.js";
18
18
 
19
19
  // src/estate/cli.ts
20
20
  import { existsSync, readFileSync, writeFileSync } from "fs";
@@ -92,7 +92,7 @@ async function snapshotOf(target, cwd) {
92
92
  return snap;
93
93
  }
94
94
  if (!/^https?:\/\//.test(target)) throw new Error(`${target} is neither a URL, a snapshot file, nor a site in the register`);
95
- const { snapshotUrl } = await import("./audit-C62GULQR.js");
95
+ const { snapshotUrl } = await import("./audit-5P65UMFL.js");
96
96
  return snapshotUrl(target);
97
97
  }
98
98
  var line = (distance, sibling, shared) => `${distance.toFixed(2)}${sibling ? " SIBLING" : ""}${shared.length ? ` shares ${shared.join(", ")}` : ""}`;
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  fingerprint
3
- } from "./chunk-DWZY5MWD.js";
3
+ } from "./chunk-EHNEGKFR.js";
4
4
  import {
5
5
  SNAPSHOT_VERSION,
6
6
  auditSnapshot
7
- } from "./chunk-OBVWDPQQ.js";
7
+ } from "./chunk-ZT3WLN7R.js";
8
8
 
9
9
  // src/audit/collect.ts
10
10
  function collectInPage() {
@@ -1,26 +1,26 @@
1
1
  import {
2
2
  snapshotUrl
3
- } from "./chunk-UVBVYM5D.js";
3
+ } from "./chunk-BYY32NIN.js";
4
4
  import {
5
5
  describeTypicality,
6
6
  loadNull,
7
7
  typicality
8
- } from "./chunk-XEH4GK5K.js";
8
+ } from "./chunk-VKQDOUHO.js";
9
9
  import {
10
10
  SOURCE_FILE,
11
11
  finish,
12
12
  loadExceptions,
13
13
  parseFlags,
14
14
  readPaths
15
- } from "./chunk-X6PHP22P.js";
15
+ } from "./chunk-YLQE35PN.js";
16
16
  import {
17
17
  fingerprint
18
- } from "./chunk-DWZY5MWD.js";
18
+ } from "./chunk-EHNEGKFR.js";
19
19
  import {
20
20
  SNAPSHOT_VERSION,
21
21
  auditSnapshot,
22
22
  scanSource
23
- } from "./chunk-OBVWDPQQ.js";
23
+ } from "./chunk-ZT3WLN7R.js";
24
24
 
25
25
  // src/audit/cli.ts
26
26
  import { existsSync, readFileSync, writeFileSync } from "fs";
@@ -3,7 +3,7 @@ import {
3
3
  fontClass,
4
4
  normaliseFamily,
5
5
  parseColour
6
- } from "./chunk-OBVWDPQQ.js";
6
+ } from "./chunk-ZT3WLN7R.js";
7
7
 
8
8
  // src/fingerprint/index.ts
9
9
  var FINGERPRINT_VERSION = 1;
@@ -6,7 +6,7 @@ import {
6
6
  isCream,
7
7
  normaliseFamily,
8
8
  parseColour
9
- } from "./chunk-OBVWDPQQ.js";
9
+ } from "./chunk-ZT3WLN7R.js";
10
10
 
11
11
  // src/direction/types.ts
12
12
  var DIRECTION_VERSION = 1;
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  parseFlags
3
- } from "./chunk-X6PHP22P.js";
3
+ } from "./chunk-YLQE35PN.js";
4
4
  import {
5
5
  fingerprint,
6
6
  fingerprintDistance
7
- } from "./chunk-DWZY5MWD.js";
7
+ } from "./chunk-EHNEGKFR.js";
8
8
  import {
9
9
  CATALOGUE_VERSION,
10
10
  REFLEX_FONTS_1,
@@ -18,7 +18,7 @@ import {
18
18
  isCream,
19
19
  oklchToRgb,
20
20
  scanSource
21
- } from "./chunk-OBVWDPQQ.js";
21
+ } from "./chunk-ZT3WLN7R.js";
22
22
 
23
23
  // src/null/cli.ts
24
24
  import { spawn } from "child_process";
@@ -352,7 +352,7 @@ async function build(flags, io) {
352
352
  const toShoot = ids.filter((id) => existsSync(join(pages, `${id}.html`)) && !existsSync(join(shots, `${id}.json`)));
353
353
  if (toShoot.length) {
354
354
  io.out(`craft null: snapshotting ${toShoot.length} page${toShoot.length === 1 ? "" : "s"}`);
355
- const { snapshotUrls } = await import("./audit-C62GULQR.js");
355
+ const { snapshotUrls } = await import("./audit-5P65UMFL.js");
356
356
  const results = await snapshotUrls(toShoot.map((id) => pathToFileURL(join(pages, `${id}.html`)).href));
357
357
  results.forEach((r, i) => {
358
358
  const id = toShoot[i];
@@ -8,7 +8,7 @@ import {
8
8
  fileKind,
9
9
  houseRule,
10
10
  scanSource
11
- } from "./chunk-OBVWDPQQ.js";
11
+ } from "./chunk-ZT3WLN7R.js";
12
12
 
13
13
  // src/character/cli.ts
14
14
  import { execFileSync } from "child_process";
@@ -274,25 +274,25 @@ var NOT_COPY_DIR = (name) => name.startsWith("_");
274
274
  function run(argv, io) {
275
275
  const [command, ...rest] = argv;
276
276
  if (command === "direction") {
277
- return import("./cli-BWERSVPW.js").then((m) => m.runDirection(rest, io));
277
+ return import("./cli-3XPEGBUR.js").then((m) => m.runDirection(rest, io));
278
278
  }
279
279
  if (command === "report" || command === "retrofit") {
280
- return import("./cli-UMQNCHAQ.js").then((m) => m.runReport(command, rest, io));
280
+ return import("./cli-V55MTIOP.js").then((m) => m.runReport(command, rest, io));
281
281
  }
282
282
  if (command === "estate") {
283
- return import("./cli-D6VYGCOE.js").then((m) => m.runEstate(rest, io));
283
+ return import("./cli-J7C6TI2B.js").then((m) => m.runEstate(rest, io));
284
284
  }
285
285
  if (command === "null") {
286
- return import("./cli-C5RLL7AW.js").then((m) => m.runNull(rest, io));
286
+ return import("./cli-4VAOH7ST.js").then((m) => m.runNull(rest, io));
287
287
  }
288
288
  if (command === "tells" && rest[0] === "harvest") {
289
- return import("./cli-C5RLL7AW.js").then((m) => m.runHarvest(rest, io)).catch((error) => {
289
+ return import("./cli-4VAOH7ST.js").then((m) => m.runHarvest(rest, io)).catch((error) => {
290
290
  io.err(`craft: ${error.message}`);
291
291
  return 2;
292
292
  });
293
293
  }
294
294
  if (command === "snapshot" || command === "audit") {
295
- return import("./cli-I4TQMCUP.js").then((m) => m.runAudit(command, rest, io));
295
+ return import("./cli-WDSVVHKG.js").then((m) => m.runAudit(command, rest, io));
296
296
  }
297
297
  if (!command || command === "help" || command === "--help" || command === "-h") {
298
298
  io.out(HELP);
@@ -2629,6 +2629,9 @@ var HOUSE = {
2629
2629
  "plain-english": { tier: "block", label: 'use "properly explained"' },
2630
2630
  buzzword: { tier: "block", label: "forbidden phrase" },
2631
2631
  "negative-reassurance": { tier: "block", label: "negative reassurance, say what they get" },
2632
+ // Evidence of a pasted chat reply, not a matter of style. Moved from review
2633
+ // on 2026-09-24 after its estate hits were read (ROADMAP.md): 15 of 15 real.
2634
+ "chatbot-residue": { tier: "block", label: "chatbot residue. A chat reply was pasted in: remove it, and source or cut the claim it backed" },
2632
2635
  "review-phrase": { tier: "review", label: "review tier" },
2633
2636
  "ai-vocabulary": { tier: "review", label: "AI vocabulary" },
2634
2637
  "stock-phrase": { tier: "review", label: "stock phrase" },
@@ -2640,9 +2643,6 @@ var HOUSE = {
2640
2643
  "vague-attribution": { tier: "review", label: "unnamed source" },
2641
2644
  "closing-summary": { tier: "review", label: "closing summary" },
2642
2645
  "false-range": { tier: "review", label: "false range" },
2643
- // The first candidate for block: evidence of a pasted chat reply, not a
2644
- // matter of style. Blocks once its estate hits have been read (ROADMAP.md).
2645
- "chatbot-residue": { tier: "review", label: "chatbot residue" },
2646
2646
  "placeholder": { tier: "review", label: "unfilled placeholder" },
2647
2647
  "question-reveal": { tier: "review", label: "staged reveal" },
2648
2648
  "inline-label-list": { tier: "review", label: "bold-label bullets" },
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  DIRECTION_VERSION,
3
3
  validateDirection
4
- } from "./chunk-JNFHQGKR.js";
4
+ } from "./chunk-JRMU6GYX.js";
5
5
  import {
6
6
  parseFlags
7
- } from "./chunk-X6PHP22P.js";
7
+ } from "./chunk-YLQE35PN.js";
8
8
  import {
9
9
  fingerprint
10
- } from "./chunk-DWZY5MWD.js";
10
+ } from "./chunk-EHNEGKFR.js";
11
11
  import {
12
12
  deltaEOk,
13
13
  formatHex,
@@ -16,7 +16,7 @@ import {
16
16
  isCream,
17
17
  oklchToRgb,
18
18
  parseColour
19
- } from "./chunk-OBVWDPQQ.js";
19
+ } from "./chunk-ZT3WLN7R.js";
20
20
 
21
21
  // src/direction/cli.ts
22
22
  import { existsSync, readdirSync, readFileSync, writeFileSync } from "fs";
@@ -6,10 +6,10 @@ import {
6
6
  nullPath,
7
7
  runHarvest,
8
8
  runNull
9
- } from "./chunk-XEH4GK5K.js";
10
- import "./chunk-X6PHP22P.js";
11
- import "./chunk-DWZY5MWD.js";
12
- import "./chunk-OBVWDPQQ.js";
9
+ } from "./chunk-VKQDOUHO.js";
10
+ import "./chunk-YLQE35PN.js";
11
+ import "./chunk-EHNEGKFR.js";
12
+ import "./chunk-ZT3WLN7R.js";
13
13
  export {
14
14
  describeTypicality,
15
15
  formatHarvest,
@@ -0,0 +1,16 @@
1
+ import {
2
+ formatMatches,
3
+ formatPairs,
4
+ loadEstate,
5
+ runEstate
6
+ } from "./chunk-5LI2VFN5.js";
7
+ import "./chunk-VKQDOUHO.js";
8
+ import "./chunk-YLQE35PN.js";
9
+ import "./chunk-EHNEGKFR.js";
10
+ import "./chunk-ZT3WLN7R.js";
11
+ export {
12
+ formatMatches,
13
+ formatPairs,
14
+ loadEstate,
15
+ runEstate
16
+ };
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  validateDirection
3
- } from "./chunk-JNFHQGKR.js";
3
+ } from "./chunk-JRMU6GYX.js";
4
4
  import {
5
5
  merge
6
- } from "./chunk-6LPMM752.js";
7
- import "./chunk-UVBVYM5D.js";
6
+ } from "./chunk-DAENYJUO.js";
7
+ import "./chunk-BYY32NIN.js";
8
8
  import {
9
9
  SIBLING_AT,
10
10
  compareToEstate,
11
11
  loadEstate
12
- } from "./chunk-2VLN6JLN.js";
12
+ } from "./chunk-5LI2VFN5.js";
13
13
  import {
14
14
  loadNull,
15
15
  typicality
16
- } from "./chunk-XEH4GK5K.js";
16
+ } from "./chunk-VKQDOUHO.js";
17
17
  import {
18
18
  COPY_FILE,
19
19
  NOT_COPY_DIR,
@@ -21,17 +21,17 @@ import {
21
21
  loadExceptions,
22
22
  parseFlags,
23
23
  readPaths
24
- } from "./chunk-X6PHP22P.js";
24
+ } from "./chunk-YLQE35PN.js";
25
25
  import {
26
26
  fingerprint
27
- } from "./chunk-DWZY5MWD.js";
27
+ } from "./chunk-EHNEGKFR.js";
28
28
  import {
29
29
  CATALOGUE,
30
30
  SNAPSHOT_VERSION,
31
31
  auditSnapshot,
32
32
  checkCopy,
33
33
  scanSource
34
- } from "./chunk-OBVWDPQQ.js";
34
+ } from "./chunk-ZT3WLN7R.js";
35
35
 
36
36
  // src/report/cli.ts
37
37
  import { existsSync, readFileSync, writeFileSync } from "fs";
@@ -259,7 +259,7 @@ async function runReport(command, args, io) {
259
259
  snap = JSON.parse(readFileSync(local, "utf8"));
260
260
  if (snap.version !== SNAPSHOT_VERSION) throw new Error(`${target2} is not a snapshot`);
261
261
  } else {
262
- const { snapshotUrl } = await import("./audit-C62GULQR.js");
262
+ const { snapshotUrl } = await import("./audit-5P65UMFL.js");
263
263
  snap = await snapshotUrl(target2);
264
264
  }
265
265
  const fp = fingerprint(snap);
@@ -0,0 +1,15 @@
1
+ import {
2
+ describeFingerprint,
3
+ merge,
4
+ runAudit
5
+ } from "./chunk-DAENYJUO.js";
6
+ import "./chunk-BYY32NIN.js";
7
+ import "./chunk-VKQDOUHO.js";
8
+ import "./chunk-YLQE35PN.js";
9
+ import "./chunk-EHNEGKFR.js";
10
+ import "./chunk-ZT3WLN7R.js";
11
+ export {
12
+ describeFingerprint,
13
+ merge,
14
+ runAudit
15
+ };
package/dist/cli.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  run
4
- } from "./chunk-X6PHP22P.js";
5
- import "./chunk-OBVWDPQQ.js";
4
+ } from "./chunk-YLQE35PN.js";
5
+ import "./chunk-ZT3WLN7R.js";
6
6
 
7
7
  // src/cli.ts
8
8
  process.stdout.on("error", (error) => {
package/dist/index.cjs CHANGED
@@ -3619,6 +3619,9 @@ var HOUSE = {
3619
3619
  "plain-english": { tier: "block", label: 'use "properly explained"' },
3620
3620
  buzzword: { tier: "block", label: "forbidden phrase" },
3621
3621
  "negative-reassurance": { tier: "block", label: "negative reassurance, say what they get" },
3622
+ // Evidence of a pasted chat reply, not a matter of style. Moved from review
3623
+ // on 2026-09-24 after its estate hits were read (ROADMAP.md): 15 of 15 real.
3624
+ "chatbot-residue": { tier: "block", label: "chatbot residue. A chat reply was pasted in: remove it, and source or cut the claim it backed" },
3622
3625
  "review-phrase": { tier: "review", label: "review tier" },
3623
3626
  "ai-vocabulary": { tier: "review", label: "AI vocabulary" },
3624
3627
  "stock-phrase": { tier: "review", label: "stock phrase" },
@@ -3630,9 +3633,6 @@ var HOUSE = {
3630
3633
  "vague-attribution": { tier: "review", label: "unnamed source" },
3631
3634
  "closing-summary": { tier: "review", label: "closing summary" },
3632
3635
  "false-range": { tier: "review", label: "false range" },
3633
- // The first candidate for block: evidence of a pasted chat reply, not a
3634
- // matter of style. Blocks once its estate hits have been read (ROADMAP.md).
3635
- "chatbot-residue": { tier: "review", label: "chatbot residue" },
3636
3636
  "placeholder": { tier: "review", label: "unfilled placeholder" },
3637
3637
  "question-reveal": { tier: "review", label: "staged reveal" },
3638
3638
  "inline-label-list": { tier: "review", label: "bold-label bullets" },
package/dist/index.js CHANGED
@@ -3469,6 +3469,9 @@ var HOUSE = {
3469
3469
  "plain-english": { tier: "block", label: 'use "properly explained"' },
3470
3470
  buzzword: { tier: "block", label: "forbidden phrase" },
3471
3471
  "negative-reassurance": { tier: "block", label: "negative reassurance, say what they get" },
3472
+ // Evidence of a pasted chat reply, not a matter of style. Moved from review
3473
+ // on 2026-09-24 after its estate hits were read (ROADMAP.md): 15 of 15 real.
3474
+ "chatbot-residue": { tier: "block", label: "chatbot residue. A chat reply was pasted in: remove it, and source or cut the claim it backed" },
3472
3475
  "review-phrase": { tier: "review", label: "review tier" },
3473
3476
  "ai-vocabulary": { tier: "review", label: "AI vocabulary" },
3474
3477
  "stock-phrase": { tier: "review", label: "stock phrase" },
@@ -3480,9 +3483,6 @@ var HOUSE = {
3480
3483
  "vague-attribution": { tier: "review", label: "unnamed source" },
3481
3484
  "closing-summary": { tier: "review", label: "closing summary" },
3482
3485
  "false-range": { tier: "review", label: "false range" },
3483
- // The first candidate for block: evidence of a pasted chat reply, not a
3484
- // matter of style. Blocks once its estate hits have been read (ROADMAP.md).
3485
- "chatbot-residue": { tier: "review", label: "chatbot residue" },
3486
3486
  "placeholder": { tier: "review", label: "unfilled placeholder" },
3487
3487
  "question-reveal": { tier: "review", label: "staged reveal" },
3488
3488
  "inline-label-list": { tier: "review", label: "bold-label bullets" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@domandigital/craft",
3
- "version": "0.8.1",
3
+ "version": "0.9.0",
4
4
  "private": false,
5
5
  "description": "The Doman Digital house craft standard as numbers: OKLCh colour ramps that snap to existing anchors, derived semantic tokens with measured WCAG and APCA contrast, one shared motion vocabulary for CSS and JS, and a base stylesheet. Zero dependencies.",
6
6
  "license": "Apache-2.0",
@@ -1,16 +0,0 @@
1
- import {
2
- formatMatches,
3
- formatPairs,
4
- loadEstate,
5
- runEstate
6
- } from "./chunk-2VLN6JLN.js";
7
- import "./chunk-XEH4GK5K.js";
8
- import "./chunk-X6PHP22P.js";
9
- import "./chunk-DWZY5MWD.js";
10
- import "./chunk-OBVWDPQQ.js";
11
- export {
12
- formatMatches,
13
- formatPairs,
14
- loadEstate,
15
- runEstate
16
- };
@@ -1,15 +0,0 @@
1
- import {
2
- describeFingerprint,
3
- merge,
4
- runAudit
5
- } from "./chunk-6LPMM752.js";
6
- import "./chunk-UVBVYM5D.js";
7
- import "./chunk-XEH4GK5K.js";
8
- import "./chunk-X6PHP22P.js";
9
- import "./chunk-DWZY5MWD.js";
10
- import "./chunk-OBVWDPQQ.js";
11
- export {
12
- describeFingerprint,
13
- merge,
14
- runAudit
15
- };