llms.txt corrections, llms-full.txt, robots.txt, IndexNow, redirect map (CI-10, CI-19) - #11
Open
zolizoli wants to merge 1 commit into
Open
llms.txt corrections, llms-full.txt, robots.txt, IndexNow, redirect map (CI-10, CI-19)#11zolizoli wants to merge 1 commit into
zolizoli wants to merge 1 commit into
Conversation
The file was good — better than most on the open web — which is exactly the problem with the parts that had drifted. Assistants quote it directly. corvus is the dangerous one. It was listed as v1.0.0 in a format identical to the five packages that do have releases, and pypi.org/project/corvus belongs to an unrelated WebSocket library someone else published in 2020. The version string is gone (there is no release to version), the entry carries a `no_pypi` flag, and every surface that renders it now says so in as many words. Three other versions were stale against PyPI: chronowords 0.2.0 → 0.3.0, kenon 0.1.0 → 0.1.2, keyflux 0.1.2 → 0.2.0. All five corrections are one edit to PACKAGES, which llms.txt, the portfolio cards and the schema all read. The audit also reported saphes missing from /packages.html with corvus in its place. It is not — the page lists all six. The real inconsistency was that the page showed no versions at all while llms.txt showed six, and PR 3 already fixed that by rendering the page's schema from the same list. llms-full.txt is new, and makes good on what llms.txt claims: that the essays argue through visualisations and the rendered HTML understates them. Fourteen thousand words — every essay and project's prose, extracted from the published HTML by pelican/prose.py so no markup and no inlined `const DATA` payload reaches it. Sections appear once each; the Nagel essay is listed in both APORIA and PROJECTS and is emitted once. Felsőzsolca is held out and says so under a "Not included here" heading. The page describes itself as internal working material and whether it belongs in the sitemap at all is still an open question — publishing its full prose to a machine-readable surface would answer that question by default. robots.txt names the crawlers instead of allowing them by omission. The policy is unchanged: everything open. But a missing rule and an explicit Allow read identically to a crawler and not at all identically to a person, and the point of the named blocks is that the decision is now on the record and reversible in one place. Both llms files are pointed at from there. IndexNow: key file committed, and a job that fires after deploy-pages and reads the URLs back off the live sitemaps — so it can only ever submit what actually published. A failed ping logs but does not fail a deploy that already succeeded. Bing matters here beyond its own traffic; that index backs ChatGPT search and Copilot. docs/redirects.md is documentation, not configuration: GitHub Pages cannot 301, so the seven Cloudflare rules are written to be pasted verbatim the moment DNS moves. Rules 2–4 are marked PROVISIONAL in the file — they assume WordPress still serves those taxonomy paths, and a redirect into a 404 gains nothing. Dated posts go to the subdomain and never to the homepage. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Aug 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #10 → #9. Review those first.
The dangerous one first
llms.txtlisted corvus at v1.0.0, formatted identically to the five packages that do have PyPI releases.pypi.org/project/corvusis an unrelated WebSocket library published by someone else in 2020. An assistant reading that file would tell somebody topip install corvus.Fixed at the source: the version string is gone (there is no release to version), the entry carries a
no_pypiflag, and every surface that renders it now says so explicitly —llms.txt,llms-full.txt,/packages.html, and the schema, which emits nodownloadUrland nosoftwareVersionfor it.Version corrections
All in
PACKAGES(pelicanconf.py), the single list thatllms.txt, the portfolio cards and the package schema all read:Premise correction: the audit reported
saphesmissing from/packages.htmlwithcorvuslisted instead. It is not — the page lists all six, and always did. The real inconsistency was that the page showed no versions whilellms.txtshowed six; PR #10 already resolved that by rendering the page's schema fromPACKAGES.On generating versions from a live PyPI lookup at build time: not done, deliberately. It puts a network call on the critical path of every deploy and a PyPI outage becomes a failed build.
PACKAGESstays the single source; the version check belongs in the CI linter, where drift is reported and cannot break a deploy.llms-full.txt (new)
~14,000 words — the full prose of every Aporia essay, every project microsite, and the package descriptions, in one plain-text file. This makes good on what
llms.txtalready claims: that the essays argue through visualisations and the rendered HTML understates them.pelican/prose.py(doctested) from the published HTML, so no markup and no inlinedconst DATApayload reaches the output — verified:grep -c "const DATA\|<div\|<script"→ 0.TEMPLATE_PAGES, so neitherbuild.shnordeploy.ymlneeded a new step.APORIAandPROJECTSand is emitted once.TODO-DOImarkers throughout, plusdatePublishedper essay.llms.txtandrobots.txt./felsozsolca/is held out, under a visible "Not included here" heading naming it. The page describes itself as internal working material ("Ez belső anyag"), and whether it belongs in the sitemap at all is on your deferred list — publishing its full prose to a new machine-readable surface would settle that question by default. One flag inPROJECTSreverses it.robots.txt
Explicit named allow blocks for GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, Claude-User, Claude-SearchBot, PerplexityBot, Google-Extended, Applebot-Extended, CCBot, Bingbot, Amazonbot, meta-externalagent, plus Googlebot and Applebot, keeping the global
Allow: /.The policy is unchanged — everything stays open. The point is that a missing rule and an explicit
Allowread identically to a crawler and not at all identically to a person; the decision is now on the record and reversible in one place. Bothllmsfiles are pointed at (necessarily in a comment — they are crawlable files, not directives).IndexNow
Key file committed at the repo root and shipped by the deploy workflow. A new
indexnowjob runs afterdeploy-pagesand reads the URL list back off the live sitemaps, so it can only ever submit what actually published. A failed ping logs loudly but does not fail a deploy that already succeeded. The payload construction was dry-run locally against the built sitemaps: 38 URLs, valid JSON.docs/redirects.md
Documentation, not configuration — GitHub Pages cannot 301. Seven rules (of Cloudflare Free's ten) in Single Redirect wildcard syntax, ready to paste the moment DNS moves.
/category/*,/tag/*,/author/*) are marked[PROVISIONAL]with a visible warning: they assume WordPress still serves those paths, and a redirect into a 404 gains nothing./or/blog/(soft-404 risk noted inline)./hu/pair, with a note to delete the interim meta-refresh stubs from PR Language, /hu/ retirement, sitemap hygiene, canonicals (CI-08, CI-02, CI-05, CI-06) #9 once the rules are live so there is one redirect rather than a 301 into a refresh./hu/rolunk/dropped — it never existed in this repo.Verification
prose.pydoctests pass;npm test20/20.softwareVersionand nodownloadUrl.llms.txtrenders six one-line package entries (a whitespace-control bug that joined them onto one line was caught and fixed).TODO-DOImarkers across the two llms files — all intentional.