Found in the adversarial review of #120.
Heatmap and chord record lists link CommunityMech's four isolate records to pages that return 404
Where: scripts/fleet/build_subsets.py:85
The census globs data/isolates/*.yaml for CommunityMech (roots.py:30), but build_subsets.py turns every CommunityMech record into CommunityMech/communities/<basename>.html. The published site has no page for any of the four isolate records. The regenerated subset indexes still link to all four, while the cell panel promises 'Each link opens the record page' (_fleet/fleet_fragment.html:854, mechs.md:867). The PR body itself says the site does not list these four records. This bug already exists on main, and the PR regenerated the same broken links rather than introducing them.
Failure scenario. On /mechs/ a reader clicks the CommunityMech x NCBITaxon heatmap cell (or CHEBI, ENVO or GO). The panel's first four links (Aspergillus Indium..., BioModels ... Kefir Rothia Model, Chromobacterium Gold Biocyanidation, Methylobacterium REE...) all return 404. The GTDB cell has three of them at positions 0-2. Chord term lists hold another 84 links to these records across 8 edge files (e.g. CommunityMech--CultureMech.json, HabitatMech--CommunityMech.json).
Evidence. curl -sL -o /dev/null -w '%{http_code}' https://culturebotai.github.io/CommunityMech/communities/{Aspergillus_Indium_LED_Recovery,BioModels_MODEL2204300002_Kefir_Rothia_Model,Chromobacterium_Gold_Biocyanidation,Methylobacterium_REE_Ewaste_Platform}.html -> 404 404 404 404. An offline check of every CommunityMech link slug in assets/fleet/{cells,edges}/*.json against git ls-tree 8505a56 docs/communities/ (422 pages) finds exactly these 4 missing, with index positions [0,1,2,3] in cells CommunityMech--{CHEBI,ENVO,GO,NCBITaxon}.json and [0,1,2] in --GTDB.json (the same positions on main). The records sit in data/isolates/ at the pin, and the site has no isolates/ page path (also 404).
Verifier (confirmed, medium). I reproduced every part of the finding myself.
What is broken
- The census includes CommunityMech's data/isolates/*.yaml records.
- slug_for() maps every CommunityMech record to communities/.html, but the pinned CommunityMech tree has no HTML for the four isolate records. The live site returns 404 for all four, and a normal record returns 200.
- In the five largest CommunityMech heatmap cells, these dead links are the first ones listed (positions 0-3, or 0-2 for GTDB). The panel text promises that each link opens the record page.
- 84 more dead links sit in chord term lists across 8 edge files.
- The PR body itself admits that the site does not list these records.
Not a regression
main has exactly the same dead links at the same positions, so this PR regenerated them rather than introducing them.
Severity: medium
- Why not higher: no figure on the page is wrong, and only 4 of 426 records are affected.
- Why not lower: the dead links are the first thing a reader clicks in the most prominent cells (e.g. NCBITaxon, 426 records), and they contradict the panel's promise. That is user-facing and misleading.
For triage: the fix is small and could land here or be filed separately. No existing issue tracks it; #85 is about checkout lag, not links. The suggested fixes work. The isolate YAMLs exist at the pin, so a GitHub blob link at 8505a56 would resolve. Dropping the link for data/isolates paths also works, since scan() already counts a None slug as nolink.
Suggested fix. In link_for(), return None (no link) for CommunityMech paths under data/isolates/, or link them to the GitHub blob at the pin. Alternatively, have the panel say that isolate records have no page.
Found in the adversarial review of #120.
Heatmap and chord record lists link CommunityMech's four isolate records to pages that return 404
Where:
scripts/fleet/build_subsets.py:85The census globs
data/isolates/*.yamlfor CommunityMech (roots.py:30), but build_subsets.py turns every CommunityMech record intoCommunityMech/communities/<basename>.html. The published site has no page for any of the four isolate records. The regenerated subset indexes still link to all four, while the cell panel promises 'Each link opens the record page' (_fleet/fleet_fragment.html:854, mechs.md:867). The PR body itself says the site does not list these four records. This bug already exists on main, and the PR regenerated the same broken links rather than introducing them.Failure scenario. On /mechs/ a reader clicks the CommunityMech x NCBITaxon heatmap cell (or CHEBI, ENVO or GO). The panel's first four links (Aspergillus Indium..., BioModels ... Kefir Rothia Model, Chromobacterium Gold Biocyanidation, Methylobacterium REE...) all return 404. The GTDB cell has three of them at positions 0-2. Chord term lists hold another 84 links to these records across 8 edge files (e.g. CommunityMech--CultureMech.json, HabitatMech--CommunityMech.json).
Evidence. curl -sL -o /dev/null -w '%{http_code}' https://culturebotai.github.io/CommunityMech/communities/{Aspergillus_Indium_LED_Recovery,BioModels_MODEL2204300002_Kefir_Rothia_Model,Chromobacterium_Gold_Biocyanidation,Methylobacterium_REE_Ewaste_Platform}.html -> 404 404 404 404. An offline check of every CommunityMech link slug in assets/fleet/{cells,edges}/*.json against
git ls-tree 8505a56 docs/communities/(422 pages) finds exactly these 4 missing, with index positions [0,1,2,3] in cells CommunityMech--{CHEBI,ENVO,GO,NCBITaxon}.json and [0,1,2] in --GTDB.json (the same positions on main). The records sit in data/isolates/ at the pin, and the site has no isolates/ page path (also 404).Verifier (confirmed, medium). I reproduced every part of the finding myself.
What is broken
Not a regression
main has exactly the same dead links at the same positions, so this PR regenerated them rather than introducing them.
Severity: medium
For triage: the fix is small and could land here or be filed separately. No existing issue tracks it; #85 is about checkout lag, not links. The suggested fixes work. The isolate YAMLs exist at the pin, so a GitHub blob link at 8505a56 would resolve. Dropping the link for data/isolates paths also works, since scan() already counts a None slug as nolink.
Suggested fix. In link_for(), return None (no link) for CommunityMech paths under data/isolates/, or link them to the GitHub blob at the pin. Alternatively, have the panel say that isolate records have no page.