Skip to content
Draft
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
5 changes: 5 additions & 0 deletions .changeset/one-road-remove-binding-and-nesting.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@anarchitecture/ghost": minor
---

Remove the path→surface binding (`ghost.binding/v1`, `.ghost.bind.yml`) and all nesting (fingerprint stacks, cross-package discovery): one contract per package, surfaces are the only locality. `checks` and `review` now take agent-stated `--surface <ids>` instead of resolving surfaces from a diff; `gather` takes only a surface or returns the menu. Removed `gather --path`, `checks --diff`, `lint --all`, `verify --all`, `scan --include-nested`, `emit --path`, `init --scope`, and `init --monorepo`. The agent names the touched surfaces; Ghost no longer infers intent from repo location.
94 changes: 15 additions & 79 deletions apps/docs/src/generated/cli-manifest.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"generatedAt": "2026-06-26T12:58:29.867Z",
"generatedAt": "2026-06-27T06:23:34.307Z",
"tools": [
{
"tool": "ghost",
Expand All @@ -21,14 +21,6 @@
"default": "cli",
"takesValue": true,
"negated": false
},
{
"rawName": "--all",
"name": "all",
"description": "Validate every nested fingerprint package and its resolved fingerprint stack",
"default": null,
"takesValue": false,
"negated": false
}
]
},
Expand All @@ -42,14 +34,6 @@
"compactName": "init",
"summary": "Create .ghost/ package facets.",
"options": [
{
"rawName": "--scope <path>",
"name": "scope",
"description": "Create a scoped <path>/.ghost fingerprint package",
"default": null,
"takesValue": true,
"negated": false
},
{
"rawName": "--package <dir>",
"name": "package",
Expand All @@ -66,22 +50,6 @@
"takesValue": true,
"negated": false
},
{
"rawName": "--monorepo",
"name": "monorepo",
"description": "Detect monorepo child package roots and propose scoped Ghost packages",
"default": null,
"takesValue": false,
"negated": false
},
{
"rawName": "--apply",
"name": "apply",
"description": "With --monorepo, create detected child scoped packages",
"default": null,
"takesValue": false,
"negated": false
},
{
"rawName": "--force",
"name": "force",
Expand Down Expand Up @@ -125,14 +93,6 @@
"default": "cli",
"takesValue": true,
"negated": false
},
{
"rawName": "--all",
"name": "all",
"description": "Verify every nested fingerprint package and its resolved fingerprint stack",
"default": null,
"takesValue": false,
"negated": false
}
]
},
Expand All @@ -146,14 +106,6 @@
"compactName": "scan",
"summary": "Report fingerprint contribution facets.",
"options": [
{
"rawName": "--include-nested",
"name": "includeNested",
"description": "Also list nested fingerprint packages and contribution state",
"default": null,
"takesValue": false,
"negated": false
},
{
"rawName": "--format <fmt>",
"name": "format",
Expand Down Expand Up @@ -185,18 +137,10 @@
"compactName": "emit",
"summary": "Emit review-command artifacts.",
"options": [
{
"rawName": "--path <path>",
"name": "path",
"description": "Resolve a nested fingerprint stack for this repo path",
"default": null,
"takesValue": true,
"negated": false
},
{
"rawName": "--package <dir>",
"name": "package",
"description": "Use exactly this fingerprint package directory instead of resolving a stack",
"description": "Use exactly this fingerprint package directory (default: ./.ghost)",
"default": null,
"takesValue": true,
"negated": false
Expand Down Expand Up @@ -489,14 +433,6 @@
"takesValue": true,
"negated": false
},
{
"rawName": "--path <file>",
"name": "path",
"description": "Resolve the surface that owns a repo path via its binding, then gather",
"default": null,
"takesValue": true,
"negated": false
},
{
"rawName": "--format <fmt>",
"name": "format",
Expand All @@ -511,24 +447,16 @@
"tool": "ghost",
"name": "checks",
"rawName": "checks",
"description": "Select the markdown checks (ghost.check/v1) relevant to a diff, routed by surface.",
"description": "Select the markdown checks (ghost.check/v1) relevant to the named surfaces.",
"group": "core",
"defaultHelp": true,
"compactName": "checks",
"summary": "Select and ground the checks relevant to a diff, by surface.",
"options": [
{
"rawName": "--base <ref>",
"name": "base",
"description": "Git ref to diff against (default: HEAD)",
"default": null,
"takesValue": true,
"negated": false
},
{
"rawName": "--diff <patch>",
"name": "diff",
"description": "Unified diff file to route instead of running git diff. Use '-' for stdin.",
"rawName": "--surface <ids>",
"name": "surface",
"description": "Surface id(s) the change touches (comma-separated or repeated). The agent names them.",
"default": null,
"takesValue": true,
"negated": false
Expand Down Expand Up @@ -652,7 +580,15 @@
{
"rawName": "--diff <patch>",
"name": "diff",
"description": "Unified diff file to review instead of running git diff. Use '-' for stdin.",
"description": "Unified diff file to embed in the review instead of running git diff. Use '-' for stdin.",
"default": null,
"takesValue": true,
"negated": false
},
{
"rawName": "--surface <ids>",
"name": "surface",
"description": "Surface id(s) the change touches (comma-separated or repeated). The agent names them.",
"default": null,
"takesValue": true,
"negated": false
Expand Down
34 changes: 34 additions & 0 deletions docs/ideas/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -173,3 +173,37 @@ buildable Layer 2 design. They agree; read them as a sequence.
package name resolved from `node_modules`; `ghost verify` checks the external
contract resolves and its bound surfaces exist. Resolution + validation only;
external fingerprint loading for grounding is deferred.
- `parked-survey-module.md` — a deliberate decision **not** to act: the
`ghost.survey/v1` module is isolated, works, and is unexposed, so it stays
parked. Removal is an excavation (compare/perceptual-prior may depend on survey
evidence), not a deletion — surfaced only if a concrete reason appears.
- `one-road.md` — a provocation turned decision: remove the binding
(`ghost.binding/v1`, path→surface, Cut D contract resolution) and drive
everything from the prompt. The agent already analyzes the whole repo, so it
states the touched surfaces; Ghost stops inferring intent from location. Four
outcomes collapse into one flow (prompt → menu → `gather <surface>`).
`checks`/`review` take agent-stated `--surface`; external contracts via
`gather --package`. Surface engine + nested-package discovery untouched.
Supersedes `surface-binding.md` / Phase 7a / `polish-cut-d-plan.md`.
- `contract-storage.md` — open exploration: the unexamined fork is **facet-first
vs. surface-first** storage, not "one giant yml." Storage is a projection too;
the loader (`assembleFingerprint`) is the only structural boundary that moves,
and the model + every read consumer are untouched. Surface-first colocates each
concept (a surface = a directory), makes `surface:` implicit-by-location
(inside the contract, not the repo), and mirrors the cascade with `core/` as
the cross-cutting home. Lands after one-road. Not decided.

- `context-graph.md` — the reframe that subsumes the storage question: Ghost is
a **curated, opinionated context graph** queried by traversal, not a
file/bucket layout. The substrate (markdown + frontmatter folding into a graph)
is an **OKF-family** convergence we adopt; our deliberate divergences — **typed
links (`under` / `relates`) and the `medium` tag** — are the value. The whole
vocabulary is three nouns (node, link, medium), two link kinds, one tag;
`intent`/`inventory`/`composition` are how the body is written, not types.
See `scenarios-worked.md` for these as fully fleshed-out fingerprints (real
node files, bodies, links, `gather` packets). Includes the full conformance
schema. See `graph-implementation-plan.md` for the sequenced build (grounded in
the current code: the loader seam, `resolveSurfaceSlice` = gather,
`surfaces.yml` = the tree). Includes five
stress-test scenarios (dashboard, monorepo, marketing, voice super app, and one
brand spanning all of them). Downstream of one-road; not decided.
Loading