Knowledge resilience report
Moderate Resilience 65/100 · D · team profile
pydantic_graph
agent_docs
pydantic_ai_slim/pydantic_ai/agent/__init__.py
Patterns detected Fragile Velocity
Business implication An unexpected departure of the top contributor would orphan 598 critical files and likely slow feature delivery by 3–5 weeks while the team learns the surface.
Pair David Montague (dmontagu@github) on 'pydantic_graph' — bus factor 1 across 35 files
Resilience is **Moderate** (65/100). Weakest dimension: ownership concentration (D).
Risk inventory: 2 service(s) rest on a single contributor; 598 file(s) would become orphans if the top contributor leaves; 21 file(s) carry high correction load (≥35% fix/revert); 10 service(s) lack AI-readable operational context.
Top recommended action: Pair David Montague (dmontagu@github) on 'pydantic_graph' — bus factor 1 across 35 files
--api-key sk-ant-... --provider anthropic --model claude-sonnet-4-6or set
narrative.api_key in .blindspot.yaml.
Without a key, this rule-based narrator is used — deterministic,
in-process, no network.
Moderate resilience overall (score 65). Weakest dimension: AI operational readiness at 4.
Team-based Multiple maintainers without a single dominant contributor.
Six concrete questions, each with a one-number answer. This is the
report. Each signal opens up below into the files, services and people
behind its number — run with --detailed for the
architecture deep-dive.
Concrete next steps derived from the signals in this report. Each action is tied to a specific finding — treat them as conversation starters with the team, not directives.
| Priority | Confidence | Category | Title | Target | Evidence |
|---|---|---|---|---|---|
| High | High | Ownership Diversification |
Single-owner concentration
Diversify ownership of 'pydantic_graph' (currently single-owner)
Service 'pydantic_graph' has bus factor 1 across 35 files; David Montague (dmontagu@github) holds 94% of effective ownership. Pair them with at least two additional engineers and rotate code reviews for this area over the next 60 days. Start with these 2 files: pydantic_graph/pydantic_graph/basenode.py, pydantic_graph/pydantic_graph/__init__.py. Cadence: aim to cover the top files this quarter.
▸ Bus factor 1 over 35 files — David Montague (dmontagu@github) holds 94% of effective ownership.
|
pydantic_graph |
bus_factor=1, top_owner_coverage=94%, files=35, top_files=pydantic_graph/pydantic_graph/basenode.py+1 |
| Medium | High | Knowledge Transfer |
Knowledge transfer for pydantic_ai_slim/pydantic_ai/agent/__init__.py
Decay is elevated (56%). Douwe Maan (douwe@pydantic.dev) last touched this file 7 days ago, and 406 lines have been changed since by others. Schedule a transfer session and designate a secondary owner before the next non-trivial change.
▸ Decay 56% — owner last touched 7 days ago, 406 lines changed by others since.
|
pydantic_ai_slim/pydantic_ai/agent/__init__.py |
decay=56%, days_since_touch=7, lines_after=406 |
| Medium | High | Knowledge Transfer |
Knowledge transfer for pydantic_ai_slim/pydantic_ai/messages.py
Decay is elevated (50%). Douwe Maan (douwe@pydantic.dev) last touched this file 8 days ago, and 248 lines have been changed since by others. Schedule a transfer session and designate a secondary owner before the next non-trivial change.
▸ Decay 50% — owner last touched 8 days ago, 248 lines changed by others since.
|
pydantic_ai_slim/pydantic_ai/messages.py |
decay=50%, days_since_touch=8, lines_after=248 |
| Medium | High | Knowledge Transfer |
Knowledge transfer for pydantic_ai_slim/pydantic_ai/models/instrumented.py
Decay is elevated (54%). Douwe Maan (douwe@pydantic.dev) last touched this file 7 days ago, and 344 lines have been changed since by others. Schedule a transfer session and designate a secondary owner before the next non-trivial change.
▸ Decay 54% — owner last touched 7 days ago, 344 lines changed by others since.
|
pydantic_ai_slim/pydantic_ai/models/instrumented.py |
decay=54%, days_since_touch=7, lines_after=344 |
| Medium | High | Ownership Diversification |
Single-owner concentration
Diversify ownership of 'agent_docs' (currently single-owner)
Service 'agent_docs' has bus factor 1 across 4 files; Douwe Maan (douwe@pydantic.dev) holds 88% of effective ownership. Pair them with at least two additional engineers and rotate code reviews for this area over the next 60 days.
▸ Bus factor 1 over 4 files — Douwe Maan (douwe@pydantic.dev) holds 88% of effective ownership.
|
agent_docs |
bus_factor=1, top_owner_coverage=88%, files=4 |
Each signal above, opened up — the files, services and people behind the headline number. Risk signals are expanded by default; healthy ones stay collapsed.
Bus factor measures how many people would need to leave before knowledge of a service is critically lost. A bus factor of 1 means a single person carries the service.
| Service | Files | Bus factor | Risk | Top owner | Their coverage |
|---|---|---|---|---|---|
pydantic_graph |
35 | 1 | critical | David Montague (dmontagu@github) | 94% |
scripts |
8 | 1 | critical | David SF (dsfaccini@github) | 88% |
agent_docs |
4 | 1 | critical | Douwe Maan (douwe@pydantic.dev) | 88% |
examples |
18 | 2 | high | David SF (dsfaccini@github) | 72% |
(config) |
2 | 2 | high | Miguel Miranda Dias (pandego@github) | 50% |
clai |
1 | 2 | high | David Montague (dmontagu@github) | 62% |
tests |
724 | 3 | medium | David SF (dsfaccini@github) | 69% |
docs |
122 | 4 | healthy | Douwe Maan (douwe@pydantic.dev) | 30% |
pydantic_evals |
19 | 4 | healthy | David Montague (dmontagu@github) | 45% |
.github |
13 | 4 | healthy | David Montague (dmontagu@github) | 25% |
(root) |
8 | 4 | healthy | David SF (dsfaccini@github) | 31% |
pydantic_ai_slim |
227 | 7 | healthy | Douwe Maan (douwe@pydantic.dev) | 43% |
Entirely owned by one person — the most acute knowledge risk.
| File | Owner | Coverage |
|---|---|---|
pydantic_graph/pydantic_graph/__init__.py |
David Montague (dmontagu@github) | 100% |
pydantic_graph/pydantic_graph/basenode.py |
David Montague (dmontagu@github) | 100% |
pydantic_ai_slim/pydantic_ai/_run_context.py |
Douwe Maan (douwe@pydantic.dev) | 100% |
pydantic_ai_slim/pydantic_ai/capabilities/native_or_local.py |
Douwe Maan (douwe@pydantic.dev) | 100% |
pydantic_ai_slim/pydantic_ai/_tool_search.py |
Douwe Maan (douwe@pydantic.dev) | 100% |
pydantic_ai_slim/pydantic_ai/native_tools/__init__.py |
Douwe Maan (douwe@pydantic.dev) | 100% |
pydantic_ai_slim/pydantic_ai/native_tools/_tool_search.py |
Douwe Maan (douwe@pydantic.dev) | 100% |
pydantic_ai_slim/pydantic_ai/_warnings.py |
Douwe Maan (douwe@pydantic.dev) | 100% |
pydantic_ai_slim/pydantic_ai/capabilities/wrapper.py |
Douwe Maan (douwe@pydantic.dev) | 100% |
pydantic_ai_slim/pydantic_ai/profiles/__init__.py |
Douwe Maan (douwe@pydantic.dev) | 100% |
pydantic_ai_slim/pydantic_ai/_json_schema.py |
Dharit Shah (dharits3@gmail.com) | 100% |
pydantic_ai_slim/pydantic_ai/durable_exec/temporal/_run_context.py |
Douwe Maan (douwe@pydantic.dev) | 100% |
pydantic_ai_slim/pydantic_ai/capabilities/prefix_tools.py |
Douwe Maan (douwe@pydantic.dev) | 100% |
pydantic_ai_slim/pydantic_ai/capabilities/__init__.py |
Douwe Maan (douwe@pydantic.dev) | 86% |
For each of the top contributors by aggregate ownership coverage, this is what would happen if they left tomorrow: how many files lose their primary expert, how many become unowned (orphan, top remaining coverage < 30%), and which services take the largest hit. Use this to prioritise pair-work and knowledge transfer.
tests
498/724 files, 511 orphan, 69% avg loss
pydantic_ai_slim
49/227 files, 48 orphan, 21% avg loss
docs
12/122 files, 16 orphan, 12% avg loss
pydantic_ai_slim
106/227 files, 117 orphan, 43% avg loss
tests
78/724 files, 86 orphan, 11% avg loss
docs
37/122 files, 33 orphan, 30% avg loss
tests
30/724 files, 51 orphan, 4% avg loss
docs
35/122 files, 40 orphan, 28% avg loss
pydantic_graph
34/35 files, 32 orphan, 94% avg loss
Decay rises when an owner stops touching a file and others have been changing it. The 90-day projection shows the trajectory if nothing changes.
| File | Top owner | Days since touch | Decay score | Risk | 90-day projection |
|---|---|---|---|---|---|
pydantic_ai_slim/pydantic_ai/agent/__init__.py |
Douwe Maan (douwe@pydantic.dev) | 7 | 56% | high | 86% |
pydantic_ai_slim/pydantic_ai/models/instrumented.py |
Douwe Maan (douwe@pydantic.dev) | 7 | 54% | high | 85% |
pydantic_ai_slim/pydantic_ai/messages.py |
Douwe Maan (douwe@pydantic.dev) | 8 | 50% | high | 80% |
pydantic_ai_slim/pydantic_ai/models/__init__.py |
Douwe Maan (douwe@pydantic.dev) | 8 | 46% | medium | 76% |
pydantic_ai_slim/pydantic_ai/_utils.py |
Douwe Maan (douwe@pydantic.dev) | 8 | 42% | medium | 71% |
pydantic_ai_slim/pydantic_ai/exceptions.py |
Douwe Maan (douwe@pydantic.dev) | 55 | 26% | medium | 41% |
pydantic_ai_slim/pydantic_ai/capabilities/prefix_tools.py |
Douwe Maan (douwe@pydantic.dev) | 55 | 25% | medium | 40% |
pydantic_ai_slim/pydantic_ai/durable_exec/temporal/_run_context.py |
Douwe Maan (douwe@pydantic.dev) | 49 | 23% | low | 39% |
pydantic_ai_slim/pydantic_ai/toolsets/abstract.py |
Douwe Maan (douwe@pydantic.dev) | 42 | 21% | low | 39% |
pydantic_ai_slim/pydantic_ai/_json_schema.py |
Dharit Shah (dharits3@gmail.com) | 37 | 19% | low | 38% |
pydantic_ai_slim/pydantic_ai/_instrumentation.py |
Douwe Maan (douwe@pydantic.dev) | 7 | 18% | low | 48% |
pydantic_ai_slim/pydantic_ai/_otel_messages.py |
Douwe Maan (douwe@pydantic.dev) | 16 | 9% | low | 36% |
pydantic_ai_slim/pydantic_ai/output.py |
Douwe Maan (douwe@pydantic.dev) | 8 | 6% | low | 36% |
pydantic_ai_slim/pydantic_ai/tools.py |
Douwe Maan (douwe@pydantic.dev) | 8 | 6% | low | 36% |
pydantic_ai_slim/pydantic_ai/__init__.py |
Douwe Maan (douwe@pydantic.dev) | 8 | 6% | low | 35% |
pydantic_ai_slim/pydantic_ai/capabilities/abstract.py |
Douwe Maan (douwe@pydantic.dev) | 8 | 6% | low | 35% |
pydantic_ai_slim/pydantic_ai/_warnings.py |
Douwe Maan (douwe@pydantic.dev) | 8 | 5% | low | 35% |
pydantic_ai_slim/pydantic_ai/capabilities/wrapper.py |
Douwe Maan (douwe@pydantic.dev) | 8 | 5% | low | 35% |
pydantic_ai_slim/pydantic_ai/profiles/__init__.py |
Douwe Maan (douwe@pydantic.dev) | 8 | 5% | low | 35% |
pydantic_ai_slim/pydantic_ai/_tool_search.py |
Douwe Maan (douwe@pydantic.dev) | 8 | 5% | low | 35% |
gh auth login # uses gh CLI (recommended)or pass a token directly:
--github-token ghp_...or add it to
.blindspot.yaml:
github: token: ghp_...
Share of recent commits to each file that are follow-up fixes or reverts. A high ratio is observable evidence of stability debt — work is shipping but corrections are paying for it. Look at the surface, not the person.
| File | Total commits | Fixes | Reverts | Correction ratio | Risk |
|---|---|---|---|---|---|
pydantic_ai_slim/pydantic_ai/providers/ollama.py |
5 | 3 | 0 | 60% | critical |
pydantic_ai_slim/pydantic_ai/providers/anthropic.py |
6 | 3 | 0 | 50% | critical |
pydantic_ai_slim/pydantic_ai/providers/openrouter.py |
6 | 3 | 0 | 50% | critical |
tests/test_embeddings.py |
7 | 2 | 1 | 43% | high |
pydantic_ai_slim/pydantic_ai/providers/bedrock.py |
7 | 3 | 0 | 43% | high |
tests/evals/test_dataset.py |
7 | 3 | 0 | 43% | high |
docs/logfire.md |
5 | 1 | 1 | 40% | high |
tests/test_vercel_ai.py |
25 | 10 | 0 | 40% | high |
pydantic_ai_slim/pydantic_ai/providers/google.py |
5 | 2 | 0 | 40% | high |
tests/test_usage_limits.py |
5 | 2 | 0 | 40% | high |
pydantic_ai_slim/pydantic_ai/models/openrouter.py |
10 | 4 | 0 | 40% | high |
pydantic_ai_slim/pydantic_ai/toolsets/_dynamic.py |
5 | 2 | 0 | 40% | high |
tests/test_python_signature.py |
5 | 1 | 1 | 40% | high |
tests/test_messages.py |
13 | 5 | 0 | 38% | high |
pydantic_ai_slim/pydantic_ai/_output.py |
13 | 5 | 0 | 38% | high |
Coverage of AI-readable organizational memory — agent rules, specs, prompts, architecture decisions, skills. The repo-root row is what the signal grades; per-service rows are shown for context. This is not an AI-generated-code detector.
| Surface | Agent rules | Specs | Prompts | Architecture | Skills | Coverage |
|---|---|---|---|---|---|---|
| (repo) | ✓ | — | — | — | ✓ | 40% |
| docs | ✓ | — | — | — | — | 20% |
| tests | ✓ | — | — | — | — | 20% |
| .github | — | — | — | — | — | 0% |
| agent_docs | — | — | — | — | — | 0% |
| clai | — | — | — | — | — | 0% |
| examples | — | — | — | — | — | 0% |
| pydantic_ai_slim | — | — | — | — | — | 0% |
| pydantic_evals | — | — | — | — | — | 0% |
| pydantic_graph | — | — | — | — | — | 0% |
| scripts | — | — | — | — | — | 0% |