Skip to content

docs: agent/crawler readiness — llms.txt 404s in production, sitemap lacks lastmod, no robots.txt #1615

Description

@EdwardLien0426

Problem Statement

AI assistants and their crawlers currently see a stale, partial version of the docs site:

  • docs.rocketride.org/llms.txt returns 404 in production even though the generator (packages/docs/scripts/lib/llms.js, wired into docs:build as gather → index → compile) already exists in-tree. Production appears to have been last deployed before it landed.
  • docs.rocketride.org/sitemap.xml has 162 URLs and zero <lastmod> entries, so crawlers cannot tell what changed. Observed crawler caches of RocketRide properties run 2–3 months stale (e.g. cached GitHub metadata showed 2.0k stars vs 5.1k live).
  • There is no robots.txt, so AI crawler access is undeclared.

This hurts AI/answer-engine visibility of the docs at exactly the moment developers evaluate tools through AI assistants.

Proposed Solution

Verified locally with a full gather → index → docusaurus build run (Docusaurus 3.8.1; built site served and probed):

  1. Add packages/docs/static/robots.txt (allow-only: GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot, Bingbot, …) + a .gitignore exception, and preserve it in clearGeneratedStatic() (today anything in static/ except .gitkeep/img/ is wiped on every gather).
  2. docusaurus.config.ts: add showLastUpdateTime: true and a sitemap block (lastmod: 'date', drop meaningless changefreq/priority) — both required for <lastmod> emission.
  3. gather.js: stamp each staged page's front matter with last_update: {date} from the SOURCE file's last git commit. The assembled content tree under BUILD_ROOT is not git-tracked, so without this the sitemap gets zero dates even with (2) — verified 0/162 without, 159/162 with (the 3 undated are generated pages with no git source).
  4. Redeploy docs — this alone ships the already-implemented /llms.txt, /llms-full.txt, /nodes catalog and per-page .md siblings.

CI note: the docs build job needs git history for real dates (fetch-depth: 0); a shallow clone collapses every date to the clone day.

PR with all of the above incoming (branch docs/RR-<this issue>-agent-readiness).

Alternatives Considered

  • Hand-maintained llms.txt: rejected — the in-tree generator already produces a better one; it just is not deployed.
  • Symlink gather mode for git dates: tested, does not work (git only sees tracked paths).
  • Post-build sitemap rewriting: works but is a hack compared to front-matter stamping at the source.

Affected Modules

  • server (C++ engine)
  • client-typescript
  • client-python
  • client-mcp
  • nodes (pipeline)
  • ai
  • chat-ui
  • dropper-ui
  • vscode
  • tika

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNew feature or enhancement

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions