Notation: this repo's issue sanitizer strips angle brackets and decodes HTML numeric character references, including inside code fences, so neither appears anywhere below.
Found during the #207 third-consumer sweep. Deliberately not fixed there — #207's surface was apps/docs/app/[lang]/docs/[[...slug]]/page.tsx, and this lives in apps/docs/app/llms.txt/route.ts.
What happens
/llms.txt states two rules, and nothing in the file scopes the first one to English. Composing them — which is exactly what a machine reader is meant to do with an llms.txt — yields a URL that 404s.
Rule 1, first paragraph of the served file:
Every page below is also available as Markdown by appending `.mdx` to its URL
(for example `https://docs.objectos.ai/docs/quickstart.mdx`)
Rule 2, the "Other Languages" section at the end of the same file:
Every page above is also published under a locale prefix — for example
`https://docs.objectos.ai/zh-Hans/docs/quickstart`. Available locales:
`zh-Hans`, `ja`, `de`, `es`, `fr`, `ko`.
"Every page below" in rule 1 and "every page above" in rule 2 name the same 79 bullets. So the file asserts that those pages have locale-prefixed URLs, and that appending .mdx to a page's URL gives you its Markdown. It never says the .mdx form is English-only.
Measured
Against next start on a production build. Read off the served /llms.txt, not off the source; /llms.txt is byte-identical here to main (14557 bytes) because #207 does not touch this route.
| composed URL |
answers |
/docs/quickstart.mdx |
200 text/markdown |
/zh-Hans/docs/quickstart.mdx |
404 |
/ja/docs/architecture.mdx |
404 |
/de/docs/quickstart.mdx |
404 |
The only sentence in the file containing the word "English" is about content provenance and fallback — "English is the source of truth; a page with no translation yet falls back to English" — not about the .mdx surface.
Why this is not closed by #207
#207 repaired the two in-page controls: they now emit the locale-independent .mdx URL, so every rendered link on every locale resolves 200. This one is not a rendered link. It is an instruction in a machine-facing file, and it survives that fix untouched.
It fails the same way and just as silently:
- No gate reads it.
check-locale-surface.mjs compares page titles across artifacts; it has no notion of URL composition, and it passes today.
- The consumer is an AI agent, which will report only that it could not read the page.
- The audience is precisely the one this surface exists for —
llms.txt is the AI-facing half of the site.
A second trace, same belief
apps/docs/app/llms-full.txt/route.ts line 20 carries a comment asserting the opposite of what the routing does:
The locale text stays reachable per page through the `.mdx` rewrite and the
locale URLs announced at the end of `llms.txt`.
Measured: no locale text is reachable through the .mdx rewrite at all. app/llms.mdx/docs/[[...slug]]/route.ts calls source.getPage(slug) with no language argument, so the default language is the only thing that route can serve, and it prerenders 79 bodies — one per English page, not 553. That comment looks like the belief that produced the llms.txt wording, so it is worth correcting in the same change rather than separately.
Direction (not adjudicated)
The underlying policy question is already settled and is not reopened here: the machine-facing markdown surface is English-only (AGENTS.md rule 1, enforced by check-locale-surface.mjs), and #207 was adjudicated to conform to it rather than reverse it.
So the repair is a wording one — make rule 1's scope explicit, so the file says the .mdx form is served in English for every page whatever locale prefix the page URL carries. The exact phrasing is an authoring call, which is why this is filed rather than patched: a silent rewording of a machine-facing contract file deserves its own review.
Filed unassigned for triage.
Generated by Claude Code
Notation: this repo's issue sanitizer strips angle brackets and decodes HTML numeric character references, including inside code fences, so neither appears anywhere below.
Found during the #207 third-consumer sweep. Deliberately not fixed there — #207's surface was
apps/docs/app/[lang]/docs/[[...slug]]/page.tsx, and this lives inapps/docs/app/llms.txt/route.ts.What happens
/llms.txtstates two rules, and nothing in the file scopes the first one to English. Composing them — which is exactly what a machine reader is meant to do with anllms.txt— yields a URL that 404s.Rule 1, first paragraph of the served file:
Rule 2, the "Other Languages" section at the end of the same file:
"Every page below" in rule 1 and "every page above" in rule 2 name the same 79 bullets. So the file asserts that those pages have locale-prefixed URLs, and that appending
.mdxto a page's URL gives you its Markdown. It never says the.mdxform is English-only.Measured
Against
next starton a production build. Read off the served/llms.txt, not off the source;/llms.txtis byte-identical here to main (14557 bytes) because #207 does not touch this route./docs/quickstart.mdxtext/markdown/zh-Hans/docs/quickstart.mdx/ja/docs/architecture.mdx/de/docs/quickstart.mdxThe only sentence in the file containing the word "English" is about content provenance and fallback — "English is the source of truth; a page with no translation yet falls back to English" — not about the
.mdxsurface.Why this is not closed by #207
#207 repaired the two in-page controls: they now emit the locale-independent
.mdxURL, so every rendered link on every locale resolves 200. This one is not a rendered link. It is an instruction in a machine-facing file, and it survives that fix untouched.It fails the same way and just as silently:
check-locale-surface.mjscompares page titles across artifacts; it has no notion of URL composition, and it passes today.llms.txtis the AI-facing half of the site.A second trace, same belief
apps/docs/app/llms-full.txt/route.tsline 20 carries a comment asserting the opposite of what the routing does:Measured: no locale text is reachable through the
.mdxrewrite at all.app/llms.mdx/docs/[[...slug]]/route.tscallssource.getPage(slug)with no language argument, so the default language is the only thing that route can serve, and it prerenders 79 bodies — one per English page, not 553. That comment looks like the belief that produced thellms.txtwording, so it is worth correcting in the same change rather than separately.Direction (not adjudicated)
The underlying policy question is already settled and is not reopened here: the machine-facing markdown surface is English-only (AGENTS.md rule 1, enforced by
check-locale-surface.mjs), and #207 was adjudicated to conform to it rather than reverse it.So the repair is a wording one — make rule 1's scope explicit, so the file says the
.mdxform is served in English for every page whatever locale prefix the page URL carries. The exact phrasing is an authoring call, which is why this is filed rather than patched: a silent rewording of a machine-facing contract file deserves its own review.Filed unassigned for triage.
Generated by Claude Code