blindspot 0.0.2__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.
Files changed (128) hide show
  1. blindspot-0.0.2/.blindspot.yaml.example +18 -0
  2. blindspot-0.0.2/.gitignore +44 -0
  3. blindspot-0.0.2/CHANGELOG.md +72 -0
  4. blindspot-0.0.2/CONTRIBUTING.md +66 -0
  5. blindspot-0.0.2/LICENSE +21 -0
  6. blindspot-0.0.2/PKG-INFO +93 -0
  7. blindspot-0.0.2/README.md +55 -0
  8. blindspot-0.0.2/docs/README.md +65 -0
  9. blindspot-0.0.2/docs/algorithms.md +790 -0
  10. blindspot-0.0.2/docs/architecture.md +178 -0
  11. blindspot-0.0.2/docs/cli-reference.md +144 -0
  12. blindspot-0.0.2/docs/configuration.md +172 -0
  13. blindspot-0.0.2/docs/glossary.md +154 -0
  14. blindspot-0.0.2/docs/outputs.md +216 -0
  15. blindspot-0.0.2/docs/overview.md +124 -0
  16. blindspot-0.0.2/docs/quickstart.md +116 -0
  17. blindspot-0.0.2/examples/synthetic_demo.py +217 -0
  18. blindspot-0.0.2/pyproject.toml +75 -0
  19. blindspot-0.0.2/src/blindspot/__init__.py +1 -0
  20. blindspot-0.0.2/src/blindspot/__main__.py +4 -0
  21. blindspot-0.0.2/src/blindspot/actions/__init__.py +18 -0
  22. blindspot-0.0.2/src/blindspot/actions/models.py +55 -0
  23. blindspot-0.0.2/src/blindspot/actions/recommender.py +316 -0
  24. blindspot-0.0.2/src/blindspot/ai_signal/__init__.py +23 -0
  25. blindspot-0.0.2/src/blindspot/ai_signal/detector.py +217 -0
  26. blindspot-0.0.2/src/blindspot/ai_signal/models.py +71 -0
  27. blindspot-0.0.2/src/blindspot/ai_signal/profile.py +136 -0
  28. blindspot-0.0.2/src/blindspot/ai_signal/quality.py +198 -0
  29. blindspot-0.0.2/src/blindspot/cli.py +973 -0
  30. blindspot-0.0.2/src/blindspot/codeowners/__init__.py +21 -0
  31. blindspot-0.0.2/src/blindspot/codeowners/engine.py +225 -0
  32. blindspot-0.0.2/src/blindspot/codeowners/parser.py +133 -0
  33. blindspot-0.0.2/src/blindspot/collector/__init__.py +15 -0
  34. blindspot-0.0.2/src/blindspot/collector/bitbucket/__init__.py +29 -0
  35. blindspot-0.0.2/src/blindspot/collector/bitbucket/client.py +117 -0
  36. blindspot-0.0.2/src/blindspot/collector/bitbucket/config.py +99 -0
  37. blindspot-0.0.2/src/blindspot/collector/bitbucket/pr_collector.py +225 -0
  38. blindspot-0.0.2/src/blindspot/collector/bitbucket/remote.py +71 -0
  39. blindspot-0.0.2/src/blindspot/collector/bots.py +66 -0
  40. blindspot-0.0.2/src/blindspot/collector/filters.py +164 -0
  41. blindspot-0.0.2/src/blindspot/collector/git.py +81 -0
  42. blindspot-0.0.2/src/blindspot/collector/github/__init__.py +49 -0
  43. blindspot-0.0.2/src/blindspot/collector/github/client.py +116 -0
  44. blindspot-0.0.2/src/blindspot/collector/github/config.py +94 -0
  45. blindspot-0.0.2/src/blindspot/collector/github/gh_client.py +177 -0
  46. blindspot-0.0.2/src/blindspot/collector/github/pr_collector.py +147 -0
  47. blindspot-0.0.2/src/blindspot/collector/github/pr_models.py +16 -0
  48. blindspot-0.0.2/src/blindspot/collector/github/remote.py +51 -0
  49. blindspot-0.0.2/src/blindspot/collector/mailmap.py +123 -0
  50. blindspot-0.0.2/src/blindspot/collector/models.py +20 -0
  51. blindspot-0.0.2/src/blindspot/collector/review_models.py +63 -0
  52. blindspot-0.0.2/src/blindspot/config.py +46 -0
  53. blindspot-0.0.2/src/blindspot/dependency_graph/__init__.py +24 -0
  54. blindspot-0.0.2/src/blindspot/dependency_graph/aggregation.py +150 -0
  55. blindspot-0.0.2/src/blindspot/dependency_graph/builder.py +178 -0
  56. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/__init__.py +62 -0
  57. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/base.py +48 -0
  58. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/cpp.py +74 -0
  59. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/dotnet.py +81 -0
  60. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/go.py +98 -0
  61. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/java.py +66 -0
  62. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/javascript.py +95 -0
  63. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/kotlin.py +62 -0
  64. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/php.py +102 -0
  65. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/python.py +273 -0
  66. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/ruby.py +73 -0
  67. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/rust.py +111 -0
  68. blindspot-0.0.2/src/blindspot/dependency_graph/extractors/swift.py +48 -0
  69. blindspot-0.0.2/src/blindspot/dependency_graph/importance.py +90 -0
  70. blindspot-0.0.2/src/blindspot/dependency_graph/llm_fallback.py +137 -0
  71. blindspot-0.0.2/src/blindspot/dependency_graph/models.py +115 -0
  72. blindspot-0.0.2/src/blindspot/diff_analysis/__init__.py +19 -0
  73. blindspot-0.0.2/src/blindspot/diff_analysis/classifier.py +202 -0
  74. blindspot-0.0.2/src/blindspot/narrative/__init__.py +16 -0
  75. blindspot-0.0.2/src/blindspot/narrative/client.py +92 -0
  76. blindspot-0.0.2/src/blindspot/narrative/config.py +98 -0
  77. blindspot-0.0.2/src/blindspot/narrative/engine.py +103 -0
  78. blindspot-0.0.2/src/blindspot/narrative/models.py +26 -0
  79. blindspot-0.0.2/src/blindspot/narrative/prompt.py +327 -0
  80. blindspot-0.0.2/src/blindspot/ownership/__init__.py +4 -0
  81. blindspot-0.0.2/src/blindspot/ownership/engine.py +131 -0
  82. blindspot-0.0.2/src/blindspot/ownership/models.py +55 -0
  83. blindspot-0.0.2/src/blindspot/report/__init__.py +15 -0
  84. blindspot-0.0.2/src/blindspot/report/context.py +126 -0
  85. blindspot-0.0.2/src/blindspot/report/renderer.py +23 -0
  86. blindspot-0.0.2/src/blindspot/report/templates/departure.html.j2 +294 -0
  87. blindspot-0.0.2/src/blindspot/report/templates/report.html.j2 +767 -0
  88. blindspot-0.0.2/src/blindspot/resilience/__init__.py +7 -0
  89. blindspot-0.0.2/src/blindspot/resilience/score.py +171 -0
  90. blindspot-0.0.2/src/blindspot/review_graph/__init__.py +15 -0
  91. blindspot-0.0.2/src/blindspot/review_graph/engine.py +153 -0
  92. blindspot-0.0.2/src/blindspot/risk_models/__init__.py +37 -0
  93. blindspot-0.0.2/src/blindspot/risk_models/bus_factor.py +145 -0
  94. blindspot-0.0.2/src/blindspot/risk_models/departure.py +142 -0
  95. blindspot-0.0.2/src/blindspot/risk_models/knowledge_decay.py +161 -0
  96. blindspot-0.0.2/src/blindspot/trend/__init__.py +3 -0
  97. blindspot-0.0.2/src/blindspot/trend/engine.py +72 -0
  98. blindspot-0.0.2/tests/__init__.py +0 -0
  99. blindspot-0.0.2/tests/conftest.py +51 -0
  100. blindspot-0.0.2/tests/test_ai_signal.py +214 -0
  101. blindspot-0.0.2/tests/test_bitbucket_client.py +78 -0
  102. blindspot-0.0.2/tests/test_bitbucket_config.py +75 -0
  103. blindspot-0.0.2/tests/test_bitbucket_pr_collector.py +177 -0
  104. blindspot-0.0.2/tests/test_bitbucket_remote.py +41 -0
  105. blindspot-0.0.2/tests/test_bot_detection.py +40 -0
  106. blindspot-0.0.2/tests/test_bus_factor.py +103 -0
  107. blindspot-0.0.2/tests/test_cli.py +47 -0
  108. blindspot-0.0.2/tests/test_codeowners.py +137 -0
  109. blindspot-0.0.2/tests/test_departure.py +82 -0
  110. blindspot-0.0.2/tests/test_dependency_graph.py +462 -0
  111. blindspot-0.0.2/tests/test_dependency_graph_languages.py +284 -0
  112. blindspot-0.0.2/tests/test_diff_analysis.py +149 -0
  113. blindspot-0.0.2/tests/test_filters.py +150 -0
  114. blindspot-0.0.2/tests/test_gh_client.py +137 -0
  115. blindspot-0.0.2/tests/test_git_collector.py +62 -0
  116. blindspot-0.0.2/tests/test_github_client.py +67 -0
  117. blindspot-0.0.2/tests/test_github_config.py +48 -0
  118. blindspot-0.0.2/tests/test_github_remote.py +37 -0
  119. blindspot-0.0.2/tests/test_knowledge_decay.py +90 -0
  120. blindspot-0.0.2/tests/test_mailmap.py +104 -0
  121. blindspot-0.0.2/tests/test_narrative.py +300 -0
  122. blindspot-0.0.2/tests/test_ownership.py +106 -0
  123. blindspot-0.0.2/tests/test_pr_collector.py +120 -0
  124. blindspot-0.0.2/tests/test_recommendations.py +313 -0
  125. blindspot-0.0.2/tests/test_report.py +214 -0
  126. blindspot-0.0.2/tests/test_resilience_score.py +122 -0
  127. blindspot-0.0.2/tests/test_review_graph.py +163 -0
  128. blindspot-0.0.2/tests/test_trend.py +69 -0
@@ -0,0 +1,18 @@
1
+ # Example blindspot configuration.
2
+ # Copy to `.blindspot.yaml` (in repo root) or `~/.config/blindspot/config.yaml`
3
+ # and fill in the values you need.
4
+ #
5
+ # Precedence: CLI flags > project (./.blindspot.yaml) > user (~/.config/blindspot/config.yaml).
6
+ # blindspot deliberately does NOT read API keys from environment variables.
7
+
8
+ narrative:
9
+ # LLM provider for `--with-narrative`. Currently supported: anthropic.
10
+ provider: anthropic
11
+
12
+ # Override the default model (claude-haiku-4-5-20251001).
13
+ # Other Claude models: claude-sonnet-4-6, claude-opus-4-7
14
+ # model: claude-sonnet-4-6
15
+
16
+ # API key. Keep this file out of git if you commit your key here —
17
+ # prefer ~/.config/blindspot/config.yaml or `--api-key` on the command line.
18
+ api_key: sk-ant-...
@@ -0,0 +1,44 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *$py.class
4
+ *.so
5
+ .Python
6
+
7
+ build/
8
+ dist/
9
+ *.egg-info/
10
+ *.egg
11
+ .eggs/
12
+
13
+ .venv/
14
+ venv/
15
+ env/
16
+ .env
17
+
18
+ # Local LLM/API config — may contain api_key.
19
+ .blindspot.yaml
20
+
21
+ .pytest_cache/
22
+ .mypy_cache/
23
+ .ruff_cache/
24
+ .coverage
25
+ htmlcov/
26
+ coverage.xml
27
+
28
+ .idea/
29
+ .vscode/
30
+ .claude/
31
+ *.swp
32
+ .DS_Store
33
+
34
+ kfactor_report*.html
35
+ demo_report*.html
36
+ # Any report produced from a private/customer repo — keep out of version control.
37
+ report*.html
38
+ report_*.html
39
+ blindspot_report*.html
40
+ blindspot_departure*.html
41
+ departure_*.html
42
+ kfactor.db
43
+ *.sqlite
44
+ *.sqlite3
@@ -0,0 +1,72 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
5
+
6
+ ## [0.0.2] — 2026-05-14 (Pre-alpha)
7
+
8
+ First PyPI release.
9
+
10
+ ### Departure reporting
11
+ - Standalone HTML departure report for the `simulate` command (`--output`)
12
+ - "Departure scenarios" and "Central models" sections in the scan report
13
+ - Named fragility patterns on recommendations: review-without-scrutiny,
14
+ single-owner-concentration, velocity-without-review
15
+
16
+ ### Dependency graph
17
+ - Auto-detect code root (`src/` / `lib/` / `app/`); test, example, and
18
+ docs directories are excluded from the structural graph by default
19
+ - AST-based Python extractor: import resolution, class-inheritance edges,
20
+ and data-model detection (dataclass, pydantic, attrs, msgspec, …)
21
+ - Module aggregation peels the common parent prefix so internal
22
+ architecture is visible
23
+
24
+ ### Review-data providers
25
+ - Bitbucket Cloud provider (remote detection, REST v2.0 client,
26
+ app-password auth) — `--with-reviews` now works on Bitbucket repos
27
+ - Shared provider-agnostic pull-request models
28
+ - `--github-token` flag and `github:` config block for private repos
29
+ without the `gh` CLI
30
+
31
+ ### Documentation
32
+ - New `docs/` folder: overview, quickstart, architecture, algorithms,
33
+ CLI reference, configuration, outputs, and glossary
34
+
35
+ ## [0.0.1] — 2026-05-13 (Pre-alpha)
36
+
37
+ Initial public release.
38
+
39
+ ### Knowledge map
40
+ - Ownership engine with recency- and review-weighted contribution scoring
41
+ - Bus factor per file and per service (top-level directory)
42
+ - Review-graph reviewer-coverage analysis
43
+ - File-level dependency graph with PageRank-based structural importance
44
+ - Module-level Mermaid diagram in the HTML report
45
+
46
+ ### AI risk signals
47
+ - "Fake velocity" detector for AI-amplified commits
48
+ - Commit quality heuristics (size, churn, review depth)
49
+ - Per-author AI-usage profile
50
+
51
+ ### Departure simulation
52
+ - Per-person knowledge-loss projection
53
+ - Service-level impact when one or more people leave
54
+
55
+ ### Reporting
56
+ - Single self-contained HTML report (Jinja2 template, embedded styles)
57
+ - Recommender engine: risk → prioritised, deduplicated action list
58
+ - Importance threshold filtering across recommendations and display tables
59
+ - Optional LLM-generated executive summary (Anthropic backend, TR/EN)
60
+
61
+ ### Languages supported by the dependency extractor
62
+ Python · JavaScript / TypeScript (incl. `.mjs`, `.cjs`, JSX, TSX) ·
63
+ C# + F# · Java · Kotlin · Go · Rust · C/C++ · Ruby · PHP · Swift.
64
+ Opt-in `--llm-graph` flag augments the static result with an LLM call.
65
+
66
+ ### Other
67
+ - CODEOWNERS parser with team-only fallback messaging
68
+ - Trend module (time-series view over the configured window)
69
+ - GitHub PR + reviewer + diffstat collector (`--with-reviews`)
70
+ - Configurable via CLI flags, `.blindspot.yaml` (project), or
71
+ `~/.config/blindspot/config.yaml` (user). API keys are never read from
72
+ environment variables.
@@ -0,0 +1,66 @@
1
+ # Contributing
2
+
3
+ Thanks for your interest in blindspot. This project is in pre-alpha — APIs,
4
+ metrics, and CLI surface will change. Small, focused contributions are very
5
+ welcome.
6
+
7
+ ## Dev setup
8
+
9
+ ```bash
10
+ python3.11 -m venv .venv
11
+ .venv/bin/pip install -e ".[dev,ai]"
12
+ ```
13
+
14
+ The `dev` extra pulls in `pytest`, `pytest-cov`, `ruff`, and `mypy`. The
15
+ `ai` extra pulls in `litellm` for the optional LLM features.
16
+
17
+ ## Running the tests
18
+
19
+ ```bash
20
+ .venv/bin/pytest -q
21
+ ```
22
+
23
+ Tests are deterministic and run against synthetic git repositories built
24
+ in-memory (see `tests/conftest.py`). They do not hit the network or any
25
+ real LLM provider.
26
+
27
+ For type checks and lint:
28
+
29
+ ```bash
30
+ .venv/bin/ruff check .
31
+ .venv/bin/mypy src
32
+ ```
33
+
34
+ ## Submitting changes
35
+
36
+ - Keep PRs focused on a single concern. Mixing a bug fix with a refactor
37
+ makes review and bisection harder.
38
+ - Add a test for any behaviour change. Reproduce the bug or feature in a
39
+ failing test first when you can.
40
+ - Update `CHANGELOG.md` if your change is user-visible (new flag, new
41
+ recommendation rule, breaking output).
42
+ - Update the README only when the change affects documented usage.
43
+
44
+ ## API keys
45
+
46
+ Blindspot deliberately does **not** read API keys from environment
47
+ variables. Configure providers via:
48
+
49
+ - `./.blindspot.yaml` (project, in your CWD)
50
+ - `~/.config/blindspot/config.yaml` (user)
51
+ - CLI flags (`--api-key`, `--model`, `--provider`)
52
+
53
+ Never commit a real key. `.blindspot.yaml` is already in `.gitignore`;
54
+ use `.blindspot.yaml.example` as a template.
55
+
56
+ ## Reporting issues
57
+
58
+ Use GitHub Issues. Include:
59
+ - The exact command you ran.
60
+ - The repo characteristics that matter (rough size, languages, whether
61
+ CODEOWNERS or `--with-reviews` was involved).
62
+ - The actual output and what you expected.
63
+
64
+ If you suspect a privacy issue (e.g. raw author identifiers in a place
65
+ they shouldn't be), please flag it explicitly so it can be triaged ahead
66
+ of other reports.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Aydın Çetin
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,93 @@
1
+ Metadata-Version: 2.4
2
+ Name: blindspot
3
+ Version: 0.0.2
4
+ Summary: The bus factor for the AI era. Map team knowledge blindspots before someone leaves.
5
+ Project-URL: Homepage, https://github.com/aydincn/blindspot
6
+ Project-URL: Repository, https://github.com/aydincn/blindspot
7
+ Project-URL: Documentation, https://github.com/aydincn/blindspot/tree/main/docs
8
+ Project-URL: Changelog, https://github.com/aydincn/blindspot/blob/main/CHANGELOG.md
9
+ Author: Aydın Çetin
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: bus-factor,code-analysis,engineering-resilience,knowledge-graph,ownership
13
+ Classifier: Development Status :: 2 - Pre-Alpha
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.14
20
+ Classifier: Topic :: Software Development :: Quality Assurance
21
+ Requires-Python: >=3.11
22
+ Requires-Dist: gitpython>=3.1.40
23
+ Requires-Dist: jinja2>=3.1
24
+ Requires-Dist: networkx>=3.2
25
+ Requires-Dist: pydantic>=2.5
26
+ Requires-Dist: pyyaml>=6.0
27
+ Requires-Dist: rich>=13.7
28
+ Requires-Dist: typer>=0.12
29
+ Provides-Extra: ai
30
+ Requires-Dist: litellm>=1.40; extra == 'ai'
31
+ Provides-Extra: dev
32
+ Requires-Dist: mypy>=1.10; extra == 'dev'
33
+ Requires-Dist: pytest-cov>=5.0; extra == 'dev'
34
+ Requires-Dist: pytest>=8.0; extra == 'dev'
35
+ Requires-Dist: ruff>=0.5; extra == 'dev'
36
+ Requires-Dist: types-pyyaml; extra == 'dev'
37
+ Description-Content-Type: text/markdown
38
+
39
+ # blindspot
40
+
41
+ **The bus factor for the AI era.** Map your team's knowledge blindspots before someone leaves.
42
+
43
+ > 🚧 **Pre-alpha.** Codename: *Blindspot*. APIs and metrics will change.
44
+
45
+ ## Why
46
+
47
+ AI coding tools made engineering teams faster. But faster does not mean *understood*. Codebases now carry a new kind of risk: services that shipped quickly, owned by one person, reviewed by no one in depth — and that one person can leave tomorrow.
48
+
49
+ Existing tools measure velocity. **blindspot measures resilience.**
50
+
51
+ ## What it measures
52
+
53
+ - **Ownership concentration** — who *actually* understands each part of the codebase, weighted by recency and review depth
54
+ - **Bus factor** per service / folder — how many people would need to leave before knowledge is critically lost
55
+ - **Review lineage** — who reviews what, and where reviewer redundancy is dangerously thin
56
+ - **Departure simulation** — *"If two senior devs on Payment leave next month, what coverage do we lose?"*
57
+ - **Knowledge decay** — code volatility and contributor drift, projected 30 / 60 / 90 days forward
58
+
59
+ ## Quick start
60
+
61
+ ```bash
62
+ pip install blindspot
63
+ blindspot scan /path/to/repo --output blindspot_report.html
64
+ blindspot simulate --person alice@example.com /path/to/repo
65
+ ```
66
+
67
+ Output is a single self-contained HTML file. No server, no signup, no telemetry.
68
+
69
+ ## Documentation
70
+
71
+ Full end-to-end documentation lives in [docs/](docs/README.md) — the
72
+ algorithms (with formulas and parameters), the architecture, the CLI
73
+ reference, configuration, and how to read every section of the report.
74
+
75
+ ## Design principles
76
+
77
+ - **Service-first, not person-first.** Default views show service-level risk. Individual views require explicit, justified access.
78
+ - **Evidence over inference.** AI-usage signals come from official telemetry (e.g. GitHub Copilot Usage API) when available — not from guessing.
79
+ - **Reports, not surveillance.** blindspot answers *"is this service fragile?"*, not *"is this person slacking?"*.
80
+
81
+ ## Roadmap
82
+
83
+ | Phase | Surface | Status |
84
+ |---|---|---|
85
+ | 1 | CLI + static HTML report | In progress |
86
+ | 1 | GitHub Action + Checks API output | Planned |
87
+ | 2 | Self-hosted dashboard | Planned |
88
+ | 2 | AI signal layer (Copilot Usage API) | Planned |
89
+ | 3 | Slack / Jira / incident integration | Planned |
90
+
91
+ ## License
92
+
93
+ MIT. See [LICENSE](LICENSE).
@@ -0,0 +1,55 @@
1
+ # blindspot
2
+
3
+ **The bus factor for the AI era.** Map your team's knowledge blindspots before someone leaves.
4
+
5
+ > 🚧 **Pre-alpha.** Codename: *Blindspot*. APIs and metrics will change.
6
+
7
+ ## Why
8
+
9
+ AI coding tools made engineering teams faster. But faster does not mean *understood*. Codebases now carry a new kind of risk: services that shipped quickly, owned by one person, reviewed by no one in depth — and that one person can leave tomorrow.
10
+
11
+ Existing tools measure velocity. **blindspot measures resilience.**
12
+
13
+ ## What it measures
14
+
15
+ - **Ownership concentration** — who *actually* understands each part of the codebase, weighted by recency and review depth
16
+ - **Bus factor** per service / folder — how many people would need to leave before knowledge is critically lost
17
+ - **Review lineage** — who reviews what, and where reviewer redundancy is dangerously thin
18
+ - **Departure simulation** — *"If two senior devs on Payment leave next month, what coverage do we lose?"*
19
+ - **Knowledge decay** — code volatility and contributor drift, projected 30 / 60 / 90 days forward
20
+
21
+ ## Quick start
22
+
23
+ ```bash
24
+ pip install blindspot
25
+ blindspot scan /path/to/repo --output blindspot_report.html
26
+ blindspot simulate --person alice@example.com /path/to/repo
27
+ ```
28
+
29
+ Output is a single self-contained HTML file. No server, no signup, no telemetry.
30
+
31
+ ## Documentation
32
+
33
+ Full end-to-end documentation lives in [docs/](docs/README.md) — the
34
+ algorithms (with formulas and parameters), the architecture, the CLI
35
+ reference, configuration, and how to read every section of the report.
36
+
37
+ ## Design principles
38
+
39
+ - **Service-first, not person-first.** Default views show service-level risk. Individual views require explicit, justified access.
40
+ - **Evidence over inference.** AI-usage signals come from official telemetry (e.g. GitHub Copilot Usage API) when available — not from guessing.
41
+ - **Reports, not surveillance.** blindspot answers *"is this service fragile?"*, not *"is this person slacking?"*.
42
+
43
+ ## Roadmap
44
+
45
+ | Phase | Surface | Status |
46
+ |---|---|---|
47
+ | 1 | CLI + static HTML report | In progress |
48
+ | 1 | GitHub Action + Checks API output | Planned |
49
+ | 2 | Self-hosted dashboard | Planned |
50
+ | 2 | AI signal layer (Copilot Usage API) | Planned |
51
+ | 3 | Slack / Jira / incident integration | Planned |
52
+
53
+ ## License
54
+
55
+ MIT. See [LICENSE](LICENSE).
@@ -0,0 +1,65 @@
1
+ # Blindspot Documentation
2
+
3
+ **Blindspot** is the bus factor for the AI era — a static analysis tool
4
+ that maps where a team's engineering knowledge is thin, concentrated, or
5
+ decaying, and produces a single self-contained HTML report. No server,
6
+ no database, no telemetry.
7
+
8
+ This folder is the complete reference. The goal: after reading it, no
9
+ question marks remain about what Blindspot does, how it computes any
10
+ number, or how to read its output.
11
+
12
+ ---
13
+
14
+ ## Contents
15
+
16
+ | Document | What's in it |
17
+ |---|---|
18
+ | [overview.md](overview.md) | The problem Blindspot solves, the design principles, the full capability matrix, and the honest limitations. |
19
+ | [quickstart.md](quickstart.md) | Install and get your first report out in five minutes. |
20
+ | [architecture.md](architecture.md) | The 13 modules, how data flows between them, and the exact step order of the `scan` and `simulate` pipelines. |
21
+ | [algorithms.md](algorithms.md) | The core reference — every one of the ~17 algorithms with its exact formula, every parameter and threshold, and the output type. |
22
+ | [cli-reference.md](cli-reference.md) | Every command and every flag, with defaults and meanings. |
23
+ | [configuration.md](configuration.md) | The `.blindspot.yaml` file, credential precedence, and GitHub / Bitbucket integration setup. |
24
+ | [outputs.md](outputs.md) | Every section of the HTML report explained — what it shows, how to read it, which algorithm feeds it. |
25
+ | [glossary.md](glossary.md) | One-line definitions of every term. |
26
+
27
+ ---
28
+
29
+ ## Read in this order
30
+
31
+ **If you're new to Blindspot:**
32
+ 1. [overview.md](overview.md) — understand what it is and why.
33
+ 2. [quickstart.md](quickstart.md) — run it once.
34
+ 3. [outputs.md](outputs.md) — read the report you just generated.
35
+
36
+ **If you want to understand a specific number:**
37
+ - [algorithms.md](algorithms.md) — find the metric, read its formula
38
+ and parameters.
39
+ - [glossary.md](glossary.md) — if a term is unfamiliar.
40
+
41
+ **If you're setting up review data or the LLM features:**
42
+ - [configuration.md](configuration.md) — config file + auth.
43
+ - [cli-reference.md](cli-reference.md) — the relevant flags.
44
+
45
+ **If you're working on the code:**
46
+ - [architecture.md](architecture.md) — module map and pipelines.
47
+ - [algorithms.md](algorithms.md) — every formula traced to its source
48
+ file and line.
49
+
50
+ ---
51
+
52
+ ## Conventions
53
+
54
+ - Every formula in [algorithms.md](algorithms.md) is traced to a source
55
+ file (and often a line number) so it can be re-verified against the
56
+ code if it ever drifts.
57
+ - "Parameters" tables list the dataclass default — the value you get
58
+ unless you override it.
59
+ - Sections marked *(only with `--flag`)* in [outputs.md](outputs.md) are
60
+ conditional on a CLI flag.
61
+
62
+ ---
63
+
64
+ *Documentation for Blindspot 0.0.1 (pre-alpha). The CLI surface and
65
+ metrics will change; this folder is kept in sync with the code.*