From 532e484d7fb0b8e495f059a6067bfdf681c31c43 Mon Sep 17 00:00:00 2001 From: mvoutov Date: Mon, 23 Mar 2026 15:33:54 -0700 Subject: [PATCH] release 0.3.0 --- CHANGELOG.md | 25 +++++++++++++++++++++++++ package-lock.json | 7 ++++--- package.json | 2 +- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3b1bb5..b5f6395 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,31 @@ ## [Unreleased] +## [0.3.0] - 2026-03-23 + +### Added +- **Import graph persistence** — `aspens doc graph` analyzes the repo and saves `.claude/graph.json`, `.claude/graph-index.json`, and `.claude/code-map.md` for use across sessions +- **Graph context hook** — `graph-context-prompt.sh` + `graph-context-prompt.mjs` inject navigation context (hub files, clusters, neighbors) into every Claude prompt when relevant files are mentioned +- **Code-map skill** — auto-generated `.claude/code-map.md` gives Claude a codebase overview (hub files, domain clusters, hotspots, stats) loaded on every prompt +- **`aspens doc graph` command** — standalone command to build and persist the import graph with stats output +- **Graph-aware doc sync** — `aspens doc sync` now rebuilds the graph on every sync and uses it to improve skill change detection +- **`--domains` flag for `doc init`** — retry specific failed domains without regenerating the base skill or CLAUDE.md: `aspens doc init --mode chunked --domains "auth,payments"` + +### Fixed +- **Windows `spawn` ENOENT** — Claude CLI now resolves correctly on Windows where npm installs `claude.cmd`; `shell: true` scoped to win32 only +- **Windows timeout kill** — timeout handler now uses `taskkill /t /f` on Windows to kill the full process tree, not just the shell +- **`base-only` mode skipping base skill** — split `skipDiscovery` into `isBaseOnly`/`isDomainsOnly` so base-only runs correctly generate the base skill and show the existing-docs strategy prompt +- **`--domains` with non-chunked modes** — `--domains` flag no longer erroneously skips discovery when used with `--mode all` +- **Retry hints include repo path** — skipped-domain retry commands now include the target repo path +- **Graph hook portability** — removed `timeout 5s` (requires GNU coreutils); timeout is now a portable `setTimeout` inside the Node script +- **Graph persistence error handling** — spinner correctly stops on `persistGraphArtifacts` failure; wrong output path in outro corrected +- **`clusters.components` null guard** — defensive check added in `doc graph` stats output +- **`graph.ranked` guard** — `buildGraphContext` uses optional chaining on `ranked` to handle serialized graphs +- **`externalImports` guard** — `buildDomainGraphContext` safely handles serialized graphs where `externalImports` is dropped +- **Silent graph failures** — `doc sync` now warns the user when graph context is unavailable instead of silently skipping +- **Node 18/20 test compatibility** — `import.meta.dirname` replaced with portable `fileURLToPath` + `dirname` pattern in graph persistence tests +- **Shell `local` masking** — `local dir=` in `graph-context-prompt.sh` split into separate declaration and assignment + ## [0.2.2] - 2026-03-22 ### Upgrade notice diff --git a/package-lock.json b/package-lock.json index 6b9de7b..cdafebb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,13 @@ { "name": "aspens", - "version": "0.2.1", + "version": "0.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "aspens", - "version": "0.2.1", + "version": "0.3.0", + "hasInstallScript": true, "license": "MIT", "dependencies": { "@clack/prompts": "^0.8.0", @@ -21,7 +22,7 @@ "vitest": "^4.1.0" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@clack/core": { diff --git a/package.json b/package.json index 6d8423e..9c28305 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aspens", - "version": "0.2.2", + "version": "0.3.0", "description": "Generate and maintain AI-ready documentation for any codebase", "type": "module", "bin": {