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.
- blindspot-0.0.2/.blindspot.yaml.example +18 -0
- blindspot-0.0.2/.gitignore +44 -0
- blindspot-0.0.2/CHANGELOG.md +72 -0
- blindspot-0.0.2/CONTRIBUTING.md +66 -0
- blindspot-0.0.2/LICENSE +21 -0
- blindspot-0.0.2/PKG-INFO +93 -0
- blindspot-0.0.2/README.md +55 -0
- blindspot-0.0.2/docs/README.md +65 -0
- blindspot-0.0.2/docs/algorithms.md +790 -0
- blindspot-0.0.2/docs/architecture.md +178 -0
- blindspot-0.0.2/docs/cli-reference.md +144 -0
- blindspot-0.0.2/docs/configuration.md +172 -0
- blindspot-0.0.2/docs/glossary.md +154 -0
- blindspot-0.0.2/docs/outputs.md +216 -0
- blindspot-0.0.2/docs/overview.md +124 -0
- blindspot-0.0.2/docs/quickstart.md +116 -0
- blindspot-0.0.2/examples/synthetic_demo.py +217 -0
- blindspot-0.0.2/pyproject.toml +75 -0
- blindspot-0.0.2/src/blindspot/__init__.py +1 -0
- blindspot-0.0.2/src/blindspot/__main__.py +4 -0
- blindspot-0.0.2/src/blindspot/actions/__init__.py +18 -0
- blindspot-0.0.2/src/blindspot/actions/models.py +55 -0
- blindspot-0.0.2/src/blindspot/actions/recommender.py +316 -0
- blindspot-0.0.2/src/blindspot/ai_signal/__init__.py +23 -0
- blindspot-0.0.2/src/blindspot/ai_signal/detector.py +217 -0
- blindspot-0.0.2/src/blindspot/ai_signal/models.py +71 -0
- blindspot-0.0.2/src/blindspot/ai_signal/profile.py +136 -0
- blindspot-0.0.2/src/blindspot/ai_signal/quality.py +198 -0
- blindspot-0.0.2/src/blindspot/cli.py +973 -0
- blindspot-0.0.2/src/blindspot/codeowners/__init__.py +21 -0
- blindspot-0.0.2/src/blindspot/codeowners/engine.py +225 -0
- blindspot-0.0.2/src/blindspot/codeowners/parser.py +133 -0
- blindspot-0.0.2/src/blindspot/collector/__init__.py +15 -0
- blindspot-0.0.2/src/blindspot/collector/bitbucket/__init__.py +29 -0
- blindspot-0.0.2/src/blindspot/collector/bitbucket/client.py +117 -0
- blindspot-0.0.2/src/blindspot/collector/bitbucket/config.py +99 -0
- blindspot-0.0.2/src/blindspot/collector/bitbucket/pr_collector.py +225 -0
- blindspot-0.0.2/src/blindspot/collector/bitbucket/remote.py +71 -0
- blindspot-0.0.2/src/blindspot/collector/bots.py +66 -0
- blindspot-0.0.2/src/blindspot/collector/filters.py +164 -0
- blindspot-0.0.2/src/blindspot/collector/git.py +81 -0
- blindspot-0.0.2/src/blindspot/collector/github/__init__.py +49 -0
- blindspot-0.0.2/src/blindspot/collector/github/client.py +116 -0
- blindspot-0.0.2/src/blindspot/collector/github/config.py +94 -0
- blindspot-0.0.2/src/blindspot/collector/github/gh_client.py +177 -0
- blindspot-0.0.2/src/blindspot/collector/github/pr_collector.py +147 -0
- blindspot-0.0.2/src/blindspot/collector/github/pr_models.py +16 -0
- blindspot-0.0.2/src/blindspot/collector/github/remote.py +51 -0
- blindspot-0.0.2/src/blindspot/collector/mailmap.py +123 -0
- blindspot-0.0.2/src/blindspot/collector/models.py +20 -0
- blindspot-0.0.2/src/blindspot/collector/review_models.py +63 -0
- blindspot-0.0.2/src/blindspot/config.py +46 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/__init__.py +24 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/aggregation.py +150 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/builder.py +178 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/__init__.py +62 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/base.py +48 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/cpp.py +74 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/dotnet.py +81 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/go.py +98 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/java.py +66 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/javascript.py +95 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/kotlin.py +62 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/php.py +102 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/python.py +273 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/ruby.py +73 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/rust.py +111 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/extractors/swift.py +48 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/importance.py +90 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/llm_fallback.py +137 -0
- blindspot-0.0.2/src/blindspot/dependency_graph/models.py +115 -0
- blindspot-0.0.2/src/blindspot/diff_analysis/__init__.py +19 -0
- blindspot-0.0.2/src/blindspot/diff_analysis/classifier.py +202 -0
- blindspot-0.0.2/src/blindspot/narrative/__init__.py +16 -0
- blindspot-0.0.2/src/blindspot/narrative/client.py +92 -0
- blindspot-0.0.2/src/blindspot/narrative/config.py +98 -0
- blindspot-0.0.2/src/blindspot/narrative/engine.py +103 -0
- blindspot-0.0.2/src/blindspot/narrative/models.py +26 -0
- blindspot-0.0.2/src/blindspot/narrative/prompt.py +327 -0
- blindspot-0.0.2/src/blindspot/ownership/__init__.py +4 -0
- blindspot-0.0.2/src/blindspot/ownership/engine.py +131 -0
- blindspot-0.0.2/src/blindspot/ownership/models.py +55 -0
- blindspot-0.0.2/src/blindspot/report/__init__.py +15 -0
- blindspot-0.0.2/src/blindspot/report/context.py +126 -0
- blindspot-0.0.2/src/blindspot/report/renderer.py +23 -0
- blindspot-0.0.2/src/blindspot/report/templates/departure.html.j2 +294 -0
- blindspot-0.0.2/src/blindspot/report/templates/report.html.j2 +767 -0
- blindspot-0.0.2/src/blindspot/resilience/__init__.py +7 -0
- blindspot-0.0.2/src/blindspot/resilience/score.py +171 -0
- blindspot-0.0.2/src/blindspot/review_graph/__init__.py +15 -0
- blindspot-0.0.2/src/blindspot/review_graph/engine.py +153 -0
- blindspot-0.0.2/src/blindspot/risk_models/__init__.py +37 -0
- blindspot-0.0.2/src/blindspot/risk_models/bus_factor.py +145 -0
- blindspot-0.0.2/src/blindspot/risk_models/departure.py +142 -0
- blindspot-0.0.2/src/blindspot/risk_models/knowledge_decay.py +161 -0
- blindspot-0.0.2/src/blindspot/trend/__init__.py +3 -0
- blindspot-0.0.2/src/blindspot/trend/engine.py +72 -0
- blindspot-0.0.2/tests/__init__.py +0 -0
- blindspot-0.0.2/tests/conftest.py +51 -0
- blindspot-0.0.2/tests/test_ai_signal.py +214 -0
- blindspot-0.0.2/tests/test_bitbucket_client.py +78 -0
- blindspot-0.0.2/tests/test_bitbucket_config.py +75 -0
- blindspot-0.0.2/tests/test_bitbucket_pr_collector.py +177 -0
- blindspot-0.0.2/tests/test_bitbucket_remote.py +41 -0
- blindspot-0.0.2/tests/test_bot_detection.py +40 -0
- blindspot-0.0.2/tests/test_bus_factor.py +103 -0
- blindspot-0.0.2/tests/test_cli.py +47 -0
- blindspot-0.0.2/tests/test_codeowners.py +137 -0
- blindspot-0.0.2/tests/test_departure.py +82 -0
- blindspot-0.0.2/tests/test_dependency_graph.py +462 -0
- blindspot-0.0.2/tests/test_dependency_graph_languages.py +284 -0
- blindspot-0.0.2/tests/test_diff_analysis.py +149 -0
- blindspot-0.0.2/tests/test_filters.py +150 -0
- blindspot-0.0.2/tests/test_gh_client.py +137 -0
- blindspot-0.0.2/tests/test_git_collector.py +62 -0
- blindspot-0.0.2/tests/test_github_client.py +67 -0
- blindspot-0.0.2/tests/test_github_config.py +48 -0
- blindspot-0.0.2/tests/test_github_remote.py +37 -0
- blindspot-0.0.2/tests/test_knowledge_decay.py +90 -0
- blindspot-0.0.2/tests/test_mailmap.py +104 -0
- blindspot-0.0.2/tests/test_narrative.py +300 -0
- blindspot-0.0.2/tests/test_ownership.py +106 -0
- blindspot-0.0.2/tests/test_pr_collector.py +120 -0
- blindspot-0.0.2/tests/test_recommendations.py +313 -0
- blindspot-0.0.2/tests/test_report.py +214 -0
- blindspot-0.0.2/tests/test_resilience_score.py +122 -0
- blindspot-0.0.2/tests/test_review_graph.py +163 -0
- 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.
|
blindspot-0.0.2/LICENSE
ADDED
|
@@ -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.
|
blindspot-0.0.2/PKG-INFO
ADDED
|
@@ -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.*
|