beacon-docs 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/config.ts","../src/core/categories.ts","../src/core/paths.ts","../src/generators/readme.ts","../src/generators/_header.ts","../src/generators/ai-rules.ts","../src/generators/claude.ts","../src/generators/agents.ts","../src/generators/gemini.ts","../src/generators/cursor.ts","../src/commands/sync.ts","../src/core/adr-numbering.ts","../src/generators/doc.ts","../src/commands/new.ts","../src/commands/archive.ts","../src/commands/toggle.ts","../src/linter/walker.ts","../src/linter/index.ts","../src/linter/reporter.ts","../src/linter/rules/suffix-location.ts","../src/linter/rules/kebab-case.ts","../src/linter/rules/eval-date-prefix.ts","../src/linter/rules/readme-present.ts","../src/linter/rules/ai-files-sync.ts","../src/linter/rules/duplicate-titles.ts","../src/linter/rules/long-files.ts","../src/linter/rules/folder-size.ts","../src/linter/rules/adr-numbering.ts","../src/linter/rules/stale-plans.ts","../src/linter/rules/adr-status.ts","../src/commands/lint.ts","../src/core/project-types.ts","../src/generators/scaffold.ts","../src/generators/convention.ts","../src/core/package-json.ts","../src/core/detect.ts","../src/commands/init.ts","../src/cli.ts"],"names":["path","p","fs","resolveTemplateDir","fileURLToPath","TEMPLATE_DIR","ejs","rule","LIMIT","ADR_FILE","init_adr_numbering","CATEGORY_DESCRIPTIONS","runSync","runNew","runArchive","runEnable","runDisable","runLintCommand"],"mappings":"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","file":"cli.js","sourcesContent":["import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport type { ProjectType, Category } from \"./project-types\";\n\nexport type AgentId = \"claude\" | \"cursor\" | \"codex\" | \"gemini\";\n\nexport interface BeaconConfig {\n version: \"1.0\";\n projectType: ProjectType;\n categories: Category[];\n agents: AgentId[];\n language: string;\n}\n\nexport function configPath(projectRoot: string): string {\n return path.join(projectRoot, \"docs\", \"_meta\", \"beacon.config.json\");\n}\n\nexport async function readConfig(projectRoot: string): Promise<BeaconConfig> {\n const p = configPath(projectRoot);\n if (!(await fs.pathExists(p))) {\n throw new Error(\n `Could not find docs/_meta/beacon.config.json at ${projectRoot}. Run \\`beacon init\\` first.`,\n );\n }\n return (await fs.readJson(p)) as BeaconConfig;\n}\n\nexport async function writeConfig(\n projectRoot: string,\n config: BeaconConfig,\n): Promise<void> {\n const p = configPath(projectRoot);\n await fs.ensureDir(path.dirname(p));\n const json = JSON.stringify(config, null, 2) + \"\\n\";\n await fs.writeFile(p, json, \"utf8\");\n}\n","import type { Category } from \"./project-types\";\n\nexport interface CategoryMeta {\n category: Category;\n location: string;\n suffix: string;\n archivable: boolean;\n datePrefix: boolean;\n numberedPrefix?: string;\n}\n\nexport const CATEGORY_META: Record<Category, CategoryMeta> = {\n reference: {\n category: \"reference\",\n location: \"reference\",\n suffix: \".pattern.md\",\n archivable: false,\n datePrefix: false,\n },\n architecture: {\n category: \"architecture\",\n location: \"architecture\",\n suffix: \".architecture.md\",\n archivable: false,\n datePrefix: false,\n },\n adr: {\n category: \"adr\",\n location: \"adr\",\n suffix: \".md\",\n archivable: false,\n datePrefix: false,\n numberedPrefix: \"ADR-\",\n },\n plans: {\n category: \"plans\",\n location: \"plans\",\n suffix: \".plan.md\",\n archivable: true,\n datePrefix: false,\n },\n backlog: {\n category: \"backlog\",\n location: \"backlog\",\n suffix: \".todo.md\",\n archivable: false,\n datePrefix: false,\n },\n evaluations: {\n category: \"evaluations\",\n location: \"evaluations\",\n suffix: \".eval.md\",\n archivable: false,\n datePrefix: true,\n },\n compliance: {\n category: \"compliance\",\n location: \"compliance\",\n suffix: \".md\",\n archivable: false,\n datePrefix: false,\n },\n business: {\n category: \"business\",\n location: \"business\",\n suffix: \".business.md\",\n archivable: false,\n datePrefix: false,\n },\n modules: {\n category: \"modules\",\n location: \"modules\",\n suffix: \".module.md\",\n archivable: false,\n datePrefix: false,\n },\n integrations: {\n category: \"integrations\",\n location: \"integrations\",\n suffix: \".guide.md\",\n archivable: false,\n datePrefix: false,\n },\n operations: {\n category: \"operations\",\n location: \"operations\",\n suffix: \".guide.md\",\n archivable: false,\n datePrefix: false,\n },\n roadmaps: {\n category: \"roadmaps\",\n location: \"roadmaps\",\n suffix: \".roadmap.md\",\n archivable: true,\n datePrefix: false,\n },\n};\n\nexport function metaFor(category: Category): CategoryMeta {\n return CATEGORY_META[category];\n}\n\nexport function suffixFor(category: Category): string {\n return CATEGORY_META[category].suffix;\n}\n\nexport function locationFor(category: Category): string {\n return CATEGORY_META[category].location;\n}\n\nexport function isArchivable(category: Category): boolean {\n return CATEGORY_META[category].archivable;\n}\n\nexport function requiresDatePrefix(category: Category): boolean {\n return CATEGORY_META[category].datePrefix;\n}\n","import path from \"node:path\";\nimport type { Category } from \"./project-types\";\n\nexport function docsDir(root: string): string {\n return path.join(root, \"docs\");\n}\n\nexport function metaDir(root: string): string {\n return path.join(docsDir(root), \"_meta\");\n}\n\nexport function conventionPath(root: string): string {\n return path.join(metaDir(root), \"convention.md\");\n}\n\nexport function categoryDir(root: string, category: Category | string): string {\n return path.join(docsDir(root), category);\n}\n\nexport function archiveDir(root: string, category: Category | string): string {\n return path.join(categoryDir(root, category), \"_archive\");\n}\n\nexport function rootFile(root: string, name: string): string {\n return path.join(root, name);\n}\n","import ejs from \"ejs\";\nimport fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { BeaconConfig } from \"../core/config\";\nimport { metaFor } from \"../core/categories\";\nimport type { Category } from \"../core/project-types\";\n\nfunction resolveTemplateDir(): string {\n const here = path.dirname(fileURLToPath(import.meta.url));\n const candidate = path.join(here, \"templates\");\n if (fs.existsSync(candidate)) return candidate;\n return path.join(here, \"..\", \"templates\");\n}\nconst TEMPLATE_DIR = resolveTemplateDir();\n\nconst CATEGORY_DESCRIPTIONS: Record<Category, { title: string; description: string }> = {\n reference: { title: \"reference/\", description: \"Replicable technical patterns — *how* something is done.\" },\n architecture: { title: \"architecture/\", description: \"System structure and layering decisions.\" },\n adr: { title: \"adr/\", description: \"Architecture Decision Records — *why* a choice was made.\" },\n plans: { title: \"plans/\", description: \"Active work with checked TODOs.\" },\n backlog: { title: \"backlog/\", description: \"Future work items not yet planned.\" },\n evaluations: { title: \"evaluations/\", description: \"Date-prefixed audits and state snapshots.\" },\n compliance: { title: \"compliance/\", description: \"Regulatory and normative documents.\" },\n business: { title: \"business/\", description: \"Business model, pricing, product strategy.\" },\n modules: { title: \"modules/\", description: \"Domain modules and their functional behavior.\" },\n integrations: { title: \"integrations/\", description: \"External service setup and configuration.\" },\n operations: { title: \"operations/\", description: \"Runbooks, deploy guides, troubleshooting.\" },\n roadmaps: { title: \"roadmaps/\", description: \"Multi-sprint planning (longer than `plans/`).\" },\n};\n\nexport function renderMasterReadme(config: BeaconConfig): string {\n const tpl = fs.readFileSync(path.join(TEMPLATE_DIR, \"readme-master.md.ejs\"), \"utf8\");\n const has = (c: string) => config.categories.includes(c as Category);\n return ejs.render(tpl, { projectType: config.projectType, has }, { rmWhitespace: false });\n}\n\nexport function renderCategoryReadme(category: Category): string {\n const tpl = fs.readFileSync(path.join(TEMPLATE_DIR, \"readme-category.md.ejs\"), \"utf8\");\n const m = metaFor(category);\n const d = CATEGORY_DESCRIPTIONS[category];\n return ejs.render(tpl, {\n title: d.title,\n description: d.description,\n suffix: m.suffix,\n numberedPrefix: m.numberedPrefix,\n datePrefix: m.datePrefix,\n archivable: m.archivable,\n });\n}\n","export const HEADER = \"<!-- generated by beacon — do not edit. Edit docs/_meta/convention.md and run `beacon sync`. -->\";\n","import type { BeaconConfig } from \"../core/config\";\nimport { CATEGORY_META } from \"../core/categories\";\n\nexport function buildUniversalRules(): string {\n return [\n \"## Universal rules\",\n \"\",\n \"1. **One doc = one category.** Never duplicate across folders.\",\n \"2. **Status via folder, never filename.** Closed plan → `_archive/`, never `*_DONE.md` or `*_v2.md`.\",\n \"3. **kebab-case for all filenames.** No camelCase, no snake_case, no spaces.\",\n \"4. **README required in every category folder.**\",\n \"5. **ADRs are append-only.** Supersede with a new ADR; never edit an accepted one.\",\n \"6. **Evaluations are immutable snapshots.** To revise, create a new dated file.\",\n \"7. **Plans archive to `_archive/` when done.** Move them, never rename.\",\n \"8. **Generated AI files (this one) must match `docs/_meta/convention.md`.** Run `beacon sync` after editing the convention.\",\n \"9. **Don't create folders outside the convention.** Run `beacon enable <addon>` or propose an ADR.\",\n ].join(\"\\n\");\n}\n\nconst PROJECT_SPECIFIC_RULES: Record<string, string> = {\n compliance: \"- **`compliance/`** — regulatory docs only. Link from related modules/architecture; never duplicate.\",\n modules: \"- **`modules/`** — domain logic per module. Technical patterns extracted from a module go in `reference/`, not here.\",\n integrations: \"- **`integrations/*.guide.md`** — setup for external services (Stripe, email, etc.). Code patterns for *using* them go in `reference/`.\",\n business: \"- **`business/*.business.md`** — strategy, pricing, product model. No technical content.\",\n operations: \"- **`operations/*.guide.md`** — deploy guides, admin runbooks, troubleshooting. Post-mortems go in `evaluations/`.\",\n roadmaps: \"- **`roadmaps/*.roadmap.md`** — multi-sprint planning. Individual sprint work goes in `plans/`.\",\n};\n\nexport function buildProjectSpecificRules(config: BeaconConfig): string {\n const lines: string[] = [\"## Project-specific rules\", \"\"];\n let any = false;\n for (const c of config.categories) {\n if (PROJECT_SPECIFIC_RULES[c]) {\n lines.push(PROJECT_SPECIFIC_RULES[c]);\n any = true;\n }\n }\n if (!any) {\n lines.push(\"- (none for this project)\");\n }\n return lines.join(\"\\n\");\n}\n\nconst DECISION_ROWS: Record<string, string> = {\n reference: '| \"How is X done technically?\" | `reference/` |',\n architecture: '| \"How is the system structured?\" | `architecture/` |',\n adr: '| \"Why was X decided?\" | `adr/` |',\n modules: '| \"What does module X do?\" | `modules/` |',\n compliance: '| \"Does X comply with regulation Y?\" | `compliance/` |',\n integrations: '| \"How do I set up service X?\" | `integrations/` |',\n operations: '| \"How do I deploy/administer X?\" | `operations/` |',\n business: '| \"What is the business model?\" | `business/` |',\n plans: '| \"What is being built right now?\" | `plans/` |',\n roadmaps: '| \"What is planned for next quarter?\" | `roadmaps/` |',\n backlog: '| \"What is on the future backlog?\" | `backlog/` |',\n evaluations: '| \"What was the state at date X?\" | `evaluations/` |',\n};\n\nexport function buildDecisionTable(config: BeaconConfig): string {\n const lines = [\n \"## Where does X go?\",\n \"\",\n \"| Question | Folder |\",\n \"|---|---|\",\n ];\n for (const c of config.categories) {\n if (DECISION_ROWS[c]) lines.push(DECISION_ROWS[c]);\n }\n return lines.join(\"\\n\");\n}\n\nexport function buildSuffixTable(config: BeaconConfig): string {\n const lines = [\"## Suffix reference\", \"\", \"| Folder | Suffix |\", \"|---|---|\"];\n for (const c of config.categories) {\n lines.push(`| \\`${c}/\\` | \\`${CATEGORY_META[c].suffix}\\` |`);\n }\n return lines.join(\"\\n\");\n}\n","import type { BeaconConfig } from \"../core/config\";\nimport { HEADER } from \"./_header\";\nimport { buildUniversalRules, buildProjectSpecificRules, buildDecisionTable } from \"./ai-rules\";\n\nexport function renderClaudeMd(config: BeaconConfig): string {\n return [\n HEADER,\n \"\",\n \"# Documentation Convention\",\n \"\",\n \"> Project type: **\" + config.projectType + \"**. Full convention: [`docs/_meta/convention.md`](docs/_meta/convention.md).\",\n \"\",\n buildUniversalRules(),\n \"\",\n buildProjectSpecificRules(config),\n \"\",\n buildDecisionTable(config),\n \"\",\n ].join(\"\\n\");\n}\n","import type { BeaconConfig } from \"../core/config\";\nimport { HEADER } from \"./_header\";\nimport { buildUniversalRules, buildProjectSpecificRules, buildDecisionTable } from \"./ai-rules\";\n\nexport function renderAgentsMd(config: BeaconConfig): string {\n return [\n HEADER,\n \"\",\n \"# AGENTS.md — Documentation Convention\",\n \"\",\n \"> Read by OpenAI Codex / GitHub Copilot. Full convention: [`docs/_meta/convention.md`](docs/_meta/convention.md).\",\n \"\",\n buildUniversalRules(),\n \"\",\n buildProjectSpecificRules(config),\n \"\",\n buildDecisionTable(config),\n \"\",\n ].join(\"\\n\");\n}\n","import type { BeaconConfig } from \"../core/config\";\nimport { HEADER } from \"./_header\";\nimport { buildUniversalRules, buildProjectSpecificRules, buildDecisionTable } from \"./ai-rules\";\n\nexport function renderGeminiMd(config: BeaconConfig): string {\n return [\n HEADER,\n \"\",\n \"# GEMINI.md — Documentation Convention\",\n \"\",\n \"> Read by Gemini CLI. Full convention: [`docs/_meta/convention.md`](docs/_meta/convention.md).\",\n \"\",\n buildUniversalRules(),\n \"\",\n buildProjectSpecificRules(config),\n \"\",\n buildDecisionTable(config),\n \"\",\n ].join(\"\\n\");\n}\n","import type { BeaconConfig } from \"../core/config\";\nimport { HEADER } from \"./_header\";\nimport { buildUniversalRules, buildProjectSpecificRules } from \"./ai-rules\";\n\nexport function renderCursorRules(config: BeaconConfig): string {\n return [\n HEADER,\n \"\",\n buildUniversalRules(),\n \"\",\n buildProjectSpecificRules(config),\n \"\",\n ].join(\"\\n\");\n}\n\nexport function renderCursorMdc(config: BeaconConfig): string {\n const front = [\n \"---\",\n \"description: Beacon documentation convention — where docs go and how they're named.\",\n 'globs: [\"docs/**/*.md\"]',\n \"alwaysApply: true\",\n \"---\",\n ].join(\"\\n\");\n return [\n front,\n \"\",\n HEADER,\n \"\",\n buildUniversalRules(),\n \"\",\n buildProjectSpecificRules(config),\n \"\",\n ].join(\"\\n\");\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { readConfig } from \"../core/config\";\nimport { rootFile } from \"../core/paths\";\nimport { renderClaudeMd } from \"../generators/claude\";\nimport { renderAgentsMd } from \"../generators/agents\";\nimport { renderGeminiMd } from \"../generators/gemini\";\nimport { renderCursorRules, renderCursorMdc } from \"../generators/cursor\";\n\nexport async function runSync(opts: { root: string }): Promise<void> {\n const config = await readConfig(opts.root);\n\n if (config.agents.includes(\"claude\")) {\n await fs.writeFile(rootFile(opts.root, \"CLAUDE.md\"), renderClaudeMd(config), \"utf8\");\n }\n if (config.agents.includes(\"codex\")) {\n await fs.writeFile(rootFile(opts.root, \"AGENTS.md\"), renderAgentsMd(config), \"utf8\");\n }\n if (config.agents.includes(\"gemini\")) {\n await fs.writeFile(rootFile(opts.root, \"GEMINI.md\"), renderGeminiMd(config), \"utf8\");\n }\n if (config.agents.includes(\"cursor\")) {\n await fs.writeFile(rootFile(opts.root, \".cursorrules\"), renderCursorRules(config), \"utf8\");\n const mdcDir = path.join(opts.root, \".cursor\", \"rules\");\n await fs.ensureDir(mdcDir);\n await fs.writeFile(path.join(mdcDir, \"beacon.mdc\"), renderCursorMdc(config), \"utf8\");\n }\n}\n","import fs from \"fs-extra\";\nimport { categoryDir } from \"./paths\";\n\nconst ADR_FILE = /^ADR-(\\d{3})-.+\\.md$/;\n\nexport async function nextAdrNumber(root: string): Promise<string> {\n const dir = categoryDir(root, \"adr\");\n if (!(await fs.pathExists(dir))) return \"001\";\n const files = await fs.readdir(dir);\n let max = 0;\n for (const f of files) {\n const m = ADR_FILE.exec(f);\n if (m) {\n const n = parseInt(m[1]!, 10);\n if (n > max) max = n;\n }\n }\n return String(max + 1).padStart(3, \"0\");\n}\n","import ejs from \"ejs\";\nimport fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nfunction resolveTemplateDir(): string {\n const here = path.dirname(fileURLToPath(import.meta.url));\n const candidate = path.join(here, \"templates\", \"frontmatter\");\n if (fs.existsSync(candidate)) return candidate;\n return path.join(here, \"..\", \"templates\", \"frontmatter\");\n}\n\nconst TEMPLATE_DIR = resolveTemplateDir();\n\nexport type DocType =\n | \"plan\"\n | \"adr\"\n | \"pattern\"\n | \"eval\"\n | \"architecture\"\n | \"module\"\n | \"guide\"\n | \"roadmap\"\n | \"todo\"\n | \"business\"\n | \"compliance\";\n\nexport interface RenderDocInput {\n type: DocType;\n title: string;\n today: string;\n number?: string;\n}\n\nexport function renderDoc(input: RenderDocInput): string {\n const tplPath = path.join(TEMPLATE_DIR, `${input.type}.md.ejs`);\n const tpl = fs.readFileSync(tplPath, \"utf8\");\n return ejs.render(tpl, input);\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { readConfig } from \"../core/config\";\nimport { metaFor } from \"../core/categories\";\nimport { categoryDir } from \"../core/paths\";\nimport { nextAdrNumber } from \"../core/adr-numbering\";\nimport { renderDoc, type DocType } from \"../generators/doc\";\nimport type { Category } from \"../core/project-types\";\n\nconst DOC_TYPE_TO_CATEGORY: Record<DocType, Category> = {\n plan: \"plans\",\n adr: \"adr\",\n pattern: \"reference\",\n eval: \"evaluations\",\n architecture: \"architecture\",\n module: \"modules\",\n guide: \"integrations\", // ambiguous — caller can override via `category` field\n roadmap: \"roadmaps\",\n todo: \"backlog\",\n business: \"business\",\n compliance: \"compliance\",\n};\n\nconst KEBAB = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n\nexport interface RunNewInput {\n root: string;\n type: DocType;\n slug: string;\n today: string;\n category?: \"integrations\" | \"operations\";\n}\n\nexport async function runNew(input: RunNewInput): Promise<string> {\n if (!KEBAB.test(input.slug)) {\n throw new Error(`Slug must be kebab-case: \"${input.slug}\".`);\n }\n\n const config = await readConfig(input.root);\n\n const category: Category =\n input.type === \"guide\" && input.category\n ? input.category\n : DOC_TYPE_TO_CATEGORY[input.type];\n\n if (!config.categories.includes(category)) {\n throw new Error(\n `Category \"${category}\" is not enabled. Run \\`beacon enable ${category}\\` first.`,\n );\n }\n\n const meta = metaFor(category);\n const dir = categoryDir(input.root, category);\n let filename: string;\n let number: string | undefined;\n\n if (meta.numberedPrefix) {\n number = await nextAdrNumber(input.root);\n filename = `${meta.numberedPrefix}${number}-${input.slug}.md`;\n } else if (meta.datePrefix) {\n filename = `${input.today}-${input.slug}${meta.suffix}`;\n } else {\n filename = `${input.slug}${meta.suffix}`;\n }\n\n const filePath = path.join(dir, filename);\n if (await fs.pathExists(filePath)) {\n throw new Error(`File already exists: ${filePath}`);\n }\n\n const content = renderDoc({\n type: input.type,\n title: input.slug,\n today: input.today,\n number,\n });\n\n await fs.writeFile(filePath, content, \"utf8\");\n return filePath;\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { metaFor } from \"../core/categories\";\nimport { archiveDir, categoryDir } from \"../core/paths\";\nimport type { Category } from \"../core/project-types\";\n\nexport interface RunArchiveInput {\n root: string;\n type: string;\n slug: string;\n force: boolean;\n}\n\nexport interface ArchiveResult {\n source: string;\n destination: string;\n warnings: string[];\n}\n\nconst TYPE_TO_CATEGORY: Record<string, Category> = {\n plan: \"plans\",\n roadmap: \"roadmaps\",\n};\n\nexport async function runArchive(input: RunArchiveInput): Promise<ArchiveResult> {\n const category = TYPE_TO_CATEGORY[input.type];\n if (!category) {\n throw new Error(`Type \"${input.type}\" cannot be archived. Only plan and roadmap support archiving.`);\n }\n\n const meta = metaFor(category);\n if (!meta.archivable) {\n throw new Error(`Category \"${category}\" cannot be archived.`);\n }\n\n const filename = `${input.slug}${meta.suffix}`;\n const source = path.join(categoryDir(input.root, category), filename);\n if (!(await fs.pathExists(source))) {\n throw new Error(`File not found: ${source}`);\n }\n\n const warnings: string[] = [];\n const body = await fs.readFile(source, \"utf8\");\n if (/- \\[ \\]/.test(body)) {\n warnings.push(\"Unchecked TODOs remain in the document.\");\n if (!input.force) {\n throw new Error(\n \"Document has unchecked TODOs. Re-run with --force to archive anyway.\",\n );\n }\n }\n\n const dest = path.join(archiveDir(input.root, category), filename);\n await fs.ensureDir(path.dirname(dest));\n await fs.move(source, dest, { overwrite: false });\n\n return { source, destination: dest, warnings };\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { readConfig, writeConfig } from \"../core/config\";\nimport { categoryDir, archiveDir } from \"../core/paths\";\nimport { isArchivable } from \"../core/categories\";\nimport { renderCategoryReadme } from \"../generators/readme\";\nimport { runSync } from \"./sync\";\nimport type { Category } from \"../core/project-types\";\n\nexport async function runEnable(opts: { root: string; addon: string }): Promise<void> {\n const cfg = await readConfig(opts.root);\n const addon = opts.addon as Category;\n if (!cfg.categories.includes(addon)) {\n cfg.categories.push(addon);\n await writeConfig(opts.root, cfg);\n }\n const dir = categoryDir(opts.root, addon);\n await fs.ensureDir(dir);\n const readme = path.join(dir, \"README.md\");\n if (!(await fs.pathExists(readme))) {\n await fs.writeFile(readme, renderCategoryReadme(addon), \"utf8\");\n }\n if (isArchivable(addon)) {\n await fs.ensureDir(archiveDir(opts.root, addon));\n }\n await runSync({ root: opts.root });\n}\n\nexport async function runDisable(opts: {\n root: string;\n addon: string;\n force: boolean;\n}): Promise<void> {\n const cfg = await readConfig(opts.root);\n const dir = categoryDir(opts.root, opts.addon);\n if (await fs.pathExists(dir)) {\n const entries = await fs.readdir(dir);\n const hasContent = entries.some(\n (e) => e !== \"README.md\" && e !== \"_archive\",\n );\n if (hasContent && !opts.force) {\n throw new Error(\n `Folder ${dir} contains documents. Re-run with --force to disable anyway (files are kept on disk).`,\n );\n }\n }\n cfg.categories = cfg.categories.filter((c) => c !== opts.addon);\n await writeConfig(opts.root, cfg);\n await runSync({ root: opts.root });\n}\n","import fg from \"fast-glob\";\nimport path from \"node:path\";\nimport { docsDir } from \"../core/paths\";\nimport type { DocFile } from \"./types\";\n\nexport async function walkDocs(root: string): Promise<DocFile[]> {\n const base = docsDir(root);\n const matches = await fg([\"**/*.md\"], {\n cwd: base,\n dot: false,\n onlyFiles: true,\n });\n return matches.map((rel) => {\n const segments = rel.split(\"/\");\n const category = segments[0] === \"_meta\" ? \"_meta\" : segments[0]!;\n return {\n absolutePath: path.join(base, rel),\n relativePath: rel, // relative to docs/, matches test expectation\n category,\n basename: path.basename(rel),\n isReadme: path.basename(rel) === \"README.md\",\n isArchived: segments.includes(\"_archive\"),\n };\n });\n}\n","import { readConfig } from \"../core/config\";\nimport { walkDocs } from \"./walker\";\nimport type { Finding, Rule, RuleContext, Severity } from \"./types\";\n\nexport interface RunLintResult {\n findings: Finding[];\n errorCount: number;\n warningCount: number;\n suggestionCount: number;\n}\n\nexport async function runLint(opts: { root: string; rules: Rule[] }): Promise<RunLintResult> {\n const config = await readConfig(opts.root);\n const files = await walkDocs(opts.root);\n const ctx: RuleContext = { root: opts.root, config, files };\n\n const findings: Finding[] = [];\n for (const rule of opts.rules) {\n const result = await rule.check(ctx);\n findings.push(...result);\n }\n\n const counts: Record<Severity, number> = { error: 0, warning: 0, suggestion: 0 };\n for (const f of findings) counts[f.severity]++;\n\n return {\n findings,\n errorCount: counts.error,\n warningCount: counts.warning,\n suggestionCount: counts.suggestion,\n };\n}\n","import type { Finding } from \"./types\";\n\nexport function formatText(findings: Finding[]): string {\n const lines: string[] = [];\n const groups = { error: [] as Finding[], warning: [] as Finding[], suggestion: [] as Finding[] };\n for (const f of findings) groups[f.severity].push(f);\n\n function block(title: string, items: Finding[]) {\n lines.push(`${title} (${items.length})`);\n for (const f of items) {\n const loc = f.file ? ` ${f.file}` : \"\";\n lines.push(` [${f.rule}]${loc} — ${f.message}`);\n }\n lines.push(\"\");\n }\n block(\"Errors\", groups.error);\n block(\"Warnings\", groups.warning);\n block(\"Suggestions\", groups.suggestion);\n return lines.join(\"\\n\");\n}\n\nexport function formatJson(findings: Finding[]): string {\n return JSON.stringify(findings, null, 2);\n}\n","import { CATEGORY_META } from \"../../core/categories\";\nimport type { Rule } from \"../types\";\n\nconst SUFFIX_TO_CATEGORY: Record<string, string> = {};\nfor (const [, m] of Object.entries(CATEGORY_META)) {\n if (m.suffix !== \".md\") SUFFIX_TO_CATEGORY[m.suffix] = m.location;\n}\n\nexport const rule: Rule = {\n name: \"suffix-location\",\n severity: \"error\",\n check(ctx) {\n const findings = [];\n for (const f of ctx.files) {\n if (f.isReadme) continue;\n for (const [suffix, expectedDir] of Object.entries(SUFFIX_TO_CATEGORY)) {\n if (f.basename.endsWith(suffix) && f.category !== expectedDir) {\n findings.push({\n severity: \"error\" as const,\n rule: \"suffix-location\",\n file: f.relativePath,\n message: `File with suffix \"${suffix}\" must live in docs/${expectedDir}/ (found in docs/${f.category}/).`,\n });\n }\n }\n }\n return findings;\n },\n};\n","import type { Rule } from \"../types\";\n\nconst KEBAB_OR_ADR = /^(ADR-\\d{3}-)?[a-z0-9]+(-[a-z0-9]+)*(\\.[a-z]+)*\\.md$/;\n\nexport const rule: Rule = {\n name: \"kebab-case\",\n severity: \"error\",\n check(ctx) {\n const findings = [];\n for (const f of ctx.files) {\n if (f.isReadme) continue;\n if (!KEBAB_OR_ADR.test(f.basename)) {\n findings.push({\n severity: \"error\" as const,\n rule: \"kebab-case\",\n file: f.relativePath,\n message: `Filename \"${f.basename}\" must be kebab-case (lowercase, hyphen-separated).`,\n });\n }\n }\n return findings;\n },\n};\n","import type { Rule } from \"../types\";\n\nconst DATE_PREFIX = /^\\d{4}-\\d{2}-\\d{2}-.+\\.eval\\.md$/;\n\nexport const rule: Rule = {\n name: \"eval-date-prefix\",\n severity: \"error\",\n check(ctx) {\n const findings = [];\n for (const f of ctx.files) {\n if (!f.basename.endsWith(\".eval.md\")) continue;\n if (!DATE_PREFIX.test(f.basename)) {\n findings.push({\n severity: \"error\" as const,\n rule: \"eval-date-prefix\",\n file: f.relativePath,\n message: `Eval file \"${f.basename}\" must start with YYYY-MM-DD-.`,\n });\n }\n }\n return findings;\n },\n};\n","import type { Rule } from \"../types\";\n\nexport const rule: Rule = {\n name: \"readme-present\",\n severity: \"error\",\n check(ctx) {\n const present = new Set<string>();\n for (const f of ctx.files) {\n if (f.isReadme && !f.isArchived) present.add(f.category);\n }\n const findings = [];\n for (const c of ctx.config.categories) {\n if (!present.has(c)) {\n findings.push({\n severity: \"error\" as const,\n rule: \"readme-present\",\n message: `docs/${c}/README.md is required.`,\n });\n }\n }\n return findings;\n },\n};\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { renderClaudeMd } from \"../../generators/claude\";\nimport { renderAgentsMd } from \"../../generators/agents\";\nimport { renderGeminiMd } from \"../../generators/gemini\";\nimport { renderCursorRules, renderCursorMdc } from \"../../generators/cursor\";\nimport type { Rule } from \"../types\";\n\nexport const rule: Rule = {\n name: \"ai-files-sync\",\n severity: \"error\",\n async check(ctx) {\n const findings = [];\n const checks: Array<{ agent: string; filename: string; render: () => string }> = [\n { agent: \"claude\", filename: \"CLAUDE.md\", render: () => renderClaudeMd(ctx.config) },\n { agent: \"codex\", filename: \"AGENTS.md\", render: () => renderAgentsMd(ctx.config) },\n { agent: \"gemini\", filename: \"GEMINI.md\", render: () => renderGeminiMd(ctx.config) },\n { agent: \"cursor\", filename: \".cursorrules\", render: () => renderCursorRules(ctx.config) },\n { agent: \"cursor\", filename: \".cursor/rules/beacon.mdc\", render: () => renderCursorMdc(ctx.config) },\n ];\n for (const c of checks) {\n if (!ctx.config.agents.includes(c.agent as never)) continue;\n const file = path.join(ctx.root, c.filename);\n if (!(await fs.pathExists(file))) {\n findings.push({\n severity: \"error\" as const,\n rule: \"ai-files-sync\",\n file: c.filename,\n message: `${c.filename} missing. Run \\`beacon sync\\`.`,\n });\n continue;\n }\n const actual = await fs.readFile(file, \"utf8\");\n const expected = c.render();\n if (actual !== expected) {\n findings.push({\n severity: \"error\" as const,\n rule: \"ai-files-sync\",\n file: c.filename,\n message: `${c.filename} is out of sync with docs/_meta/convention.md. Run \\`beacon sync\\`.`,\n });\n }\n }\n return findings;\n },\n};\n","import fs from \"fs-extra\";\nimport type { Rule } from \"../types\";\n\nexport const rule: Rule = {\n name: \"duplicate-titles\",\n severity: \"warning\",\n async check(ctx) {\n const titleMap = new Map<string, string[]>();\n for (const f of ctx.files) {\n if (f.isReadme || f.isArchived) continue;\n const content = await fs.readFile(f.absolutePath, \"utf8\");\n const m = /^#\\s+(.+)$/m.exec(content);\n if (!m) continue;\n const title = m[1]!.trim();\n const arr = titleMap.get(title) ?? [];\n arr.push(f.relativePath);\n titleMap.set(title, arr);\n }\n const findings = [];\n for (const [title, files] of titleMap) {\n if (files.length > 1) {\n findings.push({\n severity: \"warning\" as const,\n rule: \"duplicate-titles\",\n message: `Title \"${title}\" appears in: ${files.join(\", \")}`,\n });\n }\n }\n return findings;\n },\n};\n","import fs from \"fs-extra\";\nimport type { Rule } from \"../types\";\n\nconst LIMIT = 1000;\n\nexport const rule: Rule = {\n name: \"long-files\",\n severity: \"warning\",\n async check(ctx) {\n const findings = [];\n for (const f of ctx.files) {\n const content = await fs.readFile(f.absolutePath, \"utf8\");\n const lines = content.split(\"\\n\").length;\n if (lines > LIMIT) {\n findings.push({\n severity: \"warning\" as const,\n rule: \"long-files\",\n file: f.relativePath,\n message: `File has ${lines} lines (>${LIMIT}). Consider splitting.`,\n });\n }\n }\n return findings;\n },\n};\n","import type { Rule } from \"../types\";\n\nconst LIMIT = 30;\n\nexport const rule: Rule = {\n name: \"folder-size\",\n severity: \"warning\",\n check(ctx) {\n const counts = new Map<string, number>();\n for (const f of ctx.files) {\n if (f.isReadme || f.isArchived) continue;\n counts.set(f.category, (counts.get(f.category) ?? 0) + 1);\n }\n const findings = [];\n for (const [cat, count] of counts) {\n if (count > LIMIT) {\n findings.push({\n severity: \"warning\" as const,\n rule: \"folder-size\",\n message: `docs/${cat}/ has ${count} files (>${LIMIT}). Consider organizing into subfolders.`,\n });\n }\n }\n return findings;\n },\n};\n","import type { Rule } from \"../types\";\n\nconst ADR_FILE = /^ADR-(\\d{3})-.+\\.md$/;\n\nexport const rule: Rule = {\n name: \"adr-numbering\",\n severity: \"warning\",\n check(ctx) {\n const numbers: number[] = [];\n for (const f of ctx.files) {\n if (f.category !== \"adr\") continue;\n const m = ADR_FILE.exec(f.basename);\n if (m) numbers.push(parseInt(m[1]!, 10));\n }\n numbers.sort((a, b) => a - b);\n const findings = [];\n for (let i = 1; i < numbers.length; i++) {\n const prev = numbers[i - 1]!;\n const cur = numbers[i]!;\n if (cur > prev + 1) {\n for (let n = prev + 1; n < cur; n++) {\n findings.push({\n severity: \"warning\" as const,\n rule: \"adr-numbering\",\n message: `ADR-${String(n).padStart(3, \"0\")} is missing. Intentional gaps (rejected/superseded) are OK; otherwise renumber.`,\n });\n }\n }\n }\n return findings;\n },\n};\n","import fs from \"fs-extra\";\nimport type { Rule } from \"../types\";\n\nconst STALE_MS = 30 * 24 * 60 * 60 * 1000;\n\nexport const rule: Rule = {\n name: \"stale-plans\",\n severity: \"suggestion\",\n async check(ctx) {\n const findings = [];\n const now = Date.now();\n for (const f of ctx.files) {\n if (f.category !== \"plans\" || f.isArchived || f.isReadme) continue;\n const stat = await fs.stat(f.absolutePath);\n if (now - stat.mtimeMs > STALE_MS) {\n findings.push({\n severity: \"suggestion\" as const,\n rule: \"stale-plans\",\n file: f.relativePath,\n message: `Plan not modified in >30 days. If complete, archive it.`,\n });\n }\n }\n return findings;\n },\n};\n","import fs from \"fs-extra\";\nimport matter from \"gray-matter\";\nimport type { Rule } from \"../types\";\n\nexport const rule: Rule = {\n name: \"adr-status\",\n severity: \"suggestion\",\n async check(ctx) {\n const findings = [];\n for (const f of ctx.files) {\n if (f.category !== \"adr\" || f.isReadme) continue;\n const content = await fs.readFile(f.absolutePath, \"utf8\");\n const fm = matter(content).data as { status?: string };\n if (!fm.status) {\n findings.push({\n severity: \"suggestion\" as const,\n rule: \"adr-status\",\n file: f.relativePath,\n message: \"ADR missing `status:` frontmatter (proposed/accepted/superseded/rejected).\",\n });\n }\n }\n return findings;\n },\n};\n","import { runLint } from \"../linter\";\nimport { formatText, formatJson } from \"../linter/reporter\";\nimport { rule as suffixLocation } from \"../linter/rules/suffix-location\";\nimport { rule as kebabCase } from \"../linter/rules/kebab-case\";\nimport { rule as evalDate } from \"../linter/rules/eval-date-prefix\";\nimport { rule as readmePresent } from \"../linter/rules/readme-present\";\nimport { rule as aiFilesSync } from \"../linter/rules/ai-files-sync\";\nimport { rule as duplicateTitles } from \"../linter/rules/duplicate-titles\";\nimport { rule as longFiles } from \"../linter/rules/long-files\";\nimport { rule as folderSize } from \"../linter/rules/folder-size\";\nimport { rule as adrNumbering } from \"../linter/rules/adr-numbering\";\nimport { rule as stalePlans } from \"../linter/rules/stale-plans\";\nimport { rule as adrStatus } from \"../linter/rules/adr-status\";\n\nconst RULES = [\n suffixLocation,\n kebabCase,\n evalDate,\n readmePresent,\n aiFilesSync,\n duplicateTitles,\n longFiles,\n folderSize,\n adrNumbering,\n stalePlans,\n adrStatus,\n];\n\nexport interface LintCommandResult {\n exitCode: 0 | 1;\n output: string;\n}\n\nexport async function runLintCommand(opts: {\n root: string;\n strict: boolean;\n json: boolean;\n}): Promise<LintCommandResult> {\n const result = await runLint({ root: opts.root, rules: RULES });\n\n let exitCode: 0 | 1 = 0;\n if (result.errorCount > 0) exitCode = 1;\n if (opts.strict && result.warningCount > 0) exitCode = 1;\n\n const output = opts.json ? formatJson(result.findings) : formatText(result.findings);\n return { exitCode, output };\n}\n","export const PROJECT_TYPES = [\n \"web-app\",\n \"backend-service\",\n \"library\",\n \"cli-tool\",\n \"mobile-app\",\n \"monorepo\",\n \"custom\",\n] as const;\n\nexport type ProjectType = (typeof PROJECT_TYPES)[number];\n\nexport const CORE_CATEGORIES = [\n \"reference\",\n \"architecture\",\n \"adr\",\n \"plans\",\n \"backlog\",\n \"evaluations\",\n] as const;\n\nexport const ADDON_CATEGORIES = [\n \"compliance\",\n \"business\",\n \"modules\",\n \"integrations\",\n \"operations\",\n \"roadmaps\",\n] as const;\n\nexport type CoreCategory = (typeof CORE_CATEGORIES)[number];\nexport type AddonCategory = (typeof ADDON_CATEGORIES)[number];\nexport type Category = CoreCategory | AddonCategory;\n\nconst DEFAULTS_BY_TYPE: Record<ProjectType, readonly Category[]> = {\n \"web-app\": [\n ...CORE_CATEGORIES,\n \"business\",\n \"integrations\",\n \"operations\",\n \"roadmaps\",\n ],\n \"backend-service\": [\n ...CORE_CATEGORIES,\n \"integrations\",\n \"operations\",\n \"roadmaps\",\n ],\n library: [...CORE_CATEGORIES],\n \"cli-tool\": [...CORE_CATEGORIES, \"operations\"],\n \"mobile-app\": [\n ...CORE_CATEGORIES,\n \"business\",\n \"integrations\",\n \"operations\",\n \"roadmaps\",\n ],\n monorepo: [\n ...CORE_CATEGORIES,\n \"modules\",\n \"integrations\",\n \"operations\",\n \"roadmaps\",\n ],\n custom: [],\n};\n\nexport function defaultCategoriesFor(type: ProjectType): Category[] {\n return [...DEFAULTS_BY_TYPE[type]];\n}\n\nexport function isValidProjectType(value: string): value is ProjectType {\n return (PROJECT_TYPES as readonly string[]).includes(value);\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport type { BeaconConfig } from \"../core/config\";\nimport { writeConfig } from \"../core/config\";\nimport { isArchivable } from \"../core/categories\";\nimport { docsDir, metaDir, categoryDir, archiveDir, conventionPath } from \"../core/paths\";\nimport { renderMasterReadme, renderCategoryReadme } from \"./readme\";\nimport { renderConvention as renderConventionPlaceholder } from \"./convention\";\n\nexport async function scaffoldStructure(\n root: string,\n config: BeaconConfig,\n): Promise<void> {\n await fs.ensureDir(metaDir(root));\n\n for (const category of config.categories) {\n const dir = categoryDir(root, category);\n await fs.ensureDir(dir);\n if (isArchivable(category)) {\n await fs.ensureDir(archiveDir(root, category));\n }\n const readmePath = path.join(dir, \"README.md\");\n if (!(await fs.pathExists(readmePath))) {\n await fs.writeFile(readmePath, renderCategoryReadme(category), \"utf8\");\n }\n }\n\n const masterReadmePath = path.join(docsDir(root), \"README.md\");\n if (!(await fs.pathExists(masterReadmePath))) {\n await fs.writeFile(masterReadmePath, renderMasterReadme(config), \"utf8\");\n }\n\n const convention = conventionPath(root);\n if (!(await fs.pathExists(convention))) {\n await fs.writeFile(convention, renderConventionPlaceholder(config), \"utf8\");\n }\n\n await writeConfig(root, config);\n}\n","import ejs from \"ejs\";\nimport fs from \"fs-extra\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { BeaconConfig } from \"../core/config\";\nimport { CATEGORY_META } from \"../core/categories\";\nimport type { Category } from \"../core/project-types\";\n\nfunction resolveTemplateDir(): string {\n const here = path.dirname(fileURLToPath(import.meta.url));\n const candidate = path.join(here, \"templates\");\n if (fs.existsSync(candidate)) return candidate;\n return path.join(here, \"..\", \"templates\");\n}\nconst TEMPLATE_DIR = resolveTemplateDir();\n\nconst CATEGORY_DESCRIPTIONS: Record<Category, string> = {\n reference: \"Replicable technical patterns.\",\n architecture: \"System structure and layering decisions.\",\n adr: \"Architecture Decision Records.\",\n plans: \"Active work with TODOs.\",\n backlog: \"Future items waiting to be sprinted.\",\n evaluations: \"Date-prefixed audits and snapshots.\",\n compliance: \"Regulatory and normative docs.\",\n business: \"Business model and product strategy.\",\n modules: \"Domain modules and their behavior.\",\n integrations: \"External service setup.\",\n operations: \"Runbooks and deploy guides.\",\n roadmaps: \"Multi-sprint planning.\",\n};\n\nexport function renderConvention(config: BeaconConfig): string {\n const tpl = fs.readFileSync(path.join(TEMPLATE_DIR, \"convention.md.ejs\"), \"utf8\");\n const suffixes: Record<string, string> = {};\n const suffixNotes: Record<string, string> = {};\n for (const c of config.categories) {\n suffixes[c] = CATEGORY_META[c].suffix;\n if (CATEGORY_META[c].numberedPrefix) suffixNotes[c] = `Auto-numbered (${CATEGORY_META[c].numberedPrefix}NNN-).`;\n if (CATEGORY_META[c].datePrefix) suffixNotes[c] = \"Requires `YYYY-MM-DD-` prefix.\";\n }\n return ejs.render(tpl, {\n projectType: config.projectType,\n categories: config.categories,\n descriptions: CATEGORY_DESCRIPTIONS,\n suffixes,\n suffixNotes,\n });\n}\n\n// Keep backward-compat export used by scaffold.ts during transition\nexport const renderConventionPlaceholder = renderConvention;\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\n\nexport async function addDocsLintScript(projectRoot: string): Promise<void> {\n const p = path.join(projectRoot, \"package.json\");\n if (!(await fs.pathExists(p))) return;\n\n const pkg = (await fs.readJson(p)) as { scripts?: Record<string, string> };\n pkg.scripts ??= {};\n if (!pkg.scripts[\"docs:lint\"]) {\n pkg.scripts[\"docs:lint\"] = \"beacon lint\";\n await fs.writeFile(p, JSON.stringify(pkg, null, 2) + \"\\n\", \"utf8\");\n }\n}\n","import fs from \"fs-extra\";\nimport path from \"node:path\";\nimport type { AddonCategory } from \"./project-types\";\n\nexport interface ProjectContext {\n hasPackageJson: boolean;\n hasTsconfig: boolean;\n hasGit: boolean;\n dependencies: string[];\n existingAgentFiles: string[];\n suggestedAddons: AddonCategory[];\n suggestedSubfolders: string[];\n}\n\nconst AGENT_FILES = [\n \"CLAUDE.md\",\n \"AGENTS.md\",\n \"GEMINI.md\",\n \".cursorrules\",\n];\n\nconst INTEGRATIONS_HINTS = [\n \"stripe\",\n \"@stripe/stripe-js\",\n \"mailgun-js\",\n \"twilio\",\n \"@sendgrid/mail\",\n \"resend\",\n];\n\nconst DATABASE_HINTS = [\n \"@prisma/client\",\n \"prisma\",\n \"drizzle-orm\",\n \"mongoose\",\n \"typeorm\",\n \"knex\",\n \"sequelize\",\n];\n\nexport async function detectContext(root: string): Promise<ProjectContext> {\n const pkgPath = path.join(root, \"package.json\");\n const tsconfigPath = path.join(root, \"tsconfig.json\");\n const gitPath = path.join(root, \".git\");\n\n const hasPackageJson = await fs.pathExists(pkgPath);\n const hasTsconfig = await fs.pathExists(tsconfigPath);\n const hasGit = await fs.pathExists(gitPath);\n\n let dependencies: string[] = [];\n if (hasPackageJson) {\n const pkg = await fs.readJson(pkgPath);\n dependencies = [\n ...Object.keys(pkg.dependencies ?? {}),\n ...Object.keys(pkg.devDependencies ?? {}),\n ];\n }\n\n const existingAgentFiles: string[] = [];\n for (const f of AGENT_FILES) {\n if (await fs.pathExists(path.join(root, f))) {\n existingAgentFiles.push(f);\n }\n }\n\n const suggestedAddons: AddonCategory[] = [];\n if (dependencies.some((d) => INTEGRATIONS_HINTS.includes(d))) {\n suggestedAddons.push(\"integrations\");\n }\n\n const suggestedSubfolders: string[] = [];\n if (dependencies.some((d) => DATABASE_HINTS.includes(d))) {\n suggestedSubfolders.push(\"reference/database\");\n }\n\n return {\n hasPackageJson,\n hasTsconfig,\n hasGit,\n dependencies,\n existingAgentFiles,\n suggestedAddons,\n suggestedSubfolders,\n };\n}\n","import {\r\n PROJECT_TYPES,\r\n CORE_CATEGORIES,\r\n ADDON_CATEGORIES,\r\n defaultCategoriesFor,\r\n isValidProjectType,\r\n type ProjectType,\r\n type Category,\r\n} from \"../core/project-types\";\r\nimport type { AgentId, BeaconConfig } from \"../core/config\";\r\nimport { scaffoldStructure } from \"../generators/scaffold\";\r\nimport { addDocsLintScript } from \"../core/package-json\";\r\nimport type { ExistingFileAction } from \"../core/existing-files\";\r\nimport * as p from \"@clack/prompts\";\r\nimport { detectContext } from \"../core/detect\";\r\n\r\nexport interface InitOptions {\r\n root: string;\r\n yes: boolean;\r\n type: ProjectType;\r\n with: string[];\r\n without: string[];\r\n agents: AgentId[];\r\n language: string;\r\n existingFiles: ExistingFileAction;\r\n}\r\n\r\nconst ALL_CATEGORIES = new Set<string>([...CORE_CATEGORIES, ...ADDON_CATEGORIES]);\r\n\r\nexport async function runInit(options: InitOptions): Promise<BeaconConfig> {\r\n if (!isValidProjectType(options.type)) {\r\n throw new Error(\r\n `Unknown project type: \"${options.type}\". Valid types: ${PROJECT_TYPES.join(\", \")}.`,\r\n );\r\n }\r\n\r\n for (const c of [...options.with, ...options.without]) {\r\n if (!ALL_CATEGORIES.has(c)) {\r\n throw new Error(\r\n `Unknown category: \"${c}\". Valid categories: ${[...ALL_CATEGORIES].join(\", \")}.`,\r\n );\r\n }\r\n }\r\n\r\n const defaults = defaultCategoriesFor(options.type);\r\n const finalSet = new Set<Category>(defaults);\r\n for (const c of options.with) finalSet.add(c as Category);\r\n for (const c of options.without) finalSet.delete(c as Category);\r\n\r\n const config: BeaconConfig = {\r\n version: \"1.0\",\r\n projectType: options.type,\r\n categories: [...finalSet],\r\n agents: options.agents,\r\n language: options.language,\r\n };\r\n\r\n await scaffoldStructure(options.root, config);\r\n await addDocsLintScript(options.root);\r\n\r\n const { runSync } = await import(\"./sync\");\r\n await runSync({ root: options.root });\r\n\r\n return config;\r\n}\r\n\r\nexport async function runInitInteractive(opts: { root: string }): Promise<BeaconConfig> {\r\n p.intro(\"Beacon — initialize docs convention\");\r\n\r\n const ctx = await detectContext(opts.root);\r\n\r\n const type = (await p.select({\r\n message: \"Project type?\",\r\n options: [\r\n { value: \"web-app\", label: \"Web Application (full-stack, SaaS)\" },\r\n { value: \"backend-service\", label: \"Backend Service / API\" },\r\n { value: \"library\", label: \"Library / SDK / Package\" },\r\n { value: \"cli-tool\", label: \"CLI Tool\" },\r\n { value: \"mobile-app\", label: \"Mobile App\" },\r\n { value: \"monorepo\", label: \"Monorepo / Workspace\" },\r\n { value: \"custom\", label: \"Custom (no defaults)\" },\r\n ],\r\n })) as ProjectType;\r\n if (p.isCancel(type)) {\r\n p.cancel(\"Cancelled.\");\r\n process.exit(0);\r\n }\r\n\r\n const defaults = defaultCategoriesFor(type);\r\n const categoryOptions = [...CORE_CATEGORIES, ...ADDON_CATEGORIES].map((c) => ({\r\n value: c,\r\n label: c,\r\n hint: ctx.suggestedAddons.includes(c as never) ? \"suggested by detection\" : undefined,\r\n }));\r\n\r\n const categories = (await p.multiselect({\r\n message: \"Which categories to enable?\",\r\n options: categoryOptions,\r\n initialValues: defaults,\r\n required: false,\r\n })) as Category[];\r\n if (p.isCancel(categories)) {\r\n p.cancel(\"Cancelled.\");\r\n process.exit(0);\r\n }\r\n\r\n const agents = (await p.multiselect({\r\n message: \"Which AI agents do you use?\",\r\n options: [\r\n { value: \"claude\", label: \"Claude Code\" },\r\n { value: \"cursor\", label: \"Cursor\" },\r\n { value: \"codex\", label: \"Codex / Copilot (AGENTS.md)\" },\r\n { value: \"gemini\", label: \"Gemini CLI\" },\r\n ],\r\n initialValues: [\"claude\", \"cursor\"],\r\n required: true,\r\n })) as AgentId[];\r\n if (p.isCancel(agents)) {\r\n p.cancel(\"Cancelled.\");\r\n process.exit(0);\r\n }\r\n\r\n let existingAction: ExistingFileAction = \"replace\";\r\n if (ctx.existingAgentFiles.length > 0) {\r\n const action = await p.select({\r\n message: `Existing files found (${ctx.existingAgentFiles.join(\", \")}). What do you want to do?`,\r\n options: [\r\n { value: \"merge\", label: \"Merge — keep existing content, append Beacon section\" },\r\n { value: \"replace\", label: \"Replace — overwrite with Beacon content\" },\r\n { value: \"skip\", label: \"Skip — leave them untouched\" },\r\n ],\r\n });\r\n if (p.isCancel(action)) {\r\n p.cancel(\"Cancelled.\");\r\n process.exit(0);\r\n }\r\n existingAction = action as ExistingFileAction;\r\n }\r\n\r\n const config = await runInit({\r\n root: opts.root,\r\n yes: true,\r\n type,\r\n with: categories.filter((c) => !defaults.includes(c)),\r\n without: defaults.filter((c) => !categories.includes(c)),\r\n agents,\r\n language: \"en\",\r\n existingFiles: existingAction,\r\n });\r\n\r\n p.outro(`Beacon docs scaffolded at ${opts.root}/docs/`);\r\n return config;\r\n}\r\n","import { cac } from \"cac\";\nimport path from \"node:path\";\nimport { runInit, runInitInteractive } from \"./commands/init\";\nimport type { AgentId } from \"./core/config\";\nimport type { ProjectType } from \"./core/project-types\";\nimport type { ExistingFileAction } from \"./core/existing-files\";\n\nconst cli = cac(\"beacon\");\n\ncli\n .command(\"init\", \"Initialize Beacon docs convention in this project\")\n .option(\"--yes\", \"Run non-interactively\")\n .option(\"--type <type>\", \"Project type (web-app, backend-service, library, cli-tool, mobile-app, monorepo, custom)\")\n .option(\"--with <categories>\", \"Categories to add beyond defaults (comma-separated)\")\n .option(\"--without <categories>\", \"Categories to remove from defaults (comma-separated)\")\n .option(\"--agents <agents>\", \"AI agents to support (comma-separated: claude,cursor,codex,gemini)\")\n .option(\"--language <lang>\", \"Docs language\", { default: \"en\" })\n .action(async (opts) => {\n const root = process.cwd();\n if (opts.yes) {\n if (!opts.type) {\n console.error(\"Error: --type is required when using --yes.\");\n process.exit(1);\n }\n await runInit({\n root,\n yes: true,\n type: opts.type as ProjectType,\n with: splitList(opts.with),\n without: splitList(opts.without),\n agents: (splitList(opts.agents) as AgentId[]).length\n ? (splitList(opts.agents) as AgentId[])\n : [\"claude\", \"cursor\"],\n language: opts.language ?? \"en\",\n existingFiles: \"replace\" as ExistingFileAction,\n });\n } else {\n await runInitInteractive({ root });\n }\n });\n\ncli\n .command(\"sync\", \"Regenerate AI rule files from docs/_meta/convention.md\")\n .action(async () => {\n const { runSync } = await import(\"./commands/sync\");\n await runSync({ root: process.cwd() });\n console.log(\"✔ AI rule files regenerated.\");\n });\n\ncli\n .command(\"new <type> <slug>\", \"Create a new doc with correct location and naming\")\n .option(\"--category <cat>\", \"Disambiguate for `guide` (integrations|operations)\")\n .action(async (type, slug, opts) => {\n const { runNew } = await import(\"./commands/new\");\n const today = new Date().toISOString().slice(0, 10);\n const file = await runNew({\n root: process.cwd(),\n type, slug, today,\n category: opts.category,\n });\n console.log(`✔ Created ${path.relative(process.cwd(), file)}`);\n });\n\ncli\n .command(\"archive <type> <slug>\", \"Move a completed plan or roadmap to _archive/\")\n .option(\"--force\", \"Archive even if unchecked TODOs remain\")\n .action(async (type, slug, opts) => {\n const { runArchive } = await import(\"./commands/archive\");\n const result = await runArchive({\n root: process.cwd(),\n type, slug, force: !!opts.force,\n });\n if (result.warnings.length) {\n for (const w of result.warnings) console.warn(`⚠ ${w}`);\n }\n console.log(`✔ Archived to ${path.relative(process.cwd(), result.destination)}`);\n });\n\ncli\n .command(\"enable <addon>\", \"Enable an add-on category\")\n .action(async (addon) => {\n const { runEnable } = await import(\"./commands/toggle\");\n await runEnable({ root: process.cwd(), addon });\n console.log(`✔ Enabled ${addon}.`);\n });\n\ncli\n .command(\"disable <addon>\", \"Disable an add-on category\")\n .option(\"--force\", \"Disable even if the folder has documents\")\n .action(async (addon, opts) => {\n const { runDisable } = await import(\"./commands/toggle\");\n await runDisable({ root: process.cwd(), addon, force: !!opts.force });\n console.log(`✔ Disabled ${addon}.`);\n });\n\ncli\n .command(\"lint\", \"Validate the docs tree against the convention\")\n .option(\"--strict\", \"Escalate warnings to errors\")\n .option(\"--json\", \"Emit JSON output\")\n .action(async (opts) => {\n const { runLintCommand } = await import(\"./commands/lint\");\n const result = await runLintCommand({\n root: process.cwd(),\n strict: !!opts.strict,\n json: !!opts.json,\n });\n process.stdout.write(result.output);\n if (!opts.json && !result.output.endsWith(\"\\n\")) process.stdout.write(\"\\n\");\n process.exit(result.exitCode);\n });\n\ncli.help();\ncli.version(\"0.0.0\");\ncli.parse();\n\nfunction splitList(s?: string): string[] {\n if (!s) return [];\n return s.split(\",\").map((x) => x.trim()).filter(Boolean);\n}\n"]}
@@ -0,0 +1,33 @@
1
+ # Documentation Convention
2
+
3
+ > Single source of truth for the Beacon convention in this project. AI rule files (`CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, `.cursorrules`) are generated from this file — run `beacon sync` after editing.
4
+
5
+ ## Project type
6
+
7
+ `<%= projectType %>`
8
+
9
+ ## Enabled categories
10
+
11
+ <% categories.forEach(function(c) { -%>
12
+ - `<%= c %>/` — <%= descriptions[c] %>
13
+ <% }) -%>
14
+
15
+ ## Universal rules
16
+
17
+ 1. **One doc = one category.** Never duplicate across folders.
18
+ 2. **Status via folder, never filename.** Closed plan → `_archive/`, never `*_DONE.md`.
19
+ 3. **kebab-case for all filenames.**
20
+ 4. **README required in every category folder.**
21
+ 5. **ADRs are append-only.** Supersede with a new ADR; never edit an accepted one.
22
+ 6. **Evaluations are immutable snapshots.** To revise, create a new dated file.
23
+ 7. **Plans archive to `_archive/` when done.** Never rename.
24
+ 8. **Generated AI files must match this file.** Run `beacon sync` after editing.
25
+ 9. **Don't create folders outside this convention.** Run `beacon enable <addon>` or open an ADR.
26
+
27
+ ## Suffix table
28
+
29
+ | Category | Suffix | Notes |
30
+ |---|---|---|
31
+ <% categories.forEach(function(c) { -%>
32
+ | `<%= c %>/` | `<%= suffixes[c] %>` | <%= suffixNotes[c] || '' %> |
33
+ <% }) -%>
@@ -0,0 +1,16 @@
1
+ ---
2
+ adr: <%= number %>
3
+ title: <%= title %>
4
+ status: proposed
5
+ date: <%= today %>
6
+ supersedes: null
7
+ superseded-by: null
8
+ ---
9
+
10
+ # ADR-<%= number %>: <%= title %>
11
+
12
+ ## Context
13
+
14
+ ## Decision
15
+
16
+ ## Consequences
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: <%= title %>
3
+ updated: <%= today %>
4
+ ---
5
+
6
+ # <%= title %>
7
+
8
+ ## Overview
9
+
10
+ ## Components
11
+
12
+ ## Data flow
@@ -0,0 +1,8 @@
1
+ ---
2
+ title: <%= title %>
3
+ updated: <%= today %>
4
+ ---
5
+
6
+ # <%= title %>
7
+
8
+ (Strategy / pricing / model. No technical content.)
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: <%= title %>
3
+ regulation: <%= title %>
4
+ updated: <%= today %>
5
+ ---
6
+
7
+ # <%= title %>
8
+
9
+ ## Scope
10
+
11
+ ## Requirements
12
+
13
+ ## How we comply
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: <%= title %>
3
+ date: <%= today %>
4
+ scope: <!-- e.g., backend / frontend / system -->
5
+ ---
6
+
7
+ # <%= title %>
8
+
9
+ ## Summary
10
+
11
+ ## Findings
12
+
13
+ ## Recommendations
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: <%= title %>
3
+ updated: <%= today %>
4
+ ---
5
+
6
+ # <%= title %>
7
+
8
+ ## When to use
9
+
10
+ ## Steps
11
+
12
+ ## Troubleshooting
@@ -0,0 +1,12 @@
1
+ ---
2
+ module: <%= title %>
3
+ updated: <%= today %>
4
+ ---
5
+
6
+ # Module: <%= title %>
7
+
8
+ ## Purpose
9
+
10
+ ## Public API / boundaries
11
+
12
+ ## Internal flows
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: <%= title %>
3
+ created: <%= today %>
4
+ ---
5
+
6
+ # <%= title %>
7
+
8
+ ## Problem
9
+
10
+ ## Solution
11
+
12
+ ## Example
@@ -0,0 +1,18 @@
1
+ ---
2
+ title: <%= title %>
3
+ status: active
4
+ created: <%= today %>
5
+ ---
6
+
7
+ # <%= title %>
8
+
9
+ ## Goal
10
+
11
+ (One sentence describing what this plan accomplishes.)
12
+
13
+ ## TODOs
14
+
15
+ - [ ] First step
16
+ - [ ] Second step
17
+
18
+ ## Notes
@@ -0,0 +1,13 @@
1
+ ---
2
+ title: <%= title %>
3
+ status: active
4
+ created: <%= today %>
5
+ ---
6
+
7
+ # Roadmap: <%= title %>
8
+
9
+ ## Vision
10
+
11
+ ## Sprints
12
+
13
+ ## Risks
@@ -0,0 +1,10 @@
1
+ ---
2
+ title: <%= title %>
3
+ added: <%= today %>
4
+ ---
5
+
6
+ # <%= title %>
7
+
8
+ ## Why
9
+
10
+ ## Acceptance criteria
@@ -0,0 +1,21 @@
1
+ # <%= title %>
2
+
3
+ <%= description %>
4
+
5
+ ## Naming
6
+
7
+ Files in this folder use the suffix **`<%= suffix %>`** and **kebab-case** filenames.
8
+ <% if (numberedPrefix) { -%>
9
+
10
+ Files are numbered sequentially: `<%= numberedPrefix %>001-`, `<%= numberedPrefix %>002-`, etc.
11
+ <% } -%>
12
+ <% if (datePrefix) { -%>
13
+
14
+ Files require a `YYYY-MM-DD-` date prefix. Evaluations are immutable temporal snapshots; to revise, create a new dated file.
15
+ <% } -%>
16
+ <% if (archivable) { -%>
17
+
18
+ ## Archiving
19
+
20
+ Closed documents move to `_archive/`. Never rename a file to `*_DONE.md` or `*_v2.md` — status is tracked by folder, not filename.
21
+ <% } -%>
@@ -0,0 +1,48 @@
1
+ # Documentation
2
+
3
+ > Managed by [Beacon](https://beacon-docs.com). Project type: **<%= projectType %>**.
4
+
5
+ ## Where do I find...?
6
+
7
+ | Question | Folder |
8
+ |---|---|
9
+ <% if (has('reference')) { -%>
10
+ | "How is X done technically?" | `reference/` |
11
+ <% } -%>
12
+ <% if (has('architecture')) { -%>
13
+ | "How is the system structured?" | `architecture/` |
14
+ <% } -%>
15
+ <% if (has('adr')) { -%>
16
+ | "Why was X decided?" | `adr/` |
17
+ <% } -%>
18
+ <% if (has('modules')) { -%>
19
+ | "What does module X do?" | `modules/` |
20
+ <% } -%>
21
+ <% if (has('compliance')) { -%>
22
+ | "Does X comply with regulation Y?" | `compliance/` |
23
+ <% } -%>
24
+ <% if (has('integrations')) { -%>
25
+ | "How do I set up Stripe/email/etc?" | `integrations/` |
26
+ <% } -%>
27
+ <% if (has('operations')) { -%>
28
+ | "How do I deploy / administer X?" | `operations/` |
29
+ <% } -%>
30
+ <% if (has('business')) { -%>
31
+ | "What is the business model?" | `business/` |
32
+ <% } -%>
33
+ <% if (has('plans')) { -%>
34
+ | "What is being built right now?" | `plans/` |
35
+ <% } -%>
36
+ <% if (has('roadmaps')) { -%>
37
+ | "What is planned for the next quarter?" | `roadmaps/` |
38
+ <% } -%>
39
+ <% if (has('backlog')) { -%>
40
+ | "What is on the future backlog?" | `backlog/` |
41
+ <% } -%>
42
+ <% if (has('evaluations')) { -%>
43
+ | "What was the state at date X?" | `evaluations/` |
44
+ <% } -%>
45
+
46
+ ## Convention
47
+
48
+ The full convention lives at [`_meta/convention.md`](_meta/convention.md). AI agent rule files at the project root are generated from it — never edit those by hand.
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "beacon-docs",
3
+ "version": "0.1.0",
4
+ "description": "Trail markers for AI-collaborative codebases — opinionated documentation convention and CLI.",
5
+ "type": "module",
6
+ "bin": {
7
+ "beacon": "dist/cli.js"
8
+ },
9
+ "main": "./dist/cli.js",
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "engines": {
16
+ "node": ">=20"
17
+ },
18
+ "scripts": {
19
+ "build": "tsup",
20
+ "dev": "tsup --watch",
21
+ "test": "vitest run",
22
+ "test:watch": "vitest",
23
+ "typecheck": "tsc --noEmit",
24
+ "lint": "echo 'No linter configured yet'",
25
+ "prepublishOnly": "npm run build",
26
+ "docs:lint": "beacon lint"
27
+ },
28
+ "keywords": [
29
+ "documentation",
30
+ "ai",
31
+ "claude",
32
+ "cursor",
33
+ "convention",
34
+ "cli"
35
+ ],
36
+ "author": "Julio Cesar Bautista Monsalvo <juliocbm500@gmail.com>",
37
+ "license": "MIT",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "git+https://github.com/Juliocbm/beacon-docs.git"
41
+ },
42
+ "bugs": {
43
+ "url": "https://github.com/Juliocbm/beacon-docs/issues"
44
+ },
45
+ "homepage": "https://github.com/Juliocbm/beacon-docs#readme",
46
+ "devDependencies": {
47
+ "@changesets/cli": "^2.31.0",
48
+ "@types/ejs": "^3.1.5",
49
+ "@types/fs-extra": "^11.0.4",
50
+ "@types/node": "^25.9.1",
51
+ "tsup": "^8.5.1",
52
+ "typescript": "^6.0.3",
53
+ "vitest": "^4.1.7"
54
+ },
55
+ "dependencies": {
56
+ "@clack/prompts": "^1.4.0",
57
+ "cac": "^7.0.0",
58
+ "ejs": "^5.0.2",
59
+ "fast-glob": "^3.3.3",
60
+ "fs-extra": "^11.3.5",
61
+ "gray-matter": "^4.0.3"
62
+ }
63
+ }