@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.
- package/README.md +47 -33
- package/dist/commands/fingerprint-commands.d.ts.map +1 -1
- package/dist/commands/fingerprint-commands.js +1 -6
- package/dist/commands/fingerprint-commands.js.map +1 -1
- package/dist/commands/gather-command.d.ts.map +1 -1
- package/dist/commands/gather-command.js +26 -30
- package/dist/commands/gather-command.js.map +1 -1
- package/dist/commands/init-command.d.ts.map +1 -1
- package/dist/commands/init-command.js +1 -6
- package/dist/commands/init-command.js.map +1 -1
- package/dist/commands/pull-command.d.ts.map +1 -1
- package/dist/commands/pull-command.js +12 -19
- package/dist/commands/pull-command.js.map +1 -1
- package/dist/commands/pulse-command.js +1 -10
- package/dist/commands/pulse-command.js.map +1 -1
- package/dist/ghost-core/catalog/assemble.d.ts +0 -4
- package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
- package/dist/ghost-core/catalog/assemble.js +0 -10
- package/dist/ghost-core/catalog/assemble.js.map +1 -1
- package/dist/ghost-core/catalog/index.d.ts +1 -1
- package/dist/ghost-core/catalog/index.d.ts.map +1 -1
- package/dist/ghost-core/catalog/index.js +1 -1
- package/dist/ghost-core/catalog/index.js.map +1 -1
- package/dist/ghost-core/catalog/menu.d.ts +1 -11
- package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
- package/dist/ghost-core/catalog/menu.js +1 -6
- package/dist/ghost-core/catalog/menu.js.map +1 -1
- package/dist/ghost-core/catalog/types.d.ts +0 -6
- package/dist/ghost-core/catalog/types.d.ts.map +1 -1
- package/dist/ghost-core/glossary.d.ts +0 -13
- package/dist/ghost-core/glossary.d.ts.map +1 -1
- package/dist/ghost-core/glossary.js +0 -7
- package/dist/ghost-core/glossary.js.map +1 -1
- package/dist/ghost-core/index.d.ts +2 -2
- package/dist/ghost-core/index.d.ts.map +1 -1
- package/dist/ghost-core/index.js +1 -1
- package/dist/ghost-core/index.js.map +1 -1
- package/dist/ghost-core/package-manifest.d.ts +7 -0
- package/dist/ghost-core/package-manifest.d.ts.map +1 -1
- package/dist/ghost-core/package-manifest.js +10 -0
- package/dist/ghost-core/package-manifest.js.map +1 -1
- package/dist/init-payloads/median/median-tells.md +25 -25
- package/dist/init-payloads/skeleton/brand.md +22 -0
- package/dist/init-payloads/skeleton/context.conversation.md +24 -0
- package/dist/init-payloads/skeleton/foundation.color.md +39 -0
- package/dist/init-payloads/skeleton/foundation.composition.md +30 -0
- package/dist/init-payloads/skeleton/foundation.controls.md +29 -0
- package/dist/init-payloads/skeleton/foundation.layout.md +45 -0
- package/dist/init-payloads/skeleton/foundation.motion.md +34 -0
- package/dist/init-payloads/skeleton/foundation.type.md +44 -0
- package/dist/init-payloads/skeleton/foundation.voice.md +29 -0
- package/dist/init-payloads/skeleton/glossary.md +27 -32
- package/dist/init-payloads/vessel-light/anti-goal.tells.md +5 -4
- package/dist/init-payloads/vessel-light/checks/shape-matches-job.md +43 -0
- package/dist/init-payloads/vessel-light/glossary.md +0 -1
- package/dist/init-payloads/vessel-light/grammar.color-roles.md +2 -2
- package/dist/init-payloads/vessel-light/grammar.deletion.md +35 -0
- package/dist/init-payloads/vessel-light/grammar.hierarchy.md +13 -3
- package/dist/init-payloads/vessel-light/grammar.job.md +54 -0
- package/dist/init-payloads/vessel-light/index.md +20 -24
- package/dist/init-payloads/vessel-light/manifest.yml +1 -0
- package/dist/init-payloads/vessel-light/materials/primitives.css +15 -52
- package/dist/init-payloads/vessel-light/materials/ref/composition.editorial.html +12 -7
- package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +8 -2
- package/dist/init-payloads/vessel-light/materials/ref/composition.table.html +3 -3
- package/dist/init-payloads/vessel-light/materials/tokens.css +27 -78
- package/dist/init-payloads/vessel-light/signature.temperature.md +7 -0
- package/dist/init-payloads/vessel-light/signature.type.md +6 -5
- package/dist/observability-events.d.ts +0 -3
- package/dist/observability-events.d.ts.map +1 -1
- package/dist/observability-events.js.map +1 -1
- package/dist/review/resolve.d.ts +1 -2
- package/dist/review/resolve.d.ts.map +1 -1
- package/dist/review/resolve.js +4 -5
- package/dist/review/resolve.js.map +1 -1
- package/dist/review/review-packet.d.ts +0 -1
- package/dist/review/review-packet.d.ts.map +1 -1
- package/dist/review/review-packet.js +0 -19
- package/dist/review/review-packet.js.map +1 -1
- package/dist/scan/check-files.d.ts.map +1 -1
- package/dist/scan/check-files.js +0 -15
- package/dist/scan/check-files.js.map +1 -1
- package/dist/scan/check-scaffold.js +2 -2
- package/dist/scan/check-scaffold.js.map +1 -1
- package/dist/scan/fingerprint-package-lint.d.ts +8 -0
- package/dist/scan/fingerprint-package-lint.d.ts.map +1 -0
- package/dist/scan/fingerprint-package-lint.js +284 -0
- package/dist/scan/fingerprint-package-lint.js.map +1 -0
- package/dist/scan/fingerprint-package-loader.d.ts.map +1 -1
- package/dist/scan/fingerprint-package-loader.js +2 -29
- package/dist/scan/fingerprint-package-loader.js.map +1 -1
- package/dist/scan/fingerprint-package.d.ts +9 -7
- package/dist/scan/fingerprint-package.d.ts.map +1 -1
- package/dist/scan/fingerprint-package.js +18 -231
- package/dist/scan/fingerprint-package.js.map +1 -1
- package/dist/scan/node-files.d.ts.map +1 -1
- package/dist/scan/node-files.js +1 -3
- package/dist/scan/node-files.js.map +1 -1
- package/dist/scan/templates.d.ts.map +1 -1
- package/dist/scan/templates.js +43 -35
- package/dist/scan/templates.js.map +1 -1
- package/dist/skill-bundle/SKILL.md +15 -13
- package/dist/skill-bundle/references/adapting-a-starter.md +62 -60
- package/dist/skill-bundle/references/authoring-scenarios.md +6 -8
- package/dist/skill-bundle/references/brief.md +5 -6
- package/dist/skill-bundle/references/capture.md +47 -36
- package/dist/skill-bundle/references/concrete-tiers.md +95 -0
- package/dist/skill-bundle/references/recall.md +6 -12
- package/dist/skill-bundle/references/schema.md +15 -24
- package/dist/skill-bundle/references/self-check.md +2 -2
- package/dist/skill-bundle/references/steering-audit.md +7 -10
- package/package.json +1 -1
- package/dist/init-payloads/skeleton/grammar.color-roles.md +0 -26
- package/dist/init-payloads/skeleton/grammar.conversation.md +0 -23
- package/dist/init-payloads/skeleton/grammar.hierarchy.md +0 -39
- package/dist/init-payloads/skeleton/grammar.motion.md +0 -24
- package/dist/init-payloads/skeleton/grammar.rhythm.md +0 -23
- package/dist/init-payloads/skeleton/grammar.surfaces.md +0 -26
- package/dist/init-payloads/skeleton/index.md +0 -27
- package/dist/init-payloads/skeleton/signature.palette.md +0 -24
- package/dist/init-payloads/skeleton/signature.shape.md +0 -19
- package/dist/init-payloads/skeleton/signature.temperature.md +0 -20
- package/dist/init-payloads/skeleton/signature.type.md +0 -22
- package/dist/skill-bundle/references/wild.md +0 -30
- /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
|
-
|
|
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
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
20
|
+
| Cover | `brand.md` | Write it — essence 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.*` | Prune — delete 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
|
|
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. **
|
|
40
|
-
the
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
80
|
+
Work does not block on adaptation. Before the procedure runs (or midway through
|
|
81
|
+
it), cite starter content honestly:
|
|
78
82
|
|
|
79
|
-
-
|
|
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
|
-
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
|
96
|
-
|
|
97
|
-
- Never leave
|
|
98
|
-
|
|
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
|
|
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.
|
|
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
|
|
172
|
-
when the fingerprint is silent, proceed provisionally
|
|
173
|
-
only when safe, and ask before brand-defining,
|
|
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
|
|
13
|
-
|
|
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,
|
|
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
|
-
-
|
|
49
|
-
|
|
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
|
|
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
|
|
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
|
|
136
|
+
## Write anti-goals as replacement, not as blacklist
|
|
123
137
|
|
|
124
|
-
|
|
125
|
-
|
|
138
|
+
An anti-goal is ordinary node prose whose kind the glossary defines as a
|
|
139
|
+
review-critical replacement rule.
|
|
126
140
|
|
|
127
|
-
|
|
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
|
|
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
|
|
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
|
-
- **
|
|
214
|
-
is the required
|
|
215
|
-
never "improve"
|
|
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
|
|
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.*`
|
|
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
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
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
|
|
310
|
-
every task, what
|
|
311
|
-
|
|
312
|
-
|
|
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).
|
|
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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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.
|
|
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.
|
|
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,
|
|
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
|
|
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
|
-
##
|
|
23
|
+
## Manifest
|
|
24
24
|
|
|
25
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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,
|
|
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
|
|
119
|
-
|
|
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
|
|
64
|
-
|
|
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.
|