Skip to content

Latest commit

 

History

History
63 lines (52 loc) · 4.01 KB

File metadata and controls

63 lines (52 loc) · 4.01 KB

Repo-root and assets/ dead-file audit

Follow-up to the main.ts / v1_action.yml / v3_action.yml / first_interaction_index.js cleanup (#183) - that removal was found by accident, via a CodeQL alert on dead code, not by a deliberate check. This is that deliberate pass: every root-level file and everything in assets/ checked against what .github/workflows/*.yml, profiler.html, index.html, and the explainer pages actually load or invoke.

Repo root

All checked files trace back to a real reference. Two worth calling out explicitly, since they don't look referenced at first glance:

  • explainer.html (singular) - not a leftover. It's a ?slug=-based redirect shim (explainer.html?slug=X -> explainers/X.html) kept for old inbound links/bookmarks that predate the per-slug page structure. noindexed so it doesn't compete with the real pages in search, but still a live entry point - not dead, do not remove.
  • logo.svg - not linked directly from any page's <head>; it's the source asset scripts/generate_favicons.py and scripts/generate_og_images.py regenerate the favicons and OG images from. Referenced by tooling, not by URL.

Everything else (README.md, CHANGELOG.md, CLAUDE.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, METRICS.md, ROADMAP.md, LICENSE, CITATION.cff, Makefile, pyproject.toml, requirements.txt, requirements-lock.txt, robots.txt, sitemap.xml, llms.txt, llms-full.txt, favicon.ico/favicon-16x16.png/favicon-32x32.png/apple-touch-icon.png) is either a standard project file or directly <link>/<meta>-referenced from index.html, profiler.html, and every explainer page - confirmed via grep, not assumed.

assets/

  • explainers-data.js, explainers-data.json, explainers.css, profiler-compare.js, profiler-engine.js, profiler-ui.js, profiler.css - all <script>/<link>-referenced from index.html, profiler.html, and/or the explainer pages.
  • explainers-ui.js - referenced only by index.html (powers the explainer-card grid and its client-side detail view). None of the 60 generated explainer pages load it, so its renderDetailPage/renderMarkdown path is not exercised by any real explainer page.
  • assets/fonts/*.ttf (+ their OFL-*.txt licenses) - all four font files are loaded by scripts/generate_og_images.py, not by any page's CSS - they're inputs to the OG-image generation pipeline, not a web font stack.
  • assets/og/*.png - one per explainer slug (one per explainers/*.md) plus home.png (index.html's og:image) and profiler.png (profiler.html's). No orphans, no gaps.
  • assets/og-light/*.png - the same set, rendered in the site's light theme instead of dark. Generated by the same scripts/generate_og_images.py pass as assets/og/. Referenced as a second og:image on every page (index.html, profiler.html, every explainer, via build_explainers.py's PAGE_TEMPLATE) alongside the dark one - OG's protocol has no prefers-color-scheme equivalent, so this doesn't switch per viewer theme, it just offers a consuming platform (e.g. Facebook's share composer) a second image to pick from. twitter:image stays dark-only, since Twitter Cards support exactly one image.

scripts/

Not in this issue's stated scope (repo root + assets/), but checked anyway since it's the same question: every script is invoked from somewhere - Makefile, a workflow, CONTRIBUTING.md, or a test harness (scripts/parse-json-js.js and scripts/engine-js.js are only ever invoked via subprocess.run(...) from tests/test_json_edge_cases.py and tests/test_js_parity.py, which is why they don't show up in Makefile/workflow grep). freeze_paper_results.py and render_terminal_png.py are intentionally manual, one-off tools (documented in README.md, not wired into CI) - not dead, just not automated.

Conclusion

No further dead files found. The four removed in #183's original cleanup were the only orphans; this repo's asset graph is otherwise fully connected.