docs-drift 0.1.0__tar.gz
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.
- docs_drift-0.1.0/.gitattributes +3 -0
- docs_drift-0.1.0/.gitignore +45 -0
- docs_drift-0.1.0/.pre-commit-config.yaml +21 -0
- docs_drift-0.1.0/CHANGELOG.md +45 -0
- docs_drift-0.1.0/CONTRIBUTING.md +48 -0
- docs_drift-0.1.0/LICENSE +21 -0
- docs_drift-0.1.0/PKG-INFO +331 -0
- docs_drift-0.1.0/README.md +264 -0
- docs_drift-0.1.0/RELEASING.md +258 -0
- docs_drift-0.1.0/SECURITY.md +10 -0
- docs_drift-0.1.0/SUBMISSION.md +110 -0
- docs_drift-0.1.0/benchmark/PROTOCOL.md +143 -0
- docs_drift-0.1.0/benchmark/README.md +42 -0
- docs_drift-0.1.0/benchmark/RESULTS.md +19 -0
- docs_drift-0.1.0/benchmark/__init__.py +1 -0
- docs_drift-0.1.0/benchmark/acquire.py +156 -0
- docs_drift-0.1.0/benchmark/compute.py +330 -0
- docs_drift-0.1.0/benchmark/labels_todo.md +520 -0
- docs_drift-0.1.0/benchmark/performance-repos.json +17 -0
- docs_drift-0.1.0/benchmark/performance-results.json +1009 -0
- docs_drift-0.1.0/benchmark/performance.py +96 -0
- docs_drift-0.1.0/benchmark/probe.py +82 -0
- docs_drift-0.1.0/benchmark/repos.json +182 -0
- docs_drift-0.1.0/benchmark/run.py +303 -0
- docs_drift-0.1.0/benchmark/summarize_sweep.py +113 -0
- docs_drift-0.1.0/benchmark/sweep-repos.json +479 -0
- docs_drift-0.1.0/benchmark/upstream-drafts/README.md +16 -0
- docs_drift-0.1.0/benchmark/validation-results.json +51 -0
- docs_drift-0.1.0/docs/AWS-HANDOFF.md +75 -0
- docs_drift-0.1.0/docs/CHANGELOG.md +45 -0
- docs_drift-0.1.0/docs/CI-DIAGNOSIS.md +135 -0
- docs_drift-0.1.0/docs/CLI.md +155 -0
- docs_drift-0.1.0/docs/COMPETITIVE-PLAN.md +28 -0
- docs_drift-0.1.0/docs/FLOW-RECORDING.md +34 -0
- docs_drift-0.1.0/docs/INDEX_ACCURACY.md +30 -0
- docs_drift-0.1.0/docs/JUDGE-DEMO.md +71 -0
- docs_drift-0.1.0/docs/JUDGE-READINESS-2026-10-22.md +51 -0
- docs_drift-0.1.0/docs/LIMITATIONS.md +61 -0
- docs_drift-0.1.0/docs/MAINTAINER-PILOT-2026-10-23.md +61 -0
- docs_drift-0.1.0/docs/MAINTAINER-PILOT.md +78 -0
- docs_drift-0.1.0/docs/ORG-PILOT-2026-10-22.md +61 -0
- docs_drift-0.1.0/docs/ORG-VERIFICATION-2026-10-22.md +45 -0
- docs_drift-0.1.0/docs/ORGANIZATIONS.md +156 -0
- docs_drift-0.1.0/docs/PRECISION-VERIFICATION-2026-10-23.md +80 -0
- docs_drift-0.1.0/docs/PRODUCT.md +72 -0
- docs_drift-0.1.0/docs/REAL-CASE.md +100 -0
- docs_drift-0.1.0/docs/RELEASE-REHEARSAL-2026-10-23.md +59 -0
- docs_drift-0.1.0/docs/RESULTS.md +58 -0
- docs_drift-0.1.0/docs/SECURITY.md +220 -0
- docs_drift-0.1.0/docs/TEAM-VERIFICATION-2026-10-23.md +110 -0
- docs_drift-0.1.0/docs/TEAM-WORKFLOWS.md +139 -0
- docs_drift-0.1.0/docs/UI-REVIEW.md +59 -0
- docs_drift-0.1.0/docs/VERIFICATION.md +64 -0
- docs_drift-0.1.0/docs/WEB-VERIFICATION.md +107 -0
- docs_drift-0.1.0/docs/action-release-check.md +34 -0
- docs_drift-0.1.0/docs/assets/flow/dictated-release-request-2026-10-23.txt +17 -0
- docs_drift-0.1.0/docs/assets/flow/flow-highlights-2026-10-22.png +0 -0
- docs_drift-0.1.0/docs/assets/flow/provenance.json +34 -0
- docs_drift-0.1.0/docs/assets/flow/usage-card-supplied.png +0 -0
- docs_drift-0.1.0/docs/assets/graph-view.png +0 -0
- docs_drift-0.1.0/docs/assets/pr-comment-preview.png +0 -0
- docs_drift-0.1.0/docs/assets/provenance.json +6 -0
- docs_drift-0.1.0/docs/assets/quality/correction-verification.json +28 -0
- docs_drift-0.1.0/docs/assets/quality/followup.json +162 -0
- docs_drift-0.1.0/docs/assets/quality/maintainer-pilot-2026-10-23.json +49 -0
- docs_drift-0.1.0/docs/assets/quality/rich-cli-correction.patch +20 -0
- docs_drift-0.1.0/docs/assets/scan-demo.txt +31 -0
- docs_drift-0.1.0/docs/benchmark.md +63 -0
- docs_drift-0.1.0/docs/built-with-voice.md +46 -0
- docs_drift-0.1.0/docs/ci.md +22 -0
- docs_drift-0.1.0/docs/claims.md +19 -0
- docs_drift-0.1.0/docs/confidence.md +20 -0
- docs_drift-0.1.0/docs/configuration.md +44 -0
- docs_drift-0.1.0/docs/contributing.md +48 -0
- docs_drift-0.1.0/docs/demo-video.md +88 -0
- docs_drift-0.1.0/docs/deploy.md +141 -0
- docs_drift-0.1.0/docs/design.md +341 -0
- docs_drift-0.1.0/docs/faq.md +30 -0
- docs_drift-0.1.0/docs/getting-started.md +17 -0
- docs_drift-0.1.0/docs/github-action.md +56 -0
- docs_drift-0.1.0/docs/graph.md +28 -0
- docs_drift-0.1.0/docs/how-it-works.md +21 -0
- docs_drift-0.1.0/docs/index.md +234 -0
- docs_drift-0.1.0/docs/judge-assessment.md +52 -0
- docs_drift-0.1.0/docs/license.md +26 -0
- docs_drift-0.1.0/docs/llm-mode.md +17 -0
- docs_drift-0.1.0/docs/performance-profile.txt +42 -0
- docs_drift-0.1.0/docs/python-api.md +21 -0
- docs_drift-0.1.0/docs/release-verification.md +41 -0
- docs_drift-0.1.0/docs/releasing.md +258 -0
- docs_drift-0.1.0/docs/rules/DD001.md +3 -0
- docs_drift-0.1.0/docs/rules/DD002.md +3 -0
- docs_drift-0.1.0/docs/rules/DD003.md +3 -0
- docs_drift-0.1.0/docs/rules/DD004.md +3 -0
- docs_drift-0.1.0/docs/rules/DD005.md +3 -0
- docs_drift-0.1.0/docs/schema/README.md +25 -0
- docs_drift-0.1.0/docs/schema/SARIF-LICENSE.md +7 -0
- docs_drift-0.1.0/docs/schema/SARIF-NOTICES.txt +3 -0
- docs_drift-0.1.0/docs/schema/sarif-schema-2.1.0.json +3389 -0
- docs_drift-0.1.0/docs/schema/scan-result.v1.json +1024 -0
- docs_drift-0.1.0/docs/security-policy.md +10 -0
- docs_drift-0.1.0/docs/submission.md +102 -0
- docs_drift-0.1.0/docs/support.md +20 -0
- docs_drift-0.1.0/docs/vscode.md +13 -0
- docs_drift-0.1.0/editors/vscode/.vscode/launch.json +9 -0
- docs_drift-0.1.0/editors/vscode/.vscodeignore +6 -0
- docs_drift-0.1.0/editors/vscode/LICENSE +21 -0
- docs_drift-0.1.0/editors/vscode/README.md +13 -0
- docs_drift-0.1.0/editors/vscode/extension.js +17 -0
- docs_drift-0.1.0/editors/vscode/package-lock.json +96 -0
- docs_drift-0.1.0/editors/vscode/package.json +13 -0
- docs_drift-0.1.0/examples/clean-repo.html +73 -0
- docs_drift-0.1.0/examples/fastapi-svc.html +112 -0
- docs_drift-0.1.0/examples/monorepo-benchmark-before.json +22 -0
- docs_drift-0.1.0/examples/monorepo-benchmark.json +22 -0
- docs_drift-0.1.0/examples/node-tool.html +111 -0
- docs_drift-0.1.0/examples/py-cli.annotations.txt +4 -0
- docs_drift-0.1.0/examples/py-cli.html +114 -0
- docs_drift-0.1.0/examples/py-cli.json +1262 -0
- docs_drift-0.1.0/examples/py-cli.md +138 -0
- docs_drift-0.1.0/examples/py-cli.sarif +213 -0
- docs_drift-0.1.0/examples/py-cli.txt +31 -0
- docs_drift-0.1.0/examples/py-cli.xml +7 -0
- docs_drift-0.1.0/examples/web-accessibility.json +18 -0
- docs_drift-0.1.0/justfile +37 -0
- docs_drift-0.1.0/pyproject.toml +163 -0
- docs_drift-0.1.0/scripts/__init__.py +1 -0
- docs_drift-0.1.0/scripts/action_runner.py +94 -0
- docs_drift-0.1.0/scripts/bench_index.py +53 -0
- docs_drift-0.1.0/scripts/bench_scan.py +30 -0
- docs_drift-0.1.0/scripts/build_doc_assets.py +96 -0
- docs_drift-0.1.0/scripts/build_examples.py +44 -0
- docs_drift-0.1.0/scripts/build_judge_demo.py +76 -0
- docs_drift-0.1.0/scripts/build_public_docs.py +361 -0
- docs_drift-0.1.0/scripts/build_web_examples.py +98 -0
- docs_drift-0.1.0/scripts/check_coverage.py +22 -0
- docs_drift-0.1.0/scripts/check_html.py +49 -0
- docs_drift-0.1.0/scripts/check_readme_links.py +53 -0
- docs_drift-0.1.0/scripts/check_ui.cjs +87 -0
- docs_drift-0.1.0/scripts/check_web.py +58 -0
- docs_drift-0.1.0/scripts/demo_setup.py +133 -0
- docs_drift-0.1.0/scripts/dogfood.py +117 -0
- docs_drift-0.1.0/scripts/generate_reference.py +56 -0
- docs_drift-0.1.0/scripts/guard.py +83 -0
- docs_drift-0.1.0/scripts/maintainer_pilot.py +234 -0
- docs_drift-0.1.0/scripts/measure.py +288 -0
- docs_drift-0.1.0/scripts/monitor_web.py +61 -0
- docs_drift-0.1.0/scripts/record.py +94 -0
- docs_drift-0.1.0/scripts/record_demo.py +58 -0
- docs_drift-0.1.0/scripts/release.py +160 -0
- docs_drift-0.1.0/scripts/review_fixes.py +69 -0
- docs_drift-0.1.0/scripts/smoke.py +54 -0
- docs_drift-0.1.0/scripts/spotcheck_index.py +51 -0
- docs_drift-0.1.0/scripts/submission_reminders.py +32 -0
- docs_drift-0.1.0/scripts/verify_group_keys.py +72 -0
- docs_drift-0.1.0/scripts/verify_index.py +40 -0
- docs_drift-0.1.0/scripts/verify_install.py +95 -0
- docs_drift-0.1.0/scripts/verify_real_case.py +118 -0
- docs_drift-0.1.0/src/docs_drift/__init__.py +7 -0
- docs_drift-0.1.0/src/docs_drift/analysis.py +52 -0
- docs_drift-0.1.0/src/docs_drift/baseline.py +70 -0
- docs_drift-0.1.0/src/docs_drift/cli.py +871 -0
- docs_drift-0.1.0/src/docs_drift/collaboration.py +282 -0
- docs_drift-0.1.0/src/docs_drift/config.py +113 -0
- docs_drift-0.1.0/src/docs_drift/docs/__init__.py +1 -0
- docs_drift-0.1.0/src/docs_drift/docs/defaults.py +250 -0
- docs_drift-0.1.0/src/docs_drift/docs/discover.py +172 -0
- docs_drift-0.1.0/src/docs_drift/docs/extract_blocks.py +596 -0
- docs_drift-0.1.0/src/docs_drift/docs/extract_inline.py +561 -0
- docs_drift-0.1.0/src/docs_drift/docs/pipeline.py +234 -0
- docs_drift-0.1.0/src/docs_drift/docs/preprocess.py +71 -0
- docs_drift-0.1.0/src/docs_drift/docs/sections.py +247 -0
- docs_drift-0.1.0/src/docs_drift/errors.py +119 -0
- docs_drift-0.1.0/src/docs_drift/fix/__init__.py +1 -0
- docs_drift-0.1.0/src/docs_drift/fix/edits.py +124 -0
- docs_drift-0.1.0/src/docs_drift/fix/model.py +139 -0
- docs_drift-0.1.0/src/docs_drift/fix/rules.py +232 -0
- docs_drift-0.1.0/src/docs_drift/git_safety.py +35 -0
- docs_drift-0.1.0/src/docs_drift/graph/queries/evidence_path.cypher +6 -0
- docs_drift-0.1.0/src/docs_drift/history.py +412 -0
- docs_drift-0.1.0/src/docs_drift/history_cache.py +62 -0
- docs_drift-0.1.0/src/docs_drift/ids.py +50 -0
- docs_drift-0.1.0/src/docs_drift/index/__init__.py +211 -0
- docs_drift-0.1.0/src/docs_drift/index/base.py +239 -0
- docs_drift-0.1.0/src/docs_drift/index/config.py +185 -0
- docs_drift-0.1.0/src/docs_drift/index/js_cli.py +211 -0
- docs_drift-0.1.0/src/docs_drift/index/js_routes.py +68 -0
- docs_drift-0.1.0/src/docs_drift/index/js_symbols.py +219 -0
- docs_drift-0.1.0/src/docs_drift/index/python_cli.py +370 -0
- docs_drift-0.1.0/src/docs_drift/index/python_routes.py +102 -0
- docs_drift-0.1.0/src/docs_drift/index/python_source.py +20 -0
- docs_drift-0.1.0/src/docs_drift/index/python_symbols.py +335 -0
- docs_drift-0.1.0/src/docs_drift/index/queries/javascript.scm +4 -0
- docs_drift-0.1.0/src/docs_drift/index/queries/typescript.scm +4 -0
- docs_drift-0.1.0/src/docs_drift/index/routes_common.py +16 -0
- docs_drift-0.1.0/src/docs_drift/index/tasks.py +131 -0
- docs_drift-0.1.0/src/docs_drift/index/ts_parser.py +20 -0
- docs_drift-0.1.0/src/docs_drift/limits.py +18 -0
- docs_drift-0.1.0/src/docs_drift/llm/__init__.py +7 -0
- docs_drift-0.1.0/src/docs_drift/llm/candidates.py +81 -0
- docs_drift-0.1.0/src/docs_drift/llm/client.py +185 -0
- docs_drift-0.1.0/src/docs_drift/llm/pricing.py +54 -0
- docs_drift-0.1.0/src/docs_drift/llm/privacy.py +63 -0
- docs_drift-0.1.0/src/docs_drift/llm/prompts/rewrite_v1.md +9 -0
- docs_drift-0.1.0/src/docs_drift/llm/prompts/verify_v1.md +12 -0
- docs_drift-0.1.0/src/docs_drift/llm/prompts.py +28 -0
- docs_drift-0.1.0/src/docs_drift/llm/retrieve.py +60 -0
- docs_drift-0.1.0/src/docs_drift/llm/types.py +68 -0
- docs_drift-0.1.0/src/docs_drift/llm/verify.py +179 -0
- docs_drift-0.1.0/src/docs_drift/lsp.py +199 -0
- docs_drift-0.1.0/src/docs_drift/match/__init__.py +5 -0
- docs_drift-0.1.0/src/docs_drift/match/commands.py +201 -0
- docs_drift-0.1.0/src/docs_drift/match/defaults.py +79 -0
- docs_drift-0.1.0/src/docs_drift/match/engine.py +319 -0
- docs_drift-0.1.0/src/docs_drift/match/rename.py +69 -0
- docs_drift-0.1.0/src/docs_drift/models.py +249 -0
- docs_drift-0.1.0/src/docs_drift/ownership.py +70 -0
- docs_drift-0.1.0/src/docs_drift/policy.py +81 -0
- docs_drift-0.1.0/src/docs_drift/portfolio.py +147 -0
- docs_drift-0.1.0/src/docs_drift/py.typed +0 -0
- docs_drift-0.1.0/src/docs_drift/report/__init__.py +38 -0
- docs_drift-0.1.0/src/docs_drift/report/common.py +31 -0
- docs_drift-0.1.0/src/docs_drift/report/github.py +22 -0
- docs_drift-0.1.0/src/docs_drift/report/html.py +106 -0
- docs_drift-0.1.0/src/docs_drift/report/json.py +17 -0
- docs_drift-0.1.0/src/docs_drift/report/junit.py +30 -0
- docs_drift-0.1.0/src/docs_drift/report/markdown.py +58 -0
- docs_drift-0.1.0/src/docs_drift/report/partials/body.html +19 -0
- docs_drift-0.1.0/src/docs_drift/report/partials/report.css +12 -0
- docs_drift-0.1.0/src/docs_drift/report/partials/script.js +95 -0
- docs_drift-0.1.0/src/docs_drift/report/portfolio.html +14 -0
- docs_drift-0.1.0/src/docs_drift/report/report.html +8 -0
- docs_drift-0.1.0/src/docs_drift/report/sarif.py +68 -0
- docs_drift-0.1.0/src/docs_drift/report/terminal.py +90 -0
- docs_drift-0.1.0/src/docs_drift/report/vendor/CYTOSCAPE-LICENSE +19 -0
- docs_drift-0.1.0/src/docs_drift/report/vendor/cytoscape.min.js +32 -0
- docs_drift-0.1.0/src/docs_drift/report/workflow.html +12 -0
- docs_drift-0.1.0/src/docs_drift/review.py +113 -0
- docs_drift-0.1.0/src/docs_drift/safe_files.py +19 -0
- docs_drift-0.1.0/src/docs_drift/scanning.py +202 -0
- docs_drift-0.1.0/src/docs_drift/schemas/SARIF-LICENSE.md +7 -0
- docs_drift-0.1.0/src/docs_drift/schemas/SARIF-NOTICES.txt +3 -0
- docs_drift-0.1.0/src/docs_drift/schemas/sarif-schema-2.1.0.json +3389 -0
- docs_drift-0.1.0/src/docs_drift/schemas/scan-result.v1.json +1024 -0
- docs_drift-0.1.0/src/docs_drift/setup.py +130 -0
- docs_drift-0.1.0/src/docs_drift/snapshots.py +100 -0
- docs_drift-0.1.0/src/docs_drift/support.py +31 -0
- docs_drift-0.1.0/src/docs_drift/watch.py +157 -0
- docs_drift-0.1.0/src/docs_drift/web/__init__.py +1 -0
- docs_drift-0.1.0/src/docs_drift/web/__main__.py +23 -0
- docs_drift-0.1.0/src/docs_drift/web/app.py +289 -0
- docs_drift-0.1.0/src/docs_drift/web/cleanup.py +23 -0
- docs_drift-0.1.0/src/docs_drift/web/examples/clean-repo.json +646 -0
- docs_drift-0.1.0/src/docs_drift/web/examples/fastapi-svc.json +723 -0
- docs_drift-0.1.0/src/docs_drift/web/examples/files-to-prompt.json +3366 -0
- docs_drift-0.1.0/src/docs_drift/web/examples/judge-fixture.json +226 -0
- docs_drift-0.1.0/src/docs_drift/web/examples/manifest.json +89 -0
- docs_drift-0.1.0/src/docs_drift/web/examples/node-tool.json +823 -0
- docs_drift-0.1.0/src/docs_drift/web/examples/py-cli.json +1267 -0
- docs_drift-0.1.0/src/docs_drift/web/examples/rich-cli-reviewed.json +7855 -0
- docs_drift-0.1.0/src/docs_drift/web/examples/rich-cli.json +8010 -0
- docs_drift-0.1.0/src/docs_drift/web/examples/verification.json +16 -0
- docs_drift-0.1.0/src/docs_drift/web/git.py +274 -0
- docs_drift-0.1.0/src/docs_drift/web/jobs.py +352 -0
- docs_drift-0.1.0/src/docs_drift/web/settings.py +50 -0
- docs_drift-0.1.0/src/docs_drift/web/static/demo.css +37 -0
- docs_drift-0.1.0/src/docs_drift/web/static/demo.js +184 -0
- docs_drift-0.1.0/src/docs_drift/web/static/evidence/correction-verification.json +28 -0
- docs_drift-0.1.0/src/docs_drift/web/static/evidence/flow-highlights-2026-10-22.png +0 -0
- docs_drift-0.1.0/src/docs_drift/web/static/evidence/fresh-scan.json +7855 -0
- docs_drift-0.1.0/src/docs_drift/web/static/evidence/review.json +44 -0
- docs_drift-0.1.0/src/docs_drift/web/static/evidence/rich-cli-correction.patch +20 -0
- docs_drift-0.1.0/src/docs_drift/web/static/evidence/runtime.json +26 -0
- docs_drift-0.1.0/src/docs_drift/web/static/evidence/saved-scan.json +8010 -0
- docs_drift-0.1.0/src/docs_drift/web/static/evidence/usage-card-supplied.png +0 -0
- docs_drift-0.1.0/src/docs_drift/web/templates/base.html +34 -0
- docs_drift-0.1.0/src/docs_drift/web/templates/case.html +13 -0
- docs_drift-0.1.0/src/docs_drift/web/templates/landing.html +90 -0
- docs_drift-0.1.0/src/docs_drift/web/templates/scan.html +2 -0
- docs_drift-0.1.0/src/docs_drift/web/templates/voice.html +1 -0
- docs_drift-0.1.0/src/docs_drift/web/validation.py +47 -0
- docs_drift-0.1.0/src/docs_drift/web/worker.py +152 -0
- docs_drift-0.1.0/src/docs_drift/workflow_cli.py +96 -0
- docs_drift-0.1.0/src/docs_drift/workspaces.py +128 -0
- docs_drift-0.1.0/tests/__init__.py +1 -0
- docs_drift-0.1.0/tests/fixtures/ANSWER_KEY.md +73 -0
- docs_drift-0.1.0/tests/fixtures/__init__.py +1 -0
- docs_drift-0.1.0/tests/fixtures/answer_key.json +192 -0
- docs_drift-0.1.0/tests/fixtures/build_fixtures.py +370 -0
- docs_drift-0.1.0/tests/fixtures/injection/README.md +5 -0
- docs_drift-0.1.0/tests/fixtures/injection/service.py +4 -0
- docs_drift-0.1.0/tests/recordings/16e354ad96c375f75ca5776519091ad733a03398c7e5098eabcf12840745c277.json +27 -0
- docs_drift-0.1.0/tests/recordings/987e5ecec785ee20b98ac1fd61066f0cc96897692b35ba3caecac816c1363b5c.json +27 -0
- docs_drift-0.1.0/tests/recordings/README.md +16 -0
- docs_drift-0.1.0/tests/snapshots/clean-repo.html.structure +7 -0
- docs_drift-0.1.0/tests/snapshots/clean-repo.txt +5 -0
- docs_drift-0.1.0/tests/snapshots/fastapi-svc.html.structure +17 -0
- docs_drift-0.1.0/tests/snapshots/fastapi-svc.txt +35 -0
- docs_drift-0.1.0/tests/snapshots/node-tool.html.structure +17 -0
- docs_drift-0.1.0/tests/snapshots/node-tool.txt +36 -0
- docs_drift-0.1.0/tests/snapshots/py-cli.html.structure +17 -0
- docs_drift-0.1.0/tests/snapshots/py-cli.txt +37 -0
- docs_drift-0.1.0/tests/test_baseline.py +57 -0
- docs_drift-0.1.0/tests/test_benchmark.py +139 -0
- docs_drift-0.1.0/tests/test_ci_and_worker.py +260 -0
- docs_drift-0.1.0/tests/test_cli.py +211 -0
- docs_drift-0.1.0/tests/test_config.py +122 -0
- docs_drift-0.1.0/tests/test_coverage_gate.py +34 -0
- docs_drift-0.1.0/tests/test_defaults.py +134 -0
- docs_drift-0.1.0/tests/test_discover.py +118 -0
- docs_drift-0.1.0/tests/test_doc_artifacts.py +134 -0
- docs_drift-0.1.0/tests/test_extract_blocks.py +176 -0
- docs_drift-0.1.0/tests/test_extract_inline.py +284 -0
- docs_drift-0.1.0/tests/test_fixes.py +304 -0
- docs_drift-0.1.0/tests/test_fixtures_build.py +124 -0
- docs_drift-0.1.0/tests/test_git_process.py +123 -0
- docs_drift-0.1.0/tests/test_group_keys.py +67 -0
- docs_drift-0.1.0/tests/test_guard.py +113 -0
- docs_drift-0.1.0/tests/test_hardening.py +161 -0
- docs_drift-0.1.0/tests/test_history.py +89 -0
- docs_drift-0.1.0/tests/test_index.py +140 -0
- docs_drift-0.1.0/tests/test_index_surfaces.py +125 -0
- docs_drift-0.1.0/tests/test_judge_demo.py +101 -0
- docs_drift-0.1.0/tests/test_llm.py +402 -0
- docs_drift-0.1.0/tests/test_llm_tools.py +77 -0
- docs_drift-0.1.0/tests/test_lsp_protocol.py +93 -0
- docs_drift-0.1.0/tests/test_maintainer_pilot.py +124 -0
- docs_drift-0.1.0/tests/test_match_engine.py +192 -0
- docs_drift-0.1.0/tests/test_measure.py +47 -0
- docs_drift-0.1.0/tests/test_models.py +230 -0
- docs_drift-0.1.0/tests/test_pipeline.py +66 -0
- docs_drift-0.1.0/tests/test_policy.py +70 -0
- docs_drift-0.1.0/tests/test_portfolio.py +175 -0
- docs_drift-0.1.0/tests/test_public_security.py +103 -0
- docs_drift-0.1.0/tests/test_real_case_correction.py +89 -0
- docs_drift-0.1.0/tests/test_release.py +224 -0
- docs_drift-0.1.0/tests/test_rename.py +29 -0
- docs_drift-0.1.0/tests/test_reports.py +152 -0
- docs_drift-0.1.0/tests/test_sections.py +168 -0
- docs_drift-0.1.0/tests/test_team_workflows.py +315 -0
- docs_drift-0.1.0/tests/test_web.py +256 -0
- docs_drift-0.1.0/tests/test_web_boundaries.py +227 -0
- docs_drift-0.1.0/tests/test_web_ops.py +42 -0
- docs_drift-0.1.0/tests/test_workspaces_watch_lsp.py +177 -0
- docs_drift-0.1.0/uv.lock +3157 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Python and build output
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
.eggs/
|
|
6
|
+
build/
|
|
7
|
+
dist/
|
|
8
|
+
.pytest_cache/
|
|
9
|
+
.mypy_cache/
|
|
10
|
+
.ruff_cache/
|
|
11
|
+
.coverage
|
|
12
|
+
.coverage.*
|
|
13
|
+
htmlcov/
|
|
14
|
+
coverage.xml
|
|
15
|
+
|
|
16
|
+
# uv environments and caches; keep uv.lock for reproducible development.
|
|
17
|
+
.venv/
|
|
18
|
+
venv/
|
|
19
|
+
.uv-cache/
|
|
20
|
+
.pre-commit-cache/
|
|
21
|
+
|
|
22
|
+
# Editors and operating systems
|
|
23
|
+
.idea/
|
|
24
|
+
.vscode/
|
|
25
|
+
*.swp
|
|
26
|
+
*.swo
|
|
27
|
+
*~
|
|
28
|
+
.DS_Store
|
|
29
|
+
Thumbs.db
|
|
30
|
+
|
|
31
|
+
# Local scanner cache
|
|
32
|
+
.docs-drift/
|
|
33
|
+
|
|
34
|
+
# Generated fixture repositories (including their nested Git metadata).
|
|
35
|
+
/tests/fixtures/repos/
|
|
36
|
+
.pytest-tmp*/
|
|
37
|
+
.npm-cache/
|
|
38
|
+
node_modules/
|
|
39
|
+
.hypothesis/
|
|
40
|
+
# Full raw benchmark scans stay local; committed samples, pins, measurements and source snapshots reproduce them.
|
|
41
|
+
benchmark/runs/*/*--*.json
|
|
42
|
+
benchmark/runs/*/*.log
|
|
43
|
+
docs-drift-bench-*/
|
|
44
|
+
!editors/vscode/.vscode/
|
|
45
|
+
!editors/vscode/.vscode/launch.json
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
+
rev: v0.17.1
|
|
4
|
+
hooks:
|
|
5
|
+
- id: ruff-check
|
|
6
|
+
- id: ruff-format
|
|
7
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
8
|
+
rev: v6.0.0
|
|
9
|
+
hooks:
|
|
10
|
+
- id: end-of-file-fixer
|
|
11
|
+
exclude: '\.patch$'
|
|
12
|
+
- id: trailing-whitespace
|
|
13
|
+
exclude: '\.patch$'
|
|
14
|
+
- repo: local
|
|
15
|
+
hooks:
|
|
16
|
+
- id: staged-file-guard
|
|
17
|
+
name: Guard staged files and secrets
|
|
18
|
+
entry: uv run python scripts/guard.py
|
|
19
|
+
language: system
|
|
20
|
+
pass_filenames: false
|
|
21
|
+
always_run: true
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable user-facing changes are recorded here, following
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
|
|
5
|
+
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.1.0] - 2026-10-24
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Static checks for commands, flags, defaults, environment variables, routes,
|
|
14
|
+
symbols, files, package scripts and Make targets, with partial ecosystem coverage.
|
|
15
|
+
- Evidence chains connecting documentation to source and the Git commit that
|
|
16
|
+
introduced drift, with explicit limits for shallow or truncated history.
|
|
17
|
+
- Terminal reports with stale-token carets; JSON, SARIF, Markdown, JUnit, GitHub
|
|
18
|
+
annotations and offline HTML reports with an interactive evidence graph.
|
|
19
|
+
- Explanations, conservative fix previews, CI checks, baselines, suppressions,
|
|
20
|
+
workspace scoping, change impact and repository insights.
|
|
21
|
+
- Optional watch mode, language server and VS Code client; optional model
|
|
22
|
+
verification with redaction, budgets and explicit opt-in.
|
|
23
|
+
- A local web demo with cached examples and bounded public-repository scanning.
|
|
24
|
+
- Reproducible public-repository benchmark samples for human review, plus docs
|
|
25
|
+
and configuration reference. Real-world precision and recall remain unmeasured.
|
|
26
|
+
- Package version in CLI and JSON reports, separate from JSON schema version 1.
|
|
27
|
+
- PR comparisons with documentation lines, source evidence, available commit
|
|
28
|
+
attribution, workflow annotations and reviewable documentation patches.
|
|
29
|
+
- Source-scoped human feedback with reasons and conservative reopening when
|
|
30
|
+
supporting source changes; full findings remain available for review.
|
|
31
|
+
- Bounded static support history, CODEOWNERS routing, documentation coverage
|
|
32
|
+
reports and verified local fix branches that leave final approval to a person.
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- Static Typer checks respect default and explicitly configured help options.
|
|
37
|
+
- Markdown explanations are presented as review text; applicable changes use
|
|
38
|
+
exact-span patches rather than token-only whole-line suggestions.
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
Changelogs are ignored by default. Historical examples such as `--port` may stay
|
|
42
|
+
in this file without being treated as current usage instructions.
|
|
43
|
+
|
|
44
|
+
[Unreleased]: https://github.com/ayushagarwalhere/docs-drift/compare/v0.1.0...HEAD
|
|
45
|
+
[0.1.0]: https://github.com/ayushagarwalhere/docs-drift/releases/tag/v0.1.0
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Use Python 3.11+ and uv. From the repository root:
|
|
4
|
+
|
|
5
|
+
```console
|
|
6
|
+
uv sync --locked --all-extras
|
|
7
|
+
uv run just setup
|
|
8
|
+
uv run just check
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
We use a justfile rather than duplicating recipes in a Makefile. `just` is a dev
|
|
12
|
+
dependency (`rust-just` on PyPI), and recipes use native PowerShell on Windows.
|
|
13
|
+
`setup` installs the pre-commit hook. Other recipes are `test`, `lint`, `fmt`,
|
|
14
|
+
`typecheck`, and `demo`. `check` verifies formatting without rewriting files;
|
|
15
|
+
run `fmt` explicitly to fix it. `demo` displays CLI help. Use the fixture commands
|
|
16
|
+
below to inspect a scan.
|
|
17
|
+
|
|
18
|
+
Without just, run `uv run ruff check`, `uv run ruff format --check`, `uv run mypy`,
|
|
19
|
+
`uv run pytest --cov=docs_drift --cov=scripts --cov-report=term-missing`, and
|
|
20
|
+
`uv run pre-commit run --all-files`. CI tests Ubuntu and Windows on Python 3.11
|
|
21
|
+
and 3.13, with full Git history and all extras installed. Coverage must remain
|
|
22
|
+
at least 85% overall and 90% for extraction and matching; report a failure instead of lowering the thresholds.
|
|
23
|
+
|
|
24
|
+
The guard reads staged Git blobs, so cleaning a working file does not hide a
|
|
25
|
+
staged secret. It blocks files over 1,000,000 bytes, `.env` and `.env.*` files
|
|
26
|
+
(including examples), and token-shaped Anthropic, GitHub, and AWS keys. Use
|
|
27
|
+
safe placeholders in docs and construct fake test tokens from separate parts.
|
|
28
|
+
Guard diagnostics identify the file and line without printing a token.
|
|
29
|
+
|
|
30
|
+
For an indexer, add a typed, pure parser under `src/docs_drift/index/`, retain
|
|
31
|
+
source file/line/text evidence, and test it against text-only fixtures, including
|
|
32
|
+
Windows paths and unsupported dynamic behavior. Never import or run scanned code.
|
|
33
|
+
For a claim kind, update the models, extraction, matching, design taxonomy, and
|
|
34
|
+
report examples together; cover confirmed, missing, and unverifiable cases.
|
|
35
|
+
Do not invent a match when the available index is incomplete.
|
|
36
|
+
|
|
37
|
+
Record every metric, including failures, with the exact command and revision
|
|
38
|
+
that produced it. Keep fixture answer keys fixed; never tune rules or thresholds
|
|
39
|
+
to improve a score. The optional LLM cannot override a code-based verdict.
|
|
40
|
+
|
|
41
|
+
Fixture tests build fresh Git repositories in temporary directories. For manual
|
|
42
|
+
inspection use `uv run python tests/fixtures/build_fixtures.py`; the default output
|
|
43
|
+
under the generated `tests/fixtures/repos/` directory is ignored. Never run the generated programs or
|
|
44
|
+
commit their `.git` folders. `uv run python scripts/measure.py` validates the
|
|
45
|
+
hand-written key; read `tests/fixtures/ANSWER_KEY.md` before changing any fixture.
|
|
46
|
+
|
|
47
|
+
Use `pathlib` for filesystem paths. `.gitattributes` normalizes text to LF on
|
|
48
|
+
every platform. Review the diff and propose a commit message; do not auto-commit.
|
docs_drift-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 docs-drift contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: docs-drift
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Find evidence-backed drift between repository documentation and code.
|
|
5
|
+
Project-URL: Homepage, https://github.com/ayushagarwalhere/docs-drift
|
|
6
|
+
Project-URL: Documentation, https://ayushagarwalhere.github.io/docs-drift/
|
|
7
|
+
Project-URL: Source, https://github.com/ayushagarwalhere/docs-drift
|
|
8
|
+
Project-URL: Issues, https://github.com/ayushagarwalhere/docs-drift/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/ayushagarwalhere/docs-drift/blob/main/CHANGELOG.md
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: cli,developer-tools,documentation,drift,sarif,static-analysis
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
22
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
23
|
+
Requires-Python: >=3.11
|
|
24
|
+
Requires-Dist: jinja2>=3.1
|
|
25
|
+
Requires-Dist: markdown-it-py>=3.0
|
|
26
|
+
Requires-Dist: pathspec>=1.0
|
|
27
|
+
Requires-Dist: pydantic>=2.7
|
|
28
|
+
Requires-Dist: pyyaml>=6.0
|
|
29
|
+
Requires-Dist: rapidfuzz>=3.9
|
|
30
|
+
Requires-Dist: rich>=13.9
|
|
31
|
+
Requires-Dist: tomli-w>=1.0
|
|
32
|
+
Requires-Dist: tree-sitter-javascript<0.26,>=0.25
|
|
33
|
+
Requires-Dist: tree-sitter-typescript<0.24,>=0.23.2
|
|
34
|
+
Requires-Dist: tree-sitter<0.27,>=0.25
|
|
35
|
+
Requires-Dist: typer<0.28,>=0.27.3
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: deptry>=0.24; extra == 'dev'
|
|
38
|
+
Requires-Dist: httpx>=0.28; extra == 'dev'
|
|
39
|
+
Requires-Dist: hypothesis>=6.100; extra == 'dev'
|
|
40
|
+
Requires-Dist: jsonschema>=4.23; extra == 'dev'
|
|
41
|
+
Requires-Dist: mypy>=1.14; extra == 'dev'
|
|
42
|
+
Requires-Dist: pillow>=11; extra == 'dev'
|
|
43
|
+
Requires-Dist: pip-audit>=2.9; extra == 'dev'
|
|
44
|
+
Requires-Dist: playwright>=1.48; extra == 'dev'
|
|
45
|
+
Requires-Dist: pre-commit>=4.0; extra == 'dev'
|
|
46
|
+
Requires-Dist: pytest-cov>=6.0; extra == 'dev'
|
|
47
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
48
|
+
Requires-Dist: ruff>=0.17.1; extra == 'dev'
|
|
49
|
+
Requires-Dist: rust-just>=1.40; extra == 'dev'
|
|
50
|
+
Requires-Dist: types-jsonschema>=4.26; extra == 'dev'
|
|
51
|
+
Requires-Dist: types-pyyaml>=6; extra == 'dev'
|
|
52
|
+
Provides-Extra: docs
|
|
53
|
+
Requires-Dist: mkdocs-material>=9.6; extra == 'docs'
|
|
54
|
+
Provides-Extra: graph
|
|
55
|
+
Provides-Extra: llm
|
|
56
|
+
Requires-Dist: httpx>=0.28; extra == 'llm'
|
|
57
|
+
Provides-Extra: lsp
|
|
58
|
+
Requires-Dist: lsprotocol>=2025.0; extra == 'lsp'
|
|
59
|
+
Requires-Dist: pygls<3,>=2.0; extra == 'lsp'
|
|
60
|
+
Provides-Extra: watch
|
|
61
|
+
Requires-Dist: watchfiles<2,>=1.0; extra == 'watch'
|
|
62
|
+
Provides-Extra: web
|
|
63
|
+
Requires-Dist: fastapi>=0.115; extra == 'web'
|
|
64
|
+
Requires-Dist: jinja2>=3.1; extra == 'web'
|
|
65
|
+
Requires-Dist: uvicorn[standard]>=0.32; extra == 'web'
|
|
66
|
+
Description-Content-Type: text/markdown
|
|
67
|
+
|
|
68
|
+
# docs-drift
|
|
69
|
+
|
|
70
|
+
Self-hosted documentation drift checks for maintainers: scan local repositories,
|
|
71
|
+
review source evidence, and gate newly introduced drift in CI. Organizations can
|
|
72
|
+
scan multiple checkouts into one dashboard with `docs-drift portfolio`.
|
|
73
|
+
[PR reviews, feedback, history, ownership and fix branches](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/TEAM-WORKFLOWS.md).
|
|
74
|
+
[Organization adoption](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/ORGANIZATIONS.md) · [Product maturity](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/PRODUCT.md).
|
|
75
|
+
|
|
76
|
+
The product hypothesis is repeatable CI checks of exact documentation contracts
|
|
77
|
+
for SDK, CLI and API maintainers. Start external repositories in report-only mode:
|
|
78
|
+
real-world precision/recall and maintainer adoption remain unestablished.
|
|
79
|
+
[Run a frozen maintainer review](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/MAINTAINER-PILOT.md) with blank human labels,
|
|
80
|
+
source evidence and an explicit decision about keeping it in CI.
|
|
81
|
+
|
|
82
|
+
## Judges start here
|
|
83
|
+
|
|
84
|
+
**Smallest offline demo:** [exact local run steps and one synthetic claim](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/JUDGE-DEMO.md).
|
|
85
|
+
Open `/scan/example-judge` in the local app to inspect the source, rename commit,
|
|
86
|
+
and proposed documentation fix. Fixture results are not real-world accuracy measurements.
|
|
87
|
+
|
|
88
|
+
- **Public demo:** AWS deployment deferred by owner. Run the app locally on port 8080; no public URL is claimed. [AWS handoff](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/AWS-HANDOFF.md).
|
|
89
|
+
- **Real case:** [reproduced rich-cli failure, source and commit](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/REAL-CASE.md).
|
|
90
|
+
- **Try immediately:** the local app includes a repo URL scanner and precomputed real sample, with no sign-in or API key.
|
|
91
|
+
- **Interface:** monochrome themes, scroll-driven 3D evidence layers, motion controls and searchable reports; [UI verification](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/UI-REVIEW.md).
|
|
92
|
+
- **Video:** pending owner recording and upload; target 1:50 with captions; [updated shot list](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/FLOW-RECORDING.md).
|
|
93
|
+
- **Source:** [GitHub repository](https://github.com/ayushagarwalhere/docs-drift).
|
|
94
|
+
- **Evidence:** [benchmark results](https://github.com/ayushagarwalhere/docs-drift/blob/main/benchmark/RESULTS.md),
|
|
95
|
+
[measured limitations](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/RESULTS.md), and [submission checklist](https://github.com/ayushagarwalhere/docs-drift/blob/main/SUBMISSION.md).
|
|
96
|
+
|
|
97
|
+
Three-command local quick start (Python 3.11+, Git and uv installed):
|
|
98
|
+
|
|
99
|
+
```sh
|
|
100
|
+
git clone https://github.com/ayushagarwalhere/docs-drift.git
|
|
101
|
+
cd docs-drift
|
|
102
|
+
uv run --all-extras docs-drift scan --repo .
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Release preparation: [owner's publish gates](https://github.com/ayushagarwalhere/docs-drift/blob/main/RELEASING.md). Public installs and
|
|
106
|
+
URLs must be verified after publication; local checks do not prove a published release.
|
|
107
|
+
|
|
108
|
+
**Find documentation statements your code no longer supports, with source evidence and available Git history.**
|
|
109
|
+
|
|
110
|
+
[](https://github.com/ayushagarwalhere/docs-drift/blob/main/.github/workflows/ci.yml)
|
|
111
|
+
**Package status:** PyPI unpublished (404 verified 22 October 2026); use the source quick start.
|
|
112
|
+
[](https://github.com/ayushagarwalhere/docs-drift/blob/main/LICENSE)
|
|
113
|
+
[](https://github.com/ayushagarwalhere/docs-drift/blob/main/pyproject.toml)
|
|
114
|
+
|
|
115
|
+
Alpha software: source installation works before the first package is published.
|
|
116
|
+
The PyPI page becomes available after authenticated publication; the hosted
|
|
117
|
+
demo and video remain explicitly pending above. Real-world
|
|
118
|
+
precision and recall are **pending human labeling**, not inferred from fixtures.
|
|
119
|
+
|
|
120
|
+

|
|
121
|
+
|
|
122
|
+

|
|
123
|
+
|
|
124
|
+
## A real failure, reproduced during this build
|
|
125
|
+
|
|
126
|
+
To render rich-cli's README with line numbers, we followed its documented
|
|
127
|
+
`--line-number` option. It exited 2: "No such option." Source declares
|
|
128
|
+
`--line-numbers`, which exited 0. docs-drift locates README:61; manual Git
|
|
129
|
+
inspection identifies documentation commit `567f6c84`. The scanner does not
|
|
130
|
+
attribute a breaking commit for this finding. This is an agent-assisted build
|
|
131
|
+
investigation, not an invented account of the owner's earlier work.
|
|
132
|
+
[Exact snapshot, commands, source and review](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/REAL-CASE.md).
|
|
133
|
+
|
|
134
|
+
The four-finding saved sample includes **two confirmed defects and two false
|
|
135
|
+
positives**. A fresh scan flags only the defective options. This selected,
|
|
136
|
+
agent-assisted review is not an independent human accuracy measurement.
|
|
137
|
+
|
|
138
|
+
The `--port` / `--listen` images above are synthetic fixtures, excluded from the
|
|
139
|
+
real case and review sample.
|
|
140
|
+
|
|
141
|
+
For beginners contributing to documentation, an evidence-backed finding can be a
|
|
142
|
+
concrete first contribution. Maintainers can use the same checks to keep docs
|
|
143
|
+
aligned with a changing codebase; the suggested patches still need review.
|
|
144
|
+
|
|
145
|
+
## Quick start
|
|
146
|
+
|
|
147
|
+
From this source checkout, with Python 3.11+ and Git:
|
|
148
|
+
|
|
149
|
+
```sh
|
|
150
|
+
uv sync --locked --all-extras
|
|
151
|
+
uv run docs-drift scan
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
After the first PyPI release, these are the intended package entry points:
|
|
155
|
+
|
|
156
|
+
```sh
|
|
157
|
+
pipx install docs-drift
|
|
158
|
+
docs-drift scan
|
|
159
|
+
# Alternative after publication:
|
|
160
|
+
uvx docs-drift scan
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Or build the CLI container locally (Docker must be running):
|
|
164
|
+
|
|
165
|
+
```sh
|
|
166
|
+
docker build -t docs-drift:local . && docker run --rm -v "$PWD:/repo" docs-drift:local scan --repo /repo
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Try it in your browser: AWS hosting is deferred by the owner. Locally,
|
|
170
|
+
start `uv run python -m docs_drift.web` and open `http://127.0.0.1:8080`; set
|
|
171
|
+
`DOCS_DRIFT_ALLOWED_ORIGIN` to that exact origin before submitting a scan.
|
|
172
|
+
|
|
173
|
+
Useful commands, exercised against a trusted fixture in CI:
|
|
174
|
+
|
|
175
|
+
```sh
|
|
176
|
+
docs-drift scan --no-color
|
|
177
|
+
docs-drift scan --format html --output scan.html
|
|
178
|
+
docs-drift insights --format json
|
|
179
|
+
docs-drift impact --base HEAD~1 --format json
|
|
180
|
+
docs-drift fix
|
|
181
|
+
docs-drift check # documented exit: 1 on the stale py-cli fixture
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
`scan` reports findings and exits 0. `check` exits 1 for findings meeting its
|
|
185
|
+
threshold, or 2 for usage/configuration errors. `fix` previews a patch; applying
|
|
186
|
+
it requires an explicit write option and confirmation. No target code is run.
|
|
187
|
+
|
|
188
|
+
## What it checks (illustrative fixtures)
|
|
189
|
+
|
|
190
|
+
| Claim kind | Example documentation | Static evidence |
|
|
191
|
+
| --- | --- | --- |
|
|
192
|
+
| CLI flag / command | A synthetic README mentions `--port` | argparse/Click/Typer or Commander declarations |
|
|
193
|
+
| Environment variable | A synthetic README mentions `APP_LOG_LEVEL` | literal environment reads or safe config templates |
|
|
194
|
+
| Endpoint | A synthetic guide requests `GET /status` | literal FastAPI/Flask/Express routes |
|
|
195
|
+
| Setting / default | A synthetic guide says `workers` defaults to 4 | a recognized literal declaration/default |
|
|
196
|
+
| Code symbol | A synthetic guide calls `Client.connect()` | a parsed function/class/method declaration |
|
|
197
|
+
| File path | A synthetic guide links `config/settings.toml` | a contained repository-relative path |
|
|
198
|
+
| Package script / task | A synthetic guide invokes `npm run build` | package manifests and Make/just task declarations |
|
|
199
|
+
| Project command | A synthetic guide runs `tool serve --port 8000` | independently identified executable/command/flags |
|
|
200
|
+
|
|
201
|
+
Arbitrary behavioural prose is not proved by name matching. Optional model
|
|
202
|
+
assessment is separately labeled and constrained by source citations.
|
|
203
|
+
|
|
204
|
+
## Supported ecosystems
|
|
205
|
+
|
|
206
|
+
<!-- support-table:start -->
|
|
207
|
+
| Language | Framework / surface | Support |
|
|
208
|
+
| --- | --- | --- |
|
|
209
|
+
| Python | AST declarations | partial |
|
|
210
|
+
| Python | argparse | partial |
|
|
211
|
+
| Python | Click | partial |
|
|
212
|
+
| Python | Typer | partial |
|
|
213
|
+
| Python | FastAPI | partial |
|
|
214
|
+
| Python | Flask | partial |
|
|
215
|
+
| Python | Django / DRF | none |
|
|
216
|
+
| JavaScript / TypeScript | AST declarations | partial |
|
|
217
|
+
| JavaScript / TypeScript | Commander | partial |
|
|
218
|
+
| JavaScript / TypeScript | yargs | none |
|
|
219
|
+
| JavaScript / TypeScript | Express | partial |
|
|
220
|
+
| JavaScript / TypeScript | Next.js / NestJS routes | none |
|
|
221
|
+
| JSON / YAML / TOML / INI | literal settings | partial |
|
|
222
|
+
| Go / Rust | language-specific configuration | none |
|
|
223
|
+
<!-- support-table:end -->
|
|
224
|
+
|
|
225
|
+
Partial means recognized literal/static patterns, not complete framework support.
|
|
226
|
+
No framework is advertised as fully supported. Dynamic registration, signatures,
|
|
227
|
+
router composition and generated source may remain unverifiable.
|
|
228
|
+
|
|
229
|
+
## CI
|
|
230
|
+
|
|
231
|
+
This ten-line example uses the development Action from this repository:
|
|
232
|
+
|
|
233
|
+
```yaml
|
|
234
|
+
name: Documentation
|
|
235
|
+
on: [push, pull_request]
|
|
236
|
+
permissions: {contents: read}
|
|
237
|
+
jobs:
|
|
238
|
+
docs:
|
|
239
|
+
runs-on: ubuntu-latest
|
|
240
|
+
steps:
|
|
241
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803
|
|
242
|
+
- uses: ./
|
|
243
|
+
with: {repo: '.', fail-on-drift: 'true'}
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Other projects must replace the local action path with the real repository pinned
|
|
247
|
+
to a reviewed commit after publication. Reports include JSON, HTML, SARIF and
|
|
248
|
+
escaped Markdown. The Action needs no write token, accepts no model key, and never
|
|
249
|
+
posts a PR comment automatically. [Action guide](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/github-action.md).
|
|
250
|
+
|
|
251
|
+

|
|
252
|
+
|
|
253
|
+
## Editor
|
|
254
|
+
|
|
255
|
+
The development VS Code extension supplies diagnostics, definitions and safe
|
|
256
|
+
quick fixes via the stdio LSP. **Actual squiggle GIF pending a verified editor
|
|
257
|
+
capture**; protocol tests are not presented as a native-editor recording.
|
|
258
|
+
[Extension guide](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/vscode.md).
|
|
259
|
+
|
|
260
|
+
## How it works
|
|
261
|
+
|
|
262
|
+
```mermaid
|
|
263
|
+
flowchart LR
|
|
264
|
+
D[Docs] --> C[Located claims]
|
|
265
|
+
S[Source text / AST] --> I[Static index]
|
|
266
|
+
C --> M[Scoped matching]
|
|
267
|
+
I --> M
|
|
268
|
+
M --> H[Bounded Git history]
|
|
269
|
+
H --> R[Evidence, reports and reviewable fixes]
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
```mermaid
|
|
273
|
+
flowchart LR
|
|
274
|
+
Section --> Claim
|
|
275
|
+
Claim --> Symbol
|
|
276
|
+
Symbol --> SourceFile
|
|
277
|
+
SourceFile --> Commit
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
Rules decide literal claims first. Optional model assessment handles selected
|
|
281
|
+
anchored prose, cannot override code-decided findings, and must cite supplied
|
|
282
|
+
source that passes validation.
|
|
283
|
+
|
|
284
|
+
## Accuracy and limitations
|
|
285
|
+
|
|
286
|
+
<!-- accuracy:start -->
|
|
287
|
+
Real-world accuracy is **not yet established**. The 12-repository protocol and
|
|
288
|
+
blank human labeling sheet are in [the benchmark](https://github.com/ayushagarwalhere/docs-drift/blob/main/benchmark/PROTOCOL.md); its
|
|
289
|
+
[dated results](https://github.com/ayushagarwalhere/docs-drift/blob/main/benchmark/RESULTS.md) keep precision/recall pending until the owner
|
|
290
|
+
labels them. Fixture scores establish plumbing, not product accuracy. Missing
|
|
291
|
+
findings can be intentional examples, third-party tools or indexing limitations;
|
|
292
|
+
review every report. [Known limitations](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/LIMITATIONS.md).
|
|
293
|
+
<!-- accuracy:end -->
|
|
294
|
+
|
|
295
|
+
## Configuration
|
|
296
|
+
|
|
297
|
+
```toml
|
|
298
|
+
# .docs-drift.toml
|
|
299
|
+
min_confidence = 0.6
|
|
300
|
+
[history]
|
|
301
|
+
max_commits = 2000
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
The [full configuration reference](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/configuration.md) is generated from the
|
|
305
|
+
Pydantic model and checked for freshness in CI. Common CLI options work before
|
|
306
|
+
or after subcommands. [CLI reference](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/CLI.md).
|
|
307
|
+
|
|
308
|
+
## Privacy and security
|
|
309
|
+
|
|
310
|
+
Rule-only scans parse local text/AST and call Git for evidence. They never import
|
|
311
|
+
or execute target modules or fenced commands. Optional model mode sends selected
|
|
312
|
+
redacted documentation/source excerpts through OpenRouter to the chosen provider;
|
|
313
|
+
replay mode sends nothing. The public demo and composite Action are rule-only.
|
|
314
|
+
[Security policy](https://github.com/ayushagarwalhere/docs-drift/blob/main/SECURITY.md) ? [Threat model](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/SECURITY.md).
|
|
315
|
+
|
|
316
|
+
## Built with voice
|
|
317
|
+
|
|
318
|
+
The owner supplied original Flow usage cards, including **31,351 total words**,
|
|
319
|
+
**276 words/minute**, **11 apps**, and a **1-day streak**, plus a separate card
|
|
320
|
+
showing **26,412 total words**. These are account-level figures, not docs-drift
|
|
321
|
+
word counts. [Actual cards and provenance](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/built-with-voice.md).
|
|
322
|
+
|
|
323
|
+
The specific dictated prompts, build revisions and Flow-use recording still need
|
|
324
|
+
owner evidence. [Concrete 1:50 recording plan](https://github.com/ayushagarwalhere/docs-drift/blob/main/docs/FLOW-RECORDING.md). No personal
|
|
325
|
+
workflow or recording has been invented.
|
|
326
|
+
|
|
327
|
+
## Contributing and licence
|
|
328
|
+
|
|
329
|
+
See [CONTRIBUTING.md](https://github.com/ayushagarwalhere/docs-drift/blob/main/CONTRIBUTING.md). Run tests, lint and type checks before
|
|
330
|
+
opening a change; do not change a frozen benchmark's rules or prefill human labels.
|
|
331
|
+
The code is [MIT licensed](https://github.com/ayushagarwalhere/docs-drift/blob/main/LICENSE). [Changelog](https://github.com/ayushagarwalhere/docs-drift/blob/main/CHANGELOG.md).
|