@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packed-payloads.js","sourceRoot":"","sources":["../../src/scan/packed-payloads.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  export interface TemplateFile {
5
5
  /** Path relative to the package directory (e.g. "principle.voice.md"). */
6
6
  relativePath: string;
7
- content: string;
7
+ content: string | Uint8Array;
8
8
  }
9
9
  /**
10
10
  * An `init` template: a pure description of the seed files a fresh node package
@@ -15,8 +15,26 @@ export interface TemplateFile {
15
15
  export interface GhostInitTemplate {
16
16
  name: string;
17
17
  description: string;
18
- files(): TemplateFile[];
18
+ files(): TemplateFile[] | Promise<TemplateFile[]>;
19
19
  }
20
+ /**
21
+ * An init body: a full inhabited fingerprint package — answered signature
22
+ * dials, materials, refs, and its own checks. Templates are shapes of
23
+ * emptiness awaiting the owner's truths; a body is the same anatomy with a
24
+ * real brand's values plugged in. Bodies keep their own manifest id (e.g.
25
+ * `vessel-light`) so an unadapted install stays honestly labeled — changing
26
+ * the id is step one of adapting the starter, an explicit human act.
27
+ */
28
+ export interface GhostInitBody {
29
+ name: string;
30
+ description: string;
31
+ /** Whether the body payload ships its own `checks/` directory. */
32
+ includesChecks: boolean;
33
+ files(): Promise<TemplateFile[]>;
34
+ }
35
+ /** Look up a registered init body by name. */
36
+ export declare function getInitBody(name: string): GhostInitBody | undefined;
37
+ export declare function listInitBodies(): string[];
20
38
  export declare const DEFAULT_TEMPLATE_NAME: string;
21
39
  /** Look up a registered init template by name. */
22
40
  export declare function getInitTemplate(name: string): GhostInitTemplate | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scan/templates.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AACD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,IAAI,YAAY,EAAE,CAAC;CACzB;AAkSD,eAAO,MAAM,qBAAqB,QAAyB,CAAC;AAE5D,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAG3E;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C"}
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/scan/templates.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC;CAC9B;AACD;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,IAAI,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACnD;AAkVD;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAClC;AAgCD,8CAA8C;AAC9C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAEnE;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,eAAO,MAAM,qBAAqB,QAAyB,CAAC;AAE5D,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAM3E;AAED,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C"}
@@ -1,6 +1,6 @@
1
1
  import { GHOST_FINGERPRINT_PACKAGE_SCHEMA } from "#ghost-core";
2
2
  import { GHOST_EVENTS_FILENAME, LEGACY_PULL_HISTORY_FILENAME, } from "./constants.js";
3
- import { createSteeringTemplate } from "./steering-template.js";
3
+ import { loadPackedPayload, loadPayloadFile } from "./packed-payloads.js";
4
4
  function manifestFile() {
5
5
  return {
6
6
  relativePath: "manifest.yml",
@@ -27,7 +27,8 @@ function gitignoreFile() {
27
27
  const MINIMAL_TEMPLATE = {
28
28
  name: "minimal",
29
29
  description: "Minimal node package: manifest + glossary + a starter index node.",
30
- files() {
30
+ async files() {
31
+ const medianFile = await medianTemplateFile();
31
32
  return [
32
33
  manifestFile(),
33
34
  gitignoreFile(),
@@ -62,6 +63,8 @@ evidence unless the node says the sample itself is normative.
62
63
  What this brand must never look, sound, or feel like — named generic patterns
63
64
  and rejected neighbors. Always-on, like a principle, but stated as the thing
64
65
  to steer away from.
66
+ \`anti-goal.median\` is the model's floor, not the brand's taste. Gather
67
+ anti-goals before styling anything greenfield.
65
68
 
66
69
  # asset
67
70
 
@@ -102,6 +105,7 @@ When a truth is narrower, state the condition in the prose — the situation whe
102
105
  it applies — never a filing destination.
103
106
  `,
104
107
  },
108
+ medianFile,
105
109
  ];
106
110
  },
107
111
  };
@@ -119,7 +123,8 @@ it applies — never a filing destination.
119
123
  const COMPOSITION_TEMPLATE = {
120
124
  name: "composition",
121
125
  description: "Composition starter: minimal files + an invariants floor and a worked bound/open pattern.",
122
- files() {
126
+ async files() {
127
+ const medianFile = await medianTemplateFile();
123
128
  return [
124
129
  manifestFile(),
125
130
  gitignoreFile(),
@@ -158,6 +163,8 @@ render travels with the prose.
158
163
  What this brand must never look, sound, or feel like — named generic patterns
159
164
  and rejected neighbors. Always-on, like a principle, but stated as the thing
160
165
  to steer away from.
166
+ \`anti-goal.median\` is the model's floor, not the brand's taste. Gather
167
+ anti-goals before styling anything greenfield.
161
168
 
162
169
  # asset
163
170
 
@@ -270,23 +277,88 @@ When a blessed render of this pattern exists, add an \`exemplar.*\` node with
270
277
  \`materials\` pointing at the screenshot and the implementation path.
271
278
  `,
272
279
  },
280
+ medianFile,
273
281
  ];
274
282
  },
275
283
  };
276
- const STEERING_TEMPLATE = createSteeringTemplate({
277
- manifestFile,
278
- gitignoreFile,
279
- });
284
+ const SKELETON_FILE_ORDER = new Map([
285
+ "glossary.md",
286
+ "index.md",
287
+ "anti-goal.median.md",
288
+ "grammar.hierarchy.md",
289
+ "grammar.rhythm.md",
290
+ "grammar.surfaces.md",
291
+ "grammar.motion.md",
292
+ "grammar.color-roles.md",
293
+ "grammar.conversation.md",
294
+ "signature.shape.md",
295
+ "signature.palette.md",
296
+ "signature.type.md",
297
+ "signature.temperature.md",
298
+ ].map((path, index) => [path, index]));
299
+ const SKELETON_TEMPLATE = {
300
+ name: "skeleton",
301
+ description: "Naked skeleton: the median floor + grammar law, with the signature dials left unanswered.",
302
+ async files() {
303
+ const skeletonFiles = [
304
+ ...(await loadPackedPayload("skeleton")),
305
+ await medianTemplateFile(),
306
+ ];
307
+ skeletonFiles.sort((a, b) => (SKELETON_FILE_ORDER.get(a.relativePath) ?? Number.MAX_SAFE_INTEGER) -
308
+ (SKELETON_FILE_ORDER.get(b.relativePath) ??
309
+ Number.MAX_SAFE_INTEGER) ||
310
+ a.relativePath.localeCompare(b.relativePath));
311
+ return [manifestFile(), gitignoreFile(), ...skeletonFiles];
312
+ },
313
+ };
314
+ async function medianTemplateFile() {
315
+ return {
316
+ relativePath: "anti-goal.median.md",
317
+ content: await loadPayloadFile("median", "anti-goal.median.md"),
318
+ };
319
+ }
280
320
  const TEMPLATES = new Map([
281
321
  [MINIMAL_TEMPLATE.name, MINIMAL_TEMPLATE],
282
322
  [COMPOSITION_TEMPLATE.name, COMPOSITION_TEMPLATE],
283
- [STEERING_TEMPLATE.name, STEERING_TEMPLATE],
323
+ [SKELETON_TEMPLATE.name, SKELETON_TEMPLATE],
284
324
  ]);
285
- export const DEFAULT_TEMPLATE_NAME = STEERING_TEMPLATE.name;
325
+ const VESSEL_LIGHT_BODY = {
326
+ name: "vessel-light",
327
+ description: "Vessel's design language at full strength: corpus, tokens, fonts, refs, and checks.",
328
+ includesChecks: true,
329
+ async files() {
330
+ const payload = await loadPackedPayload("vessel-light");
331
+ payload.sort((a, b) => {
332
+ const ao = BODY_FILE_ORDER.get(a.relativePath);
333
+ const bo = BODY_FILE_ORDER.get(b.relativePath);
334
+ return ((ao ?? Number.MAX_SAFE_INTEGER) - (bo ?? Number.MAX_SAFE_INTEGER) ||
335
+ a.relativePath.localeCompare(b.relativePath));
336
+ });
337
+ // The payload carries its own manifest.yml (id stays `vessel-light`);
338
+ // only the gitignore is generated locally.
339
+ return [gitignoreFile(), ...payload];
340
+ },
341
+ };
342
+ /** Listing order for the body scaffold output: anchors first, then the rest. */
343
+ const BODY_FILE_ORDER = new Map(["manifest.yml", "glossary.md", "index.md"].map((path, i) => [path, i]));
344
+ const BODIES = new Map([
345
+ [VESSEL_LIGHT_BODY.name, VESSEL_LIGHT_BODY],
346
+ ]);
347
+ /** Look up a registered init body by name. */
348
+ export function getInitBody(name) {
349
+ return BODIES.get(name);
350
+ }
351
+ export function listInitBodies() {
352
+ return [...BODIES.keys()];
353
+ }
354
+ export const DEFAULT_TEMPLATE_NAME = SKELETON_TEMPLATE.name;
286
355
  /** Look up a registered init template by name. */
287
356
  export function getInitTemplate(name) {
288
- if (name === "default")
289
- return STEERING_TEMPLATE;
357
+ // `default` and `steering` are silent aliases for the skeleton starter:
358
+ // `default` for callers that never named a template, `steering` for
359
+ // callers pinned to the pre-skeleton default's name.
360
+ if (name === "default" || name === "steering")
361
+ return SKELETON_TEMPLATE;
290
362
  return TEMPLATES.get(name);
291
363
  }
292
364
  export function listInitTemplates() {
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/scan/templates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EACL,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAoBhE,SAAS,YAAY;IACnB,OAAO;QACL,YAAY,EAAE,cAAc;QAC5B,OAAO,EAAE,WAAW,gCAAgC,eAAe;KACpE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa;IACpB,OAAO;QACL,YAAY,EAAE,YAAY;QAC1B,OAAO,EAAE,GAAG,qBAAqB,KAAK,4BAA4B,IAAI;KACvE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,gBAAgB,GAAsB;IAC1C,IAAI,EAAE,SAAS;IACf,WAAW,EACT,mEAAmE;IACrE,KAAK;QACH,OAAO;YACL,YAAY,EAAE;YACd,aAAa,EAAE;YACf;gBACE,YAAY,EAAE,aAAa;gBAC3B,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqChB;aACM;YACD;gBACE,YAAY,EAAE,UAAU;gBACxB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BhB;aACM;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,oBAAoB,GAAsB;IAC9C,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,2FAA2F;IAC7F,KAAK;QACH,OAAO;YACL,YAAY,EAAE;YACd,aAAa,EAAE;YACf;gBACE,YAAY,EAAE,aAAa;gBAC3B,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+ChB;aACM;YACD;gBACE,YAAY,EAAE,UAAU;gBACxB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BhB;aACM;YACD;gBACE,YAAY,EAAE,0BAA0B;gBACxC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BhB;aACM;YACD;gBACE,YAAY,EAAE,kCAAkC;gBAChD,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BhB;aACM;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;IAC/C,YAAY;IACZ,aAAa;CACd,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,IAAI,GAAG,CAA4B;IACnD,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC;IACzC,CAAC,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,CAAC;IACjD,CAAC,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC;CAC5C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC,IAAI,CAAC;AAE5D,kDAAkD;AAClD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,iBAAiB,CAAC;IACjD,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/scan/templates.ts"],"names":[],"mappings":"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"}
@@ -110,6 +110,7 @@ against the unpacked package with `--package <dir>`.
110
110
  - Author or update the fingerprint: follow [references/capture.md](references/capture.md).
111
111
  - Author material-backed nodes: follow [references/blocks.md](references/blocks.md).
112
112
  - Choose the right human-agent authoring workflow: follow [references/authoring-scenarios.md](references/authoring-scenarios.md).
113
+ - Adapt a starter (a body or the skeleton) to your brand: follow [references/adapting-a-starter.md](references/adapting-a-starter.md).
113
114
  - Gather applicable truths for a task: follow [references/recall.md](references/recall.md).
114
115
  - Shape a pre-generation brief: follow [references/brief.md](references/brief.md).
115
116
  - Explore deliberate provocations with wild nodes: follow [references/wild.md](references/wild.md).
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: adapting-a-starter
3
+ description: Transplant a starter fingerprint — a body like vessel-light or the naked skeleton — into your own brand, one procedure from manifest id to regenerated refs.
4
+ handoffs:
5
+ - label: Validate the adapted package
6
+ command: ghost validate --format json
7
+ prompt: Does the adapted fingerprint validate, and did any pruned rule orphan a check reference?
8
+ ---
9
+
10
+ # Recipe: Adapt A Starter Fingerprint
11
+
12
+ **Goal:** turn an installed starter — a full body (`ghost init --body
13
+ vessel-light`) or the naked skeleton (`ghost init`) — into *your* brand's
14
+ fingerprint without shipping a self-contradicting package.
15
+
16
+ A starter is factored by rate of change under adaptation. Knowing which stratum a
17
+ file belongs to tells you what to do with it:
18
+
19
+ | Stratum | Files | On adaptation |
20
+ | --- | --- | --- |
21
+ | Grammar | `grammar.*` | Keep unchanged — value-free decision logic that survives any adaptation. |
22
+ | Median floor | `anti-goal.median` | Prune, never rewrite — Ghost stamps this measured model truth into every initialized package; you own it after init. |
23
+ | Signature | `signature.*` | Answer — each is a dial; restate it with your brand's answer. |
24
+ | Values | `materials/tokens.css` | Edit — the single injection point for every literal value. |
25
+ | Registers | `register.*` | Re-tune — conditions referencing signature ids; revisit after the dials change. |
26
+ | Derived artifacts | `materials/ref/*.html`, `anti-goal.tells` | Regenerate — they demonstrate the values and near-misses of a *specific* signature. |
27
+
28
+ Do the steps **in order and in one sitting** where possible. A half-adapted
29
+ package is worse than an unadapted one: stale refs steer harder than any prose
30
+ you rewrote, so stopping after step 4 ships a fingerprint that contradicts
31
+ itself.
32
+
33
+ ## The procedure
34
+
35
+ 1. **Change the manifest id.** Edit `id:` in `manifest.yml` to your brand's
36
+ name. This is deliberately first: it is the explicit act that marks the
37
+ adaptation as begun. Until it changes, the package honestly claims to be the
38
+ starter, and every consuming agent cites it as a starter default.
39
+ 2. **Prune `anti-goal.median`.** Each rule is a `###` heading section; delete
40
+ the whole section for every rule your brand legitimately violates (a brand
41
+ built on gradients deletes the Gradients section — that is the node working,
42
+ not failing). Do not rewrite surviving rules; they are the model's measured
43
+ floor, not your taste. Then run `ghost validate`: every check reference
44
+ orphaned by a pruned heading surfaces as its own warning — delete the paired
45
+ flag and its reference from the check.
46
+ 3. **Answer the signature dials.** Walk each `signature.*` node as a
47
+ questionnaire item. Keep the fixed relationship (the part the node marks
48
+ as worth keeping); replace the starter's answer — or the open question —
49
+ with your brand's: restate the node as "this brand's current answer is …".
50
+ Ask the human for any dial they have not decided; never freehand a value
51
+ and present it as brand-backed.
52
+ 4. **Edit `materials/tokens.css`.** Every literal value lives here — radii,
53
+ palette, type sizes, durations, eases. Change the values; keep the role
54
+ names. The role names are the grammar's vocabulary and the reason the
55
+ grammar nodes survive untouched.
56
+ 5. **Regenerate the refs.** This is the step that decides whether the adaptation
57
+ succeeded. Exemplars dominate prose: a prose rule contradicted by a stale
58
+ ref loses. Rebuild each `materials/ref/*.html` against the new tokens and
59
+ answered dials, keep the annotation headers (`normative-for` /
60
+ `incidental`) current, and make each ref demonstrate its closed sets
61
+ completely. If the starter shipped no refs (the skeleton), generate them
62
+ now — a fingerprint with no exemplars steers at half strength.
63
+ 6. **Rewrite `anti-goal.tells`.** The tells are near-misses of the *starter's*
64
+ signature; yours are different. For each answered dial, name the failure
65
+ mode one step away from your answer and its replacement. If the starter
66
+ shipped no tells node (the skeleton), author one.
67
+ 7. **Re-run the checks — including against the refs.** `ghost validate` for
68
+ package shape, then review the regenerated refs against the median and
69
+ value checks (stage the ref changes and run `ghost review`). The floor
70
+ only holds if the refs hold it too: a ref that trips a median flag will
71
+ teach every future generation the violation. Rewrite the body's
72
+ `checks/values.md` alongside the dials it references.
73
+
74
+ ## Consuming an unadapted starter
75
+
76
+ Work does not block on adaptation. Before the procedure runs (or midway
77
+ through it), cite starter content honestly:
78
+
79
+ - Grammar: **Ghost-backed** — value-free decision logic that holds for any
80
+ brand.
81
+ - Surviving median rules: **owner-backed after init** — Ghost stamps this
82
+ measured model truth into every initialized package; you own the pruning and
83
+ any adaptation thereafter.
84
+ - The starter's signature values (a body) or your provisional choices (the
85
+ skeleton): **Ghost-backed (starter default, unadapted)** or **provisional**
86
+ — never plain brand truth. The manifest id tells you which state you are
87
+ in: a starter id means unadapted.
88
+ - In a brief, `anti-goal.median` sits in the anti-goals slot — after intent,
89
+ inventory, and composition, never before the brand truths. If a median rule
90
+ conflicts with an answered signature node, the signature wins and the
91
+ median line is a prune candidate to report.
92
+
93
+ ## Never
94
+
95
+ - Never rewrite grammar nodes to taste — if a grammar rule is wrong for your
96
+ brand, it was never grammar; move it to a signature node and answer it.
97
+ - Never leave the starter's refs alongside your new tokens — regenerate or
98
+ delete; a stale exemplar outweighs your rewritten prose.
99
+ - Never prune a median rule without deleting its paired check flag, or keep a
100
+ check that asserts an obligation no node states.
101
+ - Never pre-write the manifest id change into automation — it is the human's
102
+ act of ownership, the one step an agent should not take alone.
@@ -86,7 +86,7 @@ and enforced in review, not repeated as the model's main example.
86
86
  ## 4. Draft The Nodes
87
87
 
88
88
  Write the smallest useful set of nodes, each a purpose-coherent prose truth with
89
- a one-line `description`, named `<kind>.<slug>.md` (or a bare slug when no kind is present). Ask three questions of each body: why (the stance), with what
89
+ a one-line `description`, named `<kind>.<slug>.md` (or a bare slug when no kind is present). Ask three questions of each node body: why (the stance), with what
90
90
  (the materials), and how it is assembled (the patterns). These are drafting
91
91
  prompts, not fields.
92
92
 
@@ -134,6 +134,45 @@ prefix is a declared glossary kind (undeclared → warning with a "did you
134
134
  mean" suggestion). Use ordinary Git review as the approval boundary: uncommitted
135
135
  edits are drafts; checked-in nodes are canonical.
136
136
 
137
+ ## Shapes Of A Useful Node
138
+
139
+ The shapes below teach what steering prose looks like when it works. The
140
+ examples use **Morrow Ledger**, a fictional bookkeeping product — teaching
141
+ fiction for this recipe only, never content for a real corpus. Each shape is a
142
+ pattern to imitate with the human's real truths.
143
+
144
+ - **Stance as forced choices.** Not adjectives — decisions under pressure:
145
+ "Clarity beats momentum: write '3 invoices are 14+ days late', not 'Cash
146
+ flow needs attention.'" A stance earns its place when it rejects a plausible
147
+ wrong answer.
148
+ - **Composition floor.** Hard invariants with numbers, holding unless a
149
+ narrower condition says otherwise: "Maximum three figures above the fold —
150
+ if there are four, demote one into details instead of shrinking type."
151
+ - **Anti-goal as not-X-instead-Y.** The rejected default *and* its committed
152
+ replacement: "Not 'Revenue is up 24% 🎉' — instead 'July receipts are $4,820
153
+ higher than June; 2 invoices explain most of the change.'" A bare ban prunes
154
+ one path; the replacement commits another.
155
+ - **Pattern as bound/open.** Say what is decided and what remains free:
156
+ "Bound: status line first, one sentence, ≤11 words; one primary next step
157
+ last. Open: evidence may be a table row or a two-item list." All bound is a
158
+ template; nothing bound is vibes.
159
+ - **Annotated exemplar.** A concrete reference plus what it is normative for
160
+ and what is incidental: "Copy the square edge, measured evidence, and action
161
+ cost. Do not copy the exact amounts or dates." An unannotated exemplar
162
+ teaches its accidents as brand.
163
+ - **Material inventory.** `materials` locates; prose explains meaning:
164
+ "`src/styles/tokens.css` should define the ink, ledger, amber, and paper
165
+ colors." Never duplicate API docs unless the API itself is the brand truth.
166
+ - **Decision trace.** A worked tradeoff with the reversal condition: "We chose
167
+ visible evidence over shorter surfaces… Reverses when the evidence would
168
+ expose sensitive third-party details — then show the count only." Models
169
+ imitate reasoning as well as outputs.
170
+
171
+ State a silence posture somewhere the agent always reads (usually `index.md`):
172
+ when the fingerprint is silent, proceed provisionally from local conventions
173
+ only when safe, and ask before brand-defining, irreversible, legal,
174
+ privacy-sensitive, or high-risk choices.
175
+
137
176
  ## Never
138
177
 
139
178
  - Never derive brand truth from repo code alone; what the codebase repeats may
@@ -57,7 +57,7 @@ Neither is correct. A concrete block node is a deliberate trade, not a leak.
57
57
  reasoning, sources…) earns **one short prose body**. This is what the method is
58
58
  for.
59
59
  - The **composer middle** (card, table, form, sidebar…) is a call to weigh. Give
60
- it a body when its arrangement carries a stance worth matching.
60
+ it a prose body when its arrangement carries a stance worth matching.
61
61
 
62
62
  If a primitive ever seems to need stance guidance, that is a signal it is doing
63
63
  a composer's job. Promote the pattern into a node; do not write a body on the
@@ -181,7 +181,7 @@ action beats completeness...
181
181
  `materials`, a substantial fenced example, or a `## Skeleton`. You do not
182
182
  declare a separate type.
183
183
 
184
- ## What a body answers
184
+ ## What a node body answers
185
185
 
186
186
  While drafting, ask three questions of every truth — *why* (the stance), *with
187
187
  what* (the materials), and *how it is assembled* (the patterns). These are
@@ -204,7 +204,7 @@ genuinely a different truth.
204
204
 
205
205
  ## Node prose stances
206
206
 
207
- Node prose is steering payload. A generic sentence in a body averages every
207
+ Node prose is steering payload. A generic sentence in a node body averages every
208
208
  future generation toward the median, so hold drafts to these stances before the
209
209
  human sees them.
210
210
 
@@ -226,13 +226,13 @@ Everywhere else:
226
226
  fits a competitor's brand, it is retrieval-dead; rewrite it until it could
227
227
  belong to no one else.
228
228
  - **Cut unratified hedges.** "Generally," "where possible," and "consider" in a
229
- body mean the human never picked a side. Get the ratification or cut the
229
+ node body mean the human never picked a side. Get the ratification or cut the
230
230
  sentence.
231
231
  - **Ban brand-deck filler.** "Elevate," "delight," "seamless," "best-in-class,"
232
232
  "empower." When a brand doc supplies these words, they are testimony to
233
233
  distill, never prose to keep.
234
234
  - **Settle the altitude on purpose.** Every truth is either claimed universal
235
- or given its condition in the prose. A body that does neither was never
235
+ or given its condition in the prose. A node body that does neither was never
236
236
  curated for altitude; ask the human which it is.
237
237
 
238
238
  ## Score drafts before curation
@@ -244,7 +244,7 @@ dimension:
244
244
  | --- | --- |
245
245
  | Testimony | Can you quote the human words or artifact this node came from? |
246
246
  | Discrimination | Does the description fit only this brand? |
247
- | Force | Does the body decide something, or merely describe something? |
247
+ | Force | Does the node body decide something, or merely describe something? |
248
248
  | Altitude | Is it universal on purpose, or given its condition? |
249
249
  | Residue | Is it free of starter-demo prose and brand-deck filler? |
250
250
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design-intelligence/ghost",
3
- "version": "0.20.0",
3
+ "version": "0.21.0",
4
4
  "description": "Ghost CLI for the brand fingerprint: a portable steering packet of prose truths your agent reads before it builds, with advisory review after",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Block, Inc.",
@@ -74,6 +74,6 @@
74
74
  "zod": "^4.3.6"
75
75
  },
76
76
  "scripts": {
77
- "build": "rm -rf dist tsconfig.tsbuildinfo && tsc --build --force && chmod +x dist/bin.js && node ../../scripts/link-package-bin.mjs && cp -r src/skill-bundle dist/skill-bundle"
77
+ "build": "rm -rf dist tsconfig.tsbuildinfo && tsc --build --force && chmod +x dist/bin.js && node ../../scripts/link-package-bin.mjs && cp -r src/skill-bundle dist/skill-bundle && node ../../scripts/sync-init-payloads.mjs"
78
78
  }
79
79
  }
@@ -1,8 +0,0 @@
1
- import type { GhostInitTemplate, TemplateFile } from "./templates.js";
2
- interface SteeringTemplateDeps {
3
- manifestFile(): TemplateFile;
4
- gitignoreFile(): TemplateFile;
5
- }
6
- export declare function createSteeringTemplate({ manifestFile, gitignoreFile, }: SteeringTemplateDeps): GhostInitTemplate;
7
- export {};
8
- //# sourceMappingURL=steering-template.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"steering-template.d.ts","sourceRoot":"","sources":["../../src/scan/steering-template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEtE,UAAU,oBAAoB;IAC5B,YAAY,IAAI,YAAY,CAAC;IAC7B,aAAa,IAAI,YAAY,CAAC;CAC/B;AAED,wBAAgB,sBAAsB,CAAC,EACrC,YAAY,EACZ,aAAa,GACd,EAAE,oBAAoB,GAAG,iBAAiB,CAE1C"}