@design-intelligence/ghost 0.20.0 → 0.22.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 (157) hide show
  1. package/README.md +47 -33
  2. package/dist/commands/checks-command.d.ts.map +1 -1
  3. package/dist/commands/checks-command.js +8 -1
  4. package/dist/commands/checks-command.js.map +1 -1
  5. package/dist/commands/fingerprint-commands.d.ts.map +1 -1
  6. package/dist/commands/fingerprint-commands.js +1 -6
  7. package/dist/commands/fingerprint-commands.js.map +1 -1
  8. package/dist/commands/gather-command.d.ts.map +1 -1
  9. package/dist/commands/gather-command.js +26 -30
  10. package/dist/commands/gather-command.js.map +1 -1
  11. package/dist/commands/init-command.d.ts.map +1 -1
  12. package/dist/commands/init-command.js +23 -13
  13. package/dist/commands/init-command.js.map +1 -1
  14. package/dist/commands/pull-command.d.ts.map +1 -1
  15. package/dist/commands/pull-command.js +12 -19
  16. package/dist/commands/pull-command.js.map +1 -1
  17. package/dist/commands/pulse-command.js +1 -10
  18. package/dist/commands/pulse-command.js.map +1 -1
  19. package/dist/commands/review-command.d.ts.map +1 -1
  20. package/dist/commands/review-command.js +1 -0
  21. package/dist/commands/review-command.js.map +1 -1
  22. package/dist/ghost-core/catalog/assemble.d.ts +0 -4
  23. package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
  24. package/dist/ghost-core/catalog/assemble.js +0 -10
  25. package/dist/ghost-core/catalog/assemble.js.map +1 -1
  26. package/dist/ghost-core/catalog/index.d.ts +1 -1
  27. package/dist/ghost-core/catalog/index.d.ts.map +1 -1
  28. package/dist/ghost-core/catalog/index.js +1 -1
  29. package/dist/ghost-core/catalog/index.js.map +1 -1
  30. package/dist/ghost-core/catalog/menu.d.ts +1 -11
  31. package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
  32. package/dist/ghost-core/catalog/menu.js +1 -6
  33. package/dist/ghost-core/catalog/menu.js.map +1 -1
  34. package/dist/ghost-core/catalog/types.d.ts +0 -6
  35. package/dist/ghost-core/catalog/types.d.ts.map +1 -1
  36. package/dist/ghost-core/glossary.d.ts +0 -13
  37. package/dist/ghost-core/glossary.d.ts.map +1 -1
  38. package/dist/ghost-core/glossary.js +0 -7
  39. package/dist/ghost-core/glossary.js.map +1 -1
  40. package/dist/ghost-core/index.d.ts +2 -2
  41. package/dist/ghost-core/index.d.ts.map +1 -1
  42. package/dist/ghost-core/index.js +1 -1
  43. package/dist/ghost-core/index.js.map +1 -1
  44. package/dist/ghost-core/package-manifest.d.ts +7 -0
  45. package/dist/ghost-core/package-manifest.d.ts.map +1 -1
  46. package/dist/ghost-core/package-manifest.js +10 -0
  47. package/dist/ghost-core/package-manifest.js.map +1 -1
  48. package/dist/init-payloads/median/cliche.median.md +86 -0
  49. package/dist/init-payloads/median/median-tells.md +117 -0
  50. package/dist/init-payloads/skeleton/brand.md +22 -0
  51. package/dist/init-payloads/skeleton/context.conversation.md +24 -0
  52. package/dist/init-payloads/skeleton/foundation.color.md +39 -0
  53. package/dist/init-payloads/skeleton/foundation.composition.md +30 -0
  54. package/dist/init-payloads/skeleton/foundation.controls.md +29 -0
  55. package/dist/init-payloads/skeleton/foundation.layout.md +45 -0
  56. package/dist/init-payloads/skeleton/foundation.motion.md +34 -0
  57. package/dist/init-payloads/skeleton/foundation.type.md +44 -0
  58. package/dist/init-payloads/skeleton/foundation.voice.md +29 -0
  59. package/dist/init-payloads/skeleton/glossary.md +39 -0
  60. package/dist/init-payloads/vessel-light/anti-goal.median.md +86 -0
  61. package/dist/init-payloads/vessel-light/anti-goal.tells.md +38 -0
  62. package/dist/init-payloads/vessel-light/checks/conversation-grammar.md +20 -0
  63. package/dist/init-payloads/vessel-light/checks/median-tells.md +103 -0
  64. package/dist/init-payloads/vessel-light/checks/motion-restraint.md +20 -0
  65. package/dist/init-payloads/vessel-light/checks/relationships.md +33 -0
  66. package/dist/init-payloads/vessel-light/checks/shape-matches-job.md +43 -0
  67. package/dist/init-payloads/vessel-light/checks/values.md +51 -0
  68. package/dist/init-payloads/vessel-light/glossary.md +44 -0
  69. package/dist/init-payloads/vessel-light/grammar.color-roles.md +30 -0
  70. package/dist/init-payloads/vessel-light/grammar.conversation.md +30 -0
  71. package/dist/init-payloads/vessel-light/grammar.deletion.md +35 -0
  72. package/dist/init-payloads/vessel-light/grammar.hierarchy.md +58 -0
  73. package/dist/init-payloads/vessel-light/grammar.job.md +54 -0
  74. package/dist/init-payloads/vessel-light/grammar.motion.md +27 -0
  75. package/dist/init-payloads/vessel-light/grammar.rhythm.md +27 -0
  76. package/dist/init-payloads/vessel-light/grammar.surfaces.md +35 -0
  77. package/dist/init-payloads/vessel-light/index.md +33 -0
  78. package/dist/init-payloads/vessel-light/manifest.yml +3 -0
  79. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Black.woff2 +0 -0
  80. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Bold.woff2 +0 -0
  81. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-ExtraBold.woff2 +0 -0
  82. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Light.woff2 +0 -0
  83. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Medium.woff2 +0 -0
  84. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-Regular.woff2 +0 -0
  85. package/dist/init-payloads/vessel-light/materials/fonts/HKGrotesk-SemiBold.woff2 +0 -0
  86. package/dist/init-payloads/vessel-light/materials/primitives.css +351 -0
  87. package/dist/init-payloads/vessel-light/materials/ref/composition.conversation.html +63 -0
  88. package/dist/init-payloads/vessel-light/materials/ref/composition.editorial.html +74 -0
  89. package/dist/init-payloads/vessel-light/materials/ref/composition.form.html +89 -0
  90. package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +66 -0
  91. package/dist/init-payloads/vessel-light/materials/ref/composition.table.html +104 -0
  92. package/dist/init-payloads/vessel-light/materials/ref/email.html +80 -0
  93. package/dist/init-payloads/vessel-light/materials/tokens.css +191 -0
  94. package/dist/init-payloads/vessel-light/register.data-density.md +39 -0
  95. package/dist/init-payloads/vessel-light/register.editorial.md +41 -0
  96. package/dist/init-payloads/vessel-light/register.email.md +43 -0
  97. package/dist/init-payloads/vessel-light/signature.palette.md +45 -0
  98. package/dist/init-payloads/vessel-light/signature.shape.md +27 -0
  99. package/dist/init-payloads/vessel-light/signature.temperature.md +44 -0
  100. package/dist/init-payloads/vessel-light/signature.type.md +37 -0
  101. package/dist/observability-events.d.ts +0 -3
  102. package/dist/observability-events.d.ts.map +1 -1
  103. package/dist/observability-events.js.map +1 -1
  104. package/dist/review/resolve.d.ts +3 -4
  105. package/dist/review/resolve.d.ts.map +1 -1
  106. package/dist/review/resolve.js +12 -9
  107. package/dist/review/resolve.js.map +1 -1
  108. package/dist/review/review-packet.d.ts +2 -1
  109. package/dist/review/review-packet.d.ts.map +1 -1
  110. package/dist/review/review-packet.js +9 -20
  111. package/dist/review/review-packet.js.map +1 -1
  112. package/dist/scan/check-files.d.ts.map +1 -1
  113. package/dist/scan/check-files.js +0 -15
  114. package/dist/scan/check-files.js.map +1 -1
  115. package/dist/scan/check-scaffold.d.ts +1 -0
  116. package/dist/scan/check-scaffold.d.ts.map +1 -1
  117. package/dist/scan/check-scaffold.js +17 -1
  118. package/dist/scan/check-scaffold.js.map +1 -1
  119. package/dist/scan/fingerprint-package-lint.d.ts +8 -0
  120. package/dist/scan/fingerprint-package-lint.d.ts.map +1 -0
  121. package/dist/scan/fingerprint-package-lint.js +284 -0
  122. package/dist/scan/fingerprint-package-lint.js.map +1 -0
  123. package/dist/scan/fingerprint-package-loader.d.ts.map +1 -1
  124. package/dist/scan/fingerprint-package-loader.js +2 -29
  125. package/dist/scan/fingerprint-package-loader.js.map +1 -1
  126. package/dist/scan/fingerprint-package.d.ts +16 -8
  127. package/dist/scan/fingerprint-package.d.ts.map +1 -1
  128. package/dist/scan/fingerprint-package.js +41 -241
  129. package/dist/scan/fingerprint-package.js.map +1 -1
  130. package/dist/scan/node-files.d.ts.map +1 -1
  131. package/dist/scan/node-files.js +1 -3
  132. package/dist/scan/node-files.js.map +1 -1
  133. package/dist/scan/packed-payloads.d.ts +4 -0
  134. package/dist/scan/packed-payloads.d.ts.map +1 -0
  135. package/dist/scan/packed-payloads.js +55 -0
  136. package/dist/scan/packed-payloads.js.map +1 -0
  137. package/dist/scan/templates.d.ts +20 -2
  138. package/dist/scan/templates.d.ts.map +1 -1
  139. package/dist/scan/templates.js +106 -26
  140. package/dist/scan/templates.js.map +1 -1
  141. package/dist/skill-bundle/SKILL.md +16 -13
  142. package/dist/skill-bundle/references/adapting-a-starter.md +104 -0
  143. package/dist/skill-bundle/references/authoring-scenarios.md +42 -5
  144. package/dist/skill-bundle/references/blocks.md +1 -1
  145. package/dist/skill-bundle/references/brief.md +5 -6
  146. package/dist/skill-bundle/references/capture.md +52 -41
  147. package/dist/skill-bundle/references/concrete-tiers.md +95 -0
  148. package/dist/skill-bundle/references/recall.md +6 -12
  149. package/dist/skill-bundle/references/schema.md +15 -24
  150. package/dist/skill-bundle/references/self-check.md +2 -2
  151. package/dist/skill-bundle/references/steering-audit.md +7 -10
  152. package/package.json +2 -2
  153. package/dist/scan/steering-template.d.ts +0 -8
  154. package/dist/scan/steering-template.d.ts.map +0 -1
  155. package/dist/scan/steering-template.js +0 -266
  156. package/dist/scan/steering-template.js.map +0 -1
  157. package/dist/skill-bundle/references/wild.md +0 -30
@@ -19,14 +19,13 @@ Ghost treats the fingerprint package as canonical.
19
19
  glossary.md # the kind vocabulary + what each kind means
20
20
  principle.trust.md # a brand truth of kind `principle`
21
21
  pattern.invoice.md # a pattern with an optional ## Skeleton
22
- anti-goal.generic.md # a guard when its kind declares posture: guard
22
+ anti-goal.generic.md # a review-critical replacement rule
23
23
  voice.md # a brand truth without a kind
24
24
  ```
25
25
 
26
26
  A **node** is a markdown file: a `description`, optional `materials`, and a
27
27
  prose body. The package is **flat** — no hierarchy, no inheritance, no edges. A
28
- node's kind comes from its filename prefix; the glossary declares the kinds and
29
- may declare consumption posture such as `posture: guard`.
28
+ node's kind comes from its filename prefix; the glossary declares the kinds.
30
29
 
31
30
  ## Lead with an annotated exemplar over a complete artifact
32
31
 
@@ -89,6 +88,21 @@ safe before what to do. One calm next step. No "Oops," no exclamation points,
89
88
  no blame on the user or the network.
90
89
  ```
91
90
 
91
+ ## Write patterns as bound and open
92
+
93
+ A pattern node binds part of a reusable structure and leaves the rest open.
94
+ State both explicitly:
95
+
96
+ - **Bound** — what the agent should not redecide: the structural moves fixed
97
+ regardless of task (what renders first, what appears exactly once, what may
98
+ never compete for attention).
99
+ - **Open** — where the agent may choose, within limits (which evidence shape
100
+ fits, how tone flexes, where secondary content may go).
101
+
102
+ If everything is bound, the node is a template, not a pattern. If nothing is
103
+ bound, it is vibes, not steering. A pattern may also `Refines:` a broader
104
+ principle by id; when the two conflict, the principle wins.
105
+
92
106
  ## Add Skeletons when the opening structure matters
93
107
 
94
108
  A `## Skeleton` section contains the literal opening structure the agent should
@@ -119,18 +133,12 @@ Keep them short, specific, and attached to concrete objects whenever possible:
119
133
  Do not turn every observation into a rule. Stale or generic rules average
120
134
  against the exemplars and pull the packet back toward the median.
121
135
 
122
- ## Write guards as replacement, not as blacklist
136
+ ## Write anti-goals as replacement, not as blacklist
123
137
 
124
- A guard is ordinary node prose whose kind declares `posture: guard` in
125
- `glossary.md`:
138
+ An anti-goal is ordinary node prose whose kind the glossary defines as a
139
+ review-critical replacement rule.
126
140
 
127
- ```yaml
128
- kinds:
129
- - name: anti-goal
130
- posture: guard
131
- ```
132
-
133
- A good guard states **not X; instead Y; recognize the switch by Z**. The
141
+ A good anti-goal states **not X; instead Y; recognize the switch by Z**. The
134
142
  replacement matters because negation alone raises the salience of the rejected
135
143
  thing.
136
144
 
@@ -148,12 +156,12 @@ Instead: flat paper surfaces, one restrained accent, square alignment, and a
148
156
  next action backed by the number or source that justifies it.
149
157
 
150
158
  Recognize the switch: if removing the logo would make the surface look like any
151
- SaaS template, the guard failed even when every token is technically valid.
159
+ SaaS template, the anti-goal failed even when every token is technically valid.
152
160
  ```
153
161
 
154
162
  The strongest anti-goal is silent: purged from exemplars, absent from starter
155
- structures, and enforced by a probe-backed check in review. Use guard prose to
156
- name the replacement; use checks and `probe:` commands to catch regressions.
163
+ structures, and enforced by a probe-backed check in review. Use anti-goal prose
164
+ to name the replacement; use checks and `probe:` commands to catch regressions.
157
165
 
158
166
  ## The node shape
159
167
 
@@ -181,7 +189,7 @@ action beats completeness...
181
189
  `materials`, a substantial fenced example, or a `## Skeleton`. You do not
182
190
  declare a separate type.
183
191
 
184
- ## What a body answers
192
+ ## What a node body answers
185
193
 
186
194
  While drafting, ask three questions of every truth — *why* (the stance), *with
187
195
  what* (the materials), and *how it is assembled* (the patterns). These are
@@ -204,15 +212,15 @@ genuinely a different truth.
204
212
 
205
213
  ## Node prose stances
206
214
 
207
- Node prose is steering payload. A generic sentence in a body averages every
215
+ Node prose is steering payload. A generic sentence in a node body averages every
208
216
  future generation toward the median, so hold drafts to these stances before the
209
217
  human sees them.
210
218
 
211
219
  Two carve-outs come first, because they invert ordinary prose advice:
212
220
 
213
- - **Guards keep their negation.** "Not X; instead Y; recognize the switch by Z"
214
- is the required guard form. Naming the rejected thing is the guard's job;
215
- never "improve" a guard by stating only the replacement.
221
+ - **Anti-goals keep their negation.** "Not X; instead Y; recognize the switch
222
+ by Z" is the required anti-goal form. Naming the rejected thing is the
223
+ anti-goal's job; never "improve" one by stating only the replacement.
216
224
  - **Invariants keep their absolutes.** "Never" and "always" are correct in an
217
225
  invariant when the hard line is real and human-ratified. Absolutes are lazy
218
226
  only when they stand in for an uncurated stance.
@@ -226,13 +234,13 @@ Everywhere else:
226
234
  fits a competitor's brand, it is retrieval-dead; rewrite it until it could
227
235
  belong to no one else.
228
236
  - **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
237
+ node body mean the human never picked a side. Get the ratification or cut the
230
238
  sentence.
231
239
  - **Ban brand-deck filler.** "Elevate," "delight," "seamless," "best-in-class,"
232
240
  "empower." When a brand doc supplies these words, they are testimony to
233
241
  distill, never prose to keep.
234
242
  - **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
243
+ or given its condition in the prose. A node body that does neither was never
236
244
  curated for altitude; ask the human which it is.
237
245
 
238
246
  ## Score drafts before curation
@@ -244,7 +252,7 @@ dimension:
244
252
  | --- | --- |
245
253
  | Testimony | Can you quote the human words or artifact this node came from? |
246
254
  | Discrimination | Does the description fit only this brand? |
247
- | Force | Does the body decide something, or merely describe something? |
255
+ | Force | Does the node body decide something, or merely describe something? |
248
256
  | Altitude | Is it universal on purpose, or given its condition? |
249
257
  | Residue | Is it free of starter-demo prose and brand-deck filler? |
250
258
 
@@ -259,15 +267,23 @@ strongest form that fixes the observed failure.
259
267
 
260
268
  | If the agent keeps... | Author... |
261
269
  | --- | --- |
262
- | missing the truth | sharper `description` / `index` mention |
270
+ | missing the truth | sharper `description`; move universal truth to the cover |
263
271
  | inventing values | `asset.*` node with materials and exact names |
264
- | producing generic output | `anti-goal.*` guard plus annotated `exemplar.*` |
272
+ | producing generic output | `anti-goal.*` replacement plus annotated `exemplar.*` |
265
273
  | choosing the wrong structure | `pattern.*` with bound/open and a `## Skeleton` |
266
274
  | crossing hard lines | invariant prose plus a check, optionally with `probe:` |
267
275
  | applying guidance too broadly | condition in prose |
268
276
  | making bad tradeoffs | `decision.*` trace |
269
277
  | producing correct but forgettable work | scoped `concept.*` |
270
278
 
279
+ A `concept.*` node holds a one-time creative move — a launch hook, a
280
+ campaign idea, a specific non-median leap the corpus would not have produced
281
+ by recombining its other truths. Scope it explicitly to the task or surface
282
+ it was written for, keep it distinct from invariants, and do not generalize
283
+ it into permanent brand law. If it proves reusable later, promote it into an
284
+ exemplar or pattern deliberately; do not let a one-off default into durable
285
+ truth by accumulation.
286
+
271
287
  Ask while authoring:
272
288
 
273
289
  - What complete artifact shows the brand at its best?
@@ -298,19 +314,16 @@ ghost init # scaffolds the steering starter
298
314
  ghost validate
299
315
  ```
300
316
 
301
- `ghost init` seeds the steering starter: the manifest, a starter `glossary.md`
302
- (with suggested kinds you keep, rename, or replace), the package-root
303
- `index.md`, and worked demo nodes for stance, composition, anti-goals, patterns,
304
- exemplars, materials, and decisions. Replace demo claims, paths, examples, and
305
- decisions with real product truth before using it to steer generation. Use
306
- `ghost init --template minimal` when you only want the small
307
- manifest/glossary/index starter.
317
+ `ghost init` seeds the skeleton starter: the manifest, a starter
318
+ `glossary.md`, a `brand.md` cover, foundation chapters with open questions, and
319
+ the model cliche floor. Replace open questions with real product truth before
320
+ using it to steer generation. Use `ghost init --template minimal` for a
321
+ manifest, glossary, cover, and cliche floor.
308
322
 
309
- Write `index.md` as the human-curated front door: non-negotiables that apply to
310
- every task, what this fingerprint covers, how its kinds organize the corpus, and
311
- any stricter silence posture. It is an ordinary node mechanically, but by
312
- convention agents pull it first — anything that must never be missed belongs
313
- here.
323
+ Write the manifest-declared cover as the human-curated front door:
324
+ non-negotiables that apply to every task, what the fingerprint covers, and any
325
+ stricter silence posture. `ghost gather` inlines it before the menu, so anything
326
+ that must never be missed belongs there.
314
327
 
315
328
  Nodes may carry a `materials` list in frontmatter: repo-relative paths/globs or
316
329
  HTTPS URLs for the concrete materials the prose governs. Put brand-owned
@@ -324,9 +337,7 @@ feed-back only; they are never gathered.
324
337
  Declare the kinds you will use in `glossary.md` — the frontmatter `kinds` list
325
338
  plus a `#` section per kind explaining its meaning and normative weight. Kinds
326
339
  are your choice; Ghost ships no fixed vocabulary. A node's filename prefix must
327
- match a declared kind (or the node has no kind). Use `posture: guard` for kinds
328
- whose nodes are review-critical replacements; use `posture: wild` only for
329
- truths that should stay opt-in.
340
+ match a declared kind (or the node has no kind).
330
341
 
331
342
  The glossary is a dictionary of every term with defined meaning in the corpus.
332
343
  A root `voice.md` with a `voice` glossary entry declares the scope for future
@@ -0,0 +1,95 @@
1
+ ---
2
+ name: concrete-tiers
3
+ description: Decide which concrete code tiers a fingerprint carries — tokens, skeletons, components, exemplars — and justify every absence.
4
+ handoffs:
5
+ - label: Audit what the package carries today
6
+ command: ghost gather
7
+ prompt: Which nodes carry concrete material, and which of the four tiers does the package cover?
8
+ ---
9
+
10
+ # Recipe: Choose The Concrete Code Tiers
11
+
12
+ **Goal:** decide, deliberately, which tiers of concrete code material a
13
+ fingerprint carries — and be able to say why any tier is absent. Absence
14
+ should be a decision, not a default.
15
+
16
+ Prose states a truth; concrete code makes it the cheapest continuation. A
17
+ package can carry code at four tiers, and each does a different job during
18
+ generation:
19
+
20
+ | Tier | Form | What it buys |
21
+ | --- | --- | --- |
22
+ | Tokens | `materials/tokens.css`, linked from nodes | Named values — the agent stops inventing colors, sizes, and durations. |
23
+ | Skeletons | `## Skeleton` HTML blocks inside pattern nodes | The opening structure — layout is committed before the generic default can win the first tokens. |
24
+ | Components | primitive classes or a class vocabulary in `materials/` | Reusable styling decisions — padding, variants, and states compress into names. |
25
+ | Exemplars | a complete surface with load-bearing moves annotated | Cross-node interactions — the constraints no single node states, demonstrated working together. |
26
+
27
+ Two properties decide whether a tier steers, and they are not the same thing:
28
+
29
+ - **Scope** — what the tier constrains: a token constrains one value, a
30
+ skeleton one block, an exemplar one whole surface.
31
+ - **Delivery** — whether the material is guaranteed to reach the agent.
32
+ Skeleton blocks live in node bodies, so `ghost pull` delivers them with the
33
+ truth. Files behind `materials:` locators reach only agents that spend a
34
+ turn reading them. A tier the agent never sees contributes nothing;
35
+ presence in the package is not presence in context.
36
+
37
+ ## The floor and the earned tiers
38
+
39
+ **Tokens are the floor.** Every package that steers visual output carries a
40
+ token vocabulary, and every other tier repeats those token names. That
41
+ repetition is the one redundancy worth keeping: the same name appearing in
42
+ prose, skeleton, and exemplar is what stops the agent from inventing
43
+ plausible near-miss values.
44
+
45
+ The other three tiers are earned by the package's shape:
46
+
47
+ - **Skeletons** pay when the package specifies few, composition-critical
48
+ surfaces — where the first structural commitment decides everything
49
+ downstream — and when consuming agents may read only pulled bodies.
50
+ - **Components** pay when the package covers many diverse surfaces generated
51
+ often, and the consuming agent reads material files. A class vocabulary
52
+ amortizes across surfaces; for a single surface shape it is dead weight.
53
+ - **Exemplars** pay almost everywhere: they are the cheapest way to show
54
+ tiers interacting. One per distinct surface shape; a package with one
55
+ exemplar and many surface shapes pulls every task toward the demonstrated
56
+ shape.
57
+
58
+ ## Every tier is a copy that can drift
59
+
60
+ Each tier repeats the token truth, and a stale copy steers harder than the
61
+ prose that corrects it. A hardcoded value in an exemplar where a token
62
+ exists is a lie waiting for a rename. Before adding a tier, accept its
63
+ maintenance bill; after any token change, sweep every tier for stranded
64
+ literals.
65
+
66
+ A tier can also fight the package's stance. A package whose truth is
67
+ "compose each surface fresh from the tokens" contradicts itself by shipping
68
+ a component kit; a package whose truth is "compose from the grammar, the
69
+ refs are examples not a framework" hardens toward template convergence if
70
+ every pattern carries a mandatory skeleton. When a tier and the stance
71
+ conflict, the stance wins — that absence is the package expressing itself.
72
+
73
+ ## Annotate whatever code ships
74
+
75
+ Un-annotated code teaches content along with structure. Whatever tier the
76
+ package carries, split the annotation two ways: name the load-bearing moves
77
+ (what makes it this brand — copy these) and mark the incidental content
78
+ (domain, figures, labels — swap these). An exemplar without this split
79
+ teaches the agent that the example's subject matter is the brand.
80
+
81
+ ## The self-check
82
+
83
+ For any package, answer four questions:
84
+
85
+ 1. Where does the value vocabulary live? (If not a token file: why?)
86
+ 2. What forces the opening structure of the package's most
87
+ composition-critical surface? (If nothing: is that surface's structure
88
+ genuinely open?)
89
+ 3. What demonstrates the cross-node constraints working together? (If
90
+ nothing: which interactions is the agent left to infer?)
91
+ 4. For every tier present: will the consuming agent actually have it in
92
+ context when it generates?
93
+
94
+ Any answer may legitimately be "absent, because" — the recipe's only
95
+ requirement is that the "because" exists.
@@ -5,14 +5,9 @@ description: Gather and pull the applicable Ghost brand truths for a task.
5
5
 
6
6
  # Recipe: Recall Ghost Fingerprint
7
7
 
8
- Wild posture is opt-in. Default `ghost gather` excludes kinds whose glossary
9
- entry declares `posture: wild`; use `--wild` only when the brief names explicit
10
- open territory where conformance is suspended. Guard posture stays visible by
11
- default because guards are brand-defining.
12
-
13
- 1. Run `ghost gather <ask>` for the actual task. Read the coverage line: all
14
- prose-only fingerprints are weak steering, and guard count tells you whether
15
- review-critical negative space exists.
8
+ 1. Run `ghost gather <ask>` for the actual task. The cover is inlined by gather;
9
+ do not pull it separately. Read the coverage line: all-prose fingerprints are
10
+ weak steering.
16
11
  2. Select against `description`; Ghost never selects for you.
17
12
  3. Run `ghost pull <id> [<id>…]`. Prefer `pull` over reading files directly: it
18
13
  orders the packet for steering, inlines small local materials, emits
@@ -23,14 +18,13 @@ default because guards are brand-defining.
23
18
 
24
19
  `ghost pull` emits selected nodes in steering order:
25
20
 
26
- 1. `index` / stance first: non-negotiables and silence posture.
21
+ 1. Cover first, when explicitly selected; normally it is already inlined by
22
+ gather and should not be pulled separately.
27
23
  2. Concrete-material nodes: `materials`, substantial fenced examples, or
28
24
  `## Skeleton` sections, with materials inlined or pointed to inspect.
29
25
  3. Prose-only rules: principles, conditions, decisions, and other rules without
30
26
  concrete payload.
31
- 4. Guard nodes: `posture: guard`, flagged review-critical; read the replacement
32
- carefully.
33
- 5. Skeleton fences dead last: if one matches the surface, start from that
27
+ 4. Skeleton fences dead last: if one matches the surface, start from that
34
28
  structure verbatim.
35
29
 
36
30
  Return the selected truths with node ids, how each applies, and where the
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: schema
3
- description: The Ghost fingerprint package shape: flat nodes, derived concreteness, Skeletons, guards, probes, and checks.
3
+ description: The Ghost fingerprint package shape: flat nodes, derived concreteness, Skeletons, probes, and checks.
4
4
  ---
5
5
 
6
6
  # Ghost Fingerprint Package Reference
@@ -9,8 +9,8 @@ Canonical package:
9
9
 
10
10
  ```text
11
11
  .ghost/
12
- manifest.yml ghost.fingerprint-package/v1: schema + id
13
- glossary.md kind vocabulary + meanings + optional posture
12
+ manifest.yml ghost.fingerprint-package/v1: schema + id + optional cover
13
+ glossary.md kind vocabulary + meanings
14
14
  materials/ bundled materials; never a node source
15
15
  <kind>.<slug>.md a brand truth of a declared kind
16
16
  <slug>.md a brand truth without a kind
@@ -20,25 +20,16 @@ Canonical package:
20
20
  Reserved at the root: `manifest.yml`, `glossary.md`, `materials/`, and
21
21
  `checks/`. Every other `*.md` is a node.
22
22
 
23
- ## Glossary posture
23
+ ## Manifest
24
24
 
25
- A kind may declare posture. Omitted posture defaults to `steady`.
25
+ `manifest.yml` declares `schema`, `id`, and optionally `cover`. `cover` is a
26
+ node id. When present and resolved, `ghost gather` inlines that node above the
27
+ menu on every invocation. Use it for what selection cannot reliably retrieve:
28
+ essence, temperature, and brand-only refusals.
26
29
 
27
- ```yaml
28
- kinds:
29
- - name: principle
30
- - name: anti-goal
31
- posture: guard
32
- - name: provocation
33
- posture: wild
34
- ```
35
-
36
- - `steady`: default, gathered normally.
37
- - `guard`: review-critical negative space. Stays in default gather, appears at
38
- the tail of `ghost pull`, and is auto-offered by `ghost review` when its
39
- materials match touched files.
40
- - `wild`: deliberate push beyond the fingerprint. Default gather excludes wild
41
- kinds unless `--wild` is explicit.
30
+ `ghost validate` enforces the cover contract: a missing referenced cover is an
31
+ error, an undeclared cover is a warning, and a cover body past the one-screen
32
+ budget (1500 bytes) is a warning.
42
33
 
43
34
  ## Nodes
44
35
 
@@ -110,10 +101,10 @@ probes are the same class as npm scripts; Git review is the boundary.
110
101
 
111
102
  ## Gather / Pull / Review
112
103
 
113
- - `ghost gather` emits the node menu, including coverage counts. Checks are
114
- invisible.
104
+ - `ghost gather` emits the cover above the node menu, then coverage counts.
105
+ Checks are invisible.
115
106
  - `ghost pull` emits selected nodes in steering order and inlines small local
116
107
  materials. Binary local materials become inspect-pointers.
117
108
  - `ghost review` matches diff files to local node materials, offers relevant
118
- checks and matched guard nodes, embeds probe evidence, and emits a packet for
119
- the host agent to judge.
109
+ checks, embeds probe evidence, and emits a packet for the host agent to
110
+ judge.
@@ -60,6 +60,6 @@ When you cannot answer the grounding questions:
60
60
 
61
61
  A genuinely silent fingerprint is an expected state, not a blocker. When it does
62
62
  not cover the task, say so plainly and proceed with provisional local reasoning
63
- when safe; label it non-Ghost-backed. If the fingerprint's `index` node declares
64
- a stricter silence posture, honor it over this default. Ask a human before
63
+ when safe; label it non-Ghost-backed. If the fingerprint's cover declares a stricter
64
+ silence posture, honor it over this default. Ask a human before
65
65
  high-risk or brand-defining choices.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: steering-audit
3
- description: Audit a Ghost fingerprint for concrete steering coverage and guard routing.
3
+ description: Audit a Ghost fingerprint for concrete steering coverage.
4
4
  ---
5
5
 
6
6
  # Recipe: Audit Steering Coverage
@@ -19,16 +19,13 @@ ghost pulse --format json
19
19
 
20
20
  If checks are installed and a diff exists, run `ghost review` too.
21
21
 
22
- ## Headline the audit with concreteness + guards
22
+ ## Headline the audit with concreteness
23
23
 
24
24
  Report first:
25
25
 
26
26
  - **Concreteness coverage:** total nodes, concrete-material nodes, prose-only
27
27
  nodes. Concrete means non-empty `materials`, a fenced code block of at least 3
28
28
  lines, or a `## Skeleton` section.
29
- - **Guard routing:** how many guard nodes exist, whether they stay in default
30
- gather, and whether `ghost review` can auto-offer matched guards via
31
- materials.
32
29
  - **Pulse by concreteness:** concrete exposure/pull rate vs prose-only
33
30
  exposure/pull rate. This is the tuning instrument: if concrete nodes are not
34
31
  pulled, descriptions or task selection are failing.
@@ -37,16 +34,16 @@ Report first:
37
34
 
38
35
  | Row | Status | Evidence | Next move |
39
36
  | --- | --- | --- | --- |
40
- | Retrieval | strong / weak | descriptions, ids, `index` | sharpen descriptions or mention cold nodes in `index` |
37
+ | Retrieval | strong / weak | descriptions, ids, cover | sharpen descriptions or move universal truth to the cover |
41
38
  | Concreteness | strong / thin | materials, fenced examples, Skeletons | add concrete locators, exemplars, or opening structures |
42
- | Guards | routed / missing / vague | `posture: guard`, review packet | write not-X-instead-Y guards and material locators |
43
- | Consistency | clean / conflicting | concrete bodies vs rules/guards | update stale examples; examples average with rules |
44
- | Stance | present / missing | `index`, `principle.*` | write forced-choice principles |
39
+ | Anti-goals | present / missing / vague | `anti-goal.*`, review packet | write not-X-instead-Y replacements and material locators |
40
+ | Consistency | clean / conflicting | concrete bodies vs rules | update stale examples; examples average with rules |
41
+ | Stance | present / missing | cover, `principle.*` | write forced-choice principles |
45
42
  | Materials | present / missing | `materials`, inspect-pointers | point at real assets/components/tokens |
46
43
  | Exemplars | annotated / unannotated / missing | fenced samples, screenshots | say what to copy and what is incidental |
47
44
  | Patterns | bound-open / loose / missing | `pattern.*`, Skeletons | state applies / bound / open and add a Skeleton when opening structure matters |
48
45
  | Checks | covered / partial / missing | checks/, probes, review packet | add checks/probes for high-risk invariants |
49
- | Silence posture | defined / missing | `index` | say when to proceed provisionally or ask |
46
+ | Silence posture | defined / missing | cover | say when to proceed provisionally or ask |
50
47
 
51
48
  ## Task-level readiness
52
49
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design-intelligence/ghost",
3
- "version": "0.20.0",
3
+ "version": "0.22.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"}