Lossless Changelog
fleet

llms.txt + llms-full.txt land on the ai-labs splash — the convention is now fully met

Two endpoint files, three markdown templates, one small provenance helper, and a `<link rel="alternate" type="text/markdown">` in BaseLayout — agentic crawlers can now ingest the entire pseudomonorepo (parent + three children, 11 changelog entries, 29 context-v notes) in one fetch instead of crawling 44 HTML pages.

Michael StatonMusic Editoraugmented with Claude Code on Claude Opus 4.7 (1M context)

Why Care?

The two child splashes (context-vigilance-kit and memopop-ai) have been serving /llms.txt and /llms-full.txt since last week. The parent ai-labs splash hadn't — agents and LLM crawlers that landed here had to scrape 44 HTML pages and reconstruct the content. That's the failure mode the llms.txt convention exists to solve. This entry fixes the gap.

After this, https://lossless-group.github.io/lossless-ai-labs/llms.txt returns a 17 KB markdown link-index (grouped by source peer — ai-labs, context-vigilance-kit, memopop-ai, dididecks-ai), and /llms-full.txt returns the entire 425 KB corpus concatenated. Both are static, built at deploy time, no runtime cost.

This was the last open item on the maintain-splash-pages skill's acceptance checklist. The ai-labs splash now meets the full convention.

What's New?

  • splash/src/pages/llms.txt.ts — APIRoute that reads the changelog and context-v collections, groups by from (the peer-slug provenance field), sorts changelog by date desc and context-v by title alpha, emits a markdown link index. Ported from memopop-ai/apps/memopop-site/.

  • splash/src/pages/llms-full.txt.ts — same shape but emits every entry's full body, each preceded by a metadata header (title, kind, source peer, source path, canonical URL, last-modified date) and separated by ---.

  • splash/src/llms/llms.md + llms-full.md — prose templates. The endpoints are dumb assemblers that load these via Vite's ?raw import and substitute {{TOKEN}} placeholders. All voice and framing lives here, not in TypeScript — same source-of-truth discipline as the context-vigilance-kit and memopop ports.

  • splash/src/llms/README.md — documents the token vocabulary and the three per-splash adaptations made during the port (URL shape uses entry.id directly, not synthesized from + slug; SITE_NAME not SITE_DEFAULTS.name; readProvenance fallback default is ai-labs).

  • splash/src/lib/provenance.ts — small helper module (readProvenance, pickDate, pickString) used by both endpoints to read the from/from_path fields and pick the best-available date across legacy and current frontmatter shapes. Ported from memopop, with fallbackFrom defaulting to ai-labs.

  • splash/src/components/MetaTags.astro — adds <link rel="alternate" type="text/markdown" href="…llms.txt" title="llms.txt for this site"> in <head>. Any agentic tool that looks there discovers the markdown corpus without parsing robots.txt first.

Two adaptations versus the memopop port

Both small, both worth noting for the next splash that cribs from these:

  1. URL shape uses entry.id directly. Memopop synthesized the URL as ${root}/changelog/${from}/${slug}/ where slug was entry.id with the from/ prefix stripped. That works for memopop where every entry has a peer prefix. But ai-labs has parent-authored entries (the changelog at the ai-labs root, where from === 'ai-labs' by fallback) whose entry.id is bare — 2026-05-11_01, not ai-labs/2026-05-11_01. Synthesizing ${from}/${slug} for those entries would prepend a phantom ai-labs/ to URLs that don't have it. The fix: just use ${root}/changelog/${entry.id}/ directly — which is exactly what the detail-page route already does (href={${base}changelog/${entry.id}/} in [...slug].astro). The shapes match, no synthesis needed.

  2. SITE_NAME not SITE_DEFAULTS.name. Memopop's seo.ts exports a SITE_DEFAULTS object; ai-labs's exports SITE_NAME as a top-level constant. The endpoint import was changed accordingly. No behavior difference, just naming.

Both adaptations are documented in the new src/llms/README.md so the next splash that ports this won't have to rediscover them.

Verification

After build (pnpm build from splash/):

$ ls -lh dist/llms*.txt
.rw-r--r--@ 17K  dist/llms.txt
.rw-r--r--@ 425K dist/llms-full.txt

$ head -5 dist/llms.txt
# Lossless AI-Labs
> Lossless AI-Labs
Applied AI testbed becoming home to core products. …

$ grep -oE 'rel="alternate"[^>]*' dist/index.html
rel="alternate" type="text/markdown" href="/lossless-ai-labs/llms.txt" title="llms.txt for this site"

$ grep -c "llms.txt" dist/sitemap-0.xml
0

The sitemap filter (already in place since the splash was scaffolded) correctly excludes both endpoints from sitemap-0.xml — search engines don't get them; only LLM-facing discovery does. The rel="alternate" link is in every page's <head> for tools that look there.

What this enables

  • One-fetch ingest. A model with web tool use can fetch /llms-full.txt and have the entire ai-labs corpus in context — every changelog entry, every spec, every plan, every reminder, with provenance preserved per-entry.

  • Lighter-weight scan. Tools that want a link index can fetch /llms.txt (17 KB) and resolve specific entries on demand.

  • Cross-peer scoping. Both files group by from, so an agent interested in just memopop's corner can ignore the rest. The from: provenance is the load-bearing facet across the whole splash — search, sort, and now LLM ingest all respect it.

Convention status

✅ splash/, astro.config, package, tsconfig
✅ Clean build from a fresh clone
✅ Pages workflow + deploy via master
✅ Pagefind search + /search route
✅ SortControls on both list pages
✅ /llms.txt + /llms-full.txt + rel="alternate" hint  (this entry)
✅ OG card sextet, sitemap, robots.txt, mode toggle

Every line on the maintain-splash-pages acceptance checklist is now met. Outstanding non-skill items: the main-vs-master deployment-branch protection rule asymmetry (cosmetic), the ImageKit content-negotiation question on the OG image bytes (worth verifying with an iMessage unfurl test).

  • The reference impls cribbed from: ai-labs/memopop-ai/apps/memopop-site/src/pages/llms*.txt.ts (closer fit — two collections) and ai-labs/context-vigilance-kit/splash/src/pages/llms*.txt.ts (single-collection variant). The README in splash/src/llms/ documents the per-splash adaptations.

  • The spec: llmstxt.org.

  • Previous entry: 2026-05-12_01.md (SortControls — the second-to-last convention item).