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