@design-intelligence/ghost 0.21.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 (125) hide show
  1. package/README.md +47 -33
  2. package/dist/commands/fingerprint-commands.d.ts.map +1 -1
  3. package/dist/commands/fingerprint-commands.js +1 -6
  4. package/dist/commands/fingerprint-commands.js.map +1 -1
  5. package/dist/commands/gather-command.d.ts.map +1 -1
  6. package/dist/commands/gather-command.js +26 -30
  7. package/dist/commands/gather-command.js.map +1 -1
  8. package/dist/commands/init-command.d.ts.map +1 -1
  9. package/dist/commands/init-command.js +1 -6
  10. package/dist/commands/init-command.js.map +1 -1
  11. package/dist/commands/pull-command.d.ts.map +1 -1
  12. package/dist/commands/pull-command.js +12 -19
  13. package/dist/commands/pull-command.js.map +1 -1
  14. package/dist/commands/pulse-command.js +1 -10
  15. package/dist/commands/pulse-command.js.map +1 -1
  16. package/dist/ghost-core/catalog/assemble.d.ts +0 -4
  17. package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
  18. package/dist/ghost-core/catalog/assemble.js +0 -10
  19. package/dist/ghost-core/catalog/assemble.js.map +1 -1
  20. package/dist/ghost-core/catalog/index.d.ts +1 -1
  21. package/dist/ghost-core/catalog/index.d.ts.map +1 -1
  22. package/dist/ghost-core/catalog/index.js +1 -1
  23. package/dist/ghost-core/catalog/index.js.map +1 -1
  24. package/dist/ghost-core/catalog/menu.d.ts +1 -11
  25. package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
  26. package/dist/ghost-core/catalog/menu.js +1 -6
  27. package/dist/ghost-core/catalog/menu.js.map +1 -1
  28. package/dist/ghost-core/catalog/types.d.ts +0 -6
  29. package/dist/ghost-core/catalog/types.d.ts.map +1 -1
  30. package/dist/ghost-core/glossary.d.ts +0 -13
  31. package/dist/ghost-core/glossary.d.ts.map +1 -1
  32. package/dist/ghost-core/glossary.js +0 -7
  33. package/dist/ghost-core/glossary.js.map +1 -1
  34. package/dist/ghost-core/index.d.ts +2 -2
  35. package/dist/ghost-core/index.d.ts.map +1 -1
  36. package/dist/ghost-core/index.js +1 -1
  37. package/dist/ghost-core/index.js.map +1 -1
  38. package/dist/ghost-core/package-manifest.d.ts +7 -0
  39. package/dist/ghost-core/package-manifest.d.ts.map +1 -1
  40. package/dist/ghost-core/package-manifest.js +10 -0
  41. package/dist/ghost-core/package-manifest.js.map +1 -1
  42. package/dist/init-payloads/median/median-tells.md +25 -25
  43. package/dist/init-payloads/skeleton/brand.md +22 -0
  44. package/dist/init-payloads/skeleton/context.conversation.md +24 -0
  45. package/dist/init-payloads/skeleton/foundation.color.md +39 -0
  46. package/dist/init-payloads/skeleton/foundation.composition.md +30 -0
  47. package/dist/init-payloads/skeleton/foundation.controls.md +29 -0
  48. package/dist/init-payloads/skeleton/foundation.layout.md +45 -0
  49. package/dist/init-payloads/skeleton/foundation.motion.md +34 -0
  50. package/dist/init-payloads/skeleton/foundation.type.md +44 -0
  51. package/dist/init-payloads/skeleton/foundation.voice.md +29 -0
  52. package/dist/init-payloads/skeleton/glossary.md +27 -32
  53. package/dist/init-payloads/vessel-light/anti-goal.tells.md +5 -4
  54. package/dist/init-payloads/vessel-light/checks/shape-matches-job.md +43 -0
  55. package/dist/init-payloads/vessel-light/glossary.md +0 -1
  56. package/dist/init-payloads/vessel-light/grammar.color-roles.md +2 -2
  57. package/dist/init-payloads/vessel-light/grammar.deletion.md +35 -0
  58. package/dist/init-payloads/vessel-light/grammar.hierarchy.md +13 -3
  59. package/dist/init-payloads/vessel-light/grammar.job.md +54 -0
  60. package/dist/init-payloads/vessel-light/index.md +20 -24
  61. package/dist/init-payloads/vessel-light/manifest.yml +1 -0
  62. package/dist/init-payloads/vessel-light/materials/primitives.css +15 -52
  63. package/dist/init-payloads/vessel-light/materials/ref/composition.editorial.html +12 -7
  64. package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +8 -2
  65. package/dist/init-payloads/vessel-light/materials/ref/composition.table.html +3 -3
  66. package/dist/init-payloads/vessel-light/materials/tokens.css +27 -78
  67. package/dist/init-payloads/vessel-light/signature.temperature.md +7 -0
  68. package/dist/init-payloads/vessel-light/signature.type.md +6 -5
  69. package/dist/observability-events.d.ts +0 -3
  70. package/dist/observability-events.d.ts.map +1 -1
  71. package/dist/observability-events.js.map +1 -1
  72. package/dist/review/resolve.d.ts +1 -2
  73. package/dist/review/resolve.d.ts.map +1 -1
  74. package/dist/review/resolve.js +4 -5
  75. package/dist/review/resolve.js.map +1 -1
  76. package/dist/review/review-packet.d.ts +0 -1
  77. package/dist/review/review-packet.d.ts.map +1 -1
  78. package/dist/review/review-packet.js +0 -19
  79. package/dist/review/review-packet.js.map +1 -1
  80. package/dist/scan/check-files.d.ts.map +1 -1
  81. package/dist/scan/check-files.js +0 -15
  82. package/dist/scan/check-files.js.map +1 -1
  83. package/dist/scan/check-scaffold.js +2 -2
  84. package/dist/scan/check-scaffold.js.map +1 -1
  85. package/dist/scan/fingerprint-package-lint.d.ts +8 -0
  86. package/dist/scan/fingerprint-package-lint.d.ts.map +1 -0
  87. package/dist/scan/fingerprint-package-lint.js +284 -0
  88. package/dist/scan/fingerprint-package-lint.js.map +1 -0
  89. package/dist/scan/fingerprint-package-loader.d.ts.map +1 -1
  90. package/dist/scan/fingerprint-package-loader.js +2 -29
  91. package/dist/scan/fingerprint-package-loader.js.map +1 -1
  92. package/dist/scan/fingerprint-package.d.ts +9 -7
  93. package/dist/scan/fingerprint-package.d.ts.map +1 -1
  94. package/dist/scan/fingerprint-package.js +18 -231
  95. package/dist/scan/fingerprint-package.js.map +1 -1
  96. package/dist/scan/node-files.d.ts.map +1 -1
  97. package/dist/scan/node-files.js +1 -3
  98. package/dist/scan/node-files.js.map +1 -1
  99. package/dist/scan/templates.d.ts.map +1 -1
  100. package/dist/scan/templates.js +43 -35
  101. package/dist/scan/templates.js.map +1 -1
  102. package/dist/skill-bundle/SKILL.md +15 -13
  103. package/dist/skill-bundle/references/adapting-a-starter.md +62 -60
  104. package/dist/skill-bundle/references/authoring-scenarios.md +6 -8
  105. package/dist/skill-bundle/references/brief.md +5 -6
  106. package/dist/skill-bundle/references/capture.md +47 -36
  107. package/dist/skill-bundle/references/concrete-tiers.md +95 -0
  108. package/dist/skill-bundle/references/recall.md +6 -12
  109. package/dist/skill-bundle/references/schema.md +15 -24
  110. package/dist/skill-bundle/references/self-check.md +2 -2
  111. package/dist/skill-bundle/references/steering-audit.md +7 -10
  112. package/package.json +1 -1
  113. package/dist/init-payloads/skeleton/grammar.color-roles.md +0 -26
  114. package/dist/init-payloads/skeleton/grammar.conversation.md +0 -23
  115. package/dist/init-payloads/skeleton/grammar.hierarchy.md +0 -39
  116. package/dist/init-payloads/skeleton/grammar.motion.md +0 -24
  117. package/dist/init-payloads/skeleton/grammar.rhythm.md +0 -23
  118. package/dist/init-payloads/skeleton/grammar.surfaces.md +0 -26
  119. package/dist/init-payloads/skeleton/index.md +0 -27
  120. package/dist/init-payloads/skeleton/signature.palette.md +0 -24
  121. package/dist/init-payloads/skeleton/signature.shape.md +0 -19
  122. package/dist/init-payloads/skeleton/signature.temperature.md +0 -20
  123. package/dist/init-payloads/skeleton/signature.type.md +0 -22
  124. package/dist/skill-bundle/references/wild.md +0 -30
  125. /package/dist/init-payloads/median/{anti-goal.median.md → cliche.median.md} +0 -0
@@ -13,22 +13,21 @@ handoffs:
13
13
  vessel-light`) or the naked skeleton (`ghost init`) — into *your* brand's
14
14
  fingerprint without shipping a self-contradicting package.
15
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:
16
+ The naked skeleton is factored by what must happen during adaptation:
18
17
 
19
18
  | Stratum | Files | On adaptation |
20
19
  | --- | --- | --- |
21
- | Grammar | `grammar.*` | Keep unchangedvalue-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. |
20
+ | Cover | `brand.md` | Write itessence in one paragraph, temperature, and brand-only refusals. Apply the admission test to every line: a violation visible in one element belongs in that element's chapter; visible in one view, in the composition chapter; visible only across the whole body of work, here. Keep a one-screen budget and delete every scaffolding sentence when real. |
21
+ | Foundation | `foundation.*` | Answer each chapter's open section (`Palette`, `Typeface`, `Radius`, `Character`, `Warmth`), restate it as the brand's current answer, and edit misuse lists to the brand's real failure modes. |
22
+ | Context | `context.*` | Add or re-tune after the open questions are answered; context nodes state only what inverts in a matching situation. |
23
+ | Cliche floor | `cliche.*` | Prunedelete entries a foundation misuse list absorbs, delete the paired check flag with it, and replace generic entries with refusals only this brand makes. If a refusal passes the cover admission test, graduate it to `brand.md`. |
24
+ | Materials and refs | `materials/*`, referenced implementations, refs | Add or regenerate so the prose has concrete material to inspect. |
25
+ | Checks | `checks/*` | Keep paired with the nodes they enforce; delete or rewrite flags when their source rule changes. |
27
26
 
28
27
  Do the steps **in order and in one sitting** where possible. A half-adapted
29
28
  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.
29
+ you rewrote, so stopping before refs and checks are current ships a fingerprint
30
+ that contradicts itself.
32
31
 
33
32
  ## The procedure
34
33
 
@@ -36,66 +35,69 @@ itself.
36
35
  name. This is deliberately first: it is the explicit act that marks the
37
36
  adaptation as begun. Until it changes, the package honestly claims to be the
38
37
  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.
38
+ 2. **Write the cover.** Replace `brand.md` with the brand's essence in one
39
+ paragraph, the shared temperature of words and motion, and the refusals only
40
+ this brand makes. Test every line: a violation visible in one element moves
41
+ to that element's chapter; visible in one view, to the composition chapter;
42
+ only what shows solely across the whole body of work stays. Keep the cover
43
+ to one screen and delete every scaffolding sentence when it is real.
44
+ 3. **Answer the foundation chapters.** Walk each `foundation.*` node. Keep the
45
+ usage rules that describe the closed vocabulary; answer the open section as
46
+ the brand's current answer. Ask the human for undecided values; never
47
+ freehand a value and present it as brand-backed. Edit each misuse list to the
48
+ failures this brand actually needs to avoid.
49
+ 4. **Add or edit materials.** Record literal values where the implementation or
50
+ asset materials live, then add `materials` locators to the nodes that explain
51
+ them. Role names can stay stable while values change. The point is that a
52
+ realizing agent can inspect the same concrete source the prose governs.
53
+ 5. **Re-tune contexts.** Revisit each `context.*` node after the foundation
54
+ answers exist. Keep only inversions that apply in that situation; delete
55
+ generic foundation rules repeated there, and add new contexts only when a
56
+ task situation truly bends the defaults.
57
+ 6. **Prune `cliche.median`.** Each rule is a `###` heading section; delete the
58
+ whole section for every rule a foundation misuse list now absorbs or your
59
+ brand legitimately violates. Do not rewrite surviving measured defaults into
60
+ taste. Then run `ghost validate`: every check reference orphaned by a pruned
61
+ heading surfaces as its own warning delete the paired flag and its
62
+ reference from the check.
63
+ 7. **Regenerate refs.** Exemplars dominate prose: a prose rule contradicted by a
64
+ stale ref loses. Rebuild each ref against the new values and chapter answers,
65
+ keep any annotation headers current, and make each ref demonstrate its closed
66
+ sets completely. If the starter shipped no refs, generate them now a
67
+ fingerprint with no exemplars steers at half strength.
68
+ 8. **Rewrite checks and near-miss nodes.** For each answered foundation chapter,
69
+ name the failure mode one step away from the answer and its replacement. Put
70
+ pre-generation guidance in nodes and review assertions in `checks/`; never
71
+ leave a check that asserts an obligation no node states.
72
+ 9. **Re-run the checks, including against refs.** `ghost validate` for package
73
+ shape, then review the regenerated refs against the median and value checks
74
+ (stage the ref changes and run `ghost review`). The floor only holds if the
75
+ refs hold it too: a ref that trips a median flag will teach every future
76
+ generation the violation.
73
77
 
74
78
  ## Consuming an unadapted starter
75
79
 
76
- Work does not block on adaptation. Before the procedure runs (or midway
77
- through it), cite starter content honestly:
80
+ Work does not block on adaptation. Before the procedure runs (or midway through
81
+ it), cite starter content honestly:
78
82
 
79
- - Grammar: **Ghost-backed** value-free decision logic that holds for any
80
- brand.
83
+ - Cover scaffolding and unanswered foundation sections: **provisional** never
84
+ plain brand truth.
85
+ - Foundation usage rules: **Ghost-backed starter structure** until the human
86
+ answers the open sections and edits the misuse lists.
81
87
  - Surviving median rules: **owner-backed after init** — Ghost stamps this
82
88
  measured model truth into every initialized package; you own the pruning and
83
89
  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.
90
+ - Context nodes: **conditional** read only when their situation matches, and
91
+ revisit them after the foundation answers change.
92
+ - The manifest id tells you which state you are in: a starter id means
93
+ unadapted.
92
94
 
93
95
  ## Never
94
96
 
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.
97
+ - Never leave cover scaffolding in a real fingerprint.
98
+ - Never present your provisional value as the brand's answer.
99
+ - Never leave stale refs alongside new values — regenerate or delete; a stale
100
+ exemplar outweighs rewritten prose.
99
101
  - Never prune a median rule without deleting its paired check flag, or keep a
100
102
  check that asserts an obligation no node states.
101
103
  - Never pre-write the manifest id change into automation — it is the human's
@@ -79,7 +79,7 @@ says which.
79
79
 
80
80
  Counter-exemplars are as valuable as exemplars when they name the replacement.
81
81
  "We would never ship this; we would ship that instead" with artifacts attached
82
- usually yields a sharper guard than an hour of affirmative description. Avoid
82
+ usually yields a sharper anti-goal than an hour of affirmative description. Avoid
83
83
  blacklist-only anti-goals: the rejected pattern should be purged from exemplars
84
84
  and enforced in review, not repeated as the model's main example.
85
85
 
@@ -114,9 +114,7 @@ Two authoring decisions replace any notion of hierarchy:
114
114
 
115
115
  - **Kind** — declare the kind vocabulary in `glossary.md` and name each node
116
116
  `<kind>.<slug>.md` so its normative weight is clear. The glossary defines what
117
- each kind means and how strongly it binds. Use `posture: guard` for
118
- review-critical replacement nodes, `posture: wild` for opt-in provocations,
119
- and the default steady posture for ordinary truths. Kinds are your choice;
117
+ each kind means and how strongly it binds. Kinds are your choice;
120
118
  Ghost ships no fixed vocabulary.
121
119
  - **Altitude** — state a truth at the level it is actually true. Universal → state
122
120
  it plainly. Narrower → name the situation that activates it, in the prose. Never
@@ -168,10 +166,10 @@ pattern to imitate with the human's real truths.
168
166
  expose sensitive third-party details — then show the count only." Models
169
167
  imitate reasoning as well as outputs.
170
168
 
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.
169
+ State the silence posture on the manifest-declared cover, which `gather`
170
+ inlines for every task: when the fingerprint is silent, proceed provisionally
171
+ from local conventions only when safe, and ask before brand-defining,
172
+ irreversible, legal, privacy-sensitive, or high-risk choices.
175
173
 
176
174
  ## Never
177
175
 
@@ -9,9 +9,8 @@ A brief is an ephemeral steering packet for the generating pass. It is not a new
9
9
  schema and is never written back into `.ghost/`.
10
10
 
11
11
  1. Run `ghost gather <ask> --format json` and select against descriptions.
12
- 2. Pull a small set: **3–5 nodes is normal; 10 is a bad selection** unless the
13
- task is unusually broad. Always include `index` unless already read this
14
- session.
12
+ 2. The cover is already in context. Pull a small set from the menu: **3–5 nodes
13
+ is normal; 10 is a bad selection** unless the task is unusually broad.
15
14
  3. Prefer concrete nodes: `materials`, substantial fenced examples, or a
16
15
  `## Skeleton`. If there is **no concrete material for this surface**, the
17
16
  readiness ceiling is **Yellow**.
@@ -42,8 +41,8 @@ Rules:
42
41
 
43
42
  - Do not add sections for every kind. Sections dilute instruction weight.
44
43
  - Treat `ghost pull` ordering as signal: stance first, concrete material next,
45
- prose rules, guards late, Skeletons dead last.
44
+ prose rules, Skeletons dead last.
46
45
  - If a pulled Skeleton matches the surface, begin the artifact from it verbatim
47
46
  before filling.
48
- - Guards (`posture: guard`) are review-critical anti-goals: state the positive
49
- replacement, not just the rejected pattern.
47
+ - Anti-goals are review-critical: state the positive replacement, not just the
48
+ rejected pattern.
@@ -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
 
@@ -210,9 +218,9 @@ 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.
@@ -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.