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,226 @@
1
+ {
2
+ "schema_version": 1,
3
+ "package_version": "0.1.0.dev7+gd6e96eb92.d20261018",
4
+ "repo_path": "judge-fixture",
5
+ "head_sha": "66f495fa2e34b38bf32b8351447339d77739a7a5",
6
+ "scan_time": "2026-10-02T09:00:00Z",
7
+ "config_used": {
8
+ "docs": [
9
+ "README.md",
10
+ "docs/**/*.md",
11
+ "*.md"
12
+ ],
13
+ "exclude": [
14
+ "node_modules/**",
15
+ ".venv/**",
16
+ "vendor/**",
17
+ "CHANGELOG.md",
18
+ "**/CHANGELOG.md"
19
+ ],
20
+ "languages": "auto",
21
+ "ignore": [],
22
+ "min_confidence": 0.6,
23
+ "llm": {
24
+ "enabled": false,
25
+ "model": null,
26
+ "max_claims": 40,
27
+ "concurrency": 4,
28
+ "timeout": 60.0,
29
+ "budget": 0.5,
30
+ "redact_paths": []
31
+ },
32
+ "history": {
33
+ "max_commits": 2000,
34
+ "show_emails": false
35
+ }
36
+ },
37
+ "docs": [
38
+ {
39
+ "path": "README.md",
40
+ "content_hash": "892b6597b6b082904b26163e9fd7347ce720020c645b159e8d9c9abae35b807e",
41
+ "format": "markdown"
42
+ }
43
+ ],
44
+ "sections": [
45
+ {
46
+ "section_id": "section_0a7347ab74c8690afd4f53f0ac362a559981d421fbc1be7c0dc4fb9c42108008",
47
+ "doc_path": "README.md",
48
+ "heading": "Synthetic CLI fixture",
49
+ "heading_level": 1,
50
+ "heading_path": [
51
+ "Synthetic CLI fixture"
52
+ ],
53
+ "start_line": 1,
54
+ "end_line": 3,
55
+ "context": "current",
56
+ "historical_spans": []
57
+ }
58
+ ],
59
+ "claims": [
60
+ {
61
+ "claim_id": "claim_04babea50df488dbdb661aecf025c9e472cb08ec92ecb56a563af15e1c2252a6",
62
+ "kind": "cli_flag",
63
+ "raw_text": "--port",
64
+ "value": "--port",
65
+ "qualifier": null,
66
+ "expected_default": null,
67
+ "doc_path": "README.md",
68
+ "line": 3,
69
+ "column": 5,
70
+ "section_id": "section_0a7347ab74c8690afd4f53f0ac362a559981d421fbc1be7c0dc4fb9c42108008",
71
+ "extraction": "inline_code",
72
+ "extraction_confidence": 0.9,
73
+ "locations": [
74
+ {
75
+ "line": 3,
76
+ "column": 5,
77
+ "raw_text": "--port",
78
+ "extraction": "inline_code"
79
+ }
80
+ ],
81
+ "extraction_sources": [
82
+ "inline_code"
83
+ ],
84
+ "group_key": "38d0b0f2836bee9baca4f6bcfc6fe61622b4764c5b1b5789af6518fb0e760fb5"
85
+ }
86
+ ],
87
+ "symbols": [
88
+ {
89
+ "symbol_id": "symbol_d68f6f2b6102e2db0355b3d6f7e0df36bf541a225121e61cb7429282ef7d38bd",
90
+ "kind": "cli_flag",
91
+ "name": "--listen",
92
+ "qualified_name": "cli.root.--listen",
93
+ "aliases": [],
94
+ "default": null,
95
+ "file": "cli.py",
96
+ "line": 4,
97
+ "language": "python",
98
+ "framework": "argparse",
99
+ "parent_id": null,
100
+ "exported": false,
101
+ "decorators": [],
102
+ "derived": false,
103
+ "setting_group": null,
104
+ "authoritative": true,
105
+ "raw_path": null,
106
+ "handler": null,
107
+ "partial_prefix": false,
108
+ "ts_type": false
109
+ }
110
+ ],
111
+ "findings": [
112
+ {
113
+ "claim": {
114
+ "claim_id": "claim_04babea50df488dbdb661aecf025c9e472cb08ec92ecb56a563af15e1c2252a6",
115
+ "kind": "cli_flag",
116
+ "raw_text": "--port",
117
+ "value": "--port",
118
+ "qualifier": null,
119
+ "expected_default": null,
120
+ "doc_path": "README.md",
121
+ "line": 3,
122
+ "column": 5,
123
+ "section_id": "section_0a7347ab74c8690afd4f53f0ac362a559981d421fbc1be7c0dc4fb9c42108008",
124
+ "extraction": "inline_code",
125
+ "extraction_confidence": 0.9,
126
+ "locations": [
127
+ {
128
+ "line": 3,
129
+ "column": 5,
130
+ "raw_text": "--port",
131
+ "extraction": "inline_code"
132
+ }
133
+ ],
134
+ "extraction_sources": [
135
+ "inline_code"
136
+ ],
137
+ "group_key": "38d0b0f2836bee9baca4f6bcfc6fe61622b4764c5b1b5789af6518fb0e760fb5"
138
+ },
139
+ "matched_symbol": {
140
+ "symbol_id": "symbol_d68f6f2b6102e2db0355b3d6f7e0df36bf541a225121e61cb7429282ef7d38bd",
141
+ "kind": "cli_flag",
142
+ "name": "--listen",
143
+ "qualified_name": "cli.root.--listen",
144
+ "aliases": [],
145
+ "default": null,
146
+ "file": "cli.py",
147
+ "line": 4,
148
+ "language": "python",
149
+ "framework": "argparse",
150
+ "parent_id": null,
151
+ "exported": false,
152
+ "decorators": [],
153
+ "derived": false,
154
+ "setting_group": null,
155
+ "authoritative": true,
156
+ "raw_path": null,
157
+ "handler": null,
158
+ "partial_prefix": false,
159
+ "ts_type": false
160
+ },
161
+ "verdict": "renamed",
162
+ "suggestion": "--listen",
163
+ "evidence": [
164
+ {
165
+ "file": "README.md",
166
+ "line": 3,
167
+ "text": "--port",
168
+ "end_line": null
169
+ },
170
+ {
171
+ "file": "cli.py",
172
+ "line": 1,
173
+ "text": "import argparse\n\nparser = argparse.ArgumentParser()\nparser.add_argument(\"--listen\", type=int)\n",
174
+ "end_line": null
175
+ },
176
+ {
177
+ "file": "cli.py",
178
+ "line": 1,
179
+ "text": "-parser.add_argument(\"--port\", type=int)\n+parser.add_argument(\"--listen\", type=int)",
180
+ "end_line": null
181
+ }
182
+ ],
183
+ "introduced_by": {
184
+ "sha": "66f495fa2e34b38bf32b8351447339d77739a7a5",
185
+ "short_sha": "66f495f",
186
+ "author_name": "Priya Shah",
187
+ "author_email": null,
188
+ "date": "2026-10-02T09:00:00Z",
189
+ "summary": "Rename port to listen without updating README"
190
+ },
191
+ "confidence": 0.92,
192
+ "reasons": [
193
+ "No indexed cli_flag named --port was found. Closest indexed candidates: --listen (cli.py:4).",
194
+ "Git history confirms this name changed to --listen.",
195
+ "Git history changed this name in 66f495f."
196
+ ],
197
+ "decided_by": "rules",
198
+ "replayed": false,
199
+ "package": "judge-fixture",
200
+ "doc_text": "Use `--port` to select the listening port."
201
+ }
202
+ ],
203
+ "timings": {
204
+ "docs": 0.26383970002643764,
205
+ "index": 0.12528340000426397,
206
+ "match": 0.2292884000344202,
207
+ "history": 0.2897374000167474
208
+ },
209
+ "warnings": [
210
+ "SYNTHETIC FIXTURE / precomputed static scan. One intentionally stale claim; not a real-world accuracy result. Review the proposed replacement before editing. Rebuild and inspect the two commits with scripts/build_judge_demo.py."
211
+ ],
212
+ "suppressed": [],
213
+ "historical_ignored": 0,
214
+ "llm_usage": {},
215
+ "packages": [
216
+ {
217
+ "name": "judge-fixture",
218
+ "root": ".",
219
+ "language": "unknown",
220
+ "commands": []
221
+ }
222
+ ],
223
+ "docs_repo_path": null,
224
+ "remote_url": null,
225
+ "baselined": 0
226
+ }
@@ -0,0 +1,89 @@
1
+ [
2
+ {
3
+ "scan_id": "example-judge",
4
+ "name": "One stale claim (synthetic fixture)",
5
+ "repo_url": "synthetic:judge-fixture",
6
+ "file": "judge-fixture.json",
7
+ "kind": "fixture",
8
+ "verified": false,
9
+ "note": "SYNTHETIC FIXTURE / precomputed static scan. One intentionally stale claim; not a real-world accuracy result. Review the proposed replacement before editing. Rebuild and inspect the two commits with scripts/build_judge_demo.py."
10
+ },
11
+ {
12
+ "scan_id": "example-rich-cli-reviewed",
13
+ "name": "rich-cli reviewed case",
14
+ "repo_url": "https://github.com/Textualize/rich-cli",
15
+ "file": "rich-cli-reviewed.json",
16
+ "kind": "public",
17
+ "sha": "46f4d2469097be395558768714a5f07ebccf1412",
18
+ "verified": false,
19
+ "reviewer": "Codex (agent-assisted; not independent human labels)",
20
+ "note": "Two runtime-reproduced option defects; see /case-study. Precomputed snapshot.",
21
+ "verified_values": [
22
+ "--line-number",
23
+ "--p"
24
+ ]
25
+ },
26
+ {
27
+ "scan_id": "example-py-cli",
28
+ "name": "py-cli demo",
29
+ "repo_url": "https://github.com/docs-drift/py-cli-demo",
30
+ "file": "py-cli.json",
31
+ "kind": "fixture",
32
+ "verified": true,
33
+ "note": "Synthetic fixture with a deterministic Git history."
34
+ },
35
+ {
36
+ "scan_id": "example-fastapi-svc",
37
+ "name": "fastapi-svc demo",
38
+ "repo_url": "https://github.com/docs-drift/fastapi-svc-demo",
39
+ "file": "fastapi-svc.json",
40
+ "kind": "fixture",
41
+ "verified": true,
42
+ "note": "Synthetic fixture with a deterministic Git history."
43
+ },
44
+ {
45
+ "scan_id": "example-node-tool",
46
+ "name": "node-tool demo",
47
+ "repo_url": "https://github.com/docs-drift/node-tool-demo",
48
+ "file": "node-tool.json",
49
+ "kind": "fixture",
50
+ "verified": true,
51
+ "note": "Synthetic fixture with a deterministic Git history."
52
+ },
53
+ {
54
+ "scan_id": "example-clean-repo",
55
+ "name": "clean-repo demo",
56
+ "repo_url": "https://github.com/docs-drift/clean-repo-demo",
57
+ "file": "clean-repo.json",
58
+ "kind": "fixture",
59
+ "verified": true,
60
+ "note": "Synthetic fixture with a deterministic Git history."
61
+ },
62
+ {
63
+ "scan_id": "example-rich-cli",
64
+ "name": "rich-cli",
65
+ "repo_url": "https://github.com/textualize/rich-cli",
66
+ "file": "rich-cli.json",
67
+ "kind": "public",
68
+ "sha": "46f4d2469097be395558768714a5f07ebccf1412",
69
+ "verified": true,
70
+ "note": "Manually checked README.md:61 (--line-number) against src/rich_cli/__main__.py:358 (--line-numbers), and README.md:180 (--p) against the --print/-p declaration. Other static findings are not manually certified.",
71
+ "verified_values": [
72
+ "--line-number",
73
+ "--p"
74
+ ]
75
+ },
76
+ {
77
+ "scan_id": "example-files-to-prompt",
78
+ "name": "files-to-prompt \u00b7 historical",
79
+ "repo_url": "https://github.com/simonw/files-to-prompt",
80
+ "file": "files-to-prompt.json",
81
+ "kind": "public",
82
+ "sha": "ae06f2039f3a1dc1c9f3b4657fb51459490768f2",
83
+ "verified": true,
84
+ "note": "Historical snapshot, intentionally pinned before the upstream fix: README.md:55 says c/--cxml; files_to_prompt/cli.py declares -c/--cxml. Fixed upstream by f7cf729babc92604b9cd06c3d9cad32daff0f276. Other findings may reflect scanner limitations, not real defects.",
85
+ "verified_values": [
86
+ "c/--cxml"
87
+ ]
88
+ }
89
+ ]