The Fantasy Basketball Encyclopedia

Operations

2026-27 Fantasy Basketball Encyclopedia Audit

Structural audit of the season encyclopedia — coverage, frontmatter, and link integrity — plus an explicit statement of what this audit cannot check.

Up: 2026-27 Fantasy Basketball Encyclopedia

Related: Projection engine defects and corrections · 2026-27 fantasy basketball evidence and confidence policy · 2026-27 fantasy basketball player index · 2026-27 NBA fantasy team index · _Progress

Snapshot

Counted 2026-07-18 at 22:28 local. The encyclopedia was being written by another process throughout this audit — the note count rose from 640 to 643 while the checks ran — so every figure here is a point-in-time reading, not a fixed total.

Metric Value
Encyclopedia Markdown notes 643
Player dossiers 555
Expected team desks present 30/30
Files with all required frontmatter keys 643/643
Files using source: llm 643/643
Files with ## Open questions 643/643
External URL occurrences 6147
Wikilink occurrences checked 9524
Vault notes indexed for resolution 2248

The previous version of this note claimed 622 notes and 549 dossiers. Those figures were stale rather than wrong at the time; the encyclopedia has grown past them.

Checked with Data/check_links.py, which extracts <span class="redlink" title="Not in this encyclopedia">Name</span>, <span class="redlink" title="Not in this encyclopedia">Alias</span>, <span class="redlink" title="Not in this encyclopedia">Heading</span>, <span class="redlink" title="Not in this encyclopedia">Alias</span>, <a href="#heading">Heading</a> and !<span class="redlink" title="Not in this encyclopedia">embed</span> forms, strips fenced and inline code first, and resolves each target against every Markdown note in the Rome vault by basename and by vault-relative, encyclopedia-relative, and note-relative path.

Class Count
Wikilinks checked 9524
Broken on the previous pass 131
Repaired in place 131
Broken heading anchors 0
Ambiguous basename links 0
Intentional red links remaining 3

What was broken

The 131 repaired occurrences resolved to 28 distinct broken targets in three families, and all three were invisible to the old checker.

  1. Suffixed surnames — 22 distinct players. Dossier filenames drop the terminal period — Players/BKN/Michael Porter Jr.md — but prose linked <span class="redlink" title="Not in this encyclopedia">Michael Porter Jr.</span> with it. Obsidian does not resolve that. This family was the overwhelming majority of the breakage. Repaired to the mandated path-qualified form, <a href="../players/bkn/michael-porter-jr.html">Michael Porter Jr.</a>, which preserves the rendered text.
  2. Diacritics and punctuation — 5 distinct players. <span class="redlink" title="Not in this encyclopedia">Hugo González</span> → Players/BOS/Hugo Gonzalez, <span class="redlink" title="Not in this encyclopedia">Karim López</span> → Players/MEM/Karim Lopez, <span class="redlink" title="Not in this encyclopedia">Nikola Topić</span> → Players/OKC/Nikola Topic, <span class="redlink" title="Not in this encyclopedia">P.J. Washington</span> → Players/DAL/PJ Washington, and the inverse case <span class="redlink" title="Not in this encyclopedia">Nolan Traore</span> → Players/BKN/Nolan Traoré, where the file carries the accent and the link did not.
  3. Wrong note title — 1 target. <span class="redlink" title="Not in this encyclopedia">Punt strategy in 2026-27</span> now points at the note that actually exists, Punt strategies for nine-category leagues.

No repair was a judgement call: every one of the 28 targets resolved to exactly one note in the vault under case- and diacritic-folded matching, with no ambiguity to break.

Why the previous audit said "None"

Data/audit_encyclopedia.py resolved each link twice: first by exact filename stem, then — on failure — by a case- and diacritic-folded key. A link that failed the exact match but succeeded the folded match was recorded as neither broken nor ambiguous. It was silently dropped.

Every one of the 131 defects above is precisely that shape. Since \(\text{norm}(\texttt{"Michael Porter Jr."}) = \text{norm}(\texttt{"Michael Porter Jr"})\), the fallback matched and the link was counted as fine. The check was not merely lenient: its lenient branch was the branch that every real defect took, which is the worst possible place for a false negative.

The script has been corrected. A link that resolves only after normalization is now reported as broken with a known fix, because that is what it is in Obsidian.

These 3 occurrences point at notes that do not exist and should. They are left in place deliberately — the vault treats a red link as a self-creating TODO, and deleting them would erase the intent.

Wanted note Referenced from
Punt builds and category correlation Strategy/Drafting by slot in snake drafts
Draft-day roster construction 2026-27 Strategy/Positional scarcity and eligibility in 2026-27
Punt build maintenance Strategy/Streaming and in-season roster management

All three are strategy syntheses adjacent to notes that already exist (Punt strategies for nine-category leagues, Category correlations and roster construction, Draft day checklist and decision rules) but are not duplicates of them. Each was left unlinked rather than force-fitted to a near neighbour, since collapsing a wanted synthesis into the closest existing title destroys the request without satisfying it.

Two further red links seen mid-audit — missing player dossiers for Rafael Castro (Bucks) and Isaiah Livers (Suns) — resolved themselves before the final pass when the concurrent writer created those notes. The red-link mechanism worked exactly as intended.

Metadata, coverage, and parse checks

Check Result
Missing team desks None
Metadata issues None
Non-LLM source metadata None
Missing ## Open questions None
Empty files None
Suspicious filenames None
Duplicate normalized player titles None

These "None" results are believable in a way the link result was not: each is a direct property of a single file, not the output of a resolver with a fallback branch.

What this audit cannot detect

This audit checks structure only — that frontmatter keys exist, that files parse, that ## Open questions is present, that wikilinks resolve to real notes. Every one of those is a question about the shape of a file, not about whether anything written in it is true.

It therefore cannot detect semantic or arithmetic defects. A dossier can carry perfect frontmatter, resolve every link, parse cleanly, and state a projection that was never computed from any real input. A ranking table can be internally consistent, correctly formatted, and ordered by a number whose sign is inverted. Nothing in this file would notice.

That is not hypothetical. While this audit was reporting no issues of any kind, the projection engine contained fabricated shot volume — per-game FGA and FTA values invented rather than derived from a minutes-and-rate model — and a sign error that inverted the contribution of turnovers, a category where lower is better, so that the players hurting a roster most were promoted rather than demoted. Both defects survived every check in this file, because both produce structurally flawless notes. See Projection engine defects and corrections for the diagnosis and the repaired outputs.

The general lesson: a green structural audit is evidence that the vault is well-formed, and evidence of nothing else. Numerical claims need a separate check that recomputes them from inputs and compares; factual claims need a source. Treat "all checks passed" here as the beginning of verification, not the end of it.

Reproducing

python3 Data/check_links.py # link report python3 Data/check_links.py --json # machine-readable python3 Data/audit_encyclopedia.py # regenerates this note's structural sections

Note that audit_encyclopedia.py overwrites this file with its generated template. The narrative sections above — the defect analysis, the wanted-notes table, and the limits section — are hand-written and will be lost if it is rerun without first extending the generator to preserve them.

Open questions