@pella-labs/pinakes 0.3.15 → 0.4.1

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.
Files changed (61) hide show
  1. package/README.md +16 -7
  2. package/dist/cli/audit-wiki.d.ts +45 -1
  3. package/dist/cli/audit-wiki.d.ts.map +1 -1
  4. package/dist/cli/audit-wiki.js +346 -117
  5. package/dist/cli/audit-wiki.js.map +1 -1
  6. package/dist/cli/claims.d.ts +49 -0
  7. package/dist/cli/claims.d.ts.map +1 -0
  8. package/dist/cli/claims.js +169 -0
  9. package/dist/cli/claims.js.map +1 -0
  10. package/dist/cli/contradiction.d.ts +46 -28
  11. package/dist/cli/contradiction.d.ts.map +1 -1
  12. package/dist/cli/contradiction.js +182 -115
  13. package/dist/cli/contradiction.js.map +1 -1
  14. package/dist/cli/index.js +4 -2
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/cli/progress.d.ts +19 -0
  17. package/dist/cli/progress.d.ts.map +1 -0
  18. package/dist/cli/progress.js +44 -0
  19. package/dist/cli/progress.js.map +1 -0
  20. package/dist/db/client.js +1 -1
  21. package/dist/db/migrations/0003_add_pinakes_claims.sql +13 -0
  22. package/dist/db/migrations/0004_add_confidence_score.sql +12 -0
  23. package/dist/db/migrations/meta/_journal.json +14 -0
  24. package/dist/db/schema.d.ts +161 -1
  25. package/dist/db/schema.d.ts.map +1 -1
  26. package/dist/db/schema.js +24 -1
  27. package/dist/db/schema.js.map +1 -1
  28. package/dist/gate/confidence.d.ts +82 -0
  29. package/dist/gate/confidence.d.ts.map +1 -0
  30. package/dist/gate/confidence.js +190 -0
  31. package/dist/gate/confidence.js.map +1 -0
  32. package/dist/ingest/ingester.d.ts.map +1 -1
  33. package/dist/ingest/ingester.js +4 -3
  34. package/dist/ingest/ingester.js.map +1 -1
  35. package/dist/ingest/repo-mirror.d.ts.map +1 -1
  36. package/dist/ingest/repo-mirror.js +5 -1
  37. package/dist/ingest/repo-mirror.js.map +1 -1
  38. package/dist/init/copy.d.ts.map +1 -1
  39. package/dist/init/copy.js +9 -0
  40. package/dist/init/copy.js.map +1 -1
  41. package/dist/init/scanner.js +7 -0
  42. package/dist/init/scanner.js.map +1 -1
  43. package/dist/mcp/tools/search.d.ts.map +1 -1
  44. package/dist/mcp/tools/search.js +2 -2
  45. package/dist/mcp/tools/search.js.map +1 -1
  46. package/dist/retrieval/fts.d.ts +1 -0
  47. package/dist/retrieval/fts.d.ts.map +1 -1
  48. package/dist/retrieval/fts.js +18 -2
  49. package/dist/retrieval/fts.js.map +1 -1
  50. package/dist/retrieval/hybrid.d.ts +1 -0
  51. package/dist/retrieval/hybrid.d.ts.map +1 -1
  52. package/dist/retrieval/hybrid.js +5 -0
  53. package/dist/retrieval/hybrid.js.map +1 -1
  54. package/dist/retrieval/vec.d.ts +1 -0
  55. package/dist/retrieval/vec.d.ts.map +1 -1
  56. package/dist/retrieval/vec.js +17 -2
  57. package/dist/retrieval/vec.js.map +1 -1
  58. package/dist/sandbox/bindings/pinakes.d.ts.map +1 -1
  59. package/dist/sandbox/bindings/pinakes.js +9 -2
  60. package/dist/sandbox/bindings/pinakes.js.map +1 -1
  61. package/package.json +31 -20
@@ -1,10 +1,11 @@
1
- import { existsSync, writeFileSync } from 'node:fs';
2
- import { join } from 'node:path';
1
+ import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { join, resolve } from 'node:path';
3
3
  import { closeDb, openDb } from '../db/client.js';
4
4
  import { queryGaps } from '../gaps/detector.js';
5
5
  import { createLlmProvider } from '../llm/provider.js';
6
6
  import { resolveAbs, projectWikiPath as defaultProjectWikiPath, projectDbPath as defaultProjectDbPath, personalWikiPath as defaultPersonalWikiPath, personalDbPath as defaultPersonalDbPath, } from '../paths.js';
7
7
  import { contradictionScan } from './contradiction.js';
8
+ import { createProgressReporter } from './progress.js';
8
9
  /**
9
10
  * `pinakes audit-wiki` — LLM-powered wiki audit command.
10
11
  *
@@ -16,7 +17,7 @@ import { contradictionScan } from './contradiction.js';
16
17
  * error message if no provider is available.
17
18
  */
18
19
  const GAP_MENTION_THRESHOLD = 10;
19
- const MIN_TOPIC_LENGTH = 4; // filter out "or", "no", "id", etc.
20
+ const MIN_TOPIC_LENGTH = 5; // filter out short tokens (D42 tightened from 4)
20
21
  export async function auditWikiCommand(opts) {
21
22
  const scope = opts.scope ?? 'project';
22
23
  const projectRoot = resolveAbs(opts.projectRoot ?? process.cwd());
@@ -31,13 +32,13 @@ export async function auditWikiCommand(opts) {
31
32
  const bundle = openDb(dbPath);
32
33
  try {
33
34
  const llmProvider = createLlmProvider();
35
+ const progress = createProgressReporter({ quiet: opts.quiet });
34
36
  // eslint-disable-next-line no-console
35
37
  console.log(`Running wiki audit (LLM provider: ${llmProvider.name})...`);
36
38
  // 1. Contradiction scan (requires LLM provider)
37
39
  let contradictions;
38
40
  if (llmProvider.available()) {
39
- // eslint-disable-next-line no-console
40
- console.log(' Scanning for contradictions...');
41
+ progress.startPhase('Phase 1/3: Scanning for contradictions', 1);
41
42
  contradictions = await contradictionScan({
42
43
  bundle,
43
44
  scope,
@@ -45,61 +46,51 @@ export async function auditWikiCommand(opts) {
45
46
  wikiRoot: wikiPath,
46
47
  });
47
48
  if (contradictions.rate_limited) {
48
- // eslint-disable-next-line no-console
49
- console.log(' Contradiction scan rate-limited (last scan < 1h ago)');
49
+ progress.endPhase('Rate-limited (last scan < 1h ago)');
50
50
  }
51
51
  else {
52
- // eslint-disable-next-line no-console
53
- console.log(` Scanned ${contradictions.scanned_pairs} pairs, found ${contradictions.contradictions.length} contradictions`);
52
+ progress.endPhase(`Scanned ${contradictions.scanned_pairs} pairs, found ${contradictions.contradictions.length} contradictions`);
54
53
  }
55
54
  }
56
55
  else {
57
- // eslint-disable-next-line no-console
58
- console.log(' Skipping contradiction scan (no LLM provider available)');
59
- contradictions = { scanned_pairs: 0, contradictions: [], rate_limited: false };
56
+ progress.startPhase('Phase 1/3: Contradiction scan', 0);
57
+ progress.endPhase('Skipped (no LLM provider available)');
58
+ contradictions = { scanned_pairs: 0, topics_scanned: 0, claims_extracted: 0, contradictions: [], rate_limited: false };
60
59
  }
61
- // 2. Gap detection — filter out noise (short tokens, common words, code fragments)
62
- // eslint-disable-next-line no-console
63
- console.log(' Checking for documentation gaps...');
60
+ // 2. Gap detection — syntactic filter + LLM filter + graph topology (D42)
64
61
  const allGaps = queryGaps(bundle.writer, scope);
65
- const gaps = allGaps.filter((g) => isRealGap(g.topic));
66
- const significantGaps = gaps.filter((g) => g.mentions_count >= GAP_MENTION_THRESHOLD);
67
- // eslint-disable-next-line no-console
68
- console.log(` Found ${gaps.length} gaps (${significantGaps.length} significant)`);
69
- // 3. Generate stub pages for significant gaps (if LLM available)
70
- const stubPages = [];
71
- if (significantGaps.length > 0 && llmProvider.available()) {
72
- // eslint-disable-next-line no-console
73
- console.log(' Generating stub pages for significant gaps...');
74
- const MAX_STUBS = 20;
75
- let generated = 0;
76
- for (const gap of significantGaps) {
77
- if (generated >= MAX_STUBS)
78
- break;
79
- try {
80
- const stubPath = await generateStubPage(gap, wikiPath, llmProvider);
81
- if (stubPath) {
82
- stubPages.push(stubPath);
83
- generated++;
84
- // eslint-disable-next-line no-console
85
- console.log(` Created: ${stubPath.split('/').pop()}`);
86
- }
87
- }
88
- catch (err) {
89
- // eslint-disable-next-line no-console
90
- console.log(` Failed: ${gap.topic} — ${err instanceof Error ? err.message.slice(0, 80) : err}`);
91
- }
92
- }
62
+ const syntacticGaps = allGaps.filter((g) => isRealGap(g.topic));
63
+ const significantGaps = syntacticGaps.filter((g) => g.mentions_count >= GAP_MENTION_THRESHOLD);
64
+ progress.startPhase('Phase 2/3: Filtering documentation gaps', allGaps.length);
65
+ // LLM batch filter (Tier 2)
66
+ let filteredGaps;
67
+ if (llmProvider.available() && significantGaps.length > 0) {
68
+ filteredGaps = await llmFilterGaps(significantGaps, llmProvider, progress);
93
69
  }
94
- // 4. Generate audit report
70
+ else {
71
+ filteredGaps = significantGaps;
72
+ }
73
+ // Add graph topology gaps (high in-degree, no dedicated page)
74
+ const topoGaps = findTopologyGaps(bundle.writer, scope);
75
+ progress.endPhase(`${allGaps.length} raw → ${syntacticGaps.length} syntactic → ${filteredGaps.length} LLM-filtered, ${topoGaps.length} topology gaps`);
76
+ // 3. Gather context for each confirmed gap
77
+ const gapContexts = gatherGapContexts(bundle.writer, scope, filteredGaps);
78
+ // 4. Opt-in synthesis stubs (D43 — --generate-stubs flag)
79
+ let stubsGenerated = 0;
80
+ if (opts.generateStubs && filteredGaps.length > 0 && llmProvider.available()) {
81
+ stubsGenerated = await generateSynthesisStubs(filteredGaps, gapContexts, wikiPath, llmProvider, progress);
82
+ }
83
+ // 5. Generate audit report (D46 restructured: contradictions, gaps, health)
84
+ const healthMetrics = getHealthMetrics(bundle.writer, scope);
95
85
  const reportPath = join(wikiPath, '_audit-report.md');
96
- writeAuditReport(reportPath, contradictions, gaps, significantGaps, stubPages);
86
+ writeAuditReport(reportPath, contradictions, filteredGaps, topoGaps, gapContexts, healthMetrics, stubsGenerated);
97
87
  // eslint-disable-next-line no-console
98
88
  console.log(`\nAudit report written to: ${reportPath}`);
99
89
  return {
100
90
  contradictions,
101
- gaps_found: gaps.length,
102
- stub_pages_created: stubPages,
91
+ gaps_found: filteredGaps.length,
92
+ topology_gaps: topoGaps.length,
93
+ stubs_generated: stubsGenerated,
103
94
  audit_report_path: reportPath,
104
95
  };
105
96
  }
@@ -108,77 +99,273 @@ export async function auditWikiCommand(opts) {
108
99
  }
109
100
  }
110
101
  // ---------------------------------------------------------------------------
111
- // Internals
102
+ // LLM gap filtering (D42 Tier 2)
112
103
  // ---------------------------------------------------------------------------
113
- async function generateStubPage(gap, wikiRoot, llmProvider) {
114
- const slug = gap.topic
115
- .toLowerCase()
116
- .replace(/[^a-z0-9]+/g, '-')
117
- .replace(/(^-|-$)/g, '');
118
- if (!slug)
119
- return null;
120
- const filePath = join(wikiRoot, `${slug}.md`);
121
- if (existsSync(filePath))
122
- return null;
123
- const content = await llmProvider.complete({
124
- system: 'You are a technical documentation writer. Generate a concise markdown stub page for a documentation topic. ' +
125
- 'Include: a title (H1), a brief description, key questions to answer, and placeholder sections. ' +
126
- 'Keep it under 500 words. Output only the markdown content.',
127
- prompt: `Generate a documentation stub for the topic: "${gap.topic}"\n\nThis topic has been referenced ${gap.mentions_count} times across the knowledge base but has no dedicated page.`,
128
- maxTokens: 1000,
129
- });
130
- writeFileSync(filePath, content, 'utf-8');
131
- return filePath;
104
+ const GAP_FILTER_SYSTEM = `You are a documentation quality analyst. Given a list of terms extracted from a technical wiki, identify which represent real documentation topics that would benefit from a dedicated wiki page.
105
+
106
+ Return ONLY a JSON array of the real topics: ["topic1", "topic2", ...]
107
+
108
+ Filter out:
109
+ - Common words and generic technical terms
110
+ - Code syntax, variable names, file extensions
111
+ - Terms too specific or too vague to be standalone pages
112
+ - Terms that are part of larger concepts already documented`;
113
+ const LLM_FILTER_BATCH_SIZE = 50;
114
+ export async function llmFilterGaps(gaps, llmProvider, progress) {
115
+ const result = [];
116
+ for (let i = 0; i < gaps.length; i += LLM_FILTER_BATCH_SIZE) {
117
+ const batch = gaps.slice(i, i + LLM_FILTER_BATCH_SIZE);
118
+ const topics = batch.map((g) => g.topic);
119
+ try {
120
+ const response = await llmProvider.complete({
121
+ system: GAP_FILTER_SYSTEM,
122
+ prompt: `Filter these ${topics.length} terms:\n${JSON.stringify(topics)}`,
123
+ maxTokens: 1000,
124
+ });
125
+ const kept = parseLlmFilterResponse(response);
126
+ const keptSet = new Set(kept.map((t) => t.toLowerCase()));
127
+ for (const gap of batch) {
128
+ if (keptSet.has(gap.topic.toLowerCase())) {
129
+ result.push(gap);
130
+ }
131
+ }
132
+ progress?.tick(`batch ${Math.floor(i / LLM_FILTER_BATCH_SIZE) + 1}`, `${kept.length}/${batch.length} kept`);
133
+ }
134
+ catch {
135
+ // LLM filter failed — keep all gaps in this batch (graceful degradation)
136
+ result.push(...batch);
137
+ progress?.tick(`batch ${Math.floor(i / LLM_FILTER_BATCH_SIZE) + 1}`, 'LLM filter failed, keeping all');
138
+ }
139
+ }
140
+ return result;
141
+ }
142
+ export function parseLlmFilterResponse(response) {
143
+ try {
144
+ const fenceMatch = response.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
145
+ const jsonStr = fenceMatch ? fenceMatch[1] : response;
146
+ const arrMatch = jsonStr.match(/\[[\s\S]*\]/);
147
+ if (!arrMatch)
148
+ return [];
149
+ const parsed = JSON.parse(arrMatch[0]);
150
+ if (!Array.isArray(parsed))
151
+ return [];
152
+ return parsed.filter((t) => typeof t === 'string');
153
+ }
154
+ catch {
155
+ return [];
156
+ }
132
157
  }
133
- function writeAuditReport(reportPath, contradictions, allGaps, significantGaps, stubPages) {
158
+ export function findTopologyGaps(reader, scope) {
159
+ // Find nodes referenced by wikilink edges that don't have their own page
160
+ // We look for edge targets (dst_id) that appear frequently but
161
+ // whose corresponding node titles don't exist as dedicated pages
162
+ try {
163
+ const rows = reader
164
+ .prepare(`SELECT n.title, COUNT(*) as cnt
165
+ FROM pinakes_edges e
166
+ JOIN pinakes_nodes n ON e.dst_id = n.id
167
+ WHERE n.scope = ? AND e.edge_kind = ?
168
+ GROUP BY n.title
169
+ HAVING cnt >= 3
170
+ ORDER BY cnt DESC
171
+ LIMIT 20`)
172
+ .all(scope, 'wikilink');
173
+ return rows.map((r) => ({
174
+ topic: r.title ?? 'untitled',
175
+ in_degree: r.cnt,
176
+ source: 'graph-topology',
177
+ }));
178
+ }
179
+ catch {
180
+ return []; // Table might not have edges yet
181
+ }
182
+ }
183
+ export function gatherGapContexts(reader, scope, gaps) {
184
+ const contexts = [];
185
+ for (const gap of gaps.slice(0, 20)) {
186
+ try {
187
+ const mentions = reader
188
+ .prepare(`SELECT n.source_uri, c.text
189
+ FROM pinakes_chunks c
190
+ JOIN pinakes_nodes n ON c.node_id = n.id
191
+ WHERE n.scope = ? AND c.text LIKE '%' || ? || '%' COLLATE NOCASE
192
+ LIMIT 5`)
193
+ .all(scope, gap.topic);
194
+ contexts.push({
195
+ topic: gap.topic,
196
+ mentions: mentions.map((m) => ({
197
+ source_uri: m.source_uri,
198
+ excerpt: truncate(m.text, 200),
199
+ })),
200
+ });
201
+ }
202
+ catch {
203
+ // Non-fatal
204
+ }
205
+ }
206
+ return contexts;
207
+ }
208
+ // ---------------------------------------------------------------------------
209
+ // Synthesis stubs (D43 — opt-in via --generate-stubs)
210
+ // ---------------------------------------------------------------------------
211
+ const SYNTHESIS_SYSTEM = `You are a technical documentation writer. Based on the following excerpts from a knowledge wiki, write a concise wiki page about the given topic.
212
+
213
+ Rules:
214
+ - Include ONLY facts present in the excerpts
215
+ - Mark any inferences with "(inferred)"
216
+ - Format as markdown with a title (H1), summary paragraph, and relevant details
217
+ - Keep it under 500 words
218
+ - Output only the markdown content`;
219
+ export async function generateSynthesisStubs(gaps, contexts, wikiRoot, llmProvider, progress) {
220
+ const draftsDir = resolve(wikiRoot, '_audit-drafts');
221
+ mkdirSync(draftsDir, { recursive: true });
222
+ // Ensure _audit-drafts is gitignored
223
+ ensureGitignored(wikiRoot, '_audit-drafts/');
224
+ const MAX_STUBS = 20;
225
+ const toGenerate = gaps.slice(0, MAX_STUBS);
226
+ progress?.startPhase('Phase 3/3: Generating synthesis drafts', toGenerate.length);
227
+ let generated = 0;
228
+ for (const gap of toGenerate) {
229
+ const ctx = contexts.find((c) => c.topic === gap.topic);
230
+ if (!ctx || ctx.mentions.length === 0) {
231
+ progress?.tick(gap.topic, 'skipped (no context)');
232
+ continue;
233
+ }
234
+ const slug = gap.topic
235
+ .toLowerCase()
236
+ .replace(/[^a-z0-9]+/g, '-')
237
+ .replace(/(^-|-$)/g, '');
238
+ if (!slug) {
239
+ progress?.tick(gap.topic, 'skipped (invalid slug)');
240
+ continue;
241
+ }
242
+ const filePath = join(draftsDir, `${slug}.md`);
243
+ try {
244
+ const excerpts = ctx.mentions
245
+ .map((m) => `From ${m.source_uri}:\n${m.excerpt}`)
246
+ .join('\n\n');
247
+ const content = await llmProvider.complete({
248
+ system: SYNTHESIS_SYSTEM,
249
+ prompt: `Write a wiki page about "${gap.topic}" based on these excerpts:\n\n${excerpts}`,
250
+ maxTokens: 1000,
251
+ });
252
+ writeFileSync(filePath, content, 'utf-8');
253
+ generated++;
254
+ progress?.tick(gap.topic, 'draft created');
255
+ }
256
+ catch (err) {
257
+ progress?.tick(gap.topic, `failed: ${err instanceof Error ? err.message.slice(0, 60) : err}`);
258
+ }
259
+ }
260
+ progress?.endPhase(`${generated} drafts written to _audit-drafts/`);
261
+ return generated;
262
+ }
263
+ function ensureGitignored(wikiRoot, entry) {
264
+ // Look for .gitignore in the .pinakes parent directory
265
+ const pinakesDir = resolve(wikiRoot, '..');
266
+ const gitignorePath = join(pinakesDir, '.gitignore');
267
+ if (!existsSync(gitignorePath))
268
+ return;
269
+ const content = readFileSync(gitignorePath, 'utf-8');
270
+ if (content.includes(entry))
271
+ return;
272
+ appendFileSync(gitignorePath, `\n${entry}\n`, 'utf-8');
273
+ }
274
+ export function getHealthMetrics(reader, scope) {
275
+ const fileCount = reader.prepare(`SELECT COUNT(DISTINCT source_uri) as c FROM pinakes_nodes WHERE scope = ?`).get(scope)?.c ?? 0;
276
+ const chunkCount = reader.prepare(`SELECT COUNT(*) as c FROM pinakes_chunks ch
277
+ JOIN pinakes_nodes n ON ch.node_id = n.id WHERE n.scope = ?`).get(scope)?.c ?? 0;
278
+ const nodeCount = reader.prepare(`SELECT COUNT(*) as c FROM pinakes_nodes WHERE scope = ?`).get(scope)?.c ?? 0;
279
+ const edgeCount = reader.prepare(`SELECT COUNT(*) as c FROM pinakes_edges e
280
+ JOIN pinakes_nodes n ON e.src_id = n.id WHERE n.scope = ?`).get(scope)?.c ?? 0;
281
+ return { file_count: fileCount, chunk_count: chunkCount, node_count: nodeCount, edge_count: edgeCount };
282
+ }
283
+ // ---------------------------------------------------------------------------
284
+ // Audit report (D46 restructured)
285
+ // ---------------------------------------------------------------------------
286
+ function writeAuditReport(reportPath, contradictions, filteredGaps, topoGaps, gapContexts, health, stubsGenerated = 0) {
134
287
  const lines = [
135
288
  '# Wiki Audit Report',
136
289
  '',
137
290
  `*Generated: ${new Date().toISOString()}*`,
138
291
  '',
139
- '## Summary',
140
- '',
141
292
  ];
293
+ // Section 1: Contradictions
294
+ lines.push('## Contradictions');
295
+ lines.push('');
142
296
  if (contradictions.rate_limited) {
143
- lines.push('- **Contradictions**: scan rate-limited (last scan < 1h ago)');
297
+ lines.push('*Scan rate-limited (last scan < 1h ago)*');
144
298
  }
145
- else {
146
- lines.push(`- **Contradictions**: ${contradictions.contradictions.length} found (${contradictions.scanned_pairs} pairs scanned)`);
299
+ else if (contradictions.contradictions.length === 0) {
300
+ lines.push(`*No contradictions found (${contradictions.topics_scanned} topics, ${contradictions.claims_extracted} claims scanned)*`);
147
301
  }
148
- lines.push(`- **Documentation gaps**: ${allGaps.length} total, ${significantGaps.length} significant (${GAP_MENTION_THRESHOLD}+ mentions)`);
149
- lines.push(`- **Stub pages generated**: ${stubPages.length}`);
150
- lines.push('');
151
- if (contradictions.contradictions.length > 0) {
152
- lines.push('## Contradictions');
302
+ else {
303
+ lines.push(`**${contradictions.contradictions.length} contradictions found** (${contradictions.topics_scanned} topics scanned)`);
153
304
  lines.push('');
154
305
  for (const c of contradictions.contradictions) {
155
- lines.push(`### ${c.chunkA.source_uri} vs ${c.chunkB.source_uri}`);
306
+ lines.push(`### ${c.topic}`);
156
307
  lines.push('');
157
- lines.push(`- **Confidence**: ${c.confidence}`);
158
- lines.push(`- **Explanation**: ${c.explanation}`);
159
- lines.push(`- Chunk A: *"${truncate(c.chunkA.text, 150)}"*`);
160
- lines.push(`- Chunk B: *"${truncate(c.chunkB.text, 150)}"*`);
308
+ lines.push(`- **${c.claimA.source_uri}**: "${truncate(c.claimA.claim, 150)}"`);
309
+ lines.push(`- **${c.claimB.source_uri}**: "${truncate(c.claimB.claim, 150)}"`);
310
+ lines.push(`- **Why**: ${c.explanation} *(${c.confidence} confidence)*`);
161
311
  lines.push('');
162
312
  }
163
313
  }
164
- if (significantGaps.length > 0) {
165
- lines.push('## Documentation Gaps');
166
- lines.push('');
167
- lines.push('| Topic | Mentions | Status |');
168
- lines.push('|---|---|---|');
169
- for (const g of significantGaps) {
170
- const status = g.resolved_at ? 'Resolved' : 'Open';
171
- lines.push(`| ${g.topic} | ${g.mentions_count} | ${status} |`);
314
+ lines.push('');
315
+ // Section 2: Documentation Gaps
316
+ lines.push('## Documentation Gaps');
317
+ lines.push('');
318
+ if (filteredGaps.length === 0 && topoGaps.length === 0) {
319
+ lines.push('*No significant gaps found*');
320
+ }
321
+ else {
322
+ if (filteredGaps.length > 0) {
323
+ lines.push(`### By mention frequency (${filteredGaps.length} topics)`);
324
+ lines.push('');
325
+ lines.push('| Topic | Mentions | Context |');
326
+ lines.push('|---|---|---|');
327
+ for (const g of filteredGaps) {
328
+ const ctx = gapContexts.find((c) => c.topic === g.topic);
329
+ const ctxSummary = ctx?.mentions.length
330
+ ? `Referenced in ${ctx.mentions.map((m) => m.source_uri).join(', ')}`
331
+ : '';
332
+ lines.push(`| ${g.topic} | ${g.mentions_count} | ${ctxSummary} |`);
333
+ }
334
+ lines.push('');
335
+ }
336
+ if (topoGaps.length > 0) {
337
+ lines.push(`### By link topology (${topoGaps.length} topics)`);
338
+ lines.push('');
339
+ lines.push('| Topic | In-degree |');
340
+ lines.push('|---|---|');
341
+ for (const g of topoGaps) {
342
+ lines.push(`| ${g.topic} | ${g.in_degree} |`);
343
+ }
344
+ lines.push('');
172
345
  }
346
+ }
347
+ lines.push('');
348
+ // Section 3: Health Metrics
349
+ lines.push('## Health Metrics');
350
+ lines.push('');
351
+ lines.push(`| Metric | Value |`);
352
+ lines.push(`|---|---|`);
353
+ lines.push(`| Files | ${health.file_count} |`);
354
+ lines.push(`| Nodes | ${health.node_count} |`);
355
+ lines.push(`| Chunks | ${health.chunk_count} |`);
356
+ lines.push(`| Edges | ${health.edge_count} |`);
357
+ lines.push('');
358
+ // Generated drafts section
359
+ if (stubsGenerated > 0) {
360
+ lines.push('## Generated Drafts');
361
+ lines.push('');
362
+ lines.push(`${stubsGenerated} synthesis drafts written to \`_audit-drafts/\`. Review before promoting to wiki.`);
173
363
  lines.push('');
174
364
  }
175
- if (stubPages.length > 0) {
176
- lines.push('## Generated Stub Pages');
365
+ else {
366
+ lines.push('---');
177
367
  lines.push('');
178
- for (const p of stubPages) {
179
- const name = p.split('/').pop() ?? p;
180
- lines.push(`- [[${name.replace('.md', '')}]]`);
181
- }
368
+ lines.push('*Run with `--generate-stubs` to auto-generate draft pages for gaps.*');
182
369
  lines.push('');
183
370
  }
184
371
  writeFileSync(reportPath, lines.join('\n'), 'utf-8');
@@ -189,12 +376,16 @@ function truncate(s, maxLen) {
189
376
  return s.slice(0, maxLen) + '...';
190
377
  }
191
378
  /**
192
- * Filter out noise from the gap detector. Rejects topics that are:
193
- * - Too short (common tokens like "or", "no", "id")
194
- * - Pure code fragments (paths, URLs, variable names with underscores)
195
- * - Common stopwords
379
+ * Filter out noise from the gap detector (D42 Tier 1 tightening).
380
+ *
381
+ * Rejects topics that are:
382
+ * - Too short
383
+ * - URLs, file paths, qualified names
384
+ * - Code fragments (snake_case, camelCase, SCREAMING_SNAKE)
385
+ * - Common stopwords (English + technical)
386
+ * - Single-word generic terms that aren't proper nouns/acronyms
196
387
  */
197
- function isRealGap(topic) {
388
+ export function isRealGap(topic) {
198
389
  if (topic.length < MIN_TOPIC_LENGTH)
199
390
  return false;
200
391
  // Skip URLs, file paths, code fragments
@@ -202,24 +393,62 @@ function isRealGap(topic) {
202
393
  return false;
203
394
  if (topic.includes('://'))
204
395
  return false;
205
- // Skip things that look like code (snake_case with no spaces, camelCase identifiers)
206
- if (/^[a-z_]+$/.test(topic) && topic.includes('_') && !topic.includes(' '))
396
+ // Qualified names (e.g., "fs.readFileSync", "path.join")
397
+ if (topic.includes('.') && !topic.includes(' '))
207
398
  return false;
208
- // Skip common stopwords that aren't real topics
209
- const stopwords = new Set([
210
- 'the', 'and', 'for', 'with', 'that', 'this', 'from', 'are', 'was', 'will',
211
- 'can', 'not', 'but', 'all', 'has', 'have', 'had', 'been', 'would', 'could',
212
- 'should', 'may', 'might', 'must', 'shall', 'into', 'than', 'then', 'when',
213
- 'where', 'which', 'while', 'about', 'after', 'before', 'between', 'under',
214
- 'over', 'only', 'also', 'just', 'like', 'more', 'most', 'some', 'such',
215
- 'each', 'every', 'both', 'either', 'neither', 'other', 'another',
216
- 'true', 'false', 'null', 'none', 'yes', 'done',
217
- ]);
218
- if (stopwords.has(topic.toLowerCase()))
399
+ // Skip code-like patterns
400
+ // snake_case: all lowercase with underscores
401
+ if (/^[a-z_]+$/.test(topic) && topic.includes('_'))
219
402
  return false;
220
- // Skip single-word topics that are too generic
221
- if (!topic.includes(' ') && topic.length < 6)
403
+ // camelCase: starts lowercase then has uppercase
404
+ if (/^[a-z]+[A-Z]/.test(topic) && !topic.includes(' '))
222
405
  return false;
406
+ // SCREAMING_SNAKE_CASE
407
+ if (/^[A-Z][A-Z0-9_]+$/.test(topic))
408
+ return false;
409
+ const lower = topic.toLowerCase();
410
+ // Skip common English stopwords
411
+ if (STOPWORDS.has(lower))
412
+ return false;
413
+ // Skip common technical terms that aren't real topics
414
+ if (TECH_STOPWORDS.has(lower))
415
+ return false;
416
+ // Single-word topics: only keep proper nouns/acronyms (starts with uppercase
417
+ // or is all-caps like "OAuth2", "Docker", "PostgreSQL")
418
+ if (!topic.includes(' ')) {
419
+ const looksProper = /^[A-Z]/.test(topic);
420
+ if (!looksProper)
421
+ return false;
422
+ }
223
423
  return true;
224
424
  }
425
+ const STOPWORDS = new Set([
426
+ 'the', 'and', 'for', 'with', 'that', 'this', 'from', 'are', 'was', 'will',
427
+ 'can', 'not', 'but', 'all', 'has', 'have', 'had', 'been', 'would', 'could',
428
+ 'should', 'may', 'might', 'must', 'shall', 'into', 'than', 'then', 'when',
429
+ 'where', 'which', 'while', 'about', 'after', 'before', 'between', 'under',
430
+ 'over', 'only', 'also', 'just', 'like', 'more', 'most', 'some', 'such',
431
+ 'each', 'every', 'both', 'either', 'neither', 'other', 'another',
432
+ 'true', 'false', 'null', 'none', 'yes', 'done', 'note', 'using',
433
+ 'first', 'still', 'instead', 'enable', 'default', 'since', 'based',
434
+ 'here', 'there', 'these', 'those', 'above', 'below', 'through',
435
+ ]);
436
+ const TECH_STOPWORDS = new Set([
437
+ 'example', 'section', 'configuration', 'implementation', 'method',
438
+ 'function', 'parameter', 'argument', 'option', 'value', 'result',
439
+ 'output', 'input', 'error', 'warning', 'status', 'type', 'string',
440
+ 'number', 'boolean', 'object', 'array', 'list', 'file', 'path',
441
+ 'name', 'version', 'update', 'change', 'create', 'delete', 'read',
442
+ 'write', 'server', 'client', 'request', 'response', 'source', 'model',
443
+ 'command', 'description', 'detail', 'content', 'window', 'provider',
444
+ 'module', 'package', 'import', 'export', 'return', 'class', 'interface',
445
+ 'property', 'field', 'table', 'column', 'index', 'query', 'schema',
446
+ 'handler', 'callback', 'promise', 'async', 'await', 'event', 'action',
447
+ 'state', 'props', 'component', 'render', 'route', 'endpoint', 'context',
448
+ 'scope', 'token', 'session', 'header', 'body', 'payload', 'message',
449
+ 'process', 'service', 'manager', 'factory', 'builder', 'helper',
450
+ 'utility', 'config', 'setting', 'feature', 'support', 'format',
451
+ 'connection', 'database', 'storage', 'cache', 'buffer', 'stream',
452
+ 'directory', 'folder', 'entry', 'record', 'document', 'resource',
453
+ ]);
225
454
  //# sourceMappingURL=audit-wiki.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit-wiki.js","sourceRoot":"","sources":["../../src/cli/audit-wiki.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit-wiki.js","sourceRoot":"","sources":["../../src/cli/audit-wiki.ts"],"names":[],"mappings":"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"}