@cr8rcho/alkahest 0.1.72 → 0.1.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/cli.js +18 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/docs.d.ts +13 -0
- package/dist/commands/docs.js +72 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/core/docsInit.d.ts +82 -0
- package/dist/core/docsInit.js +147 -0
- package/dist/core/docsInit.js.map +1 -0
- package/package.json +3 -2
- package/presets/as-built/CLAUDE-snippet.md +24 -0
- package/presets/as-built/preset.json +16 -0
- package/presets/as-built/scaffold/docs/README.md +44 -0
- package/presets/as-built/scaffold/docs/components/.gitkeep +0 -0
- package/presets/as-built/scaffold/docs/decisions/README.md +12 -0
- package/presets/as-built/scaffold/docs/features/.gitkeep +0 -0
- package/presets/as-built/scaffold/docs/modules/.gitkeep +0 -0
- package/presets/as-built/scaffold/docs/system/.gitkeep +0 -0
- package/presets/as-built/skills/adr.md +65 -0
- package/presets/as-built/skills/as-built-docs.md +71 -0
- package/presets/as-built/sync-docs-maps.mjs +123 -0
- package/presets/index.json +12 -0
package/README.md
CHANGED
|
@@ -113,6 +113,8 @@ alkahest notes delete <slug> # move a note to the Trash (soft delete; --reaso
|
|
|
113
113
|
alkahest notes map <slug> # place a pool note on a note map (--map), or take it off with --remove (never deletes the note)
|
|
114
114
|
alkahest notes import <dir> # import an Obsidian-style folder of .md files: one note per file (--map, --exclude, --dry-run; re-run to refresh — idempotent by source_path prop, then title, so retitled docs update in place)
|
|
115
115
|
alkahest notes props # edit a note map's property schema — --define <key:type[:opt,opt]…> registers, --remove <key…> unregisters (values kept, shown "unregistered"; --map)
|
|
116
|
+
alkahest presets # list the installable docs presets (opinionated documentation workflows)
|
|
117
|
+
alkahest docs init # install a docs preset: account skills + docs/ scaffold + reference sync script + note maps + CLAUDE.md snippet (--preset, --force, --claude-md) — everything rides public primitives, so your own setup loses nothing by skipping it
|
|
116
118
|
alkahest update # update to the latest GitHub release (--check to only check)
|
|
117
119
|
```
|
|
118
120
|
|
package/dist/cli.js
CHANGED
|
@@ -9,6 +9,7 @@ import { login } from "./commands/login.js";
|
|
|
9
9
|
import { commentsPull, commentsAdd, commentsReply, commentsResolve, commentsIssue } from "./commands/comments.js";
|
|
10
10
|
import { issuesPull, issuesAdd, issuesStatus, issuesDone, issuesLink, issuesMap, issuesRm, issuesPriority, issuesDue, issuesAssign, issuesComments, issuesComment, issuesReply, issuesResolveComment } from "./commands/issues.js";
|
|
11
11
|
import { notesAdd, notesDelete, notesImport, notesLink, notesList, notesMap, notesProps, notesRestore, notesShow, notesUpdate } from "./commands/notes.js";
|
|
12
|
+
import { docsInitCmd, presetsList } from "./commands/docs.js";
|
|
12
13
|
import { mapsList, mapsCreate } from "./commands/maps.js";
|
|
13
14
|
import { projects } from "./commands/projects.js";
|
|
14
15
|
import { history } from "./commands/history.js";
|
|
@@ -343,6 +344,23 @@ notes
|
|
|
343
344
|
.option("--map <slug>", "which note map (a project can hold several)")
|
|
344
345
|
.option("--api <url>", "API base URL (or env ALKAHEST_API_URL)")
|
|
345
346
|
.action((note, opts) => notesRestore(note, opts));
|
|
347
|
+
const docs = program
|
|
348
|
+
.command("docs")
|
|
349
|
+
.description("repo documentation workflow — install a docs preset (living as-built docs + ADR log, mirrored to note maps)");
|
|
350
|
+
docs
|
|
351
|
+
.command("init")
|
|
352
|
+
.description("install a docs preset: account skills (upsert by name, existing kept) + docs/ scaffold + reference sync script + note maps + CLAUDE.md snippet (opt-in append)")
|
|
353
|
+
.option("--preset <id>", "preset id (see `alkahest presets`)", "as-built")
|
|
354
|
+
.option("--force", "overwrite existing same-name skills with the preset bodies (default: keep yours)", false)
|
|
355
|
+
.option("--claude-md", "append the CLAUDE.md snippet without prompting (non-interactive runs print it instead)", false)
|
|
356
|
+
.option("--path <dir>", "repo root to scaffold into", ".")
|
|
357
|
+
.option("--slug <slug>", "project slug (defaults to the saved slug for this path; note maps are skipped without one)")
|
|
358
|
+
.option("--api <url>", "API base URL (or env ALKAHEST_API_URL)")
|
|
359
|
+
.action((opts) => docsInitCmd(opts));
|
|
360
|
+
program
|
|
361
|
+
.command("presets")
|
|
362
|
+
.description("list the installable docs presets (the same registry the web gallery reads)")
|
|
363
|
+
.action(() => presetsList());
|
|
346
364
|
const maps = program
|
|
347
365
|
.command("maps")
|
|
348
366
|
.description("list or create the maps in a project (a project holds many code/issue/note maps)");
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** `alkahest presets` — list the registry (the same list every surface reads). */
|
|
2
|
+
export declare function presetsList(): void;
|
|
3
|
+
export interface DocsInitOptions {
|
|
4
|
+
api?: string;
|
|
5
|
+
slug?: string;
|
|
6
|
+
path?: string;
|
|
7
|
+
preset?: string;
|
|
8
|
+
force?: boolean;
|
|
9
|
+
/** Append the CLAUDE.md snippet without prompting. */
|
|
10
|
+
claudeMd?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** `alkahest docs init` — install a preset: skills + scaffold + script + maps + snippet. */
|
|
13
|
+
export declare function docsInitCmd(options: DocsInitOptions): Promise<void>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { createInterface } from "node:readline";
|
|
2
|
+
import { appendClaudeSnippet, docsInit, listPresets } from "../core/docsInit.js";
|
|
3
|
+
/**
|
|
4
|
+
* Printers for the docs-preset workflow (cloud ADR-083). Pure logic lives in
|
|
5
|
+
* core/docsInit.ts; this layer owns stdout and the one file mutation that must stay
|
|
6
|
+
* explicit — appending the snippet to CLAUDE.md.
|
|
7
|
+
*/
|
|
8
|
+
const die = (msg) => {
|
|
9
|
+
console.error(`[alkahest] ${msg}`);
|
|
10
|
+
process.exitCode = 1;
|
|
11
|
+
};
|
|
12
|
+
/** `alkahest presets` — list the registry (the same list every surface reads). */
|
|
13
|
+
export function presetsList() {
|
|
14
|
+
const res = listPresets();
|
|
15
|
+
if (!res.ok || !res.presets)
|
|
16
|
+
return die(res.message ?? "could not read presets");
|
|
17
|
+
console.log(`[alkahest] ${res.presets.length} preset(s):`);
|
|
18
|
+
for (const p of res.presets) {
|
|
19
|
+
console.log(` ${p.id} — ${p.description}`);
|
|
20
|
+
console.log(` skills: ${p.skills.join(", ")} · maps: ${p.maps.join(", ")} · install: alkahest docs init --preset ${p.id}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const label = {
|
|
24
|
+
installed: "installed", updated: "updated (--force)", skipped: "skipped — exists (yours; --force to overwrite)",
|
|
25
|
+
created: "created", exists: "exists", failed: "FAILED", no_project: "no project bound — create later (web Maps page or MCP create_map)",
|
|
26
|
+
};
|
|
27
|
+
/** `alkahest docs init` — install a preset: skills + scaffold + script + maps + snippet. */
|
|
28
|
+
export async function docsInitCmd(options) {
|
|
29
|
+
const res = await docsInit(options.path || ".", {
|
|
30
|
+
api: options.api, slug: options.slug, preset: options.preset, force: options.force,
|
|
31
|
+
});
|
|
32
|
+
if (!res.ok)
|
|
33
|
+
return die(res.message ?? res.code ?? "init failed");
|
|
34
|
+
console.log(`[alkahest] preset '${res.preset}':`);
|
|
35
|
+
for (const s of res.skills ?? [])
|
|
36
|
+
console.log(` skill ${s.name}: ${label[s.action]}${s.message ? ` — ${s.message}` : ""}`);
|
|
37
|
+
const made = (res.scaffold ?? []).filter((f) => f.action === "created").length;
|
|
38
|
+
const kept = (res.scaffold ?? []).length - made;
|
|
39
|
+
console.log(` scaffold: ${made} file(s) created${kept ? `, ${kept} existing kept` : ""}`);
|
|
40
|
+
for (const s of res.scripts ?? [])
|
|
41
|
+
console.log(` script ${s.dest}: ${label[s.action]}`);
|
|
42
|
+
for (const m of res.maps ?? [])
|
|
43
|
+
console.log(` note map '${m.slug}': ${label[m.action]}${m.message ? ` — ${m.message}` : ""}`);
|
|
44
|
+
if ((res.skills ?? []).some((s) => s.action === "failed") || (res.maps ?? []).some((m) => m.action === "failed")) {
|
|
45
|
+
process.exitCode = 1;
|
|
46
|
+
}
|
|
47
|
+
if (!res.snippet)
|
|
48
|
+
return;
|
|
49
|
+
if (res.snippetInstalled) {
|
|
50
|
+
console.log(" CLAUDE.md: snippet already present — left untouched.");
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const append = () => {
|
|
54
|
+
const { file, created } = appendClaudeSnippet(options.path || ".", res.snippet);
|
|
55
|
+
console.log(` CLAUDE.md: snippet ${created ? "written to new" : "appended to"} ${file}`);
|
|
56
|
+
};
|
|
57
|
+
if (options.claudeMd)
|
|
58
|
+
return append();
|
|
59
|
+
if (process.stdin.isTTY && process.stdout.isTTY) {
|
|
60
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
61
|
+
const answer = await new Promise((resolveAns) => rl.question(" Append the docs rules snippet to CLAUDE.md? [y/N] ", resolveAns));
|
|
62
|
+
rl.close();
|
|
63
|
+
if (/^y(es)?$/i.test(answer.trim()))
|
|
64
|
+
return append();
|
|
65
|
+
console.log(" Skipped. The snippet (add it to your agent rules yourself):\n");
|
|
66
|
+
console.log(res.snippet);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
console.log(" Non-interactive run — snippet NOT written (pass --claude-md to append). Snippet:\n");
|
|
70
|
+
console.log(res.snippet);
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../src/commands/docs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docs presets (cloud ADR-083): installable bundles of an OPINION — a documentation
|
|
3
|
+
* convention (account skills), a repo scaffold, a CLAUDE.md snippet carrying the agent
|
|
4
|
+
* rules + mirroring spec, and a reference sync script. The preset gates nothing: every
|
|
5
|
+
* step rides public primitives (skills-post upsert, plain file copies), so a user who
|
|
6
|
+
* skips it and builds their own environment loses nothing. `docs init` is sugar for
|
|
7
|
+
* discoverability, not a gate — an agent driving MCP `add_skill` + copying files by hand
|
|
8
|
+
* lands in the same state.
|
|
9
|
+
*
|
|
10
|
+
* Bundles live in the package's `presets/` directory (shipped via npm `files`), which
|
|
11
|
+
* doubles as the public, MIT-licensed home of the method itself.
|
|
12
|
+
*/
|
|
13
|
+
export interface PresetSummary {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
description: string;
|
|
17
|
+
skills: string[];
|
|
18
|
+
maps: string[];
|
|
19
|
+
contents: string[];
|
|
20
|
+
}
|
|
21
|
+
export interface PresetsListResult {
|
|
22
|
+
ok: boolean;
|
|
23
|
+
presets?: PresetSummary[];
|
|
24
|
+
code?: string;
|
|
25
|
+
message?: string;
|
|
26
|
+
}
|
|
27
|
+
/** Read the registry (presets/index.json) — the single source of truth every surface lists from. */
|
|
28
|
+
export declare function listPresets(): PresetsListResult;
|
|
29
|
+
export interface DocsInitParams {
|
|
30
|
+
api?: string;
|
|
31
|
+
token?: string;
|
|
32
|
+
slug?: string;
|
|
33
|
+
/** Preset id from the registry (default "as-built"). */
|
|
34
|
+
preset?: string;
|
|
35
|
+
/** Overwrite existing same-name skills with the preset bodies (default: skip them). */
|
|
36
|
+
force?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface DocsInitResult {
|
|
39
|
+
ok: boolean;
|
|
40
|
+
preset?: string;
|
|
41
|
+
/** Per-skill outcome. "skipped" = a same-name skill already exists and --force was not given. */
|
|
42
|
+
skills?: {
|
|
43
|
+
name: string;
|
|
44
|
+
action: "installed" | "updated" | "skipped" | "failed";
|
|
45
|
+
message?: string;
|
|
46
|
+
}[];
|
|
47
|
+
/** Per-file scaffold outcome (paths relative to the target root). */
|
|
48
|
+
scaffold?: {
|
|
49
|
+
file: string;
|
|
50
|
+
action: "created" | "skipped";
|
|
51
|
+
}[];
|
|
52
|
+
/** Reference script outcome. */
|
|
53
|
+
scripts?: {
|
|
54
|
+
dest: string;
|
|
55
|
+
action: "created" | "skipped";
|
|
56
|
+
}[];
|
|
57
|
+
/** Note-map outcome — only attempted when the folder resolves to a project. */
|
|
58
|
+
maps?: {
|
|
59
|
+
slug: string;
|
|
60
|
+
action: "created" | "exists" | "failed" | "no_project";
|
|
61
|
+
message?: string;
|
|
62
|
+
}[];
|
|
63
|
+
/** The CLAUDE.md snippet body, for the command layer to print / append. */
|
|
64
|
+
snippet?: string;
|
|
65
|
+
/** True when the target CLAUDE.md already carries the snippet marker. */
|
|
66
|
+
snippetInstalled?: boolean;
|
|
67
|
+
code?: string;
|
|
68
|
+
message?: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Install a docs preset into the repo at `path`: account skills (upsert-by-name; existing
|
|
72
|
+
* names are respected unless force), scaffold files (never overwritten), the reference
|
|
73
|
+
* sync script, and — when the folder resolves to a project — the preset's note maps.
|
|
74
|
+
* Returns the CLAUDE.md snippet for the caller to print or append; never edits CLAUDE.md
|
|
75
|
+
* itself (file mutation is the command layer's explicit, opt-in step).
|
|
76
|
+
*/
|
|
77
|
+
export declare function docsInit(path: string, params?: DocsInitParams): Promise<DocsInitResult>;
|
|
78
|
+
/** Append the snippet to the repo's CLAUDE.md (created if missing). The command layer's opt-in step. */
|
|
79
|
+
export declare function appendClaudeSnippet(path: string, snippet: string): {
|
|
80
|
+
file: string;
|
|
81
|
+
created: boolean;
|
|
82
|
+
};
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync, appendFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join, relative, resolve, sep } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { pullSkills, saveSkill } from "./tasks.js";
|
|
5
|
+
import { createMap, listMaps } from "./maps.js";
|
|
6
|
+
import { resolveProject } from "./project.js";
|
|
7
|
+
/** The packaged presets/ dir — package root relative to this file (works from dist/ and src/). */
|
|
8
|
+
function presetsRoot() {
|
|
9
|
+
return join(dirname(fileURLToPath(import.meta.url)), "..", "..", "presets");
|
|
10
|
+
}
|
|
11
|
+
/** Read the registry (presets/index.json) — the single source of truth every surface lists from. */
|
|
12
|
+
export function listPresets() {
|
|
13
|
+
const idx = join(presetsRoot(), "index.json");
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(readFileSync(idx, "utf8"));
|
|
16
|
+
return { ok: true, presets: (parsed?.presets ?? []) };
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
20
|
+
return { ok: false, code: "no_registry", message: `Could not read the preset registry (${idx}): ${msg}` };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const SNIPPET_MARKER = "alkahest as-built preset";
|
|
24
|
+
/** Every file under dir, as paths relative to dir. */
|
|
25
|
+
function walkFiles(dir) {
|
|
26
|
+
const out = [];
|
|
27
|
+
const visit = (d) => {
|
|
28
|
+
for (const name of readdirSync(d)) {
|
|
29
|
+
const p = join(d, name);
|
|
30
|
+
if (statSync(p).isDirectory())
|
|
31
|
+
visit(p);
|
|
32
|
+
else
|
|
33
|
+
out.push(relative(dir, p).split(sep).join("/"));
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
visit(dir);
|
|
37
|
+
return out;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Install a docs preset into the repo at `path`: account skills (upsert-by-name; existing
|
|
41
|
+
* names are respected unless force), scaffold files (never overwritten), the reference
|
|
42
|
+
* sync script, and — when the folder resolves to a project — the preset's note maps.
|
|
43
|
+
* Returns the CLAUDE.md snippet for the caller to print or append; never edits CLAUDE.md
|
|
44
|
+
* itself (file mutation is the command layer's explicit, opt-in step).
|
|
45
|
+
*/
|
|
46
|
+
export async function docsInit(path, params = {}) {
|
|
47
|
+
const presetId = (params.preset ?? "as-built").trim();
|
|
48
|
+
const dir = join(presetsRoot(), presetId);
|
|
49
|
+
let manifest;
|
|
50
|
+
try {
|
|
51
|
+
manifest = JSON.parse(readFileSync(join(dir, "preset.json"), "utf8"));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
const known = listPresets().presets?.map((p) => p.id).join(", ") || "(registry unreadable)";
|
|
55
|
+
return { ok: false, code: "unknown_preset", message: `No preset '${presetId}'. Available: ${known}.` };
|
|
56
|
+
}
|
|
57
|
+
const root = resolve(path || ".");
|
|
58
|
+
const result = { ok: true, preset: presetId, skills: [], scaffold: [], scripts: [], maps: [] };
|
|
59
|
+
// 1) Account skills — upsert by name, but never silently clobber a user-edited body:
|
|
60
|
+
// an existing name is skipped unless --force (mirrors deploy_skill being explicit).
|
|
61
|
+
const existing = await pullSkills(path, { api: params.api, token: params.token });
|
|
62
|
+
if (!existing.ok)
|
|
63
|
+
return { ok: false, code: existing.code, message: existing.message };
|
|
64
|
+
const personal = new Set((existing.skills ?? []).filter((s) => s.scope !== "workspace").map((s) => s.name.toLowerCase()));
|
|
65
|
+
for (const s of manifest.skills ?? []) {
|
|
66
|
+
const body = readFileSync(join(dir, s.file), "utf8");
|
|
67
|
+
if (personal.has(s.name.toLowerCase()) && !params.force) {
|
|
68
|
+
result.skills.push({ name: s.name, action: "skipped" });
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const had = personal.has(s.name.toLowerCase());
|
|
72
|
+
const saved = await saveSkill(path, { api: params.api, token: params.token, name: s.name, body });
|
|
73
|
+
result.skills.push(saved.ok
|
|
74
|
+
? { name: s.name, action: had ? "updated" : "installed" }
|
|
75
|
+
: { name: s.name, action: "failed", message: saved.message ?? saved.code });
|
|
76
|
+
}
|
|
77
|
+
// 2) Scaffold — copy the bundle's tree, never overwriting what exists.
|
|
78
|
+
if (manifest.scaffold) {
|
|
79
|
+
const src = join(dir, manifest.scaffold);
|
|
80
|
+
for (const rel of walkFiles(src)) {
|
|
81
|
+
const dest = join(root, ...rel.split("/"));
|
|
82
|
+
if (existsSync(dest)) {
|
|
83
|
+
result.scaffold.push({ file: rel, action: "skipped" });
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
87
|
+
copyFileSync(join(src, ...rel.split("/")), dest);
|
|
88
|
+
result.scaffold.push({ file: rel, action: "created" });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// 3) Reference script — copied once; ownership transfers to the repo (we never update it).
|
|
92
|
+
for (const s of manifest.scripts ?? []) {
|
|
93
|
+
const dest = join(root, ...s.dest.split("/"));
|
|
94
|
+
if (existsSync(dest)) {
|
|
95
|
+
result.scripts.push({ dest: s.dest, action: "skipped" });
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
mkdirSync(dirname(dest), { recursive: true });
|
|
99
|
+
copyFileSync(join(dir, s.file), dest);
|
|
100
|
+
result.scripts.push({ dest: s.dest, action: "created" });
|
|
101
|
+
}
|
|
102
|
+
// 4) Note maps — best-effort, only when the folder is bound to a project. No project is
|
|
103
|
+
// not an error: the maps can be created at publish/first-sync time instead.
|
|
104
|
+
if (manifest.maps?.length) {
|
|
105
|
+
const { slug } = resolveProject(path, params.slug);
|
|
106
|
+
if (!slug) {
|
|
107
|
+
for (const m of manifest.maps)
|
|
108
|
+
result.maps.push({ slug: m.slug, action: "no_project" });
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
const have = await listMaps(path, { api: params.api, token: params.token, slug: params.slug, type: "note" });
|
|
112
|
+
const haveSlugs = new Set((have.ok ? have.maps ?? [] : []).map((m) => m.slug));
|
|
113
|
+
for (const m of manifest.maps) {
|
|
114
|
+
if (haveSlugs.has(m.slug)) {
|
|
115
|
+
result.maps.push({ slug: m.slug, action: "exists" });
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const made = await createMap(path, {
|
|
119
|
+
api: params.api, token: params.token, slug: params.slug,
|
|
120
|
+
mapSlug: m.slug, type: "note", mapName: m.name,
|
|
121
|
+
});
|
|
122
|
+
result.maps.push(made.ok
|
|
123
|
+
? { slug: m.slug, action: "created" }
|
|
124
|
+
: { slug: m.slug, action: "failed", message: made.message ?? made.code });
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// 5) Snippet — returned for the command layer; appending is its explicit opt-in step.
|
|
129
|
+
if (manifest.snippet) {
|
|
130
|
+
result.snippet = readFileSync(join(dir, manifest.snippet), "utf8");
|
|
131
|
+
const claudeMd = join(root, "CLAUDE.md");
|
|
132
|
+
result.snippetInstalled = existsSync(claudeMd) && readFileSync(claudeMd, "utf8").includes(SNIPPET_MARKER);
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
/** Append the snippet to the repo's CLAUDE.md (created if missing). The command layer's opt-in step. */
|
|
137
|
+
export function appendClaudeSnippet(path, snippet) {
|
|
138
|
+
const root = resolve(path || ".");
|
|
139
|
+
const file = join(root, "CLAUDE.md");
|
|
140
|
+
const created = !existsSync(file);
|
|
141
|
+
if (created)
|
|
142
|
+
writeFileSync(file, `${snippet.trimEnd()}\n`);
|
|
143
|
+
else
|
|
144
|
+
appendFileSync(file, `\n${snippet.trimEnd()}\n`);
|
|
145
|
+
return { file, created };
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=docsInit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docsInit.js","sourceRoot":"","sources":["../../src/core/docsInit.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cr8rcho/alkahest",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.74",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"alkahest": "dist/cli.js"
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
|
-
"dist"
|
|
13
|
+
"dist",
|
|
14
|
+
"presets"
|
|
14
15
|
],
|
|
15
16
|
"engines": {
|
|
16
17
|
"node": ">=20"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<!-- alkahest as-built preset — installed by `alkahest docs init`. Owned by this repo: edit freely. -->
|
|
2
|
+
## Documentation — as-built docs + ADR
|
|
3
|
+
|
|
4
|
+
This repo keeps **as-built documentation** under `docs/` (four layers: system / components /
|
|
5
|
+
features / modules — see docs/README.md) and **ADRs** under `docs/decisions/`. The writing
|
|
6
|
+
instructions live in the account skills `as-built-docs` and `adr` — read them via the
|
|
7
|
+
alkahest MCP `skills` tool before writing docs.
|
|
8
|
+
|
|
9
|
+
1. **After finishing any code change, update the affected docs in the same session.**
|
|
10
|
+
The layer mapping and the update checklist are in the `as-built-docs` skill. Write an
|
|
11
|
+
ADR only for decisions whose "why" a code diff cannot reconstruct (criteria and the
|
|
12
|
+
template are in the `adr` skill).
|
|
13
|
+
2. **First documentation pass (repo has no docs yet)?** Follow the bootstrap protocol in
|
|
14
|
+
the `as-built-docs` skill: one system map + 2–3 core modules + ADR-001 (architecture
|
|
15
|
+
snapshot) — small first, then mirror and hand the user the note-map link. Grow the rest
|
|
16
|
+
incrementally with later work.
|
|
17
|
+
3. **After changing `docs/`, mirror it to the hosted note maps** by running
|
|
18
|
+
`node scripts/sync-docs-maps.mjs` (background recommended — one POST per document).
|
|
19
|
+
The script stages the docs (title from the first H1, H1 line stripped, intra-set
|
|
20
|
+
relative links → `[[wikilinks]]`, the original repo path injected as `source_path:`
|
|
21
|
+
frontmatter) and uploads with `alkahest notes import --map <adr|as-built>`. The import
|
|
22
|
+
is idempotent by source_path first, title second — re-runs and retitles update notes in
|
|
23
|
+
place. The script is a reference implementation and belongs to this repo: adapt it to
|
|
24
|
+
local conventions freely.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "as-built",
|
|
3
|
+
"name": "as-built docs",
|
|
4
|
+
"description": "Living as-built documentation + an ADR log, written by your agent and mirrored to note maps.",
|
|
5
|
+
"skills": [
|
|
6
|
+
{ "name": "as-built-docs", "file": "skills/as-built-docs.md" },
|
|
7
|
+
{ "name": "adr", "file": "skills/adr.md" }
|
|
8
|
+
],
|
|
9
|
+
"scaffold": "scaffold",
|
|
10
|
+
"snippet": "CLAUDE-snippet.md",
|
|
11
|
+
"scripts": [{ "file": "sync-docs-maps.mjs", "dest": "scripts/sync-docs-maps.mjs" }],
|
|
12
|
+
"maps": [
|
|
13
|
+
{ "slug": "as-built", "name": "as-built" },
|
|
14
|
+
{ "slug": "adr", "name": "adr" }
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Documentation
|
|
2
|
+
|
|
3
|
+
This directory holds this repository's **as-built documentation** — documents that record
|
|
4
|
+
how the system is actually built (never plans or PRDs). Writing instructions live in the
|
|
5
|
+
`as-built-docs` account skill (read it via the alkahest MCP `skills` tool).
|
|
6
|
+
|
|
7
|
+
## Layers
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
docs/
|
|
11
|
+
├── system/ ← whole-app overview (the map)
|
|
12
|
+
├── components/ ← UI areas (what the user sees)
|
|
13
|
+
├── features/ ← behaviors (what happens over time)
|
|
14
|
+
├── modules/ ← code layers (developer view)
|
|
15
|
+
└── decisions/ ← ADRs — the append-only "why" axis (see decisions/README.md)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Index
|
|
19
|
+
|
|
20
|
+
> Add one row per document as you create it.
|
|
21
|
+
|
|
22
|
+
### System
|
|
23
|
+
|
|
24
|
+
| Document | Summary |
|
|
25
|
+
|---|---|
|
|
26
|
+
|
|
27
|
+
### Components
|
|
28
|
+
|
|
29
|
+
| Document | Summary |
|
|
30
|
+
|---|---|
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
| Document | Summary |
|
|
35
|
+
|---|---|
|
|
36
|
+
|
|
37
|
+
### Modules
|
|
38
|
+
|
|
39
|
+
| Document | Summary |
|
|
40
|
+
|---|---|
|
|
41
|
+
|
|
42
|
+
### Decisions
|
|
43
|
+
|
|
44
|
+
See [decisions/README.md](./decisions/README.md).
|
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Decisions (ADR)
|
|
2
|
+
|
|
3
|
+
This folder collects **Architecture Decision Records** — the why / alternatives /
|
|
4
|
+
trade-offs of decisions, frozen at decision time. Writing instructions and the template
|
|
5
|
+
live in the `adr` account skill (read it via the alkahest MCP `skills` tool).
|
|
6
|
+
|
|
7
|
+
Quick rules:
|
|
8
|
+
|
|
9
|
+
- `NNN-kebab-title.md`, zero-padded, sequential, never renumbered.
|
|
10
|
+
- Append-only: a changed decision gets a NEW ADR with `Supersedes:`; the old one keeps its
|
|
11
|
+
body and gets `Status: Superseded by …`.
|
|
12
|
+
- Start the practice with **ADR-001 — architecture snapshot** of the current code.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# adr — decision records
|
|
2
|
+
|
|
3
|
+
ADRs (`docs/decisions/NNN-kebab-title.md`) record the **why** of decisions: context,
|
|
4
|
+
alternatives, trade-offs. They are a separate axis from as-built docs — as-built documents
|
|
5
|
+
are overwritten to stay current; ADRs are **append-only**, frozen at decision time.
|
|
6
|
+
|
|
7
|
+
## When to write one
|
|
8
|
+
|
|
9
|
+
One-line test: **if the code diff alone cannot reconstruct the "why", it deserves an ADR.**
|
|
10
|
+
|
|
11
|
+
Typical cases: data-model or structural changes; policy decisions and their reversals;
|
|
12
|
+
adopting an external dependency or license; fixing an ownership boundary ("this module is
|
|
13
|
+
the single owner of that transform"); behavior changes that trade something away; and
|
|
14
|
+
decisions deliberately **not** taken (record the reason and the revisit trigger).
|
|
15
|
+
|
|
16
|
+
Skip when: plain bug fixes, refactors, dependency bumps — anything self-evident from the
|
|
17
|
+
code and the as-built docs.
|
|
18
|
+
|
|
19
|
+
## Bootstrap — ADR-001
|
|
20
|
+
|
|
21
|
+
On a repo's first documentation pass, write **ADR-001 as an architecture snapshot**: the
|
|
22
|
+
decisions already embedded in the current code (framework, storage, module boundaries),
|
|
23
|
+
each with the alternatives it implicitly rejected. This seeds the habit of communicating
|
|
24
|
+
through decision records.
|
|
25
|
+
|
|
26
|
+
## Numbering & lifecycle
|
|
27
|
+
|
|
28
|
+
- `NNN` is zero-padded, sequential, never reused or renumbered.
|
|
29
|
+
- Never rewrite an accepted ADR. When a decision changes, write a **new** ADR that names
|
|
30
|
+
the old one in `Supersedes:`, and flip the old one's Status to `Superseded by …`
|
|
31
|
+
(keep the body — "why we did it that way once, then backed out" is the value).
|
|
32
|
+
|
|
33
|
+
## Tags (frontmatter)
|
|
34
|
+
|
|
35
|
+
Every ADR opens with a `tags:` frontmatter block. Keep the vocabulary small and stable:
|
|
36
|
+
one **surface** tag (the area of the product it touches) plus at most two **arc** tags
|
|
37
|
+
(a storyline several ADRs share). On the hosted `adr` note map each tag renders as a hub
|
|
38
|
+
node — keep every tag attached to roughly 3–12 ADRs so the map stays legible, and prefer
|
|
39
|
+
reusing an existing tag over inventing a new one.
|
|
40
|
+
|
|
41
|
+
## Template
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
---
|
|
45
|
+
tags: [<one surface tag>, <0-2 arc tags>]
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
# ADR-NNN: <one-line title>
|
|
49
|
+
|
|
50
|
+
* **Status**: Accepted (YYYY-MM-DD)
|
|
51
|
+
* **Date**: YYYY-MM-DD
|
|
52
|
+
* **Supersedes**: none | ADR-NNN (partial/full)
|
|
53
|
+
* **Related**: ADRs, as-built docs
|
|
54
|
+
|
|
55
|
+
***
|
|
56
|
+
|
|
57
|
+
## 1. Context
|
|
58
|
+
## 2. Decision
|
|
59
|
+
## 3. Trade-offs
|
|
60
|
+
## 4. Considered alternatives
|
|
61
|
+
## 5. Known limitations
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Keep *Trade-offs*, *Considered alternatives*, and *Known limitations* non-empty — they are
|
|
65
|
+
the point of the record. Cite code richly (files, functions, constants).
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# as-built-docs — writing instructions
|
|
2
|
+
|
|
3
|
+
You are maintaining this repository's **as-built documentation**: documents that record how
|
|
4
|
+
the system **is actually built**. Never plans, PRDs, or aspirations — present tense, code as
|
|
5
|
+
the source of truth.
|
|
6
|
+
|
|
7
|
+
## The four layers
|
|
8
|
+
|
|
9
|
+
Documents live under `docs/` in four folders, split by scope and viewpoint:
|
|
10
|
+
|
|
11
|
+
| Layer | Scope | Viewpoint | Answers |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `system/` | whole app | architecture / data flow | "How is this app put together overall?" |
|
|
14
|
+
| `components/` | one UI area | what the user sees | "What is on this screen area, and what does each control do?" |
|
|
15
|
+
| `features/` | one behavior | time / user action | "When and under what conditions does this behavior run?" |
|
|
16
|
+
| `modules/` | one code layer | developer view | "What does this layer provide, and how is it separated from the rest?" |
|
|
17
|
+
|
|
18
|
+
Placement rule of thumb: what the user *sees* → `components/`; what *happens over time* →
|
|
19
|
+
`features/`; *code structure* → `modules/`; the picture that crosses all three → `system/`.
|
|
20
|
+
When a topic straddles two layers, pick one as the **main** document and leave a short
|
|
21
|
+
summary + link in the other.
|
|
22
|
+
|
|
23
|
+
## Document shape
|
|
24
|
+
|
|
25
|
+
Title each document with a **classed H1**: `# System — <name>`, `# Component — <name>`,
|
|
26
|
+
`# Feature — <name>`, `# Module — <name>`. The note-map mirror strips the class prefix,
|
|
27
|
+
so the hosted note is titled just `<name>` while the file stays unambiguous in the repo.
|
|
28
|
+
(ADRs have their own H1 shape — see the `adr` skill.)
|
|
29
|
+
|
|
30
|
+
## Bootstrap — when the repo has no docs yet
|
|
31
|
+
|
|
32
|
+
Do NOT try to document everything in one session. The first pass is deliberately small so
|
|
33
|
+
the user sees a map fast:
|
|
34
|
+
|
|
35
|
+
1. `docs/system/<app>.md` — one system map: layers, data flow, key dependencies, honest
|
|
36
|
+
Known Limitations.
|
|
37
|
+
2. Two or three `docs/modules/*.md` for the load-bearing modules only.
|
|
38
|
+
3. One decision record (see the `adr` skill): **ADR-001, an architecture snapshot** — the
|
|
39
|
+
decisions already embedded in the current code.
|
|
40
|
+
4. Add each document to the index in `docs/README.md`, then **mirror to the note maps and
|
|
41
|
+
hand the user the map link** (the mirroring rule lives in this repo's CLAUDE.md).
|
|
42
|
+
|
|
43
|
+
In the first pass, **prefer `modules/`** (plus the one `system/` map) when a topic could
|
|
44
|
+
fit several layers — grow `features/` and `components/` in later sessions, and leave their
|
|
45
|
+
index tables empty until they have documents.
|
|
46
|
+
|
|
47
|
+
Grow the rest incrementally: each later work session adds or updates only the documents its
|
|
48
|
+
code changes touch.
|
|
49
|
+
|
|
50
|
+
## Tone and rules
|
|
51
|
+
|
|
52
|
+
- **As-built, present tense** — "this is how it is built." Cite real file paths, function
|
|
53
|
+
names, and constants so readers can jump straight to code.
|
|
54
|
+
- **Decision history is a separate axis** — why / alternatives / trade-offs belong in ADRs
|
|
55
|
+
(`docs/decisions/`, see the `adr` skill), not in these documents.
|
|
56
|
+
- **Known Limitations, honestly** — the most valuable section of a post-hoc document.
|
|
57
|
+
Remove limitations you fixed; add the ones you introduced.
|
|
58
|
+
- **Overwrite freely** — these documents always describe the present. (ADRs are the
|
|
59
|
+
append-only record; never blend the two.)
|
|
60
|
+
- **Trust the code over connected tools** — an MCP server configured in your session
|
|
61
|
+
(a database MCP, for instance) may be bound to a *different* project than the repo you
|
|
62
|
+
are documenting. Verify the binding before citing anything from it, or read the schema
|
|
63
|
+
from the code instead.
|
|
64
|
+
|
|
65
|
+
## After every code change (checklist)
|
|
66
|
+
|
|
67
|
+
- [ ] Does the affected document still describe current behavior?
|
|
68
|
+
- [ ] Are its code citations (paths, names, constants) still valid?
|
|
69
|
+
- [ ] Known Limitations updated — fixed ones removed, new ones added?
|
|
70
|
+
- [ ] Cross-references from documents in other layers updated?
|
|
71
|
+
- [ ] `docs/README.md` index still accurate (add a row when adding a document)?
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Reference implementation (alkahest as-built preset) — mirror this repo's docs into the
|
|
3
|
+
// project's note maps:
|
|
4
|
+
// docs/decisions/NNN-*.md → note map `adr` (flat)
|
|
5
|
+
// docs/{system,components,features,modules}/*.md → note map `as-built` (folder = category)
|
|
6
|
+
//
|
|
7
|
+
// Staging transforms (the importer's rules: filename = title, frontmatter passes through):
|
|
8
|
+
// - title from the first H1 ("ADR-NNN: rest — tail" → "ADR-NNN rest"; as-built strips a
|
|
9
|
+
// "System|Component|Feature|Module — " class prefix and a " — " tail), sanitized;
|
|
10
|
+
// - the H1 line is dropped from the body (the note title renders it);
|
|
11
|
+
// - relative .md links WITHIN each set become [[wikilinks]] so the graph connects
|
|
12
|
+
// (cross-set links stay plain markdown);
|
|
13
|
+
// - the ORIGINAL repo path rides in as `source_path:` frontmatter — the staged filename
|
|
14
|
+
// is title-derived, so this is what keeps identity through a retitle (the importer
|
|
15
|
+
// matches source_path before title and renames the note in place).
|
|
16
|
+
//
|
|
17
|
+
// Re-running is safe: import is idempotent by source_path, then title.
|
|
18
|
+
// This script belongs to the repo it lives in — adapt titles/sets/maps to local conventions.
|
|
19
|
+
// Usage: node scripts/sync-docs-maps.mjs [--stage-only]
|
|
20
|
+
import { readdirSync, readFileSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
21
|
+
import { spawnSync } from "node:child_process";
|
|
22
|
+
import { join, dirname, basename } from "node:path";
|
|
23
|
+
import { fileURLToPath } from "node:url";
|
|
24
|
+
import { tmpdir } from "node:os";
|
|
25
|
+
|
|
26
|
+
const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
|
|
27
|
+
const DOCS = join(ROOT, "docs");
|
|
28
|
+
const OUT = join(tmpdir(), "alkahest-docs-staging");
|
|
29
|
+
rmSync(OUT, { recursive: true, force: true });
|
|
30
|
+
|
|
31
|
+
const sanitize = (t) =>
|
|
32
|
+
t.replace(/\(\//g, "(").replace(/[/\\:]/g, "-").replace(/`/g, "").replace(/\s+/g, " ").trim();
|
|
33
|
+
const firstH1 = (src) => (src.match(/^#\s+(.+)$/m) ?? [null, ""])[1].trim();
|
|
34
|
+
// Frontmatter rides through to the staged file — the importer strips it from the stored body
|
|
35
|
+
// and harvests its keys into note props (`tags:` is the reserved one). Split it off first so
|
|
36
|
+
// stripH1 still sees the H1 at the head of what's left.
|
|
37
|
+
const splitFm = (src) => {
|
|
38
|
+
const m = src.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n+/);
|
|
39
|
+
return m ? [m[0], src.slice(m[0].length)] : ["", src];
|
|
40
|
+
};
|
|
41
|
+
const stripH1 = (src) => {
|
|
42
|
+
const [fm, body] = splitFm(src);
|
|
43
|
+
return fm + body.replace(/^#\s+.+\n+/, "");
|
|
44
|
+
};
|
|
45
|
+
// Rename-safe identity: inject the ORIGINAL repo path as source_path: frontmatter (merged
|
|
46
|
+
// into an existing block, or a new block is minted).
|
|
47
|
+
const withSource = (staged, rel) => {
|
|
48
|
+
const [fm, body] = splitFm(staged);
|
|
49
|
+
const line = `source_path: ${rel}\n`;
|
|
50
|
+
return fm ? fm.replace(/---\r?\n*$/, (close) => line + close) + body : `---\n${line}---\n\n${staged}`;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
// ---- ADRs ------------------------------------------------------------------
|
|
54
|
+
const adrDir = join(DOCS, "decisions");
|
|
55
|
+
const adrFiles = readdirSync(adrDir).filter((f) => /^\d{3}-.*\.md$/.test(f));
|
|
56
|
+
const adrTitle = {};
|
|
57
|
+
for (const f of adrFiles) {
|
|
58
|
+
const h1 = firstH1(readFileSync(join(adrDir, f), "utf8"));
|
|
59
|
+
// Convention "ADR-NNN: title — tail"; the em-dash variant "ADR-NNN — title" also parses.
|
|
60
|
+
const m = h1.match(/^ADR-(\d{3})(?::|\s+—)\s*(.+)$/);
|
|
61
|
+
const num = m ? m[1] : f.slice(0, 3);
|
|
62
|
+
adrTitle[num] = sanitize(`ADR-${num} ${(m ? m[2] : h1).split(" — ")[0].trim()}`);
|
|
63
|
+
}
|
|
64
|
+
const linkAdrs = (body) =>
|
|
65
|
+
body.replace(/\[([^\]]*)\]\((?:\.\/)?(\d{3})-[^)#\s]*\.md(?:#[^)]*)?\)/g, (all, _label, num) =>
|
|
66
|
+
adrTitle[num] ? `[[${adrTitle[num]}]]` : all);
|
|
67
|
+
mkdirSync(join(OUT, "adr"), { recursive: true });
|
|
68
|
+
for (const f of adrFiles) {
|
|
69
|
+
const t = adrTitle[f.slice(0, 3)];
|
|
70
|
+
const staged = linkAdrs(stripH1(readFileSync(join(adrDir, f), "utf8")));
|
|
71
|
+
writeFileSync(join(OUT, "adr", `${t}.md`), withSource(staged, `docs/decisions/${f}`));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// ---- as-built --------------------------------------------------------------
|
|
75
|
+
const cats = ["system", "components", "features", "modules"];
|
|
76
|
+
const abTitle = {};
|
|
77
|
+
const abSrc = {};
|
|
78
|
+
for (const cat of cats) {
|
|
79
|
+
for (const f of readdirSync(join(DOCS, cat)).filter((x) => x.endsWith(".md"))) {
|
|
80
|
+
const src = readFileSync(join(DOCS, cat, f), "utf8");
|
|
81
|
+
let t = firstH1(src).replace(/^(System|Component|Feature|Module)\s*—\s*/i, "");
|
|
82
|
+
t = t.split(" — ")[0].trim() || firstH1(src);
|
|
83
|
+
abTitle[basename(f, ".md")] = sanitize(t);
|
|
84
|
+
abSrc[basename(f, ".md")] = { cat, src };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const linkAb = (body) =>
|
|
88
|
+
body.replace(/\[([^\]]*)\]\((?:\.\.\/(?:system|components|features|modules)\/|\.\/)?([a-z0-9-]+)\.md(?:#[^)]*)?\)/g,
|
|
89
|
+
(all, _label, name) => (abTitle[name] ? `[[${abTitle[name]}]]` : all));
|
|
90
|
+
for (const [name, { cat, src }] of Object.entries(abSrc)) {
|
|
91
|
+
mkdirSync(join(OUT, "as-built", cat), { recursive: true });
|
|
92
|
+
writeFileSync(join(OUT, "as-built", cat, `${abTitle[name]}.md`), withSource(linkAb(stripH1(src)), `docs/${cat}/${name}.md`));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
console.log(`staged ${adrFiles.length} ADRs + ${Object.keys(abSrc).length} as-built docs → ${OUT}`);
|
|
96
|
+
if (process.argv.includes("--stage-only")) process.exit(0);
|
|
97
|
+
|
|
98
|
+
// A full mirror is many sequential POSTs, so a transient failure is a question of when, not
|
|
99
|
+
// if. The CLI handles it per file (keeps going, prints `✗ <file>: <message>`, exits 1) — act
|
|
100
|
+
// on the exit code and retry the whole set: rows that already landed come back as updates.
|
|
101
|
+
const ATTEMPTS = 3;
|
|
102
|
+
const failed = [];
|
|
103
|
+
|
|
104
|
+
for (const [dir, map] of [["adr", "adr"], ["as-built", "as-built"]]) {
|
|
105
|
+
let ok = false;
|
|
106
|
+
for (let attempt = 1; attempt <= ATTEMPTS && !ok; attempt++) {
|
|
107
|
+
console.log(`\n== notes import ${dir} → map ${map}${attempt > 1 ? ` (retry ${attempt - 1})` : ""} ==`);
|
|
108
|
+
const run = spawnSync("alkahest", ["notes", "import", join(OUT, dir), "--map", map, "--path", ROOT], {
|
|
109
|
+
stdio: "inherit",
|
|
110
|
+
});
|
|
111
|
+
if (run.error) console.error(`[sync] could not run alkahest: ${run.error.message}`);
|
|
112
|
+
ok = !run.error && run.status === 0;
|
|
113
|
+
if (!ok && attempt < ATTEMPTS) Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 5000);
|
|
114
|
+
}
|
|
115
|
+
if (!ok) failed.push(`${dir} → ${map}`);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (failed.length) {
|
|
119
|
+
console.error(`\n[sync] FAILED after ${ATTEMPTS} attempts: ${failed.join(", ")}`);
|
|
120
|
+
console.error("[sync] scroll up for the per-file '✗ <file>: <message>' lines from the importer.");
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
console.log("\n[sync] both maps up to date.");
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"presets": [
|
|
3
|
+
{
|
|
4
|
+
"id": "as-built",
|
|
5
|
+
"name": "as-built docs",
|
|
6
|
+
"description": "Living as-built documentation + an ADR log, written by your agent and mirrored to note maps.",
|
|
7
|
+
"skills": ["as-built-docs", "adr"],
|
|
8
|
+
"maps": ["as-built", "adr"],
|
|
9
|
+
"contents": ["skills", "scaffold", "claude-snippet", "sync-script"]
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|