+ {tool.blurb} +
+ + ))} +- {tool.description} -
- - ))} -map.md
+
+ excerpt
+
+
+
+ {"---\n"}
+ schema
+ : ghost.map/v1{"\n"}
+ id
+ : ghost{"\n"}
+ repo
+ : block/ghost{"\n"}
+ composition
+ :{"\n"}
+ {" frameworks:\n"}
+ {" - "}
+
+ {'{ name: react, version: "19" }'}
+ {"\n"}
+
+ {" styling:\n"}
+ {" - "}
+ tailwind{"\n"}
+ {" - "}
+ css-vars{"\n"}
+ registry
+ :{"\n"}
+ {" path: "}
+
+ packages/ghost-ui/registry.json{"\n"}
+
+ {" components: "}
+ 97{"\n"}
+ design_system
+ :{"\n"}
+ {" paths:\n"}
+ {" - "}
+
+ packages/ghost-ui/src/components{"\n"}
+
+ {" - "}
+
+ packages/ghost-ui/src/styles{"\n"}
+
+ {" entry_files:\n"}
+ {" - "}
+
+ packages/ghost-ui/src/styles/tokens.css{"\n"}
+
+ {" - "}
+
+ packages/ghost-ui/expression.md{"\n"}
+
+ ui_surface
+ :{"\n"}
+ {" include:\n"}
+ {" - "}
+
+ packages/ghost-ui/src/components/**{"\n"}
+
+ {" exclude:\n"}
+ {" - "}
+ "**/dist/**"{"\n"}
+ {" - "}
+
+ "**/node_modules/**"{"\n"}
+
+ {"---\n"}
+
+
+ - Crossing the threshold in March could have been noise. The{" "} - accepted stance in April said “yes, on purpose.” - The diverging stance in June said “we own this - now.” The curve hasn't changed shape — but the meaning of - every point after it has. + {playhead === null ? ( + <> + Crossing the threshold in March could have been noise. The{" "} + accepted stance in April said “yes, on + purpose.” The diverging stance in June said “we + own this now.” The curve hasn't changed shape — but the + meaning of every point after it has.{" "} + + Drag the chart to scrub a decision moment. + + > + ) : ( + <> + From{" "} + {points[playhead].t}{" "} + forward — {monthsAffected}{" "} + {monthsAffected === 1 ? "month" : "months"} re-classified as{" "} + {hypothesis}.{" "} + {hypothesis === "aligned" && + "A bug to fix on every point past the playhead."} + {hypothesis === "accepted" && + "Reviewed and OK — known, intentional drift."} + {hypothesis === "diverging" && + "This dimension is ours now; the parent no longer measures it."} + > + )}
ghost-map walks the project — manifests, language
+ histogram, component registry, styling system — and writes a{" "}
+ map.md at the repo root: a navigation card every other
+ Ghost tool reads.
+ + {l.desc} +
+
+ The map is short on purpose — pointers, not contents. It tells{" "}
+ ghost-expression which folders to read when profiling,
+ and tells ghost-fleet which surfaces to count when
+ aggregating. The success gate is ghost-map lint, which
+ validates against ghost.map/v1.
+
ghost-expression skill installed and ask it to{" "}
- profile this design language. The recipe walks the agent
- through your theme CSS, tailwind config, and component primitives,
- resolves variable chains, and writes a single{" "}
- expression.md at the repo root — YAML frontmatter for
- machines, Markdown body for humans.
+ With map.md in place, open the project in a host agent
+ with the ghost-expression skill installed and ask it to{" "}
+ profile this design language. The recipe follows the map to
+ your theme CSS, tailwind config, and component primitives, resolves
+ variable chains, and writes a single expression.md at the
+ repo root — YAML frontmatter for machines, Markdown body for humans.