Skip to content

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
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-22951-home-why
Oct 12, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-22951-home-why

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

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.tsx and apps/docs/lib/layout.shared.tsx.

  1. Hero link. Under the four-promise paragraph and above the button row: one text link, "Why the ontology is the software", with the arrow icon the page's other inline links use. No fifth button; the four buttons are untouched.
  2. 00 · The idea, between the hero and 01 · The loop, in the 01–03 section shape (border-t rule, eyebrow in --l-mono, h2 in --l-display). It holds OntologyRunsFigure imported 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.
  3. Top nav. { text: 'Why', url: ESSAY_URL, active: 'url' } before Blog in baseOptions().links.
  4. Closing card. "Read the long form:" and its link are gone; the slogan sentence and the ObjectOS line stay as they were.

The essay's route is one constant, ESSAY_URL in lib/layout.shared.tsx, read by the nav entry and by both page links. HOME_TITLE, HOME_DESCRIPTION and 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 the html element carried the expected theme class, and scrollWidth equalled the viewport (no horizontal scroll). Light and dark measured the same sizes; the rows below differ only by width unless a theme is named.

1280 px 390 px
Hero link 251 × 24 px, centred, 20 px under the paragraph, 33 px above the buttons; 16 px, arrow present 251 × 24 px, centred, same spacing
Hero link contrast light 18.2:1, dark 15.7:1 same
Section order prose paragraph, then 00 · The idea, then 01 · The loop same
Section 00 type eyebrow IBM Plex Mono, rule 1 px solid, h2 Bricolage Grotesque 36 px h2 30 px
Figure wide drawing: SVG 846 × 341 px in an 896 × 391 px plate stacked drawing: SVG 316 × 507 px in a 342 × 533 px plate
Figure in each theme SVG text near-black on the light plate, near-white on the dark one same
Caption 14 px italic, 12 px above, muted, one line two lines
Three sentences three columns, 347 px each, 18 px stacked, 342 px each
Read the essay 121 × 20 px, 14 px, arrow same
Nav Why in the bar at x = 170, before Blog at x = 222; 14 px, same colour as Blog inside Toggle Menu: Why at y = 72 above Blog at y = 108; 16 px, foreground colour
Closing card no "Read the long form", zero links to the essay; its only link is "Try ObjectOS" same

Gates

All at head 011e8dfe unless stated.

  • pnpm turbo run build --filter=@objectstack/docs --concurrency=2, the buildCommand in apps/docs/vercel.json that CI's Build Docs job runs, under os-verify-lock: Tasks: 2 successful, 2 total, Cached: 0 cached, 2 total, .next/BUILD_ID present, VERDICT command-exit 0.
  • pnpm --filter @objectstack/docs build under os-verify-lock, at ba94665b (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 --listFilesOnly lists 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 --ran reconciliation reads 27 derived, 27 run, 0 NOT-MEASURED, 0 UNRUN, with an exit code recorded for each.
  • eslint, narrowed to the two touched files. Both are in the population: isPathIgnored is false, and they fall under the config's **/*.{ts,tsx,…} block. With --format json it reports 2 files, 0 errors, 0 warnings. Neither file gets parserOptions.project or projectService, so linting is untyped and per-file, and this diff cannot change any other file's result. The repo-wide pnpm lint stays with CI.
  • Not measured locally, left to CI: the workspace-wide type-check lanes, and the roster and wide-population families that dispatch-gates lists outside its 27.

Changeset: none. apps/docs is private: true, and nothing under packages/**, content/**, README.md or apps/docs/public/** changed (git diff --name-only over those paths from the base: 0), so this PR takes skip-changeset.

Acceptance notes

  • Section 00's heading and the figure caption are the essay's own words. The ruling named the h2 slot 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.
  • The three sentences are the ruling's, verbatim. They do not appear in the essay's text (zero hits under content/).
  • The home page styles the figure's caption. Figure gives its figcaption only text-center italic and takes spacing, size and colour from the blog's prose wrapper. 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 outside prose will meet the same thing.
  • In the production build, Why does not highlight on the essay's own page, and Blog does not highlight on any post. Both configs are as ruled; the cause predates this PR. Blog posts are prerendered under the internal /en/blog/SLUG path (.next/prerender-manifest.json). The nav's active check compares each url against that path during prerender, and hydration does not repaint the attribute. /blog itself renders on demand and does highlight Blog. Measured on this branch's build: data-active is false for both items on /blog/the-ontology-is-the-software and on /blog/context-window-is-the-constraint, and true for Blog on /blog. The Blog line is unchanged by this diff. Reported to the seat; nothing is changed here.
  • Light-mode nav contrast is 4.35:1 at 14 px for both Why and Blog (the fumadocs nav token; dark 9.0:1). Unchanged here.
  • Screenshots were kept outside the worktree and are not committed.

Generated by Claude Code

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>
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Oct 12, 2026
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 12, 2026
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants