docs-drift 0.1.0__py3-none-any.whl

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 (131) hide show
  1. docs_drift/__init__.py +7 -0
  2. docs_drift/analysis.py +52 -0
  3. docs_drift/baseline.py +70 -0
  4. docs_drift/cli.py +871 -0
  5. docs_drift/collaboration.py +282 -0
  6. docs_drift/config.py +113 -0
  7. docs_drift/docs/__init__.py +1 -0
  8. docs_drift/docs/defaults.py +250 -0
  9. docs_drift/docs/discover.py +172 -0
  10. docs_drift/docs/extract_blocks.py +596 -0
  11. docs_drift/docs/extract_inline.py +561 -0
  12. docs_drift/docs/pipeline.py +234 -0
  13. docs_drift/docs/preprocess.py +71 -0
  14. docs_drift/docs/sections.py +247 -0
  15. docs_drift/errors.py +119 -0
  16. docs_drift/fix/__init__.py +1 -0
  17. docs_drift/fix/edits.py +124 -0
  18. docs_drift/fix/model.py +139 -0
  19. docs_drift/fix/rules.py +232 -0
  20. docs_drift/git_safety.py +35 -0
  21. docs_drift/graph/queries/evidence_path.cypher +6 -0
  22. docs_drift/history.py +412 -0
  23. docs_drift/history_cache.py +62 -0
  24. docs_drift/ids.py +50 -0
  25. docs_drift/index/__init__.py +211 -0
  26. docs_drift/index/base.py +239 -0
  27. docs_drift/index/config.py +185 -0
  28. docs_drift/index/js_cli.py +211 -0
  29. docs_drift/index/js_routes.py +68 -0
  30. docs_drift/index/js_symbols.py +219 -0
  31. docs_drift/index/python_cli.py +370 -0
  32. docs_drift/index/python_routes.py +102 -0
  33. docs_drift/index/python_source.py +20 -0
  34. docs_drift/index/python_symbols.py +335 -0
  35. docs_drift/index/queries/javascript.scm +4 -0
  36. docs_drift/index/queries/typescript.scm +4 -0
  37. docs_drift/index/routes_common.py +16 -0
  38. docs_drift/index/tasks.py +131 -0
  39. docs_drift/index/ts_parser.py +20 -0
  40. docs_drift/limits.py +18 -0
  41. docs_drift/llm/__init__.py +7 -0
  42. docs_drift/llm/candidates.py +81 -0
  43. docs_drift/llm/client.py +185 -0
  44. docs_drift/llm/pricing.py +54 -0
  45. docs_drift/llm/privacy.py +63 -0
  46. docs_drift/llm/prompts/rewrite_v1.md +9 -0
  47. docs_drift/llm/prompts/verify_v1.md +12 -0
  48. docs_drift/llm/prompts.py +28 -0
  49. docs_drift/llm/retrieve.py +60 -0
  50. docs_drift/llm/types.py +68 -0
  51. docs_drift/llm/verify.py +179 -0
  52. docs_drift/lsp.py +199 -0
  53. docs_drift/match/__init__.py +5 -0
  54. docs_drift/match/commands.py +201 -0
  55. docs_drift/match/defaults.py +79 -0
  56. docs_drift/match/engine.py +319 -0
  57. docs_drift/match/rename.py +69 -0
  58. docs_drift/models.py +249 -0
  59. docs_drift/ownership.py +70 -0
  60. docs_drift/policy.py +81 -0
  61. docs_drift/portfolio.py +147 -0
  62. docs_drift/py.typed +0 -0
  63. docs_drift/report/__init__.py +38 -0
  64. docs_drift/report/common.py +31 -0
  65. docs_drift/report/github.py +22 -0
  66. docs_drift/report/html.py +106 -0
  67. docs_drift/report/json.py +17 -0
  68. docs_drift/report/junit.py +30 -0
  69. docs_drift/report/markdown.py +58 -0
  70. docs_drift/report/partials/body.html +19 -0
  71. docs_drift/report/partials/report.css +12 -0
  72. docs_drift/report/partials/script.js +95 -0
  73. docs_drift/report/portfolio.html +14 -0
  74. docs_drift/report/report.html +8 -0
  75. docs_drift/report/sarif.py +68 -0
  76. docs_drift/report/terminal.py +90 -0
  77. docs_drift/report/vendor/CYTOSCAPE-LICENSE +19 -0
  78. docs_drift/report/vendor/cytoscape.min.js +32 -0
  79. docs_drift/report/workflow.html +12 -0
  80. docs_drift/review.py +113 -0
  81. docs_drift/safe_files.py +19 -0
  82. docs_drift/scanning.py +202 -0
  83. docs_drift/schemas/SARIF-LICENSE.md +7 -0
  84. docs_drift/schemas/SARIF-NOTICES.txt +3 -0
  85. docs_drift/schemas/sarif-schema-2.1.0.json +3389 -0
  86. docs_drift/schemas/scan-result.v1.json +1024 -0
  87. docs_drift/setup.py +130 -0
  88. docs_drift/snapshots.py +100 -0
  89. docs_drift/support.py +31 -0
  90. docs_drift/watch.py +157 -0
  91. docs_drift/web/__init__.py +1 -0
  92. docs_drift/web/__main__.py +23 -0
  93. docs_drift/web/app.py +289 -0
  94. docs_drift/web/cleanup.py +23 -0
  95. docs_drift/web/examples/clean-repo.json +646 -0
  96. docs_drift/web/examples/fastapi-svc.json +723 -0
  97. docs_drift/web/examples/files-to-prompt.json +3366 -0
  98. docs_drift/web/examples/judge-fixture.json +226 -0
  99. docs_drift/web/examples/manifest.json +89 -0
  100. docs_drift/web/examples/node-tool.json +823 -0
  101. docs_drift/web/examples/py-cli.json +1267 -0
  102. docs_drift/web/examples/rich-cli-reviewed.json +7855 -0
  103. docs_drift/web/examples/rich-cli.json +8010 -0
  104. docs_drift/web/examples/verification.json +16 -0
  105. docs_drift/web/git.py +274 -0
  106. docs_drift/web/jobs.py +352 -0
  107. docs_drift/web/settings.py +50 -0
  108. docs_drift/web/static/demo.css +37 -0
  109. docs_drift/web/static/demo.js +184 -0
  110. docs_drift/web/static/evidence/correction-verification.json +28 -0
  111. docs_drift/web/static/evidence/flow-highlights-2026-10-22.png +0 -0
  112. docs_drift/web/static/evidence/fresh-scan.json +7855 -0
  113. docs_drift/web/static/evidence/review.json +44 -0
  114. docs_drift/web/static/evidence/rich-cli-correction.patch +20 -0
  115. docs_drift/web/static/evidence/runtime.json +26 -0
  116. docs_drift/web/static/evidence/saved-scan.json +8010 -0
  117. docs_drift/web/static/evidence/usage-card-supplied.png +0 -0
  118. docs_drift/web/templates/base.html +34 -0
  119. docs_drift/web/templates/case.html +13 -0
  120. docs_drift/web/templates/landing.html +90 -0
  121. docs_drift/web/templates/scan.html +2 -0
  122. docs_drift/web/templates/voice.html +1 -0
  123. docs_drift/web/validation.py +47 -0
  124. docs_drift/web/worker.py +152 -0
  125. docs_drift/workflow_cli.py +96 -0
  126. docs_drift/workspaces.py +128 -0
  127. docs_drift-0.1.0.dist-info/METADATA +331 -0
  128. docs_drift-0.1.0.dist-info/RECORD +131 -0
  129. docs_drift-0.1.0.dist-info/WHEEL +4 -0
  130. docs_drift-0.1.0.dist-info/entry_points.txt +2 -0
  131. docs_drift-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,823 @@
1
+ {
2
+ "schema_version": 1,
3
+ "repo_path": "node-tool-demo",
4
+ "head_sha": "e36fa00d8efd0c431f810f11ada620cddb44eb7f",
5
+ "scan_time": "2026-10-18T12:17:39.231106Z",
6
+ "config_used": {
7
+ "docs": [
8
+ "README.md",
9
+ "docs/**/*.md",
10
+ "*.md"
11
+ ],
12
+ "exclude": [
13
+ "node_modules/**",
14
+ ".venv/**",
15
+ "vendor/**",
16
+ "CHANGELOG.md",
17
+ "**/CHANGELOG.md"
18
+ ],
19
+ "languages": "auto",
20
+ "ignore": [],
21
+ "min_confidence": 0.6,
22
+ "llm": {
23
+ "enabled": false,
24
+ "model": null,
25
+ "max_claims": 40,
26
+ "concurrency": 4,
27
+ "timeout": 60.0,
28
+ "budget": 0.5,
29
+ "redact_paths": []
30
+ },
31
+ "history": {
32
+ "max_commits": 2000,
33
+ "show_emails": false
34
+ }
35
+ },
36
+ "docs": [
37
+ {
38
+ "path": "README.md",
39
+ "content_hash": "1bb05826cfac61f291c733c080b6d2d0834de4ae4c873802c11b5d644bde733b",
40
+ "format": "markdown"
41
+ }
42
+ ],
43
+ "sections": [
44
+ {
45
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
46
+ "doc_path": "README.md",
47
+ "heading": "node-tool",
48
+ "heading_level": 1,
49
+ "heading_path": [
50
+ "node-tool"
51
+ ],
52
+ "start_line": 1,
53
+ "end_line": 11,
54
+ "context": "current",
55
+ "historical_spans": []
56
+ }
57
+ ],
58
+ "claims": [
59
+ {
60
+ "claim_id": "claim_d2134d75a71ba55b7b92cfc68346a9db4429fc018d51970b9963c0b63bcd20a3",
61
+ "kind": "package_script",
62
+ "raw_text": "npm run build:prod",
63
+ "value": "build:prod",
64
+ "qualifier": null,
65
+ "expected_default": null,
66
+ "doc_path": "README.md",
67
+ "line": 3,
68
+ "column": 26,
69
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
70
+ "extraction": "inline_code",
71
+ "extraction_confidence": 0.9,
72
+ "locations": [
73
+ {
74
+ "line": 3,
75
+ "column": 26,
76
+ "raw_text": "npm run build:prod",
77
+ "extraction": "inline_code"
78
+ }
79
+ ],
80
+ "extraction_sources": [
81
+ "inline_code"
82
+ ],
83
+ "group_key": "d420474915dd3320a343cb79d3ea9f3312e0f6b015393a28d32b994a6134d4a0"
84
+ },
85
+ {
86
+ "claim_id": "claim_d12598cc77a7e55240db1ae1c97f7c9b9bc25bb8327ea4337c0c333592d49816",
87
+ "kind": "env_var",
88
+ "raw_text": "process.env.API_URL",
89
+ "value": "API_URL",
90
+ "qualifier": null,
91
+ "expected_default": null,
92
+ "doc_path": "README.md",
93
+ "line": 4,
94
+ "column": 26,
95
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
96
+ "extraction": "inline_code",
97
+ "extraction_confidence": 0.9,
98
+ "locations": [
99
+ {
100
+ "line": 4,
101
+ "column": 26,
102
+ "raw_text": "process.env.API_URL",
103
+ "extraction": "inline_code"
104
+ }
105
+ ],
106
+ "extraction_sources": [
107
+ "inline_code"
108
+ ],
109
+ "group_key": "4676fab835eff9de9e5f8b30c4d26b12e9d948b2bcdf30fccb91e91526e98ee0"
110
+ },
111
+ {
112
+ "claim_id": "claim_4cc2cc9a97ebd3a12eba8a94222339b2daae59de003d4e96979461be916694e6",
113
+ "kind": "endpoint",
114
+ "raw_text": "GET /health",
115
+ "value": "GET /health",
116
+ "qualifier": null,
117
+ "expected_default": null,
118
+ "doc_path": "README.md",
119
+ "line": 5,
120
+ "column": 23,
121
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
122
+ "extraction": "inline_code",
123
+ "extraction_confidence": 0.95,
124
+ "locations": [
125
+ {
126
+ "line": 5,
127
+ "column": 23,
128
+ "raw_text": "GET /health",
129
+ "extraction": "inline_code"
130
+ }
131
+ ],
132
+ "extraction_sources": [
133
+ "inline_code"
134
+ ],
135
+ "group_key": "2a37694595703caae9479e739a98d813dc73735ba64302375119549f85a928d4"
136
+ },
137
+ {
138
+ "claim_id": "claim_795780b9865b0206fed67875f3d950558e498427f8020a071496fada6573e72f",
139
+ "kind": "code_command",
140
+ "raw_text": "npx node-tool deploy --dry-run",
141
+ "value": "npx node-tool deploy --dry-run",
142
+ "qualifier": null,
143
+ "expected_default": null,
144
+ "doc_path": "README.md",
145
+ "line": 10,
146
+ "column": 1,
147
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
148
+ "extraction": "code_block",
149
+ "extraction_confidence": 0.85,
150
+ "locations": [
151
+ {
152
+ "line": 10,
153
+ "column": 1,
154
+ "raw_text": "npx node-tool deploy --dry-run",
155
+ "extraction": "code_block"
156
+ },
157
+ {
158
+ "line": 10,
159
+ "column": 1,
160
+ "raw_text": "npx node-tool deploy --dry-run",
161
+ "extraction": "code_block"
162
+ }
163
+ ],
164
+ "extraction_sources": [
165
+ "code_block"
166
+ ],
167
+ "group_key": "18ef987d1dc669749ce6b9a95e8334c7bc63b1fe5865667dd90e40d28d488213"
168
+ },
169
+ {
170
+ "claim_id": "claim_480548161d8ba485d5b2808550e68fdbb9c8c5df426dab7cd47b17bf709398de",
171
+ "kind": "cli_command",
172
+ "raw_text": "deploy",
173
+ "value": "deploy",
174
+ "qualifier": null,
175
+ "expected_default": null,
176
+ "doc_path": "README.md",
177
+ "line": 10,
178
+ "column": 1,
179
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
180
+ "extraction": "code_block",
181
+ "extraction_confidence": 0.85,
182
+ "locations": [
183
+ {
184
+ "line": 10,
185
+ "column": 1,
186
+ "raw_text": "deploy",
187
+ "extraction": "code_block"
188
+ }
189
+ ],
190
+ "extraction_sources": [
191
+ "code_block"
192
+ ],
193
+ "group_key": "fc922af11ba255908f57ed1415ca2ce79cb66482668fc75806c027400bf8fb8b"
194
+ },
195
+ {
196
+ "claim_id": "claim_5a3da990541e200bea67bf8bbdb3c744c24208a2ac2f4d03e6d866fa93a00949",
197
+ "kind": "cli_flag",
198
+ "raw_text": "--dry-run",
199
+ "value": "--dry-run",
200
+ "qualifier": "deploy",
201
+ "expected_default": null,
202
+ "doc_path": "README.md",
203
+ "line": 10,
204
+ "column": 1,
205
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
206
+ "extraction": "code_block",
207
+ "extraction_confidence": 0.85,
208
+ "locations": [
209
+ {
210
+ "line": 10,
211
+ "column": 1,
212
+ "raw_text": "--dry-run",
213
+ "extraction": "code_block"
214
+ }
215
+ ],
216
+ "extraction_sources": [
217
+ "code_block"
218
+ ],
219
+ "group_key": "ef6ca5d1b9dc4e9eb0893249d38f0fd4f56a2777b24bc3f752625af928edba16"
220
+ }
221
+ ],
222
+ "symbols": [
223
+ {
224
+ "symbol_id": "symbol_7f4ec6166b128edddef3fa7fb316fa7fb9f9bd74dd3a9f61a2afb0f7b1ed1fe4",
225
+ "kind": "package_script",
226
+ "name": "build",
227
+ "qualified_name": "build",
228
+ "aliases": [],
229
+ "default": "tsc",
230
+ "file": "package.json",
231
+ "line": 1,
232
+ "language": "javascript",
233
+ "framework": null,
234
+ "parent_id": null,
235
+ "exported": false,
236
+ "decorators": [],
237
+ "derived": false,
238
+ "setting_group": null,
239
+ "authoritative": true,
240
+ "raw_path": null,
241
+ "handler": null,
242
+ "partial_prefix": false,
243
+ "ts_type": false
244
+ },
245
+ {
246
+ "symbol_id": "symbol_476bd8255c86684b535e3824b81e18168dc6241e80b3d33f8060f559330a598d",
247
+ "kind": "cli_command",
248
+ "name": "node-tool",
249
+ "qualified_name": "src.cli.node-tool",
250
+ "aliases": [
251
+ "node-tool"
252
+ ],
253
+ "default": null,
254
+ "file": "src/cli.ts",
255
+ "line": 1,
256
+ "language": "typescript",
257
+ "framework": "commander",
258
+ "parent_id": null,
259
+ "exported": false,
260
+ "decorators": [],
261
+ "derived": false,
262
+ "setting_group": null,
263
+ "authoritative": true,
264
+ "raw_path": null,
265
+ "handler": null,
266
+ "partial_prefix": false,
267
+ "ts_type": false
268
+ },
269
+ {
270
+ "symbol_id": "symbol_11431c4e2120a23a2b72f1df729e0fc35900b054592ffce71840f214137e965d",
271
+ "kind": "cli_command",
272
+ "name": "node-tool",
273
+ "qualified_name": "src.cli.npx:node-tool",
274
+ "aliases": [
275
+ "node-tool"
276
+ ],
277
+ "default": null,
278
+ "file": "src/cli.ts",
279
+ "line": 1,
280
+ "language": "typescript",
281
+ "framework": "commander",
282
+ "parent_id": null,
283
+ "exported": false,
284
+ "decorators": [],
285
+ "derived": false,
286
+ "setting_group": null,
287
+ "authoritative": true,
288
+ "raw_path": null,
289
+ "handler": null,
290
+ "partial_prefix": false,
291
+ "ts_type": false
292
+ },
293
+ {
294
+ "symbol_id": "symbol_9a1a072d06d03fb6534fee333536fc517128c14eaa9160e57def762da426af15",
295
+ "kind": "env_var",
296
+ "name": "API_BASE_URL",
297
+ "qualified_name": "src.cli.API_BASE_URL",
298
+ "aliases": [],
299
+ "default": null,
300
+ "file": "src/cli.ts",
301
+ "line": 5,
302
+ "language": "python",
303
+ "framework": null,
304
+ "parent_id": null,
305
+ "exported": false,
306
+ "decorators": [],
307
+ "derived": false,
308
+ "setting_group": null,
309
+ "authoritative": true,
310
+ "raw_path": null,
311
+ "handler": null,
312
+ "partial_prefix": false,
313
+ "ts_type": false
314
+ },
315
+ {
316
+ "symbol_id": "symbol_aa6feab616a2677a50c8b0952b92efe69057a45edd73d7026d1793378c168d17",
317
+ "kind": "cli_command",
318
+ "name": "deploy",
319
+ "qualified_name": "src.cli.deploy",
320
+ "aliases": [],
321
+ "default": null,
322
+ "file": "src/cli.ts",
323
+ "line": 6,
324
+ "language": "typescript",
325
+ "framework": "commander",
326
+ "parent_id": "symbol_476bd8255c86684b535e3824b81e18168dc6241e80b3d33f8060f559330a598d",
327
+ "exported": false,
328
+ "decorators": [],
329
+ "derived": false,
330
+ "setting_group": null,
331
+ "authoritative": true,
332
+ "raw_path": null,
333
+ "handler": null,
334
+ "partial_prefix": false,
335
+ "ts_type": false
336
+ },
337
+ {
338
+ "symbol_id": "symbol_ae8c5546ce7d2b7ee39ce02b1a666c84b10bcbfe4f5c4511a12d24598a2777c3",
339
+ "kind": "route",
340
+ "name": "GET /healthz",
341
+ "qualified_name": "GET /healthz",
342
+ "aliases": [],
343
+ "default": null,
344
+ "file": "src/cli.ts",
345
+ "line": 10,
346
+ "language": "typescript",
347
+ "framework": "express",
348
+ "parent_id": null,
349
+ "exported": false,
350
+ "decorators": [],
351
+ "derived": false,
352
+ "setting_group": null,
353
+ "authoritative": true,
354
+ "raw_path": "/healthz",
355
+ "handler": null,
356
+ "partial_prefix": false,
357
+ "ts_type": false
358
+ }
359
+ ],
360
+ "findings": [
361
+ {
362
+ "claim": {
363
+ "claim_id": "claim_d2134d75a71ba55b7b92cfc68346a9db4429fc018d51970b9963c0b63bcd20a3",
364
+ "kind": "package_script",
365
+ "raw_text": "npm run build:prod",
366
+ "value": "build:prod",
367
+ "qualifier": null,
368
+ "expected_default": null,
369
+ "doc_path": "README.md",
370
+ "line": 3,
371
+ "column": 26,
372
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
373
+ "extraction": "inline_code",
374
+ "extraction_confidence": 0.9,
375
+ "locations": [
376
+ {
377
+ "line": 3,
378
+ "column": 26,
379
+ "raw_text": "npm run build:prod",
380
+ "extraction": "inline_code"
381
+ }
382
+ ],
383
+ "extraction_sources": [
384
+ "inline_code"
385
+ ],
386
+ "group_key": "d420474915dd3320a343cb79d3ea9f3312e0f6b015393a28d32b994a6134d4a0"
387
+ },
388
+ "matched_symbol": {
389
+ "symbol_id": "symbol_7f4ec6166b128edddef3fa7fb316fa7fb9f9bd74dd3a9f61a2afb0f7b1ed1fe4",
390
+ "kind": "package_script",
391
+ "name": "build",
392
+ "qualified_name": "build",
393
+ "aliases": [],
394
+ "default": "tsc",
395
+ "file": "package.json",
396
+ "line": 1,
397
+ "language": "javascript",
398
+ "framework": null,
399
+ "parent_id": null,
400
+ "exported": false,
401
+ "decorators": [],
402
+ "derived": false,
403
+ "setting_group": null,
404
+ "authoritative": true,
405
+ "raw_path": null,
406
+ "handler": null,
407
+ "partial_prefix": false,
408
+ "ts_type": false
409
+ },
410
+ "verdict": "renamed",
411
+ "suggestion": "build",
412
+ "evidence": [
413
+ {
414
+ "file": "README.md",
415
+ "line": 3,
416
+ "text": "npm run build:prod",
417
+ "end_line": null
418
+ },
419
+ {
420
+ "file": "package.json",
421
+ "line": 1,
422
+ "text": "- \"scripts\": {\"build:prod\": \"tsc\"},\n+ \"scripts\": {\"build\": \"tsc\"},",
423
+ "end_line": null
424
+ }
425
+ ],
426
+ "introduced_by": {
427
+ "sha": "3ef9444ea509abf03bd7a22340d43b0d8dcfd373",
428
+ "short_sha": "3ef9444",
429
+ "author_name": "Author hidden",
430
+ "author_email": null,
431
+ "date": "2026-10-02T09:00:00Z",
432
+ "summary": "Rename the release build script"
433
+ },
434
+ "confidence": 0.92,
435
+ "reasons": [
436
+ "No indexed package_script named build:prod was found. Closest indexed candidates: build (package.json:1).",
437
+ "Git history confirms this name changed to build.",
438
+ "Git history changed this name in 3ef9444."
439
+ ],
440
+ "decided_by": "rules",
441
+ "replayed": false,
442
+ "package": "node-tool",
443
+ "doc_text": "- Build the release with `npm run build:prod`."
444
+ },
445
+ {
446
+ "claim": {
447
+ "claim_id": "claim_d12598cc77a7e55240db1ae1c97f7c9b9bc25bb8327ea4337c0c333592d49816",
448
+ "kind": "env_var",
449
+ "raw_text": "process.env.API_URL",
450
+ "value": "API_URL",
451
+ "qualifier": null,
452
+ "expected_default": null,
453
+ "doc_path": "README.md",
454
+ "line": 4,
455
+ "column": 26,
456
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
457
+ "extraction": "inline_code",
458
+ "extraction_confidence": 0.9,
459
+ "locations": [
460
+ {
461
+ "line": 4,
462
+ "column": 26,
463
+ "raw_text": "process.env.API_URL",
464
+ "extraction": "inline_code"
465
+ }
466
+ ],
467
+ "extraction_sources": [
468
+ "inline_code"
469
+ ],
470
+ "group_key": "4676fab835eff9de9e5f8b30c4d26b12e9d948b2bcdf30fccb91e91526e98ee0"
471
+ },
472
+ "matched_symbol": {
473
+ "symbol_id": "symbol_9a1a072d06d03fb6534fee333536fc517128c14eaa9160e57def762da426af15",
474
+ "kind": "env_var",
475
+ "name": "API_BASE_URL",
476
+ "qualified_name": "src.cli.API_BASE_URL",
477
+ "aliases": [],
478
+ "default": null,
479
+ "file": "src/cli.ts",
480
+ "line": 5,
481
+ "language": "python",
482
+ "framework": null,
483
+ "parent_id": null,
484
+ "exported": false,
485
+ "decorators": [],
486
+ "derived": false,
487
+ "setting_group": null,
488
+ "authoritative": true,
489
+ "raw_path": null,
490
+ "handler": null,
491
+ "partial_prefix": false,
492
+ "ts_type": false
493
+ },
494
+ "verdict": "renamed",
495
+ "suggestion": "API_BASE_URL",
496
+ "evidence": [
497
+ {
498
+ "file": "README.md",
499
+ "line": 4,
500
+ "text": "process.env.API_URL",
501
+ "end_line": null
502
+ },
503
+ {
504
+ "file": "src/cli.ts",
505
+ "line": 1,
506
+ "text": "-const apiUrl = process.env.API_URL;\n+const apiUrl = process.env.API_BASE_URL;",
507
+ "end_line": null
508
+ }
509
+ ],
510
+ "introduced_by": {
511
+ "sha": "6bd2e416c699a51e45d11a6b56784df6e6061218",
512
+ "short_sha": "6bd2e41",
513
+ "author_name": "Author hidden",
514
+ "author_email": null,
515
+ "date": "2026-10-03T09:00:00Z",
516
+ "summary": "Rename the API base URL variable"
517
+ },
518
+ "confidence": 0.92,
519
+ "reasons": [
520
+ "No indexed env_var named API_URL was found. Closest indexed candidates: API_BASE_URL (src/cli.ts:5).",
521
+ "Git history confirms this name changed to API_BASE_URL.",
522
+ "Git history changed this name in 6bd2e41."
523
+ ],
524
+ "decided_by": "rules",
525
+ "replayed": false,
526
+ "package": "node-tool",
527
+ "doc_text": "- The API URL comes from `process.env.API_URL`."
528
+ },
529
+ {
530
+ "claim": {
531
+ "claim_id": "claim_4cc2cc9a97ebd3a12eba8a94222339b2daae59de003d4e96979461be916694e6",
532
+ "kind": "endpoint",
533
+ "raw_text": "GET /health",
534
+ "value": "GET /health",
535
+ "qualifier": null,
536
+ "expected_default": null,
537
+ "doc_path": "README.md",
538
+ "line": 5,
539
+ "column": 23,
540
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
541
+ "extraction": "inline_code",
542
+ "extraction_confidence": 0.95,
543
+ "locations": [
544
+ {
545
+ "line": 5,
546
+ "column": 23,
547
+ "raw_text": "GET /health",
548
+ "extraction": "inline_code"
549
+ }
550
+ ],
551
+ "extraction_sources": [
552
+ "inline_code"
553
+ ],
554
+ "group_key": "2a37694595703caae9479e739a98d813dc73735ba64302375119549f85a928d4"
555
+ },
556
+ "matched_symbol": {
557
+ "symbol_id": "symbol_ae8c5546ce7d2b7ee39ce02b1a666c84b10bcbfe4f5c4511a12d24598a2777c3",
558
+ "kind": "route",
559
+ "name": "GET /healthz",
560
+ "qualified_name": "GET /healthz",
561
+ "aliases": [],
562
+ "default": null,
563
+ "file": "src/cli.ts",
564
+ "line": 10,
565
+ "language": "typescript",
566
+ "framework": "express",
567
+ "parent_id": null,
568
+ "exported": false,
569
+ "decorators": [],
570
+ "derived": false,
571
+ "setting_group": null,
572
+ "authoritative": true,
573
+ "raw_path": "/healthz",
574
+ "handler": null,
575
+ "partial_prefix": false,
576
+ "ts_type": false
577
+ },
578
+ "verdict": "renamed",
579
+ "suggestion": "/healthz",
580
+ "evidence": [
581
+ {
582
+ "file": "README.md",
583
+ "line": 5,
584
+ "text": "GET /health",
585
+ "end_line": null
586
+ },
587
+ {
588
+ "file": "src/cli.ts",
589
+ "line": 1,
590
+ "text": "-app.get(\"/health\", (_req, res) => res.send(\"ok\"));\n+app.get(\"/healthz\", (_req, res) => res.send(\"ok\"));",
591
+ "end_line": null
592
+ }
593
+ ],
594
+ "introduced_by": {
595
+ "sha": "12804ce9b1afc1a2326d9b0828c1fcea429811a5",
596
+ "short_sha": "12804ce",
597
+ "author_name": "Author hidden",
598
+ "author_email": null,
599
+ "date": "2026-10-04T09:00:00Z",
600
+ "summary": "Rename the health route"
601
+ },
602
+ "confidence": 0.92,
603
+ "reasons": [
604
+ "No indexed endpoint named GET /health was found. Closest indexed candidates: GET /healthz (src/cli.ts:10).",
605
+ "Git history confirms this name changed to /healthz.",
606
+ "Git history changed this name in 12804ce."
607
+ ],
608
+ "decided_by": "rules",
609
+ "replayed": false,
610
+ "package": "node-tool",
611
+ "doc_text": "- The service exposes `GET /health`."
612
+ },
613
+ {
614
+ "claim": {
615
+ "claim_id": "claim_480548161d8ba485d5b2808550e68fdbb9c8c5df426dab7cd47b17bf709398de",
616
+ "kind": "cli_command",
617
+ "raw_text": "deploy",
618
+ "value": "deploy",
619
+ "qualifier": null,
620
+ "expected_default": null,
621
+ "doc_path": "README.md",
622
+ "line": 10,
623
+ "column": 1,
624
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
625
+ "extraction": "code_block",
626
+ "extraction_confidence": 0.85,
627
+ "locations": [
628
+ {
629
+ "line": 10,
630
+ "column": 1,
631
+ "raw_text": "deploy",
632
+ "extraction": "code_block"
633
+ }
634
+ ],
635
+ "extraction_sources": [
636
+ "code_block"
637
+ ],
638
+ "group_key": "fc922af11ba255908f57ed1415ca2ce79cb66482668fc75806c027400bf8fb8b"
639
+ },
640
+ "matched_symbol": {
641
+ "symbol_id": "symbol_aa6feab616a2677a50c8b0952b92efe69057a45edd73d7026d1793378c168d17",
642
+ "kind": "cli_command",
643
+ "name": "deploy",
644
+ "qualified_name": "src.cli.deploy",
645
+ "aliases": [],
646
+ "default": null,
647
+ "file": "src/cli.ts",
648
+ "line": 6,
649
+ "language": "typescript",
650
+ "framework": "commander",
651
+ "parent_id": "symbol_476bd8255c86684b535e3824b81e18168dc6241e80b3d33f8060f559330a598d",
652
+ "exported": false,
653
+ "decorators": [],
654
+ "derived": false,
655
+ "setting_group": null,
656
+ "authoritative": true,
657
+ "raw_path": null,
658
+ "handler": null,
659
+ "partial_prefix": false,
660
+ "ts_type": false
661
+ },
662
+ "verdict": "ok",
663
+ "suggestion": null,
664
+ "evidence": [
665
+ {
666
+ "file": "src/cli.ts",
667
+ "line": 6,
668
+ "text": "src.cli.deploy",
669
+ "end_line": null
670
+ }
671
+ ],
672
+ "introduced_by": null,
673
+ "confidence": 0.95,
674
+ "reasons": [
675
+ "cli_command deploy matches src.cli.deploy at src/cli.ts:6."
676
+ ],
677
+ "decided_by": "rules",
678
+ "replayed": false,
679
+ "package": "node-tool",
680
+ "doc_text": "npx node-tool deploy --dry-run"
681
+ },
682
+ {
683
+ "claim": {
684
+ "claim_id": "claim_5a3da990541e200bea67bf8bbdb3c744c24208a2ac2f4d03e6d866fa93a00949",
685
+ "kind": "cli_flag",
686
+ "raw_text": "--dry-run",
687
+ "value": "--dry-run",
688
+ "qualifier": "deploy",
689
+ "expected_default": null,
690
+ "doc_path": "README.md",
691
+ "line": 10,
692
+ "column": 1,
693
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
694
+ "extraction": "code_block",
695
+ "extraction_confidence": 0.85,
696
+ "locations": [
697
+ {
698
+ "line": 10,
699
+ "column": 1,
700
+ "raw_text": "--dry-run",
701
+ "extraction": "code_block"
702
+ }
703
+ ],
704
+ "extraction_sources": [
705
+ "code_block"
706
+ ],
707
+ "group_key": "ef6ca5d1b9dc4e9eb0893249d38f0fd4f56a2777b24bc3f752625af928edba16"
708
+ },
709
+ "matched_symbol": null,
710
+ "verdict": "missing",
711
+ "suggestion": null,
712
+ "evidence": [
713
+ {
714
+ "file": "README.md",
715
+ "line": 10,
716
+ "text": "--dry-run",
717
+ "end_line": null
718
+ }
719
+ ],
720
+ "introduced_by": {
721
+ "sha": "e36fa00d8efd0c431f810f11ada620cddb44eb7f",
722
+ "short_sha": "e36fa00",
723
+ "author_name": "Author hidden",
724
+ "author_email": null,
725
+ "date": "2026-10-05T09:00:00Z",
726
+ "summary": "Remove deployment dry run"
727
+ },
728
+ "confidence": 0.5,
729
+ "reasons": [
730
+ "No indexed cli_flag named --dry-run was found. No close indexed candidates were found."
731
+ ],
732
+ "decided_by": "rules",
733
+ "replayed": false,
734
+ "package": "node-tool",
735
+ "doc_text": "npx node-tool deploy --dry-run"
736
+ },
737
+ {
738
+ "claim": {
739
+ "claim_id": "claim_795780b9865b0206fed67875f3d950558e498427f8020a071496fada6573e72f",
740
+ "kind": "code_command",
741
+ "raw_text": "npx node-tool deploy --dry-run",
742
+ "value": "npx node-tool deploy --dry-run",
743
+ "qualifier": null,
744
+ "expected_default": null,
745
+ "doc_path": "README.md",
746
+ "line": 10,
747
+ "column": 1,
748
+ "section_id": "section_b70ee5295fcbe7788b56b953964c0d3b96a7c5da8fe3c1b34f3ce72cf0fc880b",
749
+ "extraction": "code_block",
750
+ "extraction_confidence": 0.85,
751
+ "locations": [
752
+ {
753
+ "line": 10,
754
+ "column": 1,
755
+ "raw_text": "npx node-tool deploy --dry-run",
756
+ "extraction": "code_block"
757
+ },
758
+ {
759
+ "line": 10,
760
+ "column": 1,
761
+ "raw_text": "npx node-tool deploy --dry-run",
762
+ "extraction": "code_block"
763
+ }
764
+ ],
765
+ "extraction_sources": [
766
+ "code_block"
767
+ ],
768
+ "group_key": "18ef987d1dc669749ce6b9a95e8334c7bc63b1fe5865667dd90e40d28d488213"
769
+ },
770
+ "matched_symbol": null,
771
+ "verdict": "invalid_command",
772
+ "suggestion": null,
773
+ "evidence": [
774
+ {
775
+ "file": "README.md",
776
+ "line": 10,
777
+ "text": "npx node-tool deploy --dry-run",
778
+ "end_line": null
779
+ },
780
+ {
781
+ "file": "README.md",
782
+ "line": 10,
783
+ "text": "npx node-tool deploy --dry-run\n ^",
784
+ "end_line": null
785
+ }
786
+ ],
787
+ "introduced_by": null,
788
+ "confidence": 0.8,
789
+ "reasons": [
790
+ "Project command contains unknown command or flag: --dry-run."
791
+ ],
792
+ "decided_by": "rules",
793
+ "replayed": false,
794
+ "package": "node-tool",
795
+ "doc_text": "npx node-tool deploy --dry-run"
796
+ }
797
+ ],
798
+ "timings": {
799
+ "docs": 0.2729282000218518,
800
+ "index": 0.21029279998037964,
801
+ "match": 0.005539799982216209,
802
+ "history": 0.3884690999984741
803
+ },
804
+ "warnings": [],
805
+ "suppressed": [],
806
+ "historical_ignored": 0,
807
+ "llm_usage": {},
808
+ "packages": [
809
+ {
810
+ "name": "node-tool",
811
+ "root": ".",
812
+ "language": "javascript",
813
+ "commands": [
814
+ "build",
815
+ "node-tool"
816
+ ]
817
+ }
818
+ ],
819
+ "docs_repo_path": null,
820
+ "remote_url": "https://github.com/docs-drift/node-tool-demo",
821
+ "baselined": 0,
822
+ "package_version": "0.1.0"
823
+ }