Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .changeset/add-composition-pattern-steering.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": minor
"ghost-fingerprint": minor
---

Add composition-pattern steering so generated expressions and context bundles distinguish article, tracker, comparison, and card output shapes.
Add composition-pattern steering so generated fingerprints and context bundles distinguish article, tracker, comparison, and card output shapes.
16 changes: 8 additions & 8 deletions .changeset/add-survey-schema-and-merge.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
---
"ghost-expression": minor
"ghost-fingerprint": minor
---

Land the three-stage scan pipeline: map (`map.md`) → survey (`survey.json`) → express (`expression.md`). All three stages are now owned by `ghost-expression`; the previously separate `ghost-map` package is folded in.
Land the three-stage scan pipeline: map (`map.md`) → survey (`survey.json`) → express (`fingerprint.md`). All three stages are now owned by `ghost-fingerprint`; the previously separate `ghost-map` package is folded in.

**New artifact: `ghost.survey/v1`** — catalogues every concrete design value with structured specs, occurrence counts, and deterministic content-hashed IDs.

**New verbs:**
- `ghost-expression inventory [path]` — emit deterministic raw repo signals as JSON (manifests, language histogram, registry, top-level tree, git remote). Feeds the topology recipe. (Migrated from `ghost-map inventory`.)
- `ghost-expression survey <op>` — `merge` (concat with id-based dedup, idempotent — useful for modular rollups and fleet cohort views), `fix-ids` (recompute every row's `id` from content, so surveyor agents can author rows with empty `id` fields and finalize in one pass).
- `ghost-expression scan-status [dir]` — report which scan stages have produced artifacts (`map.md`, `survey.json`, `expression.md`) and which stage to run next. The build-system glue orchestrators call between stages.
- `ghost-fingerprint inventory [path]` — emit deterministic raw repo signals as JSON (manifests, language histogram, registry, top-level tree, git remote). Feeds the topology recipe. (Migrated from `ghost-map inventory`.)
- `ghost-fingerprint survey <op>` — `merge` (concat with id-based dedup, idempotent — useful for modular rollups and fleet cohort views), `fix-ids` (recompute every row's `id` from content, so surveyor agents can author rows with empty `id` fields and finalize in one pass).
- `ghost-fingerprint scan-status [dir]` — report which scan stages have produced artifacts (`map.md`, `survey.json`, `fingerprint.md`) and which stage to run next. The build-system glue orchestrators call between stages.

**Updated verbs:**
- `ghost-expression lint` now auto-detects file kind by extension/content and dispatches to the right validator (`expression.md`, `map.md`, or `survey.json`).
- `ghost-fingerprint lint` now auto-detects file kind by extension/content and dispatches to the right validator (`fingerprint.md`, `map.md`, or `survey.json`).

**New skill recipes:**
- `map.md` — author `map.md` from a target (the topology stage). Migrated from the standalone `ghost-map` package.
- `survey.md` — author `survey.json` from a target (the observed evidence stage). Walks the agent through LLM-driven extraction with dialect-specific grep strategies, exhaustiveness discipline, and saturation predicate.
- `scan.md` — meta-recipe that orchestrates map → survey → profile end-to-end via `scan-status` checkpoints. Use when the user wants a full scan rather than a specific stage.

**Refactored skill recipe:**
- `profile.md` — now strictly the expression stage. Reads `survey.json` as ground truth; cannot fabricate values not in the survey; cites survey rows as evidence. Pre-requires `map.md` + `survey.json`. Hard split from the previous one-pass extract+interpret recipe.
- `profile.md` — now strictly the fingerprint stage. Reads `survey.json` as ground truth; cannot fabricate values not in the survey; cites survey rows as evidence. Pre-requires `map.md` + `survey.json`. Hard split from the previous one-pass extract+interpret recipe.

**Removed:** the `ghost-map` package is deleted. `ghost.map/v1` schema and types now live in `@ghost/core`; `inventory` and `lint` (for `map.md`) move to `ghost-expression`. Consumers that imported from `ghost-map` should switch to `@ghost/core` (schemas/types) or `ghost-expression` (CLI verbs / library functions).
**Removed:** the `ghost-map` package is deleted. `ghost.map/v1` schema and types now live in `@ghost/core`; `inventory` and `lint` (for `map.md`) move to `ghost-fingerprint`. Consumers that imported from `ghost-map` should switch to `@ghost/core` (schemas/types) or `ghost-fingerprint` (CLI verbs / library functions).

Survey schema, deterministic-id generation, lint, merge, and fix-ids primitives live in `@ghost/core`.
4 changes: 2 additions & 2 deletions .changeset/add-survey-summary.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": minor
"ghost-fingerprint": minor
---

Add a bounded `ghost-expression survey summarize` digest for profiling large surveys without loading full raw evidence into agent context.
Add a bounded `ghost-fingerprint survey summarize` digest for profiling large surveys without loading full raw evidence into agent context.
4 changes: 2 additions & 2 deletions .changeset/add-verify-profile-gate.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": minor
"ghost-fingerprint": minor
---

Add a deterministic profile verification command that checks expression palette provenance and promoted check calibration against survey evidence.
Add a deterministic profile verification command that checks fingerprint palette provenance and promoted check calibration against survey evidence.
2 changes: 1 addition & 1 deletion .changeset/agent-led-framing.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
"ghost-drift": patch
"ghost-expression": patch
"ghost-fingerprint": patch
---

Reframe skill-bundle copy to lead with the agent and drift, not the deterministic CLI. Same architecture; clearer story when an agent loads the skill.
5 changes: 0 additions & 5 deletions .changeset/authored-expression-contract.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/authored-fingerprint-contract.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"ghost-fingerprint": major
---

Make fingerprint.md an authored-only contract, remove fragment-era on-disk embedding and check fields, add survey catalog, and expand profile verification.
4 changes: 2 additions & 2 deletions .changeset/canonical-decision-vocabulary.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": minor
"ghost-fingerprint": minor
---

Add a controlled vocabulary of 12 canonical decision dimensions (`color-strategy`, `surface-hierarchy`, `shape-language`, `typography-voice`, `spatial-system`, `density`, `motion`, `elevation`, `theming-architecture`, `interactive-patterns`, `token-architecture`, `font-sourcing`) so fleet-aggregation primitives can group decisions across members. Profile recipe nudges authors toward canonical slugs; novel project-flavored slugs may pair with an optional `dimension_kind` that maps to a canonical survey. New soft `non-canonical-dimension` lint warning suggests the closest canonical match. The schema accepts the optional `dimension_kind` field on `decisions[]`; existing expressions remain valid.
Add a controlled vocabulary of 12 canonical decision dimensions (`color-strategy`, `surface-hierarchy`, `shape-language`, `typography-voice`, `spatial-system`, `density`, `motion`, `elevation`, `theming-architecture`, `interactive-patterns`, `token-architecture`, `font-sourcing`) so fleet-aggregation primitives can group decisions across members. Profile recipe nudges authors toward canonical slugs; novel project-flavored slugs may pair with an optional `dimension_kind` that maps to a canonical survey. New soft `non-canonical-dimension` lint warning suggests the closest canonical match. The schema accepts the optional `dimension_kind` field on `decisions[]`; existing fingerprints remain valid.
2 changes: 1 addition & 1 deletion .changeset/clarify-agent-guidance.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
"ghost-drift": patch
"ghost-expression": patch
"ghost-fingerprint": patch
---

Clarifies agent-facing scan and drift guidance across docs and skill bundles.
2 changes: 1 addition & 1 deletion .changeset/drift-readme-post-decompose.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
"ghost-drift": patch
---

Rewrite README to reflect the five-tool decomposition: drift now lists five verbs (compare, ack, track, diverge, emit skill) and points users at `ghost-expression` for the moved authoring verbs (lint, describe, diff, emit review-command, emit context-bundle).
Rewrite README to reflect the five-tool decomposition: drift now lists five verbs (compare, ack, track, diverge, emit skill) and points users at `ghost-fingerprint` for the moved authoring verbs (lint, describe, diff, emit review-command, emit context-bundle).
4 changes: 2 additions & 2 deletions .changeset/drop-roles.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
"ghost-expression": major
"ghost-fingerprint": major
"ghost-drift": patch
---

Drop `roles[]` from the `expression.md` schema. Slot → token bindings either fall out of decisions[] (pattern consequences) or live in survey.json components[] (exhaustive catalog). The hybrid `roles[]` slot was filling neither role cleanly and didn't scale to systems with many components. Existing files that carry `roles:` will fail strict lint — drop the section to migrate. Drift skill recipes that referenced `roles[]` as part of the expression frontmatter have been updated.
Drop `roles[]` from the `fingerprint.md` schema. Slot → token bindings either fall out of decisions[] (pattern consequences) or live in survey.json components[] (exhaustive catalog). The hybrid `roles[]` slot was filling neither role cleanly and didn't scale to systems with many components. Existing files that carry `roles:` will fail strict lint — drop the section to migrate. Drift skill recipes that referenced `roles[]` as part of the fingerprint frontmatter have been updated.
5 changes: 0 additions & 5 deletions .changeset/expression-canonical-artifact.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/expression-signature-references-checks.md

This file was deleted.

5 changes: 0 additions & 5 deletions .changeset/extract-ghost-expression.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/extract-ghost-fingerprint.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"ghost-drift": major
---

Keep `ghost-drift` drift-only: authoring verbs and context emit live in `ghost-fingerprint`, `ghost-drift emit` only accepts `skill`, and drift no longer re-exports the fingerprint authoring API.
6 changes: 6 additions & 0 deletions .changeset/fingerprint-canonical-artifact.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"ghost-drift": major
"ghost-fingerprint": major
---

Rename Ghost's authored design-language artifact back to `fingerprint.md`, rename the authoring package and CLI to `ghost-fingerprint`, and remove the old expression APIs, filenames, and drift compatibility shims.
5 changes: 5 additions & 0 deletions .changeset/fingerprint-signature-references-checks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"ghost-fingerprint": major
---

Make `fingerprint.md` the generation and drift root by restoring first-class `# Signature`, adding direct `references` for living specs/components/examples, and using `checks[]` for promoted review gates.
4 changes: 2 additions & 2 deletions .changeset/fix-oklch-backfill-and-tighten-survey.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
---
"ghost-expression": patch
"ghost-fingerprint": patch
"ghost-drift": patch
---

Fix self-distance bug + tighten the survey recipe's exhaustiveness rule.

**Bug fix.** `loadExpression` now backfills `oklch` on palette colors that arrive hex-only (frontmatter without an explicit `oklch` tuple). Without this, `comparePalette` treated hex-only colors as fully unmatched and contributed distance `1.0` per color — even when comparing an expression to itself. Self-distance was reported as 17.5% on a freshly authored expression. Backfill is deterministic (same hex → same oklch), so re-parsing the same file always yields the same in-memory shape.
**Bug fix.** `loadFingerprint` now backfills `oklch` on palette colors that arrive hex-only (frontmatter without an explicit `oklch` tuple). Without this, `comparePalette` treated hex-only colors as fully unmatched and contributed distance `1.0` per color — even when comparing an fingerprint to itself. Self-distance was reported as 17.5% on a freshly authored fingerprint. Backfill is deterministic (same hex → same oklch), so re-parsing the same file always yields the same in-memory shape.

**Defensive fallback.** `comparePalette` also now resolves oklch on-the-fly when missing, and falls back to hex-string equality when even on-the-fly compute can't parse the color (CSS variables, opaque external refs). This covers third-party producers that don't backfill on write.

Expand Down
4 changes: 2 additions & 2 deletions .changeset/fix-profile-recipe-paths.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": patch
"ghost-fingerprint": patch
---

Fix the profile recipe — it now reads `design_system.paths` (the actual map.md frontmatter field) instead of the nonexistent `design_system.location`. The skill bundle ships under ghost-expression, so the broken recipe shipped to host agents.
Fix the profile recipe — it now reads `design_system.paths` (the actual map.md frontmatter field) instead of the nonexistent `design_system.location`. The skill bundle ships under ghost-fingerprint, so the broken recipe shipped to host agents.
2 changes: 1 addition & 1 deletion .changeset/fix-review-severity-counts.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": patch
"ghost-fingerprint": patch
---

Clarify emitted terminal context by reporting final review-command severity counts after escalation and naming lower-enforcement prompt context when no checks are promoted.
4 changes: 2 additions & 2 deletions .changeset/implemented-surface-evidence.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": major
"ghost-fingerprint": major
---

Upgrade scans to `ghost.map/v2` and `ghost.survey/v2`, requiring implemented UI surface evidence and using those surfaces to guide expression profiling.
Upgrade scans to `ghost.map/v2` and `ghost.survey/v2`, requiring implemented UI surface evidence and using those surfaces to guide fingerprint profiling.
5 changes: 0 additions & 5 deletions .changeset/initial-ghost-expression.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/initial-ghost-fingerprint.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"ghost-fingerprint": minor
---

Bootstrap `ghost-fingerprint` — Ghost's fingerprint.md authoring package. CLI verbs: `lint`, `describe`, `diff` (new — structural prose-level diff), and `emit <kind>` (kinds: review-command, context-bundle, skill). The skill bundle ships the map-aware `profile.md` recipe alongside the condensed schema reference. All four verbs are deterministic; profile is a recipe the host agent executes. Mirrors the BYOA contract that the rest of Ghost follows.
6 changes: 3 additions & 3 deletions .changeset/phase-4b-schema-enrichment.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
"ghost-expression": minor
"ghost-fingerprint": minor
---

`expression.md`: `surfaces.shadowComplexity` enum value `none` is renamed to `deliberate-none` so the choice reads as a positive design stance rather than as "we forgot." The `unused-palette` lint now also counts hex citations in `roles[]` (palette field bindings + inline references in `evidence` strings), so role-bound colors no longer require name-dropping in decision prose.
`fingerprint.md`: `surfaces.shadowComplexity` enum value `none` is renamed to `deliberate-none` so the choice reads as a positive design stance rather than as "we forgot." The `unused-palette` lint now also counts hex citations in `roles[]` (palette field bindings + inline references in `evidence` strings), so role-bound colors no longer require name-dropping in decision prose.

The `none` → `deliberate-none` change is breaking for any `expression.md` setting `shadowComplexity: none`. `ghost-expression` is pre-1.0 and not yet published, so no major bump; existing files should update their value.
The `none` → `deliberate-none` change is breaking for any `fingerprint.md` setting `shadowComplexity: none`. `ghost-fingerprint` is pre-1.0 and not yet published, so no major bump; existing files should update their value.
2 changes: 1 addition & 1 deletion .changeset/phase-4c-recipe-branching.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": patch
"ghost-fingerprint": patch
---

Branch the profile recipe by detected repo kind. The recipe now reads `design_system.token_source`, `composition.frameworks`, `registry`, and `platform` from `map.md` and chooses one of three sampling strategies — ui-library (default), token-pipeline (sample at layer level through YAML graph), or consumer-of-external-DS (record upstream slugs and override patterns instead of resolving to hex). Library-mode `feature_areas` guidance now distinguishes component categories from token-architecture layers. No schema changes.
6 changes: 3 additions & 3 deletions .changeset/phase-5-bugs-and-schema.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": minor
"ghost-fingerprint": minor
---

Phase 5 fixes and schema widening for real-world repo variety.
Expand All @@ -11,5 +11,5 @@ Bug fixes (5a):

Schema widenings (5b):

- `roles[].tokens.palette` is now an open record (`Record<string, string>`) instead of a fixed three-key object. Conventional vocabulary (`background`, `foreground`, `surface`, `border`, `accent`, `muted`, `link`) is documented in the schema reference and `expression-format.md`; richer slot names (`ring`, `popover`, `separator`, …) no longer hard-error.
- `broken-role-reference` accepts opaque external token refs (`{base.color.brand.x}`, `{semantic.text.on-brand}`, …) without trying to resolve them. Style-Dictionary-style consumer expressions can now bind role slots to upstream tokens without the linter rejecting them.
- `roles[].tokens.palette` is now an open record (`Record<string, string>`) instead of a fixed three-key object. Conventional vocabulary (`background`, `foreground`, `surface`, `border`, `accent`, `muted`, `link`) is documented in the schema reference and `fingerprint-format.md`; richer slot names (`ring`, `popover`, `separator`, …) no longer hard-error.
- `broken-role-reference` accepts opaque external token refs (`{base.color.brand.x}`, `{semantic.text.on-brand}`, …) without trying to resolve them. Style-Dictionary-style consumer fingerprints can now bind role slots to upstream tokens without the linter rejecting them.
2 changes: 1 addition & 1 deletion .changeset/rename-evidence-to-survey.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": major
"ghost-fingerprint": major
---

Rename the observed design evidence artifact to survey across the schema, CLI, public types, recipes, and generated scan artifacts.
2 changes: 1 addition & 1 deletion .changeset/source-graph-scans.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": minor
"ghost-fingerprint": minor
---

Scans can now declare a source graph: one primary subject supplies usage and salience while resolver sources supply concrete values for imported symbols, with survey rows preserving resolution provenance.
2 changes: 1 addition & 1 deletion .changeset/tailwind-class-atom-pass.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": minor
"ghost-fingerprint": minor
---

survey.md now requires a Tailwind class-atom pass for Tailwind targets — class atoms (`p-2`, `bg-orange-500`) get resolved to literals and recorded as survey rows alongside declared `@theme` tokens. Without it, surveys undercount the rendered spacing/typography/color scale because Tailwind synthesizes most of it from `--spacing` / `--text-*` / `--color-*` rather than declaring each step.
4 changes: 2 additions & 2 deletions .changeset/tighten-terminal-context.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
"ghost-expression": patch
"ghost-fingerprint": patch
---

Sharpen emitted generation and review context around promoted checks, and add advisory lint hints for under-curated expressions.
Sharpen emitted generation and review context around promoted checks, and add advisory lint hints for under-curated fingerprints.
5 changes: 0 additions & 5 deletions .changeset/update-drift-expression-recap.md

This file was deleted.

5 changes: 5 additions & 0 deletions .changeset/update-drift-fingerprint-recap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"ghost-drift": patch
---

Update the drift skill's fingerprint recap to reference Signature, direct references, and human-promoted checks.
Loading
Loading