blindspot

Knowledge resilience report

Repository: /private/tmp/cohort10/pydantic-ai
Generated 2026-05-20 15:52 UTC · window: last 90 days · blindspot v0.2.1

Executive brief

Moderate Resilience 67/100 · D · team profile

Top 3 risks
  1. HIGH Diversify ownership of 'pydantic_graph' (currently single-owner) pydantic_graph
  2. MEDIUM Diversify ownership of 'agent_docs' (currently single-owner) agent_docs
  3. MEDIUM Knowledge transfer for pydantic_ai_slim/pydantic_ai/agent/__init__.py pydantic_ai_slim/pydantic_ai/agent/__init__.py

Patterns detected Fragile Velocity

Business implication An unexpected departure of the top contributor would orphan 603 critical files and likely slow feature delivery by 3–5 weeks while the team learns the surface.

Executive summary

Pair David Montague (dmontagu@github) on 'pydantic_graph' — bus factor 1 across 35 files

Resilience is **Moderate** (67/100). Weakest dimension: ownership concentration (D).

Risk inventory: 2 service(s) rest on a single contributor; 603 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

💡 Want a richer, prose-style executive summary? Add a cloud LLM key (Anthropic or OpenAI) to your scan:
--api-key sk-ant-... --provider anthropic --model claude-sonnet-4-6
or set narrative.api_key in .blindspot.yaml. Without a key, this rule-based narrator is used — deterministic, in-process, no network.

Overview

Engineering Resilience Score

Overall
67/100 D
Moderate

Moderate resilience overall (score 67). Weakest dimension: AI operational readiness at 4.

Team-based Multiple maintainers without a single dominant contributor.

Key signals — the six questions

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.

Ownership concentration D
3 services rest on a single owner
If that person is unavailable, no one else can confidently change these areas.
Single-engineer dependency
603 files orphan if the top contributor leaves
These files would have no confident owner the day that person walks out.
Knowledge decay
No file is critically decayed
Owners are still close to the code they own.
Review depth
Reviews carry substantive comments
Approvals reflect real scrutiny, not rubber-stamping.
Correction load
Correction load is low across the codebase
A handful of files (21) run a high fix/revert ratio, but repo-wide rework pressure stays low.
AI-readable context F
Repo lacks AI-readable operational context (1/5)
No specs, architecture notes / ADRs, prompts at the repo root — a new human or AI agent must reverse-engineer the codebase.

Recommended actions

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 95% 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 95% of effective ownership.
pydantic_graph bus_factor=1, top_owner_coverage=95%, 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 (58%). Aditya Vardhan (adtyavrdhn@github) last touched this file 7 days ago, and 484 lines have been changed since by others. Schedule a transfer session and designate a secondary owner before the next non-trivial change.
▸ Decay 58% — owner last touched 7 days ago, 484 lines changed by others since.
pydantic_ai_slim/pydantic_ai/agent/__init__.py decay=58%, days_since_touch=7, lines_after=484
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

Signal details

Each signal above, opened up — the files, services and people behind the headline number. Risk signals are expanded by default; healthy ones stay collapsed.

Ownership concentration — service risk map risk

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.

ServiceFilesBus factor RiskTop ownerTheir coverage
pydantic_graph 35 1 critical David Montague (dmontagu@github) 95%
scripts 8 1 critical David SF (dsfaccini@github) 88%
agent_docs 4 1 critical Douwe Maan (douwe@pydantic.dev) 88%
tests 724 2 high David SF (dsfaccini@github) 69%
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%
docs 122 4 healthy Douwe Maan (douwe@pydantic.dev) 29%
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) 34%
pydantic_ai_slim 227 7 healthy Douwe Maan (douwe@pydantic.dev) 42%

Files with single ownership

Entirely owned by one person — the most acute knowledge risk.

FileOwnerCoverage
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) 81%
Single-engineer dependency — departure scenarios risk

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.

CRITICAL If David SF (dsfaccini@github) leaves
Files affected
597 / 1181
Orphan files
603 (51%)
Avg coverage loss
50%
Most-affected services
  • tests 499/724 files, 513 orphan, 69% avg loss
  • pydantic_ai_slim 53/227 files, 50 orphan, 22% avg loss
  • docs 17/122 files, 17 orphan, 13% avg loss
CRITICAL If Douwe Maan (douwe@pydantic.dev) leaves
Files affected
228 / 1181
Orphan files
225 (19%)
Avg coverage loss
19%
Most-affected services
  • pydantic_ai_slim 102/227 files, 105 orphan, 42% avg loss
  • tests 77/724 files, 80 orphan, 11% avg loss
  • docs 35/122 files, 27 orphan, 29% avg loss
CRITICAL If David Montague (dmontagu@github) leaves
Files affected
113 / 1181
Orphan files
147 (12%)
Avg coverage loss
9%
Most-affected services
  • tests 30/724 files, 46 orphan, 4% avg loss
  • docs 35/122 files, 36 orphan, 28% avg loss
  • pydantic_graph 34/35 files, 32 orphan, 95% avg loss
Knowledge decay — top concerns healthy

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.

FileTop owner Days since touch Decay score Risk 90-day projection
pydantic_ai_slim/pydantic_ai/agent/__init__.py Aditya Vardhan (adtyavrdhn@github) 7 58% high 88%
pydantic_ai_slim/pydantic_ai/models/instrumented.py Douwe Maan (douwe@pydantic.dev) 7 54% high 85%
pydantic_ai_slim/pydantic_ai/messages.py Aditya Vardhan (adtyavrdhn@github) 5 45% medium 76%
pydantic_ai_slim/pydantic_ai/_utils.py Douwe Maan (douwe@pydantic.dev) 8 42% medium 71%
pydantic_ai_slim/pydantic_ai/__init__.py Aditya Vardhan (adtyavrdhn@github) 13 31% medium 59%
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/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%
pydantic_ai_slim/pydantic_ai/native_tools/__init__.py Douwe Maan (douwe@pydantic.dev) 8 5% low 35%
Review depth — review lineage healthy

Review data fetched from GitHub (50 PRs analyzed). A rubber-stamp ratio is the share of approvals on a file that arrived without a single review comment. Reviewer diversity measures whether several people share the review load.

Files with highest rubber-stamp ratio

No rubber-stamp patterns detected.

Files with lowest reviewer diversity

File Reviewers Reviews Diversity
pydantic_ai_slim/pydantic_ai/capabilities/native_or_local.py 4 109 20%
pydantic_ai_slim/pydantic_ai/_instrumentation.py 3 28 30%
pydantic_ai_slim/pydantic_ai/output.py 3 26 32%
pydantic_ai_slim/pydantic_ai/models/instrumented.py 3 31 32%
pydantic_ai_slim/pydantic_ai/capabilities/__init__.py 6 120 34%
pydantic_ai_slim/pydantic_ai/_run_context.py 4 128 39%
pydantic_ai_slim/pydantic_ai/capabilities/abstract.py 4 128 39%
pydantic_ai_slim/pydantic_ai/capabilities/wrapper.py 4 128 39%
pydantic_ai_slim/pydantic_ai/__init__.py 5 140 40%
pydantic_ai_slim/pydantic_ai/durable_exec/temporal/_run_context.py 3 19 41%
Correction load — files with a bugfix tail healthy

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
AI-readable context — operational docs coverage risk

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) 20%
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%