diff --git a/dashboard-hero.png b/dashboard-hero.png new file mode 100644 index 0000000..470f1c9 Binary files /dev/null and b/dashboard-hero.png differ diff --git a/index.html b/index.html index b16f067..b6f9d88 100644 --- a/index.html +++ b/index.html @@ -41,13 +41,13 @@
- Evidence-backed software cartography · v0.12.11 + Works with Pi, Claude Code, Cursor, and Codex · v0.12.11
-

Understand existing software. Plan what comes next.

+

Understand an unfamiliar codebase. Get a spec you can rebuild from.

- CodeCartographer turns “explain this repo” into a staged, evidence-backed investigation—then - combines explicitly confirmed specifications with a new product vision to create a traceable - implementation plan. + CodeCartographer turns a repository into layered architecture, behavioral contracts, defect + findings, and a language-agnostic reimplementation spec — with each phase validated before the + next one runs, so nothing is built on a hallucinated finding.

Start with the docs @@ -83,6 +83,23 @@

Understand existing software. Plan what comes next.

+ +
+
+
The dashboard
+

Every run writes a self-contained report.

+

+ A single HTML file in .codecarto/dashboard.html — no JavaScript, no external assets, no + network calls. Phase status, per-phase token and tool-use telemetry, open questions, and blockers, + rendered straight from the workspace on disk. +

+
+ CodeCartographer dashboard: a mid-run pipeline with the architecture and mechanical defect-scan phases complete, contracts in progress, and per-phase token and tool-use telemetry. +
+
+
+
@@ -240,11 +257,11 @@

Works anywhere an LLM can read and write files.

Pi extension

-

Install the package and use /codecarto-init, /codecarto-next, /codecarto-status, and more. Phase sub-agents run in parallel widgets with live token tracking.

+

Install the package and use /codecarto-init, /codecarto-next, /codecarto-status, /codecarto-vision, /codecarto-switch-pipeline, and more — 15 commands in all. Phase sub-agents run in parallel widgets with live token tracking.

MCP server

-

18 tools for workflow control and library operations. Wire them into Claude Code, Claude Desktop, or any MCP-compatible host. The host owns phase sessions and compaction; CodeCartographer supplies byte-identical prompts and validation.

+

18 tools for workflow control and library operations. Wire them into Claude Code, Claude Desktop, or any MCP-compatible host. The host owns phase sessions and compaction; CodeCartographer supplies byte-identical prompts and validation. Copy-paste setup for Claude Code, Cursor, Codex, and opencode →

Drop-in template

diff --git a/site.css b/site.css index 79f46b1..f2082c6 100644 --- a/site.css +++ b/site.css @@ -928,3 +928,21 @@ pre.code-block { gap: 12px; } } + +/* Dashboard screenshot figure (index.html). Scales down on narrow viewports + without letting the page scroll sideways. */ +.dashboard-figure { + margin: 32px 0 0; + background: var(--color-surface); + border: 1px solid var(--color-border); + border-radius: var(--radius-md); + padding: 12px; + overflow: hidden; +} + +.dashboard-figure img { + display: block; + width: 100%; + height: auto; + border-radius: calc(var(--radius-md) - 6px); +} diff --git a/tests/upstream-consistency.test.mjs b/tests/upstream-consistency.test.mjs index 3a19fdc..25356c6 100644 --- a/tests/upstream-consistency.test.mjs +++ b/tests/upstream-consistency.test.mjs @@ -31,7 +31,29 @@ test("every public version label matches the authoritative package version", asy assert.match(footer, new RegExp(`v${pkg.version.replaceAll(".", "\\.")}`), `${name} footer must show v${pkg.version}`); } const index = await read(join(SITE_ROOT, "index.html")); - assert.match(index, new RegExp(`Evidence-backed software cartography · v${pkg.version.replaceAll(".", "\\.")}`)); + assert.match(index, new RegExp(`· v${pkg.version.replaceAll(".", "\\.")}`), "index.html hero eyebrow must carry the current version"); +}); + +test("Pi extension copy names commands the upstream extension actually registers", async () => { + const ext = await read(join(UPSTREAM_ROOT, "extensions", "codecarto", "index.ts")); + const registered = new Set( + [...ext.matchAll(/registerCommand\("([a-z-]+)"/g)].map((match) => match[1]), + ); + assert.ok(registered.size > 0, "expected to discover Pi commands from upstream index.ts"); + + // Any /codecarto-* command the site advertises must exist upstream. This is + // the check that was missing when the site quietly dropped commands that the + // extension does register. + for (const name of await htmlFiles()) { + const html = await read(join(SITE_ROOT, name)); + const cited = [...html.matchAll(/\/(codecarto-[a-z-]+)/g)].map((match) => match[1]); + for (const command of new Set(cited)) { + assert.ok(registered.has(command), `${name} cites /${command}, which the upstream extension does not register`); + } + } + + const index = await read(join(SITE_ROOT, "index.html")); + assert.match(index, new RegExp(`${registered.size} commands`), "index.html must state the current Pi command count"); }); test("MCP documentation names every tool registered by the upstream server", async () => {