@design-intelligence/ghost 0.26.0 → 0.27.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.js +5 -5
- package/dist/commands/checks-command.js.map +1 -1
- package/dist/commands/errors.d.ts +2 -1
- package/dist/commands/errors.d.ts.map +1 -1
- package/dist/commands/errors.js +12 -2
- package/dist/commands/errors.js.map +1 -1
- package/dist/commands/export-command.js +5 -5
- package/dist/commands/export-command.js.map +1 -1
- package/dist/commands/fingerprint-commands.js +4 -4
- package/dist/commands/fingerprint-commands.js.map +1 -1
- package/dist/commands/gather-command.js +9 -9
- package/dist/commands/gather-command.js.map +1 -1
- package/dist/commands/init-command.js +4 -4
- package/dist/commands/init-command.js.map +1 -1
- package/dist/commands/manifest-command.js +5 -5
- package/dist/commands/manifest-command.js.map +1 -1
- package/dist/commands/pull-command.js +11 -9
- package/dist/commands/pull-command.js.map +1 -1
- package/dist/commands/pulse-command.js +4 -4
- package/dist/commands/pulse-command.js.map +1 -1
- package/dist/commands/review-command.d.ts.map +1 -1
- package/dist/commands/review-command.js +5 -7
- package/dist/commands/review-command.js.map +1 -1
- package/dist/commands/skill-command.js +5 -5
- package/dist/commands/skill-command.js.map +1 -1
- package/dist/embed/gather.d.ts.map +1 -1
- package/dist/embed/gather.js +4 -2
- package/dist/embed/gather.js.map +1 -1
- package/dist/embed/pull.d.ts.map +1 -1
- package/dist/embed/pull.js +3 -1
- package/dist/embed/pull.js.map +1 -1
- package/dist/embed/types.d.ts +4 -0
- package/dist/embed/types.d.ts.map +1 -1
- package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
- package/dist/ghost-core/catalog/assemble.js +5 -1
- package/dist/ghost-core/catalog/assemble.js.map +1 -1
- package/dist/ghost-core/catalog/closest.d.ts +1 -1
- package/dist/ghost-core/catalog/closest.js +1 -1
- package/dist/ghost-core/catalog/menu.d.ts +8 -6
- package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
- package/dist/ghost-core/catalog/menu.js +5 -3
- package/dist/ghost-core/catalog/menu.js.map +1 -1
- package/dist/ghost-core/catalog/types.d.ts +5 -1
- package/dist/ghost-core/catalog/types.d.ts.map +1 -1
- package/dist/ghost-core/check/lint.d.ts.map +1 -1
- package/dist/ghost-core/check/lint.js +0 -10
- package/dist/ghost-core/check/lint.js.map +1 -1
- package/dist/ghost-core/check/load.d.ts.map +1 -1
- package/dist/ghost-core/check/load.js +0 -2
- package/dist/ghost-core/check/load.js.map +1 -1
- package/dist/ghost-core/check/types.d.ts +0 -2
- package/dist/ghost-core/check/types.d.ts.map +1 -1
- package/dist/ghost-core/node/schema.d.ts +3 -1
- package/dist/ghost-core/node/schema.d.ts.map +1 -1
- package/dist/ghost-core/node/schema.js +4 -2
- package/dist/ghost-core/node/schema.js.map +1 -1
- package/dist/ghost-core/node/serialize.d.ts +7 -5
- package/dist/ghost-core/node/serialize.d.ts.map +1 -1
- package/dist/ghost-core/node/serialize.js +18 -9
- package/dist/ghost-core/node/serialize.js.map +1 -1
- package/dist/ghost-core/node/types.d.ts +6 -4
- package/dist/ghost-core/node/types.d.ts.map +1 -1
- package/dist/init-payloads/median/cliche.median.md +1 -1
- package/dist/init-payloads/skeleton/brand.md +1 -1
- package/dist/init-payloads/skeleton/context.conversation.md +1 -1
- package/dist/init-payloads/skeleton/foundation.color.md +1 -1
- package/dist/init-payloads/skeleton/foundation.composition.md +1 -1
- package/dist/init-payloads/skeleton/foundation.controls.md +1 -1
- package/dist/init-payloads/skeleton/foundation.layout.md +1 -1
- package/dist/init-payloads/skeleton/foundation.motion.md +1 -1
- package/dist/init-payloads/skeleton/foundation.type.md +1 -1
- package/dist/init-payloads/skeleton/foundation.voice.md +1 -1
- package/dist/init-payloads/vessel-light/anti-goal.median.md +1 -1
- package/dist/init-payloads/vessel-light/anti-goal.tells.md +1 -1
- package/dist/init-payloads/vessel-light/grammar.color-roles.md +1 -1
- package/dist/init-payloads/vessel-light/grammar.conversation.md +1 -1
- package/dist/init-payloads/vessel-light/grammar.deletion.md +1 -1
- package/dist/init-payloads/vessel-light/grammar.hierarchy.md +1 -1
- package/dist/init-payloads/vessel-light/grammar.job.md +1 -1
- package/dist/init-payloads/vessel-light/grammar.motion.md +1 -1
- package/dist/init-payloads/vessel-light/grammar.rhythm.md +1 -1
- package/dist/init-payloads/vessel-light/grammar.surfaces.md +1 -1
- package/dist/init-payloads/vessel-light/index.md +1 -1
- package/dist/init-payloads/vessel-light/register.data-density.md +1 -1
- package/dist/init-payloads/vessel-light/register.editorial.md +1 -1
- package/dist/init-payloads/vessel-light/register.email.md +1 -1
- package/dist/init-payloads/vessel-light/signature.palette.md +1 -1
- package/dist/init-payloads/vessel-light/signature.shape.md +1 -1
- package/dist/init-payloads/vessel-light/signature.temperature.md +1 -1
- package/dist/init-payloads/vessel-light/signature.type.md +1 -1
- package/dist/review/baseline.d.ts +1 -1
- package/dist/review/baseline.d.ts.map +1 -1
- package/dist/review/baseline.js +2 -6
- package/dist/review/baseline.js.map +1 -1
- package/dist/review/review-packet.d.ts +2 -6
- package/dist/review/review-packet.d.ts.map +1 -1
- package/dist/review/review-packet.js +6 -20
- package/dist/review/review-packet.js.map +1 -1
- package/dist/scan/fingerprint-package-lint.d.ts.map +1 -1
- package/dist/scan/fingerprint-package-lint.js +17 -10
- package/dist/scan/fingerprint-package-lint.js.map +1 -1
- package/dist/skill-bundle/SKILL.md +7 -9
- package/dist/skill-bundle/references/authoring-scenarios.md +1 -1
- package/dist/skill-bundle/references/blocks.md +10 -10
- package/dist/skill-bundle/references/brief.md +1 -1
- package/dist/skill-bundle/references/capture.md +18 -17
- package/dist/skill-bundle/references/distill.md +1 -1
- package/dist/skill-bundle/references/making.md +7 -7
- package/dist/skill-bundle/references/recall.md +1 -1
- package/dist/skill-bundle/references/schema.md +13 -14
- package/dist/skill-bundle/references/self-check.md +2 -2
- package/dist/skill-bundle/references/steering-audit.md +3 -3
- package/package.json +1 -1
- package/dist/review/probes.d.ts +0 -13
- package/dist/review/probes.d.ts.map +0 -1
- package/dist/review/probes.js +0 -45
- package/dist/review/probes.js.map +0 -1
|
@@ -1,31 +1,40 @@
|
|
|
1
1
|
import { stringify as stringifyYaml } from "yaml";
|
|
2
|
-
const FRONTMATTER_KEY_ORDER = ["
|
|
2
|
+
const FRONTMATTER_KEY_ORDER = ["context", "materials"];
|
|
3
3
|
function shouldSerializeFrontmatterValue(value) {
|
|
4
4
|
return value !== undefined;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
7
|
* Serialize a node back to its `---\n<yaml>\n---\n<body>` markdown form. Known
|
|
8
|
-
* keys are emitted first in a stable order (
|
|
9
|
-
*
|
|
10
|
-
* diffs are deterministic.
|
|
11
|
-
*
|
|
12
|
-
*
|
|
8
|
+
* keys are emitted first in a stable order (context, materials), followed by
|
|
9
|
+
* any free-form descriptive keys in alphabetical order so round-trips and
|
|
10
|
+
* diffs are deterministic. The deprecated `description` alias is written as
|
|
11
|
+
* `context`, which makes serialize a safe migration boundary. Identity and kind
|
|
12
|
+
* are not serialized; they come from the node's file path and optional filename
|
|
13
|
+
* prefix. Undefined fields are omitted; a node with no frontmatter fields emits
|
|
14
|
+
* an empty block.
|
|
13
15
|
*/
|
|
14
16
|
export function serializeNode(node) {
|
|
15
17
|
const fm = node.frontmatter;
|
|
18
|
+
const normalized = {
|
|
19
|
+
...fm,
|
|
20
|
+
...(fm.context === undefined && fm.description !== undefined
|
|
21
|
+
? { context: fm.description }
|
|
22
|
+
: {}),
|
|
23
|
+
};
|
|
24
|
+
delete normalized.description;
|
|
16
25
|
const ordered = {};
|
|
17
26
|
const emitted = new Set();
|
|
18
27
|
for (const key of FRONTMATTER_KEY_ORDER) {
|
|
19
|
-
const value =
|
|
28
|
+
const value = normalized[key];
|
|
20
29
|
if (shouldSerializeFrontmatterValue(value)) {
|
|
21
30
|
ordered[key] = value;
|
|
22
31
|
emitted.add(key);
|
|
23
32
|
}
|
|
24
33
|
}
|
|
25
|
-
for (const key of Object.keys(
|
|
34
|
+
for (const key of Object.keys(normalized).sort()) {
|
|
26
35
|
if (emitted.has(key))
|
|
27
36
|
continue;
|
|
28
|
-
const value =
|
|
37
|
+
const value = normalized[key];
|
|
29
38
|
if (shouldSerializeFrontmatterValue(value))
|
|
30
39
|
ordered[key] = value;
|
|
31
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/ghost-core/node/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAGlD,MAAM,qBAAqB,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../src/ghost-core/node/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;AAGlD,MAAM,qBAAqB,GAAG,CAAC,SAAS,EAAE,WAAW,CAAU,CAAC;AAEhE,SAAS,+BAA+B,CAAC,KAAc;IACrD,OAAO,KAAK,KAAK,SAAS,CAAC;AAC7B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,IAAuB;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAsC,CAAC;IACvD,MAAM,UAAU,GAA4B;QAC1C,GAAG,EAAE;QACL,GAAG,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,CAAC,WAAW,KAAK,SAAS;YAC1D,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE;YAC7B,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,OAAO,UAAU,CAAC,WAAW,CAAC;IAE9B,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACjD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,+BAA+B,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnE,CAAC;IAED,8EAA8E;IAC9E,MAAM,IAAI,GACR,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAC/B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3C,OAAO,QAAQ,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -10,11 +10,13 @@ export interface GhostNodeFrontmatter {
|
|
|
10
10
|
/** Free-form descriptive properties parsed from node frontmatter. */
|
|
11
11
|
[key: string]: unknown;
|
|
12
12
|
/**
|
|
13
|
-
* Retrieval payload shown by gather:
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* Retrieval payload shown by gather: the observable condition under which
|
|
14
|
+
* this node applies. Together with the node's id, it is how an agent decides
|
|
15
|
+
* applicability. Optional, but strongly encouraged on any node worth
|
|
16
|
+
* anchoring a task at.
|
|
17
17
|
*/
|
|
18
|
+
context?: string;
|
|
19
|
+
/** @deprecated Use `context`. Accepted as a read alias for one release. */
|
|
18
20
|
description?: string;
|
|
19
21
|
/**
|
|
20
22
|
* Optional locators for the concrete materials this guidance is about:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/node/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,eAAO,MAAM,iBAAiB,EAAG,eAAwB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,oBAAoB,CAAC;IAClC,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/node/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,eAAO,MAAM,iBAAiB,EAAG,eAAwB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,oBAAoB,CAAC;IAClC,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Any greenfield visual surface or first-draft copy.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
This is the model's median, not your brand. Each rule is reject→replace.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Chat threads, agent consoles, and prompt composers.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
In this context: AI conversation threads, agent consoles, review assistants,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Any transition, animation, or hover treatment.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
## Usage
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Any greenfield visual surface or first-draft copy.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
This is the model's median, not your brand. Each rule is reject→replace.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Choosing or applying color.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/tokens.css
|
|
5
5
|
- "**/*.css"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Any AI thread, agent console, review assistant, or prompt composer.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/ref/composition.conversation.html
|
|
5
5
|
- "**/*.html"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: The final pass over any composition, or whenever a view feels crowded, busy, or dressed up.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
Restraint is not a mood; it is a test every element has to pass. Before a
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Any view containing text or actions.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/primitives.css
|
|
5
5
|
- materials/ref/composition.form.html
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Any new view before its structure or register is chosen.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/ref/composition.form.html
|
|
5
5
|
- materials/ref/composition.table.html
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Any transition, animation, or hover treatment.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/tokens.css
|
|
5
5
|
- "**/*.css"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Any card, popover, modal, dialog, scrim, or bordered container.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/primitives.css
|
|
5
5
|
- materials/ref/composition.overlay.html
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Tables, dashboards, logs, monitoring, or other data-dense consoles.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/ref/composition.table.html
|
|
5
5
|
- materials/primitives.css
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Heroes, marketing pages, pull quotes, or full-bleed dark moments.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/ref/composition.editorial.html
|
|
5
5
|
- materials/tokens.css
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Color beyond the base roles, in any register.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/tokens.css
|
|
5
5
|
---
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Choosing or implementing any radius or corner treatment.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/tokens.css
|
|
5
5
|
- materials/primitives.css
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Writing any copy or choosing the character of motion.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/tokens.css
|
|
5
5
|
---
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
context: Any text, hero, landing page, or editorial moment.
|
|
3
3
|
materials:
|
|
4
4
|
- materials/tokens.css
|
|
5
5
|
- materials/fonts/*.woff2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../../src/review/baseline.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"baseline.d.ts","sourceRoot":"","sources":["../../src/review/baseline.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,YAAY,GACpB,aAAa,GAAG,IAAI,CA0BtB"}
|
package/dist/review/baseline.js
CHANGED
|
@@ -10,9 +10,7 @@ export function resolveBaseline(raw, catalog) {
|
|
|
10
10
|
return {
|
|
11
11
|
ref: raw,
|
|
12
12
|
nodeId: ref.nodeId,
|
|
13
|
-
...(node.
|
|
14
|
-
? { description: node.description }
|
|
15
|
-
: {}),
|
|
13
|
+
...(node.context !== undefined ? { context: node.context } : {}),
|
|
16
14
|
body: node.body,
|
|
17
15
|
};
|
|
18
16
|
}
|
|
@@ -21,9 +19,7 @@ export function resolveBaseline(raw, catalog) {
|
|
|
21
19
|
ref: raw,
|
|
22
20
|
nodeId: ref.nodeId,
|
|
23
21
|
heading: ref.heading,
|
|
24
|
-
...(node.
|
|
25
|
-
? { description: node.description }
|
|
26
|
-
: {}),
|
|
22
|
+
...(node.context !== undefined ? { context: node.context } : {}),
|
|
27
23
|
body: section ?? node.body,
|
|
28
24
|
...(section === null
|
|
29
25
|
? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../src/review/baseline.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAWrB,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,OAAqB;IAErB,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO;YACL,GAAG,EAAE,GAAG;YACR,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../src/review/baseline.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAWrB,MAAM,UAAU,eAAe,CAC7B,GAAW,EACX,OAAqB;IAErB,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO;YACL,GAAG,EAAE,GAAG;YACR,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO;QACL,GAAG,EAAE,GAAG;QACR,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,IAAI,EAAE,OAAO,IAAI,IAAI,CAAC,IAAI;QAC1B,GAAG,CAAC,OAAO,KAAK,IAAI;YAClB,CAAC,CAAC;gBACE,OAAO,EAAE,YAAY,GAAG,CAAC,OAAO,wBAAwB,GAAG,CAAC,MAAM,8BAA8B;aACjG;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { type GhostMaterial } from "#ghost-core";
|
|
2
2
|
import type { LoadedGhostPackage } from "../scan/fingerprint-package.js";
|
|
3
3
|
import { type BaselineProse } from "./baseline.js";
|
|
4
|
-
import { type ProbeEvidence } from "./probes.js";
|
|
5
4
|
import type { CoverageGap } from "./resolve.js";
|
|
6
|
-
export type { BaselineProse
|
|
5
|
+
export type { BaselineProse };
|
|
7
6
|
export interface PacketMaterialNode {
|
|
8
7
|
id: string;
|
|
9
8
|
kind?: string;
|
|
10
|
-
|
|
9
|
+
context?: string;
|
|
11
10
|
prose: string;
|
|
12
11
|
materials: GhostMaterial[];
|
|
13
12
|
matchedMaterials: string[];
|
|
@@ -20,7 +19,6 @@ export interface PacketCheck {
|
|
|
20
19
|
via: string[];
|
|
21
20
|
prose: string;
|
|
22
21
|
baseline: BaselineProse[];
|
|
23
|
-
probe?: ProbeEvidence;
|
|
24
22
|
}
|
|
25
23
|
export interface ReviewPacket {
|
|
26
24
|
packageId: string;
|
|
@@ -35,9 +33,7 @@ export interface ReviewPacket {
|
|
|
35
33
|
export interface BuildReviewPacketOptions {
|
|
36
34
|
/** Absolute path of the ghost package directory (default: cwd/.ghost). */
|
|
37
35
|
packageDir?: string;
|
|
38
|
-
runProbes?: boolean;
|
|
39
36
|
cwd?: string;
|
|
40
|
-
probeTimeoutMs?: number;
|
|
41
37
|
}
|
|
42
38
|
export declare function buildReviewPacket(ghostPackage: LoadedGhostPackage, diffText: string, options?: BuildReviewPacketOptions): Promise<ReviewPacket>;
|
|
43
39
|
export declare function formatReviewPacket(packet: ReviewPacket): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-packet.d.ts","sourceRoot":"","sources":["../../src/review/review-packet.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,aAAa,EAGnB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,KAAK,aAAa,EAAmB,MAAM,eAAe,CAAC;AACpE,OAAO,
|
|
1
|
+
{"version":3,"file":"review-packet.d.ts","sourceRoot":"","sources":["../../src/review/review-packet.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,aAAa,EAGnB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,OAAO,EAAE,KAAK,aAAa,EAAmB,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC9B,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,0EAA0E;IAC1E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,kBAAkB,EAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,YAAY,CAAC,CAyCvB;AAkBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAoF/D"}
|
|
@@ -3,7 +3,6 @@ import { materialLocator, normalizeMaterial, } from "#ghost-core";
|
|
|
3
3
|
import { GHOST_MATERIALS_DIR } from "../scan/constants.js";
|
|
4
4
|
import { resolveGitRoot } from "../scan/package-paths.js";
|
|
5
5
|
import { resolveBaseline } from "./baseline.js";
|
|
6
|
-
import { runProbe } from "./probes.js";
|
|
7
6
|
import { resolveReview } from "./resolve.js";
|
|
8
7
|
export async function buildReviewPacket(ghostPackage, diffText, options = {}) {
|
|
9
8
|
const cwd = options.cwd ?? process.cwd();
|
|
@@ -13,15 +12,8 @@ export async function buildReviewPacket(ghostPackage, diffText, options = {}) {
|
|
|
13
12
|
materialsDir: GHOST_MATERIALS_DIR,
|
|
14
13
|
});
|
|
15
14
|
const materialNodes = resolution.materialNodes.map((matched) => materialNodeFromMatch(ghostPackage, matched));
|
|
16
|
-
const checks =
|
|
15
|
+
const checks = resolution.offeredChecks.map((offered) => {
|
|
17
16
|
const check = ghostPackage.checks.get(offered.id);
|
|
18
|
-
const probeCommand = check?.doc.frontmatter.probe;
|
|
19
|
-
const probe = options.runProbes !== false && probeCommand !== undefined
|
|
20
|
-
? await runProbe(probeCommand, {
|
|
21
|
-
cwd: options.cwd ?? process.cwd(),
|
|
22
|
-
timeoutMs: options.probeTimeoutMs,
|
|
23
|
-
})
|
|
24
|
-
: undefined;
|
|
25
17
|
return {
|
|
26
18
|
id: offered.id,
|
|
27
19
|
severity: offered.severity,
|
|
@@ -31,9 +23,8 @@ export async function buildReviewPacket(ghostPackage, diffText, options = {}) {
|
|
|
31
23
|
baseline: check?.references
|
|
32
24
|
.map((ref) => resolveBaseline(ref, ghostPackage.catalog))
|
|
33
25
|
.filter((ref) => ref !== null) ?? [],
|
|
34
|
-
...(probe ? { probe } : {}),
|
|
35
26
|
};
|
|
36
|
-
})
|
|
27
|
+
});
|
|
37
28
|
return {
|
|
38
29
|
packageId: ghostPackage.manifest.id,
|
|
39
30
|
fingerprintId: ghostPackage.manifest.id,
|
|
@@ -49,9 +40,7 @@ function materialNodeFromMatch(ghostPackage, matched) {
|
|
|
49
40
|
return {
|
|
50
41
|
id: node.id,
|
|
51
42
|
...(node.kind !== undefined ? { kind: node.kind } : {}),
|
|
52
|
-
...(node.
|
|
53
|
-
? { description: node.description }
|
|
54
|
-
: {}),
|
|
43
|
+
...(node.context !== undefined ? { context: node.context } : {}),
|
|
55
44
|
prose: node.body,
|
|
56
45
|
materials: node.materials ?? [],
|
|
57
46
|
matchedMaterials: matched.locators,
|
|
@@ -61,7 +50,7 @@ function materialNodeFromMatch(ghostPackage, matched) {
|
|
|
61
50
|
export function formatReviewPacket(packet) {
|
|
62
51
|
const out = [];
|
|
63
52
|
out.push(`# ghost review — package \`${packet.packageId}\``, "");
|
|
64
|
-
out.push("You are reviewing a diff against ghost package guidance. The command has", "assembled the touched files, matched material-backed nodes, offered", "checks
|
|
53
|
+
out.push("You are reviewing a diff against ghost package guidance. The command has", "assembled the touched files, matched material-backed nodes, and offered", "checks. Weigh which checks apply. Do not invent obligations that are not grounded", "in the ghost package guidance or check text.", "");
|
|
65
54
|
if (packet.touchedFiles.length > 0) {
|
|
66
55
|
out.push("## Touched files");
|
|
67
56
|
for (const file of packet.touchedFiles)
|
|
@@ -73,8 +62,8 @@ export function formatReviewPacket(packet) {
|
|
|
73
62
|
for (const node of packet.materialNodes) {
|
|
74
63
|
const kind = node.kind ? ` _(${node.kind})_` : "";
|
|
75
64
|
out.push(`### \`${node.id}\`${kind}`);
|
|
76
|
-
if (node.
|
|
77
|
-
out.push(`_${node.
|
|
65
|
+
if (node.context)
|
|
66
|
+
out.push(`_${node.context}_`, "");
|
|
78
67
|
out.push(node.prose, "");
|
|
79
68
|
out.push("Matched materials:");
|
|
80
69
|
for (const locator of node.matchedMaterials) {
|
|
@@ -110,9 +99,6 @@ export function formatReviewPacket(packet) {
|
|
|
110
99
|
}
|
|
111
100
|
out.push("");
|
|
112
101
|
}
|
|
113
|
-
if (check.probe) {
|
|
114
|
-
out.push("Probe evidence (shell run by ghost; evidence only, not a pass/fail verdict):", `- command: \`${check.probe.command}\``, `- exit code: ${check.probe.exitCode ?? "unknown"}${check.probe.timedOut ? " (timed out)" : ""}`, "- stdout:", "```", check.probe.stdout.trimEnd(), "```", "- stderr:", "```", check.probe.stderr.trimEnd(), "```", "");
|
|
115
|
-
}
|
|
116
102
|
out.push(check.prose, "");
|
|
117
103
|
}
|
|
118
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review-packet.js","sourceRoot":"","sources":["../../src/review/review-packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAGL,eAAe,EACf,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAsB,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"review-packet.js","sourceRoot":"","sources":["../../src/review/review-packet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint-package-lint.d.ts","sourceRoot":"","sources":["../../src/scan/fingerprint-package-lint.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,SAAgB,GAClB,OAAO,CAAC,UAAU,CAAC,CA4DrB;
|
|
1
|
+
{"version":3,"file":"fingerprint-package-lint.d.ts","sourceRoot":"","sources":["../../src/scan/fingerprint-package-lint.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAa,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,GAAG,SAAgB,GAClB,OAAO,CAAC,UAAU,CAAC,CA4DrB;AAoRD,0CAA0C;AAC1C,eAAO,MAAM,sBAAsB,yBAAmB,CAAC"}
|
|
@@ -43,7 +43,7 @@ export async function lintGhostPackage(dirArg, cwd = process.cwd()) {
|
|
|
43
43
|
await lintGlossary(paths.glossary, issues);
|
|
44
44
|
lintCover(manifest.cover, catalog, issues);
|
|
45
45
|
await lintKindPrefixes(paths, catalog, issues);
|
|
46
|
-
|
|
46
|
+
lintNodeContexts(catalog, issues);
|
|
47
47
|
lintSkeletonSections(catalog, issues);
|
|
48
48
|
await lintMaterialLocators(paths, catalog, issues, cwd);
|
|
49
49
|
lintCheckReferences(catalog, checks, issues);
|
|
@@ -131,20 +131,27 @@ async function lintKindPrefixes(paths, catalog, issues) {
|
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
/**
|
|
134
|
-
*
|
|
135
|
-
* the
|
|
136
|
-
*
|
|
137
|
-
*
|
|
134
|
+
* `context` is a node's entire retrieval payload: `gather` lists it as the text
|
|
135
|
+
* the agent selects against. A node without one renders as a bare id and cannot
|
|
136
|
+
* show when it applies, so `validate` makes that loud. `description` remains a
|
|
137
|
+
* read alias for one release and produces a migration warning.
|
|
138
138
|
*/
|
|
139
|
-
function
|
|
139
|
+
function lintNodeContexts(catalog, issues) {
|
|
140
140
|
for (const node of catalog.nodes.values()) {
|
|
141
|
-
if (node.
|
|
142
|
-
|
|
141
|
+
if (node.usesDeprecatedDescription) {
|
|
142
|
+
issues.push({
|
|
143
|
+
severity: "warning",
|
|
144
|
+
rule: "node-description-deprecated",
|
|
145
|
+
message: "node uses deprecated `description`; rename it to `context` (the retrieval payload shown by `gather`)",
|
|
146
|
+
path: `${node.id}.md.description`,
|
|
147
|
+
});
|
|
143
148
|
}
|
|
149
|
+
if (node.context !== undefined && node.context.trim().length > 0)
|
|
150
|
+
continue;
|
|
144
151
|
issues.push({
|
|
145
152
|
severity: "warning",
|
|
146
|
-
rule: "node-
|
|
147
|
-
message: "node has no `
|
|
153
|
+
rule: "node-context-missing",
|
|
154
|
+
message: "node has no `context`, so `gather` lists it as a bare id without applicability context; add one line naming the observable condition under which this node applies",
|
|
148
155
|
path: `${node.id}.md`,
|
|
149
156
|
});
|
|
150
157
|
}
|