From b6bad83319d7931b8e10c365da5d140e2fd6c202 Mon Sep 17 00:00:00 2001 From: Janpeter Visser <30029041+madhura68@users.noreply.github.com> Date: Thu, 14 May 2026 19:15:12 +0200 Subject: [PATCH] fix(ST-1359): docs-index generator hardenen + dode INDEX-link weg (#204) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(ST-1359): docs-index generator indexeert alleen git-tracked bestanden scripts/generate-docs-index.mjs walkte de docs/-map op schijf en indexeerde elk .md-bestand — ook ongetrackte scratch-bestanden. Daardoor kon een tijdelijk review-bestand van een Claude-worktree-sessie een link in de gegenereerde INDEX.md krijgen die dood achterbleef nadat de worktree was opgeruimd. Vervangen door een `git ls-files -z docs`-listing: alleen getrackte (en gestagede) .md-bestanden komen nog in de index. EXCLUDE_PATTERNS en de archived-filter blijven ongewijzigd erbovenop werken; git ls-files is recursief en werkt correct binnen git-worktrees. Verificatie: npm run lint groen; regressietest met een ongetrackt docs/-bestand bevestigt dat het niet meer in INDEX.md belandt. Co-Authored-By: Claude Opus 4.7 (1M context) * docs(ST-1359): regenereer INDEX.md — verwijder dode reviews-link npm run docs:check-links faalde op een dode link naar docs/reviews/onderzoek-wat-er-gedaan-quirky-mist-review.md — een review-bestand dat nooit in git is gecommit. INDEX.md is geregenereerd met de geharde generator uit de vorige commit; de stale regel valt daardoor vanzelf weg (1 regel verwijderd, verder geen wijzigingen). Verificatie: npm run docs → docs:check-links ✓ All doc links valid (119 files checked). Co-Authored-By: Claude Opus 4.7 (1M context) --------- Co-authored-by: Claude Opus 4.7 (1M context) --- docs/INDEX.md | 1 - scripts/generate-docs-index.mjs | 33 ++++++++++++++++++--------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/docs/INDEX.md b/docs/INDEX.md index b99a6bc..1c5a0a7 100644 --- a/docs/INDEX.md +++ b/docs/INDEX.md @@ -127,7 +127,6 @@ Auto-generated on 2026-05-14 from front-matter and headings. | [Review — M8 bootstrap-wizard plan v3.4](./recommendations/bootstrap-wizard-plan-v3-4-review-2026-05-14.md) | `recommendations/bootstrap-wizard-plan-v3-4-review-2026-05-14.md` | — | — | | [Aanbeveling — Claude VM jobflow en gitstrategie](./recommendations/claude-vm-job-flow-git-strategy.md) | `recommendations/claude-vm-job-flow-git-strategy.md` | draft | 2026-05-09 | | [Load/render implementatie review](./recommendations/load-render-implementation-review-2026-05-10.md) | `recommendations/load-render-implementation-review-2026-05-10.md` | review | 2026-05-10 | -| [Review — code als bindende volgorde voor stories en taken](./reviews/onderzoek-wat-er-gedaan-quirky-mist-review.md) | `reviews/onderzoek-wat-er-gedaan-quirky-mist-review.md` | — | — | | [Agent-flow: open issues & decision log](./runbooks/agent-flow-pitfalls.md) | `runbooks/agent-flow-pitfalls.md` | active | 2026-05-03 | | [Auto-PR flow: van story-DONE naar gemergde PR](./runbooks/auto-pr-flow.md) | `runbooks/auto-pr-flow.md` | active | 2026-05-06 | | [Branch, PR & Commit Strategy](./runbooks/branch-and-commit.md) | `runbooks/branch-and-commit.md` | active | 2026-05-03 | diff --git a/scripts/generate-docs-index.mjs b/scripts/generate-docs-index.mjs index 61756d0..1f9e1ee 100644 --- a/scripts/generate-docs-index.mjs +++ b/scripts/generate-docs-index.mjs @@ -1,6 +1,7 @@ #!/usr/bin/env node // Generate docs/INDEX.md from the front-matter and headings of every -// .md file under docs/. Pure Node 20 — no external dependencies. +// git-tracked .md file under docs/. No external npm dependencies — shells +// out to `git ls-files` so untracked scratch files never pollute the index. // // Usage: `npm run docs:index` (or `node scripts/generate-docs-index.mjs`). // @@ -8,9 +9,10 @@ // output (apart from the generation date in the header), so the script // is safe to run repeatedly and in pre-commit hooks. -import { readdir, readFile, writeFile } from 'node:fs/promises'; +import { readFile, writeFile } from 'node:fs/promises'; import { join, relative, basename, sep } from 'node:path'; import { fileURLToPath } from 'node:url'; +import { execFileSync } from 'node:child_process'; const SCRIPT_DIR = fileURLToPath(new URL('.', import.meta.url)); const REPO_ROOT = join(SCRIPT_DIR, '..'); @@ -28,18 +30,19 @@ const EXCLUDE_PATTERNS = [ /^docs\/old\//, ]; -async function walk(dir) { - const entries = await readdir(dir, { withFileTypes: true }); - const files = []; - for (const e of entries) { - const full = join(dir, e.name); - if (e.isDirectory()) { - files.push(...(await walk(full))); - } else if (e.isFile() && e.name.endsWith('.md')) { - files.push(full); - } - } - return files; +// List git-tracked (and staged) .md files under docs/ via `git ls-files` +// rather than walking the filesystem — this keeps untracked scratch files +// out of the index. Paths return repo-root-relative and forward-slashed, +// and the call works correctly inside git worktrees. +function trackedDocsFiles() { + const out = execFileSync('git', ['ls-files', '-z', 'docs'], { + cwd: REPO_ROOT, + encoding: 'utf8', + }); + return out + .split('\0') + .filter((p) => p.endsWith('.md')) + .map((p) => join(REPO_ROOT, p)); } // Minimal YAML front-matter parser. Front-matter in this repo is restricted @@ -113,7 +116,7 @@ function escapePipe(s) { } async function main() { - const files = await walk(DOCS_DIR); + const files = trackedDocsFiles(); const docs = []; for (const full of files) {