Network-wide Link Inventory v1.4 is a dataset in the Crimson Hexagonal Archive, by Lee Sharks (2026-07-08). The deposited body is structured data rather than prose. A description composed from a reading of the work belongs to the description/wiki review stream.
Lee Sharks ยท 2026-07-08 ยท Dataset
AXN: AXN:0431.ARCHIVAL.๐๐ธ๏ธ๐บ๏ธ๐๐โ๏ธ
A per-link database of every anchored hyperlink across all 34 substantive repositories in the leesharks000 network. Each row records the anchor text, current href, ~200 characters of prose before and after the link, ~1,600 characters of enclosing prose context, extracted DOI/AXN references from anchor text and href and context, a resolver lookup for any extracted DOI (returning the current live target, the resolver's stored title, the mapping type), a prose-vs-resolver-title jaccard similarity, the best-matching alternative record in the alexanarch registry, and a verdict flag classifying the link into review categories.
This dataset was assembled to answer a question that the earlier link-scan (a 440,012-row token count across the same 34 repos) could not: not just how many links there are, but whether each link is right โ whether the href points at what the anchor text says, whether the DOI in the anchor text matches the descriptive prose around it, and whether the resolver's current mapping for that DOI is consistent with everything the surrounding context asserts.
v1.1 (2026-07-08): 106 fixes applied since v1.0 โ 69 sentinel-0 hrefs corrected to specific records via unique-substring anchor-text matching against the registry; 34 href_disagrees_resolver corrections where the anchor uniquely matched a different record than the current href; 3 ambiguous fixes with high-confidence matches. Verdict deltas: href_wrong_target 258โ208 (-50); ambiguous 11163โ11149 (-14); consistent 1286โ1303 (+17); href_disagrees_resolver 365โ428 (+63, false-positive increase โ sentinel-0 fixes now expose disagreement with resolver's DOI-based guess for nearby DOIs, though anchor-text-based fixes are semantically correct).
The immediate use is a review pile for correcting broken and mismatched links across sites โ with corrections applied preferentially to the resolver map at its source of truth (deposit #4 v3.11.0+) rather than to individual site source files, so that the sovereign resolver behavior propagates automatically to every site link via the /go/?doi=X endpoint.
Companion to DOI Resolution Index v3.11.0 (#4) โ this inventory audits the resolver's real-world usage across the site network. Complements Zenodotus' Book-Burning (#1) which established the sovereign-succession framework, and DOIs โ Permanent Identifiers (#868) which characterizes the substrate-wide breakdown of DOI persistence.
Files live at /data/link-inventory/:
inventory-summary.json (2 KB, compact JSON) โ scan metadata, verdict distribution, per-repo counts, regeneration pointers.link-review-actionable.csv (~370 KB, 623 rows) โ links with high-confidence mismatch verdicts: href_wrong_target (sentinel /s/records/0/), href_disagrees_resolver (href points at record N; resolver says the DOI-in-text should go to M โ N), href_disagrees_text (DOI in text โ DOI in href), and likely_prose_mismatch (prose context very different from what resolver says the DOI is, AND a much better alt record exists).link-review-ambiguous.csv (~600 KB, 830 rows) โ DOI-carrying ambiguous cases with a promising alternative record match (best_alt_jaccard โฅ 0.15).Regeneration scripts live at /scripts/link-inventory/:
build_link_review_db.py โ the scanner; produces the SQLite links database from a local mirror of the 34 repos.enrich_link_review_db.py โ the enrichment pass; joins each link against the current DOI resolution index and computes jaccards, best-alt matches, and verdicts.build_review_report.py โ exports the review artifacts (summary MD, actionable CSV, ambiguous CSV).rewrite_links.py / rewrite_anchor_text.py โ the two rewriters used in the Phase 10 pass (URL-form and semantic anchor-text).The 81 MB SQLite database itself (links_review.db) is not shipped in-repo; it is regenerable from the scripts against any local clone of the network. Scan takes about 32 seconds on a modern laptop.
links table)| column | type | description |
|---|---|---|
id | INTEGER PK | auto-incrementing row id |
repo | TEXT | repository name |
file_path | TEXT | path relative to repo root |
line_no | INTEGER | line number of the link's opening character |
link_form | TEXT | html_a (HTML <a href="X">TEXT</a>) or md (markdown [TEXT](X)) |
anchor_text | TEXT | visible link text (HTML tags stripped, whitespace normalized) |
href | TEXT | the URL the link currently points at |
context_before / context_after | TEXT | ~200 chars of plain-text prose immediately adjacent |
context_prose | TEXT | up to ~1,600 chars of broader enclosing prose |
doi_in_text / doi_in_href / doi_in_context | TEXT | first 10.5281/zenodo.N DOI found in each field |
axn_in_text / axn_in_href | TEXT | first AXN:HEX four-hex identifier found in each field |
href_record_num | INTEGER | record number if href matches alexanarch.org/s/records/N/ |
resolver_doi | TEXT | the DOI used for resolution (priority: text โ href โ context) |
resolver_target | TEXT | current live target URL per the api map |
resolver_title | TEXT | resolver's stored title for that DOI |
resolver_record | INTEGER | alexanarch record number if resolver_target is a record page |
resolver_mapping_type | TEXT | direct, direct_verified, title_match_repoint, no_alexanarch_equivalent, etc. |
prose_vs_resolver_jaccard | REAL | token-set jaccard between (anchor+prose) and the actual target record's title |
best_alt_record | INTEGER | registry record whose title matches (anchor+prose) better than resolver's |
best_alt_title / best_alt_jaccard | TEXT / REAL | title and score of that alternative |
verdict | TEXT | see next section |
verdict_confidence | TEXT | high, medium, low |
| verdict | meaning | how to act on it |
|---|---|---|
no_id | no DOI/AXN anywhere in text, href, or context โ navigation, image, external, non-citation | ignore for review; not a citation link |
ambiguous | DOI present but prose context matches resolver's target title only weakly | filter to best_alt_jaccard โฅ 0.15 for the promising subset; review individually |
consistent | DOI in text matches DOI in href, or link is internally coherent with resolver | no action needed |
href_disagrees_resolver | href points at record N; resolver says the DOI in text should go to M โ N | fix href to the resolver's target via /go/?doi=X OR correct the resolver mapping if wrong |
external_ok | external doi.org / zenodo.org / non-network site link | passthrough; may still be dead but not the resolver's concern |
href_wrong_target | href points at /s/records/0/ sentinel (the "no target known" placeholder) | always wrong; fix href to correct record via DOI-in-text (/go/?doi=X) or descriptive prose match |
unknown | edge case, unclassified | investigate individually |
likely_prose_mismatch | prose describes work X but linked DOI resolves to a very different work, AND a much better alt record exists in registry | probable DOI-in-source-is-wrong OR resolver-mapping-is-wrong; needs editorial judgment |
ok | strong jaccard between prose and resolver's target title | no action needed |
| verdict | count | share |
|---|---|---|
no_id | 45,925 | 77.3% |
ambiguous | 11,163 | 18.8% |
consistent | 1,286 | 2.2% |
href_disagrees_resolver | 365 | 0.6% |
external_ok | 317 | 0.5% |
href_wrong_target | 258 | 0.4% |
unknown | 115 | 0.2% |
ok | 2 | 0.003% |
| total | 59,431 | 100.0% |
| repo | actionable mismatches |
|---|---|
semanticphysics-site | 516 |
semantic-economy | 25 |
leesharks.com | 21 |
lee-sharks-corporate | 13 |
spxi-dev | 12 |
provenance-erasure | 9 |
restoredacademy | 7 |
laborvector | 6 |
living-architecture-lab | 4 |
lee-sharks-consulting | 3 |
maryleelabor-org | 2 |
machinemediation-org | 2 |
watergiraffe-org | 1 |
vpcor-org | 1 |
lagrange-observatory | 1 |
Note: this is the inventory as of the anchor-text rewrite pass of 2026-07-08. Repos with rewrites still-not-deployed carry undercounted href_wrong_target counts (fixed in git but not yet in production).
MANUS flagged lagrange-observatory/index.html:250 โ anchor text DOI 10.5281/zenodo.20675438 next to prose about "Generative Monoculture: Model Collapse in Code" โ but that DOI resolves to record #198 "The Self-Audit Module Dissolved". The actual "Generative Monoculture" work is at record #199 (Talos Morrow, June 13 2026) or the re-mint at #1023 (EA-UMBML-MONOCULTURE-01).
The row in the inventory:
anchor_text = "DOI 10.5281/zenodo.20675438"href = "https://www.alexanarch.org/go/?doi=10.5281/zenodo.20675438"doi_in_text = "10.5281/zenodo.20675438"resolver_target = "https://alexanarch.org/s/records/198/"resolver_title = "The Self-Audit Module Dissolved..."prose_vs_resolver_jaccard = 0.043best_alt_record = #188 (adjacent link in source, not the correct match โ the true match at #199/#1023 has weaker jaccard because the scanner captured trailing prose after the h3 title rather than the h3 itself)verdict = ambiguousTwo possible root causes and neither can be picked automatically: (1) the DOI in the lagrange source is wrong for the work described (someone typed the wrong DOI when the page was authored), or (2) the resolver's 20675438 โ #198 mapping is wrong (Phase 6/7 fuzzy title matching landed the wrong record). The inventory surfaces the ambiguity; a MANUS-level decision picks which side is authoritative.
The inventory regenerates cleanly from source at any point โ no in-place mutation, no state drift. Standard iteration cycle:
1. Re-run build_link_review_db.py after each rewrite pass or resolver update to refresh the row set.
2. Re-run enrich_link_review_db.py after any resolver-map correction to refresh verdict flags.
3. Re-run build_review_report.py to regenerate the CSV exports.
4. Bump this deposit's minor version and update the summary JSON with new counts.
The versioned snapshots in /data/link-inventory/ are the durable record of network-wide link integrity at each rescan point; they can be diffed across time to show which repos are converging toward zero mismatches.
โฎ = 1