Repository navigation
docs(site): give the core narrative a front door on the home page — a Why link in the hero, '00 · The idea', a Why nav entry, the closing card trimmed - #22974
Merged
Conversation
A Why link in the hero under the four-promise paragraph, a new '00 · The idea' section between the hero and '01 · The loop' (the OntologyRunsFigure, the three sentences, a 'Read the essay' link), a Why entry before Blog in the top nav, and the closing card without its long-form sentence. The essay's route is one constant, ESSAY_URL, in lib/layout.shared.tsx, read by the nav and by the page. Claude-Session: https://claude.ai/code/session_011hRnra93sK5Q2gTYYTbdJR Co-authored-by: Claude <noreply@anthropic.com>
Blog posts are prerendered under the internal /en/blog/ path, so the nav's active match never sees /blog/<slug> there; the comment no longer says the Why entry lights on its own page. Claude-Session: https://claude.ai/code/session_011hRnra93sK5Q2gTYYTbdJR Co-authored-by: Claude <noreply@anthropic.com>
The h2 is now the deck's thesis title, "An ontology written clearly enough runs directly", in place of the essay's section heading "Why code recedes", which reads without context to a visitor who has not opened the essay yet. Claude-Session: https://claude.ai/code/session_011hRnra93sK5Q2gTYYTbdJR Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Oct 12, 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.
Fixes #22951
Clause-②: no
The home page now opens the same door the README and the docs do: the essay "The Ontology Is the Software" is reachable from the hero, from a new section 00 and from the top nav. The closing card loses the long-form line that used to be the page's only link to it.
What changed
Two files:
apps/docs/app/[lang]/page.tsxandapps/docs/lib/layout.shared.tsx.00 · The idea, between the hero and01 · The loop, in the 01–03 section shape (border-trule, eyebrow in--l-mono,h2in--l-display). It holdsOntologyRunsFigureimported from@/components/figures(not copied), the three sentences verbatim from the ruling, and "Read the essay" with the exact class string of "Browse the full vocabulary in the docs". Existing section numbers are unchanged.{ text: 'Why', url: ESSAY_URL, active: 'url' }beforeBloginbaseOptions().links.The essay's route is one constant,
ESSAY_URLinlib/layout.shared.tsx, read by the nav entry and by both page links.HOME_TITLE,HOME_DESCRIPTIONand the metadata blocks are unchanged.Measured in the browser
Production build served by
next start, preinstalled Chromium,/in both themes at 1280 px and 390 px. In each of the four runs thehtmlelement carried the expected theme class, andscrollWidthequalled the viewport (no horizontal scroll). Light and dark measured the same sizes; the rows below differ only by width unless a theme is named.00 · The idea, then01 · The loopWhyBlogat x = 222; 14 px, same colour asBlogWhyat y = 72 aboveBlogat y = 108; 16 px, foreground colourGates
All at head
011e8dfeunless stated.pnpm turbo run build --filter=@objectstack/docs --concurrency=2, thebuildCommandinapps/docs/vercel.jsonthat CI's Build Docs job runs, underos-verify-lock:Tasks: 2 successful, 2 total,Cached: 0 cached, 2 total,.next/BUILD_IDpresent,VERDICT command-exit 0.pnpm --filter @objectstack/docs buildunderos-verify-lock, atba94665b(the one later commit removes a single comment line):VERDICT command-exit 0. The tree was still clean after the generators ran.pnpm --filter @objectstack/docs typecheck:VERDICT command-exit 0;tsc --listFilesOnlylists both touched files.node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(change set from the merge base, 2 paths): 27 commands, every one run, every one exit 0. The--ranreconciliation reads27 derived, 27 run, 0 NOT-MEASURED, 0 UNRUN, with an exit code recorded for each.isPathIgnoredis false, and they fall under the config's**/*.{ts,tsx,…}block. With--format jsonit reports 2 files, 0 errors, 0 warnings. Neither file getsparserOptions.projectorprojectService, so linting is untyped and per-file, and this diff cannot change any other file's result. The repo-widepnpm lintstays with CI.dispatch-gateslists outside its 27.Changeset: none.
apps/docsisprivate: true, and nothing underpackages/**,content/**,README.mdorapps/docs/public/**changed (git diff --name-onlyover those paths from the base: 0), so this PR takesskip-changeset.Acceptance notes
h2slot but not its text. "Why code recedes" is the essay's heading for the section this figure sits in, and the caption is the essay's own caption for this figure, verbatim. Either is a one-line swap if a different wording is wanted.content/).Figuregives itsfigcaptiononlytext-center italicand takes spacing, size and colour from the blog'sprosewrapper. The home page has no prose wrapper, so section 00's wrapper sets them ([&_figcaption]:mt-3,text-sm,text-fd-muted-foreground). Any later consumer outsideprosewill meet the same thing.Whydoes not highlight on the essay's own page, andBlogdoes not highlight on any post. Both configs are as ruled; the cause predates this PR. Blog posts are prerendered under the internal/en/blog/SLUGpath (.next/prerender-manifest.json). The nav's active check compares eachurlagainst that path during prerender, and hydration does not repaint the attribute./blogitself renders on demand and does highlightBlog. Measured on this branch's build:data-activeisfalsefor both items on/blog/the-ontology-is-the-softwareand on/blog/context-window-is-the-constraint, andtrueforBlogon/blog. TheBlogline is unchanged by this diff. Reported to the seat; nothing is changed here.WhyandBlog(the fumadocs nav token; dark 9.0:1). Unchanged here.Generated by Claude Code