@design-intelligence/ghost 0.22.1 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +35 -29
  2. package/dist/commands/checks-command.js +3 -3
  3. package/dist/commands/checks-command.js.map +1 -1
  4. package/dist/commands/command-discovery.d.ts.map +1 -1
  5. package/dist/commands/command-discovery.js +5 -5
  6. package/dist/commands/command-discovery.js.map +1 -1
  7. package/dist/commands/export-command.d.ts.map +1 -1
  8. package/dist/commands/export-command.js +10 -10
  9. package/dist/commands/export-command.js.map +1 -1
  10. package/dist/commands/fingerprint-commands.d.ts +2 -2
  11. package/dist/commands/fingerprint-commands.d.ts.map +1 -1
  12. package/dist/commands/fingerprint-commands.js +7 -7
  13. package/dist/commands/fingerprint-commands.js.map +1 -1
  14. package/dist/commands/gather-command.d.ts.map +1 -1
  15. package/dist/commands/gather-command.js +86 -20
  16. package/dist/commands/gather-command.js.map +1 -1
  17. package/dist/commands/init-command.d.ts.map +1 -1
  18. package/dist/commands/init-command.js +6 -6
  19. package/dist/commands/init-command.js.map +1 -1
  20. package/dist/commands/pull-command.d.ts.map +1 -1
  21. package/dist/commands/pull-command.js +22 -9
  22. package/dist/commands/pull-command.js.map +1 -1
  23. package/dist/commands/pulse-command.js +6 -6
  24. package/dist/commands/pulse-command.js.map +1 -1
  25. package/dist/commands/review-command.js +7 -7
  26. package/dist/commands/review-command.js.map +1 -1
  27. package/dist/commands/skill-command.js +2 -2
  28. package/dist/fingerprint.d.ts +2 -1
  29. package/dist/fingerprint.d.ts.map +1 -1
  30. package/dist/fingerprint.js +1 -0
  31. package/dist/fingerprint.js.map +1 -1
  32. package/dist/ghost-core/catalog/assemble.d.ts.map +1 -1
  33. package/dist/ghost-core/catalog/assemble.js +2 -1
  34. package/dist/ghost-core/catalog/assemble.js.map +1 -1
  35. package/dist/ghost-core/catalog/menu.d.ts +6 -4
  36. package/dist/ghost-core/catalog/menu.d.ts.map +1 -1
  37. package/dist/ghost-core/catalog/menu.js +1 -0
  38. package/dist/ghost-core/catalog/menu.js.map +1 -1
  39. package/dist/ghost-core/catalog/types.d.ts +4 -2
  40. package/dist/ghost-core/catalog/types.d.ts.map +1 -1
  41. package/dist/ghost-core/check/index.d.ts +1 -1
  42. package/dist/ghost-core/check/index.js +1 -1
  43. package/dist/ghost-core/check/lint.d.ts +2 -2
  44. package/dist/ghost-core/check/lint.js +2 -2
  45. package/dist/ghost-core/check/load.d.ts +1 -1
  46. package/dist/ghost-core/check/load.js +3 -3
  47. package/dist/ghost-core/check/types.d.ts +3 -3
  48. package/dist/ghost-core/index.d.ts +9 -3
  49. package/dist/ghost-core/index.d.ts.map +1 -1
  50. package/dist/ghost-core/index.js +6 -2
  51. package/dist/ghost-core/index.js.map +1 -1
  52. package/dist/ghost-core/markdown.d.ts +1 -1
  53. package/dist/ghost-core/markdown.js +1 -1
  54. package/dist/ghost-core/node/index.d.ts +1 -1
  55. package/dist/ghost-core/node/index.d.ts.map +1 -1
  56. package/dist/ghost-core/node/index.js +1 -1
  57. package/dist/ghost-core/node/index.js.map +1 -1
  58. package/dist/ghost-core/node/schema.js +1 -1
  59. package/dist/ghost-core/node/serialize.d.ts +6 -5
  60. package/dist/ghost-core/node/serialize.d.ts.map +1 -1
  61. package/dist/ghost-core/node/serialize.js +25 -9
  62. package/dist/ghost-core/node/serialize.js.map +1 -1
  63. package/dist/ghost-core/node/steering.d.ts +1 -0
  64. package/dist/ghost-core/node/steering.d.ts.map +1 -1
  65. package/dist/ghost-core/node/steering.js +4 -1
  66. package/dist/ghost-core/node/steering.js.map +1 -1
  67. package/dist/ghost-core/node/types.d.ts +6 -5
  68. package/dist/ghost-core/node/types.d.ts.map +1 -1
  69. package/dist/ghost-core/package-manifest.d.ts +23 -13
  70. package/dist/ghost-core/package-manifest.d.ts.map +1 -1
  71. package/dist/ghost-core/package-manifest.js +20 -7
  72. package/dist/ghost-core/package-manifest.js.map +1 -1
  73. package/dist/ghost-core/skill-bundle-loader.d.ts +1 -1
  74. package/dist/ghost-core/skill-bundle-loader.js +1 -1
  75. package/dist/index.d.ts +3 -1
  76. package/dist/index.d.ts.map +1 -1
  77. package/dist/index.js +3 -1
  78. package/dist/index.js.map +1 -1
  79. package/dist/init-payloads/median/cliche.median.md +6 -6
  80. package/dist/init-payloads/median/median-tells.md +1 -1
  81. package/dist/init-payloads/skeleton/brand.md +4 -3
  82. package/dist/init-payloads/skeleton/glossary.md +1 -1
  83. package/dist/init-payloads/vessel-light/anti-goal.median.md +6 -6
  84. package/dist/init-payloads/vessel-light/checks/motion-restraint.md +1 -1
  85. package/dist/init-payloads/vessel-light/manifest.yml +1 -1
  86. package/dist/init-payloads/vessel-light/materials/ref/composition.form.html +2 -2
  87. package/dist/init-payloads/vessel-light/materials/ref/composition.overlay.html +3 -3
  88. package/dist/observability-events.d.ts +10 -0
  89. package/dist/observability-events.d.ts.map +1 -1
  90. package/dist/observability-events.js +12 -0
  91. package/dist/observability-events.js.map +1 -1
  92. package/dist/package.d.ts +7 -0
  93. package/dist/package.d.ts.map +1 -0
  94. package/dist/package.js +4 -0
  95. package/dist/package.js.map +1 -0
  96. package/dist/review/resolve.js +1 -1
  97. package/dist/review/resolve.js.map +1 -1
  98. package/dist/review/review-packet.d.ts +5 -3
  99. package/dist/review/review-packet.d.ts.map +1 -1
  100. package/dist/review/review-packet.js +12 -11
  101. package/dist/review/review-packet.js.map +1 -1
  102. package/dist/scan/constants.d.ts +6 -2
  103. package/dist/scan/constants.d.ts.map +1 -1
  104. package/dist/scan/constants.js +8 -4
  105. package/dist/scan/constants.js.map +1 -1
  106. package/dist/scan/file-kind.d.ts +1 -1
  107. package/dist/scan/file-kind.d.ts.map +1 -1
  108. package/dist/scan/file-kind.js +11 -11
  109. package/dist/scan/file-kind.js.map +1 -1
  110. package/dist/scan/fingerprint-package-lint.d.ts +3 -1
  111. package/dist/scan/fingerprint-package-lint.d.ts.map +1 -1
  112. package/dist/scan/fingerprint-package-lint.js +14 -12
  113. package/dist/scan/fingerprint-package-lint.js.map +1 -1
  114. package/dist/scan/fingerprint-package-loader.d.ts +7 -3
  115. package/dist/scan/fingerprint-package-loader.d.ts.map +1 -1
  116. package/dist/scan/fingerprint-package-loader.js +10 -6
  117. package/dist/scan/fingerprint-package-loader.js.map +1 -1
  118. package/dist/scan/fingerprint-package.d.ts +30 -14
  119. package/dist/scan/fingerprint-package.d.ts.map +1 -1
  120. package/dist/scan/fingerprint-package.js +17 -9
  121. package/dist/scan/fingerprint-package.js.map +1 -1
  122. package/dist/scan/index.d.ts +3 -1
  123. package/dist/scan/index.d.ts.map +1 -1
  124. package/dist/scan/index.js +3 -1
  125. package/dist/scan/index.js.map +1 -1
  126. package/dist/scan/tarball.d.ts +2 -2
  127. package/dist/scan/tarball.js +3 -3
  128. package/dist/scan/tarball.js.map +1 -1
  129. package/dist/scan/templates.d.ts +1 -1
  130. package/dist/scan/templates.d.ts.map +1 -1
  131. package/dist/scan/templates.js +15 -11
  132. package/dist/scan/templates.js.map +1 -1
  133. package/dist/skill-bundle/SKILL.md +39 -31
  134. package/dist/skill-bundle/references/adapting-a-starter.md +11 -11
  135. package/dist/skill-bundle/references/authoring-scenarios.md +33 -30
  136. package/dist/skill-bundle/references/blocks.md +19 -20
  137. package/dist/skill-bundle/references/brief.md +13 -11
  138. package/dist/skill-bundle/references/capture.md +65 -37
  139. package/dist/skill-bundle/references/concrete-tiers.md +7 -7
  140. package/dist/skill-bundle/references/distill.md +204 -0
  141. package/dist/skill-bundle/references/making.md +113 -0
  142. package/dist/skill-bundle/references/recall.md +11 -7
  143. package/dist/skill-bundle/references/schema.md +16 -12
  144. package/dist/skill-bundle/references/self-check.md +12 -12
  145. package/dist/skill-bundle/references/steering-audit.md +19 -9
  146. package/package.json +7 -3
@@ -1,18 +1,18 @@
1
1
  import { parseCheckMarkdown } from "./parse.js";
2
2
  /**
3
- * Parse a well-formed Ghost check into a typed document. Assumes the input has
3
+ * Parse a well-formed ghost check into a typed document. Assumes the input has
4
4
  * already passed `lintGhostCheck` (throws on missing required frontmatter).
5
5
  */
6
6
  export function loadGhostCheck(raw) {
7
7
  const { frontmatter, body } = parseCheckMarkdown(raw);
8
8
  if (frontmatter === null) {
9
- throw new Error("Ghost check is missing a YAML frontmatter block.");
9
+ throw new Error("ghost check is missing a YAML frontmatter block.");
10
10
  }
11
11
  const name = frontmatter.name;
12
12
  const description = frontmatter.description;
13
13
  const severity = frontmatter.severity;
14
14
  if (typeof name !== "string" || typeof description !== "string") {
15
- throw new Error("Ghost check frontmatter is missing name or description.");
15
+ throw new Error("ghost check frontmatter is missing name or description.");
16
16
  }
17
17
  const tools = Array.isArray(frontmatter.tools)
18
18
  ? frontmatter.tools.filter((tool) => typeof tool === "string")
@@ -3,9 +3,9 @@ export declare const GHOST_CHECK_SCHEMA: "ghost.check/v1";
3
3
  export declare const GHOST_CHECK_SEVERITIES: readonly ["high", "medium", "low"];
4
4
  export type GhostCheckMarkdownSeverity = (typeof GHOST_CHECK_SEVERITIES)[number];
5
5
  /**
6
- * A Ghost check: markdown + frontmatter, evaluated by an agent — never run by
7
- * Ghost. Shape-compatible with the established `.agents/checks` format, plus the
8
- * Ghost addition `source:` (the fingerprint prose the check enforces). Every
6
+ * A ghost check: markdown + frontmatter, evaluated by an agent — never run by
7
+ * ghost. Shape-compatible with the established `.agents/checks` format, plus the
8
+ * ghost addition `source:` (the fingerprint prose the check enforces). Every
9
9
  * check is offered to the reviewer; the agent judges relevance.
10
10
  */
11
11
  export interface GhostCheckFrontmatter {
@@ -5,9 +5,15 @@ export { hasGlobMagic, matchesGlob, normalizeGlobPath } from "./glob.js";
5
5
  export { type GhostGlossaryDocument, GhostGlossaryFrontmatterSchema, type GhostGlossaryKind, type GhostGlossaryParseResult, parseGlossary, } from "./glossary.js";
6
6
  export { type ExpandedLocalMaterialLocator, expandLocalMaterialLocator, listBundledMaterialFiles, type MaterialTransportOptions, type MaterialTransportResult, materialLocatorClaimsPath, resolveLocalMaterialLocator, type TransportedMaterial, type TransportedMaterialTier, transportMaterials, } from "./material-transport.js";
7
7
  export { type ClassifiedGhostMaterialLocator, classifyMaterialLocator, type GhostMaterialLocatorKind, validateMaterialLocator, } from "./materials.js";
8
- export { carriesConcreteMaterial, extractSkeletonFences, extractSkeletonSections, type FencedBlock, GHOST_NODE_SCHEMA, type GhostNodeDocument, type GhostNodeFrontmatter, GhostNodeFrontmatterSchema, type GhostNodeLintIssue, type GhostNodeLintReport, type GhostNodeLintSeverity, lintGhostNode, NodeIdSchema, NodeRefSchema, type ParseNodeResult, parseNode, type SkeletonSection, serializeNode, stripSkeletonSections, } from "./node/index.js";
9
- export type { GhostFingerprintPackageManifest } from "./package-manifest.js";
10
- export { GHOST_FINGERPRINT_PACKAGE_SCHEMA, GhostFingerprintPackageManifestSchema, } from "./package-manifest.js";
8
+ export { carriesConcreteMaterial, extractSkeletonFences, extractSkeletonSections, type FencedBlock, GHOST_NODE_SCHEMA, type GhostNodeDocument, type GhostNodeFrontmatter, GhostNodeFrontmatterSchema, type GhostNodeLintIssue, type GhostNodeLintReport, type GhostNodeLintSeverity, hasSubstantialFencedExample, lintGhostNode, NodeIdSchema, NodeRefSchema, type ParseNodeResult, parseNode, type SkeletonSection, serializeNode, stripSkeletonSections, } from "./node/index.js";
9
+ export type {
10
+ /** @deprecated Use `GhostPackageManifest`. */
11
+ GhostFingerprintPackageManifest, GhostPackageManifest, } from "./package-manifest.js";
12
+ export {
13
+ /** @deprecated Use `GHOST_PACKAGE_SCHEMA`. */
14
+ GHOST_FINGERPRINT_PACKAGE_SCHEMA, GHOST_PACKAGE_SCHEMA,
15
+ /** @deprecated Use `GhostPackageManifestSchema`. */
16
+ GhostFingerprintPackageManifestSchema, GhostPackageManifestSchema, } from "./package-manifest.js";
11
17
  export type { SkillBundleFile } from "./skill-bundle-loader.js";
12
18
  export { loadSkillBundle } from "./skill-bundle-loader.js";
13
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ghost-core/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,oBAAoB,EACzB,eAAe,EACf,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,cAAc,EACd,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEzE,OAAO,EACL,KAAK,qBAAqB,EAC1B,8BAA8B,EAC9B,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,4BAA4B,EACjC,0BAA0B,EAC1B,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,KAAK,8BAA8B,EACnC,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,WAAW,EAChB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,aAAa,EACb,YAAY,EACZ,aAAa,EACb,KAAK,eAAe,EACpB,SAAS,EACT,KAAK,eAAe,EACpB,aAAa,EACb,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EACL,gCAAgC,EAChC,qCAAqC,GACtC,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ghost-core/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,oBAAoB,EACzB,eAAe,EACf,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,cAAc,EACd,cAAc,EACd,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEzE,OAAO,EACL,KAAK,qBAAqB,EAC1B,8BAA8B,EAC9B,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,4BAA4B,EACjC,0BAA0B,EAC1B,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,yBAAyB,EACzB,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,KAAK,8BAA8B,EACnC,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,WAAW,EAChB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,2BAA2B,EAC3B,aAAa,EACb,YAAY,EACZ,aAAa,EACb,KAAK,eAAe,EACpB,SAAS,EACT,KAAK,eAAe,EACpB,aAAa,EACb,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,YAAY;AACV,8CAA8C;AAC9C,+BAA+B,EAC/B,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO;AACL,8CAA8C;AAC9C,gCAAgC,EAChC,oBAAoB;AACpB,oDAAoD;AACpD,qCAAqC,EACrC,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC"}
@@ -13,7 +13,11 @@ export { expandLocalMaterialLocator, listBundledMaterialFiles, materialLocatorCl
13
13
  // --- Materials (node locators) ---
14
14
  export { classifyMaterialLocator, validateMaterialLocator, } from "./materials.js";
15
15
  // --- Node (ghost.node/v1) — the markdown node artifact ---
16
- export { carriesConcreteMaterial, extractSkeletonFences, extractSkeletonSections, GHOST_NODE_SCHEMA, GhostNodeFrontmatterSchema, lintGhostNode, NodeIdSchema, NodeRefSchema, parseNode, serializeNode, stripSkeletonSections, } from "./node/index.js";
17
- export { GHOST_FINGERPRINT_PACKAGE_SCHEMA, GhostFingerprintPackageManifestSchema, } from "./package-manifest.js";
16
+ export { carriesConcreteMaterial, extractSkeletonFences, extractSkeletonSections, GHOST_NODE_SCHEMA, GhostNodeFrontmatterSchema, hasSubstantialFencedExample, lintGhostNode, NodeIdSchema, NodeRefSchema, parseNode, serializeNode, stripSkeletonSections, } from "./node/index.js";
17
+ export {
18
+ /** @deprecated Use `GHOST_PACKAGE_SCHEMA`. */
19
+ GHOST_FINGERPRINT_PACKAGE_SCHEMA, GHOST_PACKAGE_SCHEMA,
20
+ /** @deprecated Use `GhostPackageManifestSchema`. */
21
+ GhostFingerprintPackageManifestSchema, GhostPackageManifestSchema, } from "./package-manifest.js";
18
22
  export { loadSkillBundle } from "./skill-bundle-loader.js";
19
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ghost-core/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,wDAAwD;AACxD,OAAO,EAEL,eAAe,EACf,gBAAgB,EAEhB,UAAU,GAIX,MAAM,oBAAoB,CAAC;AAC5B,oEAAoE;AACpE,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EAOtB,cAAc,EACd,cAAc,EAGd,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,iCAAiC;AACjC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/C,iDAAiD;AACjD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACzE,0DAA0D;AAC1D,OAAO,EAEL,8BAA8B,EAG9B,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,0BAA0B,EAC1B,wBAAwB,EAGxB,yBAAyB,EACzB,2BAA2B,EAG3B,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,oCAAoC;AACpC,OAAO,EAEL,uBAAuB,EAEvB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,4DAA4D;AAC5D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EAEvB,iBAAiB,EAGjB,0BAA0B,EAI1B,aAAa,EACb,YAAY,EACZ,aAAa,EAEb,SAAS,EAET,aAAa,EACb,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,gCAAgC,EAChC,qCAAqC,GACtC,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ghost-core/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,wDAAwD;AACxD,OAAO,EAEL,eAAe,EACf,gBAAgB,EAEhB,UAAU,GAIX,MAAM,oBAAoB,CAAC;AAC5B,oEAAoE;AACpE,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EAOtB,cAAc,EACd,cAAc,EAGd,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,iCAAiC;AACjC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/C,iDAAiD;AACjD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACzE,0DAA0D;AAC1D,OAAO,EAEL,8BAA8B,EAG9B,aAAa,GACd,MAAM,eAAe,CAAC;AACvB,OAAO,EAEL,0BAA0B,EAC1B,wBAAwB,EAGxB,yBAAyB,EACzB,2BAA2B,EAG3B,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,oCAAoC;AACpC,OAAO,EAEL,uBAAuB,EAEvB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,4DAA4D;AAC5D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EAEvB,iBAAiB,EAGjB,0BAA0B,EAI1B,2BAA2B,EAC3B,aAAa,EACb,YAAY,EACZ,aAAa,EAEb,SAAS,EAET,aAAa,EACb,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAOzB,OAAO;AACL,8CAA8C;AAC9C,gCAAgC,EAChC,oBAAoB;AACpB,oDAAoD;AACpD,qCAAqC,EACrC,0BAA0B,GAC3B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC"}
@@ -8,7 +8,7 @@ export interface ParsedMarkdown {
8
8
  * `---\n<yaml>\n---\n<body>`. Returns `frontmatter: null` when there is no
9
9
  * leading frontmatter block (callers report it as an error).
10
10
  *
11
- * Shared by every Ghost markdown+frontmatter artifact (checks, nodes): one
11
+ * Shared by every ghost markdown+frontmatter artifact (checks, nodes): one
12
12
  * envelope, one splitter.
13
13
  */
14
14
  export declare function splitMarkdownFrontmatter(raw: string): ParsedMarkdown;
@@ -4,7 +4,7 @@ import { parse as parseYaml } from "yaml";
4
4
  * `---\n<yaml>\n---\n<body>`. Returns `frontmatter: null` when there is no
5
5
  * leading frontmatter block (callers report it as an error).
6
6
  *
7
- * Shared by every Ghost markdown+frontmatter artifact (checks, nodes): one
7
+ * Shared by every ghost markdown+frontmatter artifact (checks, nodes): one
8
8
  * envelope, one splitter.
9
9
  */
10
10
  export function splitMarkdownFrontmatter(raw) {
@@ -6,6 +6,6 @@
6
6
  export { lintGhostNode, type ParseNodeResult, parseNode } from "./parse.js";
7
7
  export { GhostNodeFrontmatterSchema, NodeIdSchema, NodeRefSchema, } from "./schema.js";
8
8
  export { serializeNode } from "./serialize.js";
9
- export { carriesConcreteMaterial, extractSkeletonFences, extractSkeletonSections, type FencedBlock, hasThreeLineFence, type SkeletonSection, stripSkeletonSections, } from "./steering.js";
9
+ export { carriesConcreteMaterial, extractSkeletonFences, extractSkeletonSections, type FencedBlock, hasSubstantialFencedExample, hasThreeLineFence, type SkeletonSection, stripSkeletonSections, } from "./steering.js";
10
10
  export { GHOST_NODE_SCHEMA, type GhostNodeDocument, type GhostNodeFrontmatter, type GhostNodeLintIssue, type GhostNodeLintReport, type GhostNodeLintSeverity, } from "./types.js";
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/node/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,WAAW,EAChB,iBAAiB,EACjB,KAAK,eAAe,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/node/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,WAAW,EAChB,2BAA2B,EAC3B,iBAAiB,EACjB,KAAK,eAAe,EACpB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC"}
@@ -6,6 +6,6 @@
6
6
  export { lintGhostNode, parseNode } from "./parse.js";
7
7
  export { GhostNodeFrontmatterSchema, NodeIdSchema, NodeRefSchema, } from "./schema.js";
8
8
  export { serializeNode } from "./serialize.js";
9
- export { carriesConcreteMaterial, extractSkeletonFences, extractSkeletonSections, hasThreeLineFence, stripSkeletonSections, } from "./steering.js";
9
+ export { carriesConcreteMaterial, extractSkeletonFences, extractSkeletonSections, hasSubstantialFencedExample, hasThreeLineFence, stripSkeletonSections, } from "./steering.js";
10
10
  export { GHOST_NODE_SCHEMA, } from "./types.js";
11
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ghost-core/node/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAwB,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EAEvB,iBAAiB,EAEjB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,GAMlB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ghost-core/node/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAwB,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,uBAAuB,EAEvB,2BAA2B,EAC3B,iBAAiB,EAEjB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,iBAAiB,GAMlB,MAAM,YAAY,CAAC"}
@@ -42,7 +42,7 @@ export const GhostNodeFrontmatterSchema = z
42
42
  .optional(),
43
43
  })
44
44
  // Passthrough, not strict: authors may add free-form descriptive keys
45
- // (e.g. `audience`, `stage`) that describe what the node is. Ghost does not
45
+ // (e.g. `audience`, `stage`) that describe what the node is. ghost does not
46
46
  // gate on them — they ride along as part of the node's descriptive surface.
47
47
  .passthrough();
48
48
  export { NodeIdSchema, NodeRefSchema };
@@ -1,10 +1,11 @@
1
1
  import type { GhostNodeDocument, GhostNodeFrontmatter } from "./types.js";
2
2
  /**
3
- * Serialize a node back to its `---\n<yaml>\n---\n<body>` markdown form. Keys
4
- * are emitted in a stable order (description, materials) so round-trips and
5
- * diffs are deterministic. Identity and kind are not serialized they come from the
6
- * node's file path and optional filename prefix. Undefined fields are omitted; a node
7
- * with no frontmatter fields emits an empty block.
3
+ * Serialize a node back to its `---\n<yaml>\n---\n<body>` markdown form. Known
4
+ * keys are emitted first in a stable order (description, materials), followed
5
+ * by any free-form descriptive keys in alphabetical order so round-trips and
6
+ * diffs are deterministic. Identity and kind are not serialized they come
7
+ * from the node's file path and optional filename prefix. Undefined fields are
8
+ * omitted; a node with no frontmatter fields emits an empty block.
8
9
  */
9
10
  export declare function serializeNode(node: GhostNodeDocument): string;
10
11
  export type { GhostNodeFrontmatter };
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/node/serialize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CAa7D;AAED,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/node/serialize.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAQ1E;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,CA0B7D;AAED,YAAY,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,18 +1,34 @@
1
1
  import { stringify as stringifyYaml } from "yaml";
2
+ const FRONTMATTER_KEY_ORDER = ["description", "materials"];
3
+ function shouldSerializeFrontmatterValue(value) {
4
+ return value !== undefined;
5
+ }
2
6
  /**
3
- * Serialize a node back to its `---\n<yaml>\n---\n<body>` markdown form. Keys
4
- * are emitted in a stable order (description, materials) so round-trips and
5
- * diffs are deterministic. Identity and kind are not serialized they come from the
6
- * node's file path and optional filename prefix. Undefined fields are omitted; a node
7
- * with no frontmatter fields emits an empty block.
7
+ * Serialize a node back to its `---\n<yaml>\n---\n<body>` markdown form. Known
8
+ * keys are emitted first in a stable order (description, materials), followed
9
+ * by any free-form descriptive keys in alphabetical order so round-trips and
10
+ * diffs are deterministic. Identity and kind are not serialized they come
11
+ * from the node's file path and optional filename prefix. Undefined fields are
12
+ * omitted; a node with no frontmatter fields emits an empty block.
8
13
  */
9
14
  export function serializeNode(node) {
10
15
  const fm = node.frontmatter;
11
16
  const ordered = {};
12
- if (fm.description !== undefined)
13
- ordered.description = fm.description;
14
- if (fm.materials !== undefined)
15
- ordered.materials = fm.materials;
17
+ const emitted = new Set();
18
+ for (const key of FRONTMATTER_KEY_ORDER) {
19
+ const value = fm[key];
20
+ if (shouldSerializeFrontmatterValue(value)) {
21
+ ordered[key] = value;
22
+ emitted.add(key);
23
+ }
24
+ }
25
+ for (const key of Object.keys(fm).sort()) {
26
+ if (emitted.has(key))
27
+ continue;
28
+ const value = fm[key];
29
+ if (shouldSerializeFrontmatterValue(value))
30
+ ordered[key] = value;
31
+ }
16
32
  // An empty frontmatter object stringifies to "{}"; emit a bare block instead.
17
33
  const yaml = Object.keys(ordered).length === 0
18
34
  ? ""
@@ -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;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,IAAuB;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;IAC5B,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,IAAI,EAAE,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;IACvE,IAAI,EAAE,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;IAEjE,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"}
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,aAAa,EAAE,WAAW,CAAU,CAAC;AAEpE,SAAS,+BAA+B,CAAC,KAAc;IACrD,OAAO,KAAK,KAAK,SAAS,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAuB;IACnD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAsC,CAAC;IACvD,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,EAAE,CAAC,GAAG,CAAC,CAAC;QACtB,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,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QACtB,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"}
@@ -11,6 +11,7 @@ export declare function carriesConcreteMaterial(input: {
11
11
  materials?: string[];
12
12
  body: string;
13
13
  }): boolean;
14
+ export declare function hasSubstantialFencedExample(body: string): boolean;
14
15
  export declare function hasThreeLineFence(body: string): boolean;
15
16
  export declare function extractSkeletonSections(body: string): SkeletonSection[];
16
17
  export declare function extractSkeletonFences(body: string): FencedBlock[];
@@ -1 +1 @@
1
- {"version":3,"file":"steering.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/node/steering.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAMV;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKvD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CASvE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc1D"}
1
+ {"version":3,"file":"steering.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/node/steering.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,GAAG,OAAO,CAMV;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKvD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CASvE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAEjE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc1D"}
@@ -2,9 +2,12 @@ const FENCED_BLOCK_PATTERN = /(^|\n)(`{3,}|~{3,})[^\n]*\n([\s\S]*?)\n\2[ \t]*(?=
2
2
  const SKELETON_HEADING_PATTERN = /^##[ \t]+Skeleton[ \t]*$/gim;
3
3
  export function carriesConcreteMaterial(input) {
4
4
  return ((input.materials?.length ?? 0) > 0 ||
5
- hasThreeLineFence(input.body) ||
5
+ hasSubstantialFencedExample(input.body) ||
6
6
  extractSkeletonSections(input.body).length > 0);
7
7
  }
8
+ export function hasSubstantialFencedExample(body) {
9
+ return hasThreeLineFence(stripSkeletonSections(body));
10
+ }
8
11
  export function hasThreeLineFence(body) {
9
12
  for (const block of extractFencedBlocks(body)) {
10
13
  if (block.content.split(/\r?\n/).length >= 3)
@@ -1 +1 @@
1
- {"version":3,"file":"steering.js","sourceRoot":"","sources":["../../../src/ghost-core/node/steering.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"steering.js","sourceRoot":"","sources":["../../../src/ghost-core/node/steering.ts"],"names":[],"mappings":"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"}
@@ -6,16 +6,17 @@ export declare const GHOST_NODE_SCHEMA: "ghost.node/v1";
6
6
  * why / with-what / how-assembled are drafting prompts, never fields.
7
7
  */
8
8
  export interface GhostNodeFrontmatter {
9
+ /** Free-form descriptive properties parsed from node frontmatter. */
10
+ [key: string]: unknown;
9
11
  /**
10
- * One-line statement of what this node is and when to gather it — the
11
- * retrieval payload. Together with the node's id (its path) it is how an
12
- * agent selects a node, exactly like a tool's name + description. The body is
13
- * the node's "implementation"; the description is what makes it discoverable.
12
+ * Retrieval payload shown by gather: what the node governs, the observable
13
+ * condition under which it applies, and what it contributes where useful.
14
+ * Together with the node's id, it is how an agent decides applicability.
14
15
  * Optional, but strongly encouraged on any node worth anchoring a task at.
15
16
  */
16
17
  description?: string;
17
18
  /**
18
- * Optional locators for the concrete materials this truth is about: repo-relative
19
+ * Optional locators for the concrete materials this guidance is about: repo-relative
19
20
  * paths/globs and absolute https URLs. Guidance stays in prose; this list is
20
21
  * only where the agent or review harness can find the material.
21
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ghost-core/node/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,EAAG,eAAwB,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;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,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;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;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,19 +1,29 @@
1
1
  import { z } from "zod";
2
+ /** Schema emitted for newly initialized `.ghost/` packages. */
3
+ export declare const GHOST_PACKAGE_SCHEMA: "ghost.package/v1";
4
+ /** @deprecated Accepted for packages created before `ghost.package/v1`. */
2
5
  export declare const GHOST_FINGERPRINT_PACKAGE_SCHEMA: "ghost.fingerprint-package/v1";
3
- /** `manifest.yml` anchors a `.ghost/` package. */
4
- export declare const GhostFingerprintPackageManifestSchema: z.ZodObject<{
6
+ /** `manifest.yml` schema for a `.ghost/` package, including the legacy id. */
7
+ export declare const GhostPackageManifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
8
+ id: z.ZodString;
9
+ cover: z.ZodOptional<z.ZodString>;
10
+ schema: z.ZodLiteral<"ghost.package/v1">;
11
+ }, z.core.$strict>, z.ZodObject<{
12
+ id: z.ZodString;
13
+ cover: z.ZodOptional<z.ZodString>;
5
14
  schema: z.ZodLiteral<"ghost.fingerprint-package/v1">;
15
+ }, z.core.$strict>], "schema">;
16
+ export type GhostPackageManifest = z.infer<typeof GhostPackageManifestSchema>;
17
+ /** @deprecated Use `GhostPackageManifestSchema`. */
18
+ export declare const GhostFingerprintPackageManifestSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
6
19
  id: z.ZodString;
7
20
  cover: z.ZodOptional<z.ZodString>;
8
- }, z.core.$strict>;
9
- export interface GhostFingerprintPackageManifest {
10
- schema: typeof GHOST_FINGERPRINT_PACKAGE_SCHEMA;
11
- id: string;
12
- /**
13
- * Optional id of the cover node: the one node gather inlines above the menu on
14
- * every invocation. Guaranteed presence for content selection cannot retrieve
15
- * essence, temperature, brand-level refusals.
16
- */
17
- cover?: string;
18
- }
21
+ schema: z.ZodLiteral<"ghost.package/v1">;
22
+ }, z.core.$strict>, z.ZodObject<{
23
+ id: z.ZodString;
24
+ cover: z.ZodOptional<z.ZodString>;
25
+ schema: z.ZodLiteral<"ghost.fingerprint-package/v1">;
26
+ }, z.core.$strict>], "schema">;
27
+ /** @deprecated Use `GhostPackageManifest`. */
28
+ export type GhostFingerprintPackageManifest = GhostPackageManifest;
19
29
  //# sourceMappingURL=package-manifest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-manifest.d.ts","sourceRoot":"","sources":["../../src/ghost-core/package-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,gCAAgC,EAC3C,8BAAuC,CAAC;AAe1C,oDAAoD;AACpD,eAAO,MAAM,qCAAqC;;;;kBAWvC,CAAC;AAEZ,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,OAAO,gCAAgC,CAAC;IAChD,EAAE,EAAE,MAAM,CAAC;IACX;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"package-manifest.d.ts","sourceRoot":"","sources":["../../src/ghost-core/package-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,EAAG,kBAA2B,CAAC;AAEhE,2EAA2E;AAC3E,eAAO,MAAM,gCAAgC,EAC3C,8BAAuC,CAAC;AAyB1C,8EAA8E;AAC9E,eAAO,MAAM,0BAA0B;;;;;;;;8BAUrC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,oDAAoD;AACpD,eAAO,MAAM,qCAAqC;;;;;;;;8BAA6B,CAAC;AAEhF,8CAA8C;AAC9C,MAAM,MAAM,+BAA+B,GAAG,oBAAoB,CAAC"}
@@ -1,4 +1,7 @@
1
1
  import { z } from "zod";
2
+ /** Schema emitted for newly initialized `.ghost/` packages. */
3
+ export const GHOST_PACKAGE_SCHEMA = "ghost.package/v1";
4
+ /** @deprecated Accepted for packages created before `ghost.package/v1`. */
2
5
  export const GHOST_FINGERPRINT_PACKAGE_SCHEMA = "ghost.fingerprint-package/v1";
3
6
  const SlugIdSchema = z
4
7
  .string()
@@ -8,17 +11,27 @@ const NodeIdSchema = z
8
11
  .string()
9
12
  .min(1)
10
13
  .regex(/^[a-z0-9][a-z0-9./_-]*$/, "cover must be a node id");
11
- /** `manifest.yml` anchors a `.ghost/` package. */
12
- export const GhostFingerprintPackageManifestSchema = z
13
- .object({
14
- schema: z.literal(GHOST_FINGERPRINT_PACKAGE_SCHEMA),
14
+ const ManifestFields = {
15
15
  id: SlugIdSchema,
16
16
  /**
17
17
  * Optional id of the cover node: the one node gather inlines above the menu
18
18
  * on every invocation. Guaranteed presence for content selection cannot
19
- * retrieve essence, temperature, brand-level refusals.
19
+ * retrieve: essence, temperature, and brand-level refusals.
20
20
  */
21
21
  cover: NodeIdSchema.optional(),
22
- })
23
- .strict();
22
+ };
23
+ /** `manifest.yml` schema for a `.ghost/` package, including the legacy id. */
24
+ export const GhostPackageManifestSchema = z.discriminatedUnion("schema", [
25
+ z
26
+ .object({ schema: z.literal(GHOST_PACKAGE_SCHEMA), ...ManifestFields })
27
+ .strict(),
28
+ z
29
+ .object({
30
+ schema: z.literal(GHOST_FINGERPRINT_PACKAGE_SCHEMA),
31
+ ...ManifestFields,
32
+ })
33
+ .strict(),
34
+ ]);
35
+ /** @deprecated Use `GhostPackageManifestSchema`. */
36
+ export const GhostFingerprintPackageManifestSchema = GhostPackageManifestSchema;
24
37
  //# sourceMappingURL=package-manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-manifest.js","sourceRoot":"","sources":["../../src/ghost-core/package-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,gCAAgC,GAC3C,8BAAuC,CAAC;AAE1C,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,KAAK,CACJ,wBAAwB,EACxB,uDAAuD,CACxD,CAAC;AAEJ,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,KAAK,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAC;AAE/D,oDAAoD;AACpD,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC;KACnD,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC;IACnD,EAAE,EAAE,YAAY;IAChB;;;;OAIG;IACH,KAAK,EAAE,YAAY,CAAC,QAAQ,EAAE;CAC/B,CAAC;KACD,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"package-manifest.js","sourceRoot":"","sources":["../../src/ghost-core/package-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+DAA+D;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAA2B,CAAC;AAEhE,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gCAAgC,GAC3C,8BAAuC,CAAC;AAE1C,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,KAAK,CACJ,wBAAwB,EACxB,uDAAuD,CACxD,CAAC;AAEJ,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,KAAK,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAC;AAE/D,MAAM,cAAc,GAAG;IACrB,EAAE,EAAE,YAAY;IAChB;;;;OAIG;IACH,KAAK,EAAE,YAAY,CAAC,QAAQ,EAAE;CAC/B,CAAC;AAEF,8EAA8E;AAC9E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE;IACvE,CAAC;SACE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC;SACtE,MAAM,EAAE;IACX,CAAC;SACE,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,gCAAgC,CAAC;QACnD,GAAG,cAAc;KAClB,CAAC;SACD,MAAM,EAAE;CACZ,CAAC,CAAC;AAIH,oDAAoD;AACpD,MAAM,CAAC,MAAM,qCAAqC,GAAG,0BAA0B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Generic loader for an agentskills.io-compatible skill bundle.
3
3
  *
4
- * Each tool in the Ghost monorepo (`ghost`, `ghost`, …) ships
4
+ * Each tool in the ghost monorepo (`ghost`, `ghost`, …) ships
5
5
  * its own skill bundle as real markdown under `src/skill-bundle/` and copies
6
6
  * it verbatim to `dist/skill-bundle/` at build time. This loader walks any
7
7
  * given root directory and returns a flat, deterministically ordered list of
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Generic loader for an agentskills.io-compatible skill bundle.
3
3
  *
4
- * Each tool in the Ghost monorepo (`ghost`, `ghost`, …) ships
4
+ * Each tool in the ghost monorepo (`ghost`, `ghost`, …) ships
5
5
  * its own skill bundle as real markdown under `src/skill-bundle/` and copies
6
6
  * it verbatim to `dist/skill-bundle/` at build time. This loader walks any
7
7
  * given root directory and returns a flat, deterministically ordered list of
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
+ /** @deprecated Use `ghostPackage` or `@design-intelligence/ghost/package`. */
1
2
  export * as fingerprint from "./fingerprint.js";
2
3
  export * as core from "./ghost-core/index.js";
3
- /** @deprecated Use `fingerprint` or `@design-intelligence/ghost/fingerprint`. */
4
+ export * as ghostPackage from "./package.js";
5
+ /** @deprecated Use `ghostPackage` or `@design-intelligence/ghost/package`. */
4
6
  export * as scan from "./scan/index.js";
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAC9C,iFAAiF;AACjF,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAC9C,OAAO,KAAK,YAAY,MAAM,cAAc,CAAC;AAC7C,8EAA8E;AAC9E,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
+ /** @deprecated Use `ghostPackage` or `@design-intelligence/ghost/package`. */
1
2
  export * as fingerprint from "./fingerprint.js";
2
3
  export * as core from "./ghost-core/index.js";
3
- /** @deprecated Use `fingerprint` or `@design-intelligence/ghost/fingerprint`. */
4
+ export * as ghostPackage from "./package.js";
5
+ /** @deprecated Use `ghostPackage` or `@design-intelligence/ghost/package`. */
4
6
  export * as scan from "./scan/index.js";
5
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAC9C,iFAAiF;AACjF,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAC9C,OAAO,KAAK,YAAY,MAAM,cAAc,CAAC;AAC7C,8EAA8E;AAC9E,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "The model's median defaults this fingerprint refuses — gather for any greenfield visual surface or first-draft copy. Each rule is reject→replace; delete lines your brand legitimately violates."
2
+ description: "The model's median defaults this package refuses — gather for any greenfield visual surface or first-draft copy. Each rule is reject→replace; delete lines your brand legitimately violates."
3
3
  ---
4
4
 
5
5
  This is the model's median, not your brand. Each rule is reject→replace.
@@ -17,16 +17,16 @@ verified at review, never steered in prose.
17
17
 
18
18
  ### Hover-lift
19
19
  Reject hover-lift (`translateY` + growing shadow) as the default interaction
20
- → confirm with color and background change at the fingerprint's fast
20
+ → confirm with color and background change at the package's fast
21
21
  duration. (measured: 341)
22
22
 
23
23
  ### Indigo accent
24
24
  Reject the indigo/blue/purple default accent (`#4f46e5`, `#2563eb`,
25
- `#8b5cf6` family; purple/violet hue 260–310) → the fingerprint's declared
25
+ `#8b5cf6` family; purple/violet hue 260–310) → the package's declared
26
26
  palette; absent one, monochrome plus a single functional accent.
27
27
 
28
28
  ### Dark theme
29
- Reject unprompted dark theme → the fingerprint's declared surface.
29
+ Reject unprompted dark theme → the package's declared surface.
30
30
  Dark-to-look-cool and light-to-be-safe are the same retreat from a decision.
31
31
  (measured: 271)
32
32
 
@@ -47,7 +47,7 @@ the ground.
47
47
 
48
48
  ### Glassmorphism
49
49
  Reject glassmorphism (decorative backdrop blur) → flat surfaces with real
50
- borders and the fingerprint's elevation tiers.
50
+ borders and the package's elevation tiers.
51
51
 
52
52
  ### Chat bubbles
53
53
  Reject chat bubbles with initials-circle avatars for assistant turns →
@@ -73,7 +73,7 @@ prominent metric showing real user data is fine.
73
73
 
74
74
  ### Every button primary
75
75
  Reject every button a primary button → one primary per view; the rest step
76
- down the fingerprint's emphasis ladder.
76
+ down the package's emphasis ladder.
77
77
 
78
78
  ### Eyebrow kicker
79
79
  Reject an eyebrow kicker on every section → at most one, where the register
@@ -25,7 +25,7 @@ Pruning a rule from `cliche.median` orphans its paired reference here —
25
25
 
26
26
  Flag `transform` with `translateY` inside a `:hover` rule on cards,
27
27
  buttons, or list items, especially paired with a shadow increase. Hover
28
- confirmation in this fingerprint is color and background change, not lift.
28
+ confirmation in this package is color and background change, not lift.
29
29
  (`cliche.median > Hover-lift`)
30
30
 
31
31
  Flag accent values in the indigo/blue/purple default family (`#4f46e5`,
@@ -1,9 +1,10 @@
1
1
  ---
2
- description: "The brand on one page — always in context; what this brand is, how it feels, and what only it refuses."
2
+ description: "The brand on one page; what this brand is, how it feels, and what only it refuses."
3
3
  ---
4
4
 
5
- This cover is unwritten. It is the one page always in an agent's context, so
6
- it carries only what cannot be retrieved by task: what this brand is about,
5
+ This cover is unwritten. ghost gather always places this page in an agent's
6
+ context; that is delivery status, not a claim that every sentence applies to
7
+ every task. Use it for what cannot be retrieved by task: what this brand is about,
7
8
  in one paragraph, in the brand's own voice. The temperature its words and
8
9
  motion share. And the refusals only this brand makes — not generic don'ts
9
10
  (those live in each foundation's misuse list, and the model's cliches live
@@ -34,6 +34,6 @@ checks at review.
34
34
  The cover node (`brand.md`, declared in the manifest) is the one page always
35
35
  in context: what the brand is, its temperature, and the refusals only it
36
36
  makes. The ghost skill's `adapting-a-starter` recipe is the procedure for
37
- growing this skeleton into a real fingerprint: write the cover, answer each
37
+ growing this skeleton into a real ghost package: write the cover, answer each
38
38
  chapter's open question, prune the cliches your chapters absorb, then add
39
39
  materials and refs.
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: "The model's median defaults this fingerprint refuses — gather for any greenfield visual surface or first-draft copy. Each rule is reject→replace; delete lines your brand legitimately violates."
2
+ description: "The model's median defaults this ghost package refuses — gather for any greenfield visual surface or first-draft copy. Each rule is reject→replace; delete lines your brand legitimately violates."
3
3
  ---
4
4
 
5
5
  This is the model's median, not your brand. Each rule is reject→replace.
@@ -17,16 +17,16 @@ verified at review, never steered in prose.
17
17
 
18
18
  ### Hover-lift
19
19
  Reject hover-lift (`translateY` + growing shadow) as the default interaction
20
- → confirm with color and background change at the fingerprint's fast
20
+ → confirm with color and background change at the package's fast
21
21
  duration. (measured: 341)
22
22
 
23
23
  ### Indigo accent
24
24
  Reject the indigo/blue/purple default accent (`#4f46e5`, `#2563eb`,
25
- `#8b5cf6` family; purple/violet hue 260–310) → the fingerprint's declared
25
+ `#8b5cf6` family; purple/violet hue 260–310) → the package's declared
26
26
  palette; absent one, monochrome plus a single functional accent.
27
27
 
28
28
  ### Dark theme
29
- Reject unprompted dark theme → the fingerprint's declared surface.
29
+ Reject unprompted dark theme → the package's declared surface.
30
30
  Dark-to-look-cool and light-to-be-safe are the same retreat from a decision.
31
31
  (measured: 271)
32
32
 
@@ -47,7 +47,7 @@ the ground.
47
47
 
48
48
  ### Glassmorphism
49
49
  Reject glassmorphism (decorative backdrop blur) → flat surfaces with real
50
- borders and the fingerprint's elevation tiers.
50
+ borders and the package's elevation tiers.
51
51
 
52
52
  ### Chat bubbles
53
53
  Reject chat bubbles with initials-circle avatars for assistant turns →
@@ -73,7 +73,7 @@ prominent metric showing real user data is fine.
73
73
 
74
74
  ### Every button primary
75
75
  Reject every button a primary button → one primary per view; the rest step
76
- down the fingerprint's emphasis ladder.
76
+ down the package's emphasis ladder.
77
77
 
78
78
  ### Eyebrow kicker
79
79
  Reject an eyebrow kicker on every section → at most one, where the register