@design-intelligence/ghost 0.20.0 → 0.21.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.
Files changed (95) hide show
  1. package/dist/commands/checks-command.d.ts.map +1 -1
  2. package/dist/commands/checks-command.js +8 -1
  3. package/dist/commands/checks-command.js.map +1 -1
  4. package/dist/commands/init-command.d.ts.map +1 -1
  5. package/dist/commands/init-command.js +23 -8
  6. package/dist/commands/init-command.js.map +1 -1
  7. package/dist/commands/review-command.d.ts.map +1 -1
  8. package/dist/commands/review-command.js +1 -0
  9. package/dist/commands/review-command.js.map +1 -1
  10. package/dist/init-payloads/median/anti-goal.median.md +86 -0
  11. package/dist/init-payloads/median/median-tells.md +117 -0
  12. package/dist/init-payloads/skeleton/glossary.md +44 -0
  13. package/dist/init-payloads/skeleton/grammar.color-roles.md +26 -0
  14. package/dist/init-payloads/skeleton/grammar.conversation.md +23 -0
  15. package/dist/init-payloads/skeleton/grammar.hierarchy.md +39 -0
  16. package/dist/init-payloads/skeleton/grammar.motion.md +24 -0
  17. package/dist/init-payloads/skeleton/grammar.rhythm.md +23 -0
  18. package/dist/init-payloads/skeleton/grammar.surfaces.md +26 -0
  19. package/dist/init-payloads/skeleton/index.md +27 -0
  20. package/dist/init-payloads/skeleton/signature.palette.md +24 -0
  21. package/dist/init-payloads/skeleton/signature.shape.md +19 -0
  22. package/dist/init-payloads/skeleton/signature.temperature.md +20 -0
  23. package/dist/init-payloads/skeleton/signature.type.md +22 -0
  24. package/dist/init-payloads/vessel-light/anti-goal.median.md +86 -0
  25. package/dist/init-payloads/vessel-light/anti-goal.tells.md +37 -0
  26. package/dist/init-payloads/vessel-light/checks/conversation-grammar.md +20 -0
  27. package/dist/init-payloads/vessel-light/checks/median-tells.md +103 -0
  28. package/dist/init-payloads/vessel-light/checks/motion-restraint.md +20 -0
  29. package/dist/init-payloads/vessel-light/checks/relationships.md +33 -0
  30. package/dist/init-payloads/vessel-light/checks/values.md +51 -0
  31. package/dist/init-payloads/vessel-light/glossary.md +45 -0
  32. package/dist/init-payloads/vessel-light/grammar.color-roles.md +30 -0
  33. package/dist/init-payloads/vessel-light/grammar.conversation.md +30 -0
  34. package/dist/init-payloads/vessel-light/grammar.hierarchy.md +48 -0
  35. package/dist/init-payloads/vessel-light/grammar.motion.md +27 -0
  36. package/dist/init-payloads/vessel-light/grammar.rhythm.md +27 -0
  37. package/dist/init-payloads/vessel-light/grammar.surfaces.md +35 -0
  38. package/dist/init-payloads/vessel-light/index.md +37 -0
  39. package/dist/init-payloads/vessel-light/manifest.yml +2 -0
  40. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Black.woff2 +0 -0
  41. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Bold.woff2 +0 -0
  42. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-ExtraBold.woff2 +0 -0
  43. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Light.woff2 +0 -0
  44. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Medium.woff2 +0 -0
  45. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Regular.woff2 +0 -0
  46. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-SemiBold.woff2 +0 -0
  47. package/dist/init-payloads/vessel-light/materials/primitives.css +388 -0
  48. package/dist/init-payloads/vessel-light/materials/ref/composition.conversation.html +63 -0
  49. package/dist/init-payloads/vessel-light/materials/ref/composition.editorial.html +69 -0
  50. package/dist/init-payloads/vessel-light/materials/ref/composition.form.html +89 -0
  51. package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +60 -0
  52. package/dist/init-payloads/vessel-light/materials/ref/composition.table.html +104 -0
  53. package/dist/init-payloads/vessel-light/materials/ref/email.html +80 -0
  54. package/dist/init-payloads/vessel-light/materials/tokens.css +242 -0
  55. package/dist/init-payloads/vessel-light/register.data-density.md +39 -0
  56. package/dist/init-payloads/vessel-light/register.editorial.md +41 -0
  57. package/dist/init-payloads/vessel-light/register.email.md +43 -0
  58. package/dist/init-payloads/vessel-light/signature.palette.md +45 -0
  59. package/dist/init-payloads/vessel-light/signature.shape.md +27 -0
  60. package/dist/init-payloads/vessel-light/signature.temperature.md +37 -0
  61. package/dist/init-payloads/vessel-light/signature.type.md +36 -0
  62. package/dist/review/resolve.d.ts +2 -2
  63. package/dist/review/resolve.d.ts.map +1 -1
  64. package/dist/review/resolve.js +8 -4
  65. package/dist/review/resolve.js.map +1 -1
  66. package/dist/review/review-packet.d.ts +2 -0
  67. package/dist/review/review-packet.d.ts.map +1 -1
  68. package/dist/review/review-packet.js +9 -1
  69. package/dist/review/review-packet.js.map +1 -1
  70. package/dist/scan/check-scaffold.d.ts +1 -0
  71. package/dist/scan/check-scaffold.d.ts.map +1 -1
  72. package/dist/scan/check-scaffold.js +17 -1
  73. package/dist/scan/check-scaffold.js.map +1 -1
  74. package/dist/scan/fingerprint-package.d.ts +7 -1
  75. package/dist/scan/fingerprint-package.d.ts.map +1 -1
  76. package/dist/scan/fingerprint-package.js +25 -12
  77. package/dist/scan/fingerprint-package.js.map +1 -1
  78. package/dist/scan/packed-payloads.d.ts +4 -0
  79. package/dist/scan/packed-payloads.d.ts.map +1 -0
  80. package/dist/scan/packed-payloads.js +55 -0
  81. package/dist/scan/packed-payloads.js.map +1 -0
  82. package/dist/scan/templates.d.ts +20 -2
  83. package/dist/scan/templates.d.ts.map +1 -1
  84. package/dist/scan/templates.js +83 -11
  85. package/dist/scan/templates.js.map +1 -1
  86. package/dist/skill-bundle/SKILL.md +1 -0
  87. package/dist/skill-bundle/references/adapting-a-starter.md +102 -0
  88. package/dist/skill-bundle/references/authoring-scenarios.md +40 -1
  89. package/dist/skill-bundle/references/blocks.md +1 -1
  90. package/dist/skill-bundle/references/capture.md +5 -5
  91. package/package.json +2 -2
  92. package/dist/scan/steering-template.d.ts +0 -8
  93. package/dist/scan/steering-template.d.ts.map +0 -1
  94. package/dist/scan/steering-template.js +0 -266
  95. package/dist/scan/steering-template.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"checks-command.d.ts","sourceRoot":"","sources":["../../src/commands/checks-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAK/B;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA0CpD"}
1
+ {"version":3,"file":"checks-command.d.ts","sourceRoot":"","sources":["../../src/commands/checks-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAK/B;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAiDpD"}
@@ -27,13 +27,20 @@ export function registerChecksCommand(cli) {
27
27
  const paths = resolveFingerprintPackage(opts.package, process.cwd());
28
28
  const result = await addChecksDir(paths.packageDir);
29
29
  if (opts.format === "json") {
30
- process.stdout.write(`${JSON.stringify({ dir: result.dir, written: result.written }, null, 2)}\n`);
30
+ process.stdout.write(`${JSON.stringify({
31
+ dir: result.dir,
32
+ written: result.written,
33
+ skipped: result.skipped,
34
+ }, null, 2)}\n`);
31
35
  }
32
36
  else {
33
37
  process.stdout.write(`Added checks/: ${result.dir}\n`);
34
38
  for (const file of result.written) {
35
39
  process.stdout.write(` ${file}\n`);
36
40
  }
41
+ for (const file of result.skipped) {
42
+ process.stdout.write(` skipped ${file}\n`);
43
+ }
37
44
  }
38
45
  process.exit(0);
39
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"checks-command.js","sourceRoot":"","sources":["../../src/commands/checks-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAQ;IAC5C,GAAG;SACA,OAAO,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;SACzD,MAAM,CACL,iBAAiB,EACjB,4DAA4D,CAC7D;SACA,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SAC1E,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAI,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpD,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CACf,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAC5C,IAAI,EACJ,CAAC,CACF,IAAI,CACN,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBACvD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"checks-command.js","sourceRoot":"","sources":["../../src/commands/checks-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAQ;IAC5C,GAAG;SACA,OAAO,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;SACzD,MAAM,CACL,iBAAiB,EACjB,4DAA4D,CAC7D;SACA,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;SAC1E,MAAM,CAAC,KAAK,EAAE,MAAc,EAAE,IAAI,EAAE,EAAE;QACrC,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACpD,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACpD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CACf;oBACE,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CACN,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;gBACvD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;gBACtC,CAAC;gBACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"init-command.d.ts","sourceRoot":"","sources":["../../src/commands/init-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAO/B,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAsFlD"}
1
+ {"version":3,"file":"init-command.d.ts","sourceRoot":"","sources":["../../src/commands/init-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAQ/B,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CA0GlD"}
@@ -2,12 +2,14 @@ import { UsageError } from "#ghost-core";
2
2
  import { initFingerprintPackage } from "../fingerprint.js";
3
3
  import { addChecksDir } from "../scan/check-scaffold.js";
4
4
  import { resolveGhostDirDefault } from "../scan/index.js";
5
+ import { getInitBody } from "../scan/templates.js";
5
6
  import { failFromError } from "./errors.js";
6
7
  export function registerInitCommand(cli) {
7
8
  cli
8
9
  .command("init", "Create a root .ghost node fingerprint package")
9
10
  .option("--package <dir>", "Exact fingerprint package directory to initialize")
10
- .option("--template <name>", "Init template to scaffold (default: steering)")
11
+ .option("--template <name>", "Init template to scaffold (default: skeleton)")
12
+ .option("--body <name>", "Init body to install: a full inhabited package (e.g. vessel-light)")
11
13
  .option("--with <capabilities>", "Comma-separated capabilities to add after scaffolding (e.g. checks)")
12
14
  .option("--force", "Overwrite existing Ghost fingerprint files")
13
15
  .option("--format <fmt>", "Output format: cli or json", { default: "cli" })
@@ -20,18 +22,23 @@ export function registerInitCommand(cli) {
20
22
  }
21
23
  const exactPackage = typeof opts.package === "string" ? opts.package : undefined;
22
24
  const ghostDir = exactPackage === undefined ? ghostDirFromEnv() : undefined;
23
- const result = await initFingerprintPackage(exactPackage ?? ghostDir, process.cwd(), {
24
- ...(typeof opts.template === "string"
25
- ? { template: opts.template }
26
- : {}),
27
- force: Boolean(opts.force),
28
- });
29
25
  const withIds = parseWithCapabilities(opts.with);
30
26
  for (const id of withIds) {
31
27
  if (id !== "checks") {
32
28
  throw new UsageError(`Unknown --with capability '${id}'. Available: checks.`);
33
29
  }
34
30
  }
31
+ const body = typeof opts.body === "string" ? getInitBody(opts.body) : undefined;
32
+ if (body?.includesChecks && withIds.includes("checks")) {
33
+ throw new UsageError(`--with checks is redundant with --body ${body.name} — this body already includes its own checks/.`);
34
+ }
35
+ const result = await initFingerprintPackage(exactPackage ?? ghostDir, process.cwd(), {
36
+ ...(typeof opts.template === "string"
37
+ ? { template: opts.template }
38
+ : {}),
39
+ ...(typeof opts.body === "string" ? { body: opts.body } : {}),
40
+ force: Boolean(opts.force),
41
+ });
35
42
  const addedChecks = withIds.includes("checks")
36
43
  ? await addChecksDir(result.paths.packageDir)
37
44
  : undefined;
@@ -40,7 +47,12 @@ export function registerInitCommand(cli) {
40
47
  dir: result.paths.dir,
41
48
  written: result.written,
42
49
  ...(addedChecks !== undefined
43
- ? { checks: { written: addedChecks.written } }
50
+ ? {
51
+ checks: {
52
+ written: addedChecks.written,
53
+ skipped: addedChecks.skipped,
54
+ },
55
+ }
44
56
  : {}),
45
57
  }, null, 2)}\n`);
46
58
  }
@@ -54,6 +66,9 @@ export function registerInitCommand(cli) {
54
66
  for (const file of addedChecks.written) {
55
67
  process.stdout.write(` checks/${file}\n`);
56
68
  }
69
+ for (const file of addedChecks.skipped) {
70
+ process.stdout.write(` skipped checks/${file}\n`);
71
+ }
57
72
  }
58
73
  }
59
74
  process.exit(0);
@@ -1 +1 @@
1
- {"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/commands/init-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/commands/init-command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"review-command.d.ts","sourceRoot":"","sources":["../../src/commands/review-command.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAW/B,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAqDpD"}
1
+ {"version":3,"file":"review-command.d.ts","sourceRoot":"","sources":["../../src/commands/review-command.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAW/B,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAsDpD"}
@@ -38,6 +38,7 @@ export function registerReviewCommand(cli) {
38
38
  diff: opts.diff,
39
39
  });
40
40
  const packet = await buildReviewPacket(fingerprint, diffText, {
41
+ packageDir: paths.packageDir,
41
42
  runProbes: opts.probes !== false,
42
43
  cwd: process.cwd(),
43
44
  });
@@ -1 +1 @@
1
- {"version":3,"file":"review-command.js","sourceRoot":"","sources":["../../src/commands/review-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"review-command.js","sourceRoot":"","sources":["../../src/commands/review-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ ---
2
+ description: "The model's median defaults this fingerprint refuses — gather for any greenfield visual surface or first-draft copy. Each rule is reject→replace; delete lines your brand legitimately violates."
3
+ ---
4
+
5
+ This is the model's median, not your brand. Each rule is reject→replace.
6
+ Delete every line your brand legitimately violates — `ghost validate` will
7
+ warn on any check reference the deletion orphans — delete the paired flag too.
8
+
9
+ These are not aesthetic opinions. Where a count is given, it is the measured
10
+ convergence of 300 unsteered generations across three frontier models (the
11
+ antimedian experiment): the defaults a model reaches for when nobody hands it
12
+ a brand. An output showing several of these tells reads as generated,
13
+ whatever else it does right. A deterministic floor rides alongside these
14
+ rules in the paired check — mechanical tells like gradient-filled text,
15
+ emoji as interface icons, em-dash pileups, and aphoristic cadence —
16
+ verified at review, never steered in prose.
17
+
18
+ ### Hover-lift
19
+ Reject hover-lift (`translateY` + growing shadow) as the default interaction
20
+ → confirm with color and background change at the fingerprint's fast
21
+ duration. (measured: 341)
22
+
23
+ ### Indigo accent
24
+ Reject the indigo/blue/purple default accent (`#4f46e5`, `#2563eb`,
25
+ `#8b5cf6` family; purple/violet hue 260–310) → the fingerprint's declared
26
+ palette; absent one, monochrome plus a single functional accent.
27
+
28
+ ### Dark theme
29
+ Reject unprompted dark theme → the fingerprint's declared surface.
30
+ Dark-to-look-cool and light-to-be-safe are the same retreat from a decision.
31
+ (measured: 271)
32
+
33
+ ### Gradients
34
+ Reject gradient page and section backgrounds and gradient-filled CTAs → flat
35
+ surfaces in semantic roles.
36
+
37
+ ### Side-stripe
38
+ Reject side-stripe borders (a thick colored border on one side of a rounded
39
+ card) — the single most recognizable tell of AI-generated UI → a full
40
+ hairline border, a 4–8% surface tint, or a leading glyph.
41
+
42
+ ### Cream surface
43
+ Reject the cream/sand/beige default surface (warm off-white; token names
44
+ like `--cream`, `--sand`, `--parchment` are the tell) → a true off-white,
45
+ the brand's own hue, or a committed color; warmth via accent and type, not
46
+ the ground.
47
+
48
+ ### Glassmorphism
49
+ Reject glassmorphism (decorative backdrop blur) → flat surfaces with real
50
+ borders and the fingerprint's elevation tiers.
51
+
52
+ ### Chat bubbles
53
+ Reject chat bubbles with initials-circle avatars for assistant turns →
54
+ assistant text plain on the page surface; user turns marked compactly.
55
+
56
+ ### Stock copy
57
+ Reject stock template copy ("Simple, transparent pricing") → headings that
58
+ state what this product specifically does.
59
+
60
+ ### Celebration
61
+ Reject celebration copy and UI (exclamation success, confetti language) →
62
+ quiet factual confirmation.
63
+
64
+ ### Nested cards
65
+ Reject nested cards and everything-in-cards → one surface level per region;
66
+ interior hierarchy from spacing and type; spacing and alignment group
67
+ without card overhead.
68
+
69
+ ### Hero metric
70
+ Reject the hero-metric template (big number + small label + supporting stats
71
+ as default proof) → evidence specific to the product, or nothing. A
72
+ prominent metric showing real user data is fine.
73
+
74
+ ### Every button primary
75
+ Reject every button a primary button → one primary per view; the rest step
76
+ down the fingerprint's emphasis ladder.
77
+
78
+ ### Eyebrow kicker
79
+ Reject an eyebrow kicker on every section → at most one, where the register
80
+ sanctions it; one named kicker is voice, every-section is AI grammar.
81
+
82
+ ### Decorative motion
83
+ Reject decorative looping animation (pulse/float/shimmer) and uniform
84
+ fade-and-rise on every scrolled section → motion as evidence of state
85
+ change; loops only for genuine loading; decoration never compensates for
86
+ weak structure — fix spacing, copy, and hierarchy first.
@@ -0,0 +1,117 @@
1
+ ---
2
+ name: Median tells
3
+ description: Flags the measured defaults of unsteered generation, the deterministic floor, and current model-signature tells — hover-lift, default accents, unprompted dark theme, gradient text, contrast, frequency tells, and per-model signatures.
4
+ severity: high
5
+ references:
6
+ - anti-goal.median > Hover-lift
7
+ - anti-goal.median > Indigo accent
8
+ - anti-goal.median > Dark theme
9
+ - anti-goal.median > Gradients
10
+ - anti-goal.median > Glassmorphism
11
+ - anti-goal.median > Side-stripe
12
+ - anti-goal.median > Cream surface
13
+ - anti-goal.median > Chat bubbles
14
+ - anti-goal.median > Stock copy
15
+ - anti-goal.median > Celebration
16
+ - anti-goal.median > Hero metric
17
+ - anti-goal.median > Eyebrow kicker
18
+ ---
19
+
20
+ These flags target the measured convergence patterns of unsteered model
21
+ generation, the deterministic floor the median node licenses, and tells
22
+ specific to individual models. Each is mechanically detectable in a diff.
23
+ Pruning a rule from `anti-goal.median` orphans its paired reference here —
24
+ `ghost validate` warns; delete the flag and its reference together.
25
+
26
+ Flag `transform` with `translateY` inside a `:hover` rule on cards,
27
+ buttons, or list items, especially paired with a shadow increase. Hover
28
+ confirmation in this fingerprint is color and background change, not lift.
29
+ (`anti-goal.median > Hover-lift`)
30
+
31
+ Flag accent values in the indigo/blue/purple default family (`#4f46e5`,
32
+ `#6366f1`, `#2563eb`, `#3b82f6`, `#8b5cf6`, and close neighbors)
33
+ unless the diff shows the user asked for them. They are model defaults, not
34
+ palette members. (`anti-goal.median > Indigo accent`)
35
+
36
+ Flag whole-page dark backgrounds when the ask did not request dark mode.
37
+ Dark surfaces are a declared brand choice or an explicit theme, never an
38
+ unprompted default. (`anti-goal.median > Dark theme`)
39
+
40
+ Flag `linear-gradient` or `radial-gradient` as page or section
41
+ backgrounds, and gradient-filled buttons. (`anti-goal.median > Gradients`)
42
+
43
+ Flag `backdrop-filter: blur` used for glassmorphism cards.
44
+ (`anti-goal.median > Glassmorphism`)
45
+
46
+ Flag `background-clip: text` (with or without the `-webkit-` prefix)
47
+ paired with a gradient. Emphasis comes from weight or size in a single
48
+ solid color.
49
+
50
+ Flag a thick colored border on one side of an element (`border-left` or a
51
+ `border-l-*` utility at 2px or more in a non-neutral color) while the
52
+ other sides stay thin. (`anti-goal.median > Side-stripe`)
53
+
54
+ Flag warm off-white page backgrounds in the cream/sand/beige band, and token
55
+ names like `--cream`, `--sand`, `--parchment`, `--linen` introduced
56
+ by the diff. (`anti-goal.median > Cream surface`)
57
+
58
+ Flag assistant messages rendered as bubbles with initials-circle avatars.
59
+ (`anti-goal.median > Chat bubbles`)
60
+
61
+ Flag emoji used as icons or imagery in interface chrome. Text labels carry
62
+ meaning.
63
+
64
+ Flag stock template copy in headings: "Simple, transparent pricing",
65
+ "Welcome back", and interchangeable-with-a-competitor phrasing. Recommend
66
+ copy that states what this product specifically does.
67
+ (`anti-goal.median > Stock copy`)
68
+
69
+ Flag exclamation-marked success copy, confetti language, and celebratory UI
70
+ ("You did it!", "Awesome!"). Confirmation is quiet and factual.
71
+ (`anti-goal.median > Celebration`)
72
+
73
+ Flag the hero-metric template — a big number, small label, and supporting
74
+ stats as default proof — unless the metric shows real user data. Recommend
75
+ evidence specific to the product, or nothing.
76
+ (`anti-goal.median > Hero metric`)
77
+
78
+ Deterministic floor — licensed by the median node, verified here, never
79
+ steered in prose:
80
+
81
+ Flag text/background pairs below WCAG AA contrast: 4.5:1 for body text,
82
+ 3:1 for large text (24px and up, or 18.7px bold and up). Check the worst
83
+ stop when the background is a gradient.
84
+
85
+ Flag animation or transition without a `prefers-reduced-motion: reduce`
86
+ alternative — a crossfade or instant state change.
87
+
88
+ Flag ad-hoc z-index values (`999`, `9999`, or any value outside a
89
+ declared scale). Layering wants a semantic scale, not an arms race.
90
+
91
+ Flag `cubic-bezier` easings whose control points overshoot the 0–1 range,
92
+ and keyframe names matching bounce, elastic, wobble, or jiggle.
93
+
94
+ Frequency tells — the crime is repetition, not the move (advisory):
95
+
96
+ Flag three or more uppercase, tracked eyebrow kickers above section headings
97
+ in one page. One named kicker is voice; a kicker on every section is model
98
+ grammar. (`anti-goal.median > Eyebrow kicker`)
99
+
100
+ Flag five or more em-dashes in body copy in one view.
101
+
102
+ Flag three or more instances of the aphoristic rebuttal cadence ("Not X. Y."
103
+ / "Sentence. No qualifiers.") in one page's copy.
104
+
105
+ Model-signature tells — skip any block whose model did not produce the diff
106
+ (advisory):
107
+
108
+ Codex: flag a 1px border paired with a box-shadow of 16px blur or more on
109
+ the same element — pick a solid border or a tight shadow, not both. Flag
110
+ border-radius of 32px or more on cards, sections, or inputs unless an
111
+ answered shape dial (`signature.shape`) sanctions large radii — then it is
112
+ fidelity, not a tell. Flag 1px linear-gradient grid or repeating-stripe
113
+ backgrounds used as decoration.
114
+
115
+ Gemini: flag `transform` (scale, rotate, translate) on `img` inside a
116
+ `:hover` rule, including group-hover utilities targeting a child image.
117
+ Animate the card's background, border, or shadow instead.
@@ -0,0 +1,44 @@
1
+ ---
2
+ kinds:
3
+ - name: grammar
4
+ - name: signature
5
+ - name: register
6
+ - name: anti-goal
7
+ posture: guard
8
+ ---
9
+
10
+ # grammar
11
+
12
+ The brand's decision logic: closed sets, role vocabularies, and assembly
13
+ rules, stated in token roles and never in literal values. Grammar survives an
14
+ adaptation unchanged — swap every value and these nodes still hold. Gather
15
+ grammar before inventing structure.
16
+
17
+ # signature
18
+
19
+ The dials: the choices that make a brand this brand. In this starter every
20
+ signature node is unanswered — it states the fixed relationship worth
21
+ keeping and asks the question only a human can answer. When the human
22
+ answers, restate the node as the brand's current answer. Gather signature
23
+ before setting any value a dial governs.
24
+
25
+ # register
26
+
27
+ A condition-scoped contract: a situation — data-dense consoles, editorial
28
+ pages, transactional email — where parts of the default rules invert. Each
29
+ register names its condition first. Truths from the wrong register are
30
+ poison, not context; gather a register only when its condition matches the
31
+ task. This starter declares the kind and ships no register nodes: registers
32
+ invert answered defaults, and the dials are not answered yet.
33
+
34
+ # anti-goal
35
+
36
+ What this package refuses, each reject paired with its replacement.
37
+ `anti-goal.median` is the model's floor, not the brand's taste. Gather
38
+ anti-goals before styling anything greenfield.
39
+
40
+ ---
41
+
42
+ The ghost skill bundle teaches authoring — its `adapting-a-starter` recipe is
43
+ the procedure for growing this skeleton into a real fingerprint: answer the
44
+ dials, prune the median floor, edit your values, then generate refs and tells.
@@ -0,0 +1,26 @@
1
+ ---
2
+ description: "Semantic color roles and the rules that govern them — gather before choosing any color; roles not raw values, status is meaning, expression is register-gated and never on controls."
3
+ ---
4
+
5
+ The token roles are the source of truth. An agent may combine roles, but it
6
+ may not author around them. Raw color values are implementation detail, never
7
+ product language.
8
+
9
+ Author with semantic roles: `background`, `foreground`, `card`, `popover`,
10
+ `primary`, `secondary`, `muted`, `accent`, `border`, `input`, `ring`, and the
11
+ status roles. If a container needs a color, it first needs a role.
12
+
13
+ The status roles — destructive, success, warning, info — exist only when
14
+ meaning demands them. Destructive means destructive or error. Success means
15
+ success. Warning means warning. Info means information. None of them are
16
+ brand accents, and they never moonlight as atmosphere, in any register.
17
+
18
+ One view should not perform a color palette. If a status color is present,
19
+ let the rest of the view stay on the base roles. Richness beyond this is
20
+ register-gated: a closed expression set (`--expression-*`) exists; its size
21
+ and members are a dial — see the palette signature — and each register caps
22
+ how loud they may be.
23
+
24
+ The constant that holds across every register: expression never touches what
25
+ you click. Buttons, inputs, and links stay on the base roles everywhere. A
26
+ colored control is a different design system.
@@ -0,0 +1,23 @@
1
+ ---
2
+ description: "Conversation grammar — plain assistant text, compact user surfaces, collapsed tool calls, one structured prompt input; gather for any AI thread, agent console, review assistant, or prompt composer."
3
+ ---
4
+
5
+ Conversation UI is not chat cosplay. The assistant speaks on the page surface
6
+ as plain text: no bubble, no border, no fill.
7
+
8
+ User turns are compact muted surfaces aligned right. They mark authorship
9
+ without turning the thread into alternating balloons.
10
+
11
+ Assistant hierarchy comes from prose, spacing, and type. Wrapping assistant
12
+ messages in cards makes the system look defensive and wastes density.
13
+
14
+ Tool calls are operational evidence. Collapse them to a labeled one-line
15
+ summary with status. Expand only when the user asks for detail, then show
16
+ mono content inside the disclosed area.
17
+
18
+ The prompt input is one bordered surface. The textarea region stays empty of
19
+ controls so writing remains the focus. Attachments, model choices, secondary
20
+ tools, and send live in a single row below it.
21
+
22
+ There is one primary send action. Stop and send are mutually exclusive states
23
+ of the same action area, not two competing primary buttons.
@@ -0,0 +1,39 @@
1
+ ---
2
+ description: "The closed hierarchy vocabulary — six text variants, seven tones, a five-rung control emphasis ladder, one primary per view — gather for any view that contains text or actions."
3
+ ---
4
+
5
+ Hierarchy is a closed vocabulary, not a size slider. Every piece of text and
6
+ every control picks from a named set; anything outside the set is a broken
7
+ primitive, not a variant.
8
+
9
+ The text variants are exactly six: display, headline, title, body, label,
10
+ mono. Variant names are jobs, not decoration. Display leads a rare editorial
11
+ moment. Headline names a section. Title anchors a card, dialog, or compact
12
+ region. Body carries reading. Label names structure — category tags, field
13
+ labels, bylines, metadata, compact status. Mono carries code and machine
14
+ detail. Do not fake hierarchy with arbitrary font sizes; choose the tier that
15
+ matches the job, then use tone, weight, and spacing for the rest.
16
+
17
+ The tones are exactly seven: default, muted, inverse, success, warning, info,
18
+ destructive. Tone is part of the message. Default is the main reading plane.
19
+ Muted carries secondary information. Inverse is for dark or primary surfaces.
20
+ The four status tones appear only when the words have that state meaning.
21
+ Hierarchy starts with tone and weight before size — a secondary note usually
22
+ wants muted body or label, not a smaller custom font. If the prose needs
23
+ emphasis, improve the sentence before adding a style.
24
+
25
+ The control emphasis ladder is exactly five rungs: primary, secondary,
26
+ outline, ghost, link. One primary action per view is the rule; everything
27
+ else steps down the ladder. Primary is for the action the screen exists to
28
+ complete — if two buttons both look primary, the hierarchy failed.
29
+ Destructive is a meaning, not a rung: it is rare, it names the destructive
30
+ act directly, and it is never borrowed for urgency, emphasis, or brand heat.
31
+
32
+ Fields are quiet until they are active: hairline border, muted placeholder,
33
+ clear label, and a focused ring when the user engages. The focus ring is
34
+ guidance, not decoration. Errors state facts next to the field that caused
35
+ them — do not hide field errors in modals, toasts, or generic banners when
36
+ the user needs to fix one input.
37
+
38
+ Balanced text is for headings and compact statements. Do not balance long
39
+ body copy into jagged reading.
@@ -0,0 +1,24 @@
1
+ ---
2
+ description: "Motion doctrine — motion is evidence of state change, never decoration; a closed vocabulary of three duration roles and one ease; gather for any transition, animation, or hover treatment."
3
+ ---
4
+
5
+ Motion is evidence of a state change. It confirms hover, press, reveal,
6
+ collapse, entrance, exit, and spatial movement. It does not entertain.
7
+
8
+ The entire vocabulary is three duration roles and one ease. Fast is for hover
9
+ and press. Normal is for reveals, fades, and small state changes. Slow is
10
+ reserved for spatial transitions where the user needs to understand movement.
11
+ Do not introduce novelty easings because a surface feels static; the ease's
12
+ character is a brand answer — see the temperature signature.
13
+
14
+ Nothing loops except explicit loading states. A spinner may continue because
15
+ work continues. Decorative pulsing, floating, glowing, and attention-seeking
16
+ keyframes are off-language.
17
+
18
+ Prefer opacity and small transform changes. If removing an animation does not
19
+ reduce comprehension, the animation was decoration.
20
+
21
+ Condition: marketing and editorial surfaces may stage entrances — scroll
22
+ reveals and section transitions are part of editorial rhythm, still built
23
+ from the three durations and the one ease. In product UI the same staging is
24
+ decoration.
@@ -0,0 +1,23 @@
1
+ ---
2
+ description: "Layout rhythm — all layout is stacks with a closed gap step set; gather before laying anything out; never ad-hoc sibling margins."
3
+ ---
4
+
5
+ All layout is stacks. Rhythm comes from relationships between siblings, not
6
+ from isolated margins pasted onto whichever element was last touched.
7
+
8
+ The gap steps are exactly five: `--gap-xs`, `--gap-sm`, `--gap-md`,
9
+ `--gap-lg`, `--gap-xl`. Choose the gap that states the relationship. Do not
10
+ tune by single pixels to make a screenshot pass.
11
+
12
+ The default is column, medium gap, stretch alignment, start justification.
13
+ That is the ordinary reading rhythm.
14
+
15
+ Columns are for almost everything: forms, cards, message lists, modal bodies,
16
+ settings, empty states, and page sections. A column lets the user scan.
17
+
18
+ Rows are conditional. Use them for controls, metadata lines, compact status,
19
+ and paired label/value moments. If a row starts wrapping awkwardly, it
20
+ probably wanted to be a column.
21
+
22
+ Ad-hoc margins between siblings are forbidden because they hide the rhythm.
23
+ When spacing feels wrong, change the stack gap or split the stack.
@@ -0,0 +1,26 @@
1
+ ---
2
+ description: "Surface roles and the closed elevation set — gather for any card, popover, modal, dialog, scrim, or bordered container; flat is the default, borders are structural, exactly three elevation tiers."
3
+ ---
4
+
5
+ Surface is the only way an element gets a background, border, radius, or
6
+ shadow. If a container needs visual treatment, it first needs a surface role.
7
+
8
+ The vocabulary is closed: role, padding, radius, border, and elevation. These
9
+ axes create enough range for page flow, cards, popovers, muted blocks,
10
+ accents, and dark moments without inventing one-off boxes.
11
+
12
+ The default surface is flat: no border, no shadow. We do not outline
13
+ everything to prove layout exists.
14
+
15
+ The elevation tiers are exactly three: card, popover, modal. Elevation
16
+ implies hierarchy — a card sits in the document flow, a popover floats above
17
+ the flow, a modal interrupts the task. Pick the tier that matches the
18
+ interaction; never write a custom shadow because the composition feels flat,
19
+ and never pair a low tier with an interrupting role or give a routine card
20
+ modal gravity. Component shadows belong to the primitives that own them;
21
+ never borrow them for layout.
22
+
23
+ Borders are structural, especially for inputs and overlays. They are not
24
+ decorative frames around ordinary text — reject borders as decoration,
25
+ especially around assistant text, and use space, tone, and type hierarchy
26
+ instead.
@@ -0,0 +1,27 @@
1
+ ---
2
+ description: "Always read first — the trust tiers of this starter fingerprint, the unanswered dials, and how to work before they are answered."
3
+ ---
4
+
5
+ This is a skeleton fingerprint: the adaptation-safe law of good interface work,
6
+ with every brand decision left explicitly open. It steers an agent away from
7
+ the model's median from the first generation, without pretending to be a
8
+ brand it is not.
9
+
10
+ The corpus carries two trust tiers. Grammar and the median floor are law:
11
+ safe to consume verbatim, unchanged by any adaptation — they speak in
12
+ token roles and closed sets, never in literal values. Signature nodes are
13
+ dials, and in this starter every dial is unanswered: each states the fixed
14
+ relationship worth keeping and the question only a human can answer. Do not
15
+ freehand a dial's value and present it as brand-backed — ask the human or
16
+ flag the gap.
17
+
18
+ The reset raises the floor; only the fingerprint escapes the median.
19
+
20
+ Unanswered dials do not block work; they mark what your report must flag.
21
+ When generating before the dials are answered, define the grammar's token
22
+ roles in your own stylesheet with provisional values — the role names are
23
+ the contract; the values are placeholders until the dials say otherwise.
24
+
25
+ When a requested UI is not covered by a node, compose from the grammar. Do
26
+ not invent a new styling system. If the result needs a new pattern, the new
27
+ pattern should come from observed drift, not anticipation.
@@ -0,0 +1,24 @@
1
+ ---
2
+ description: "Gather whenever color beyond the base roles is in question. The palette dial: a quiet base spine plus a closed expression set at situation-gated volume — this dial is unanswered; ask the human or flag the gap, don't freehand it."
3
+ ---
4
+
5
+ This dial is unanswered — ask the human or flag the gap. Do not freehand a
6
+ value and present it as brand-backed.
7
+
8
+ The relationship is fixed: one brand at different volumes. A quiet base
9
+ spine is the default atmosphere in every medium — calm, legible, and
10
+ resistant to novelty — and a closed expression set supplies the atmosphere,
11
+ with volume set by situation, never by taste. Two constants outrank any
12
+ volume decision: expression never touches what you click — buttons, inputs,
13
+ and links stay on the base roles everywhere — and the status roles are not
14
+ expression; they keep their meanings everywhere and never moonlight as
15
+ atmosphere. The ladder — a quiet spine, a closed hue set, situation-gated
16
+ volume — is the part worth keeping.
17
+
18
+ The open question: what is this brand's base spine, and what are the named
19
+ hues of its closed expression set — how many, and which? When the human
20
+ answers, restate this node as "this brand's current answer is …" and record
21
+ the values where your materials live. If the task can't wait for an answer,
22
+ proceed with a quiet provisional choice, honor the fixed relationship, label
23
+ the choice provisional in your report — and never restate this node as
24
+ answered.