Skip to content

docs(blog): publish 'The Ontology Is the Software', give the blog its entry points, bridge the 2024 posts - #21843

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-21838-ontology-blog-post
Oct 5, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-21838-ontology-blog-post

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #21838

Clause-②: no

Docs only. Publishes the maintainer-approved essay on the blog, gives the blog its entry points (shared nav, home closing card, README), and bridges the two 2024 posts with one editor's note each. packages/** is untouched.

What changed

Part A, the post. content/blog/the-ontology-is-the-software.mdx is the card's fenced block, byte-exact: sha256 e760438e91b318fd854606ecb897c06b841c3af3c864846671bc8dfdb697631c for the card extract, the container copy and the committed blob, all three equal. MDX compiled as-is, so the copy has no edits (no compiler message to report). date: 2026-10-05 is kept. If this lands on a later day, the card says to set date to the landing day so the index order and datePublished stay honest.

Part C, the 2024 posts. metadata-driven-architecture.mdx and protocol-first-development.mdx each get one italic editor's note as the first body paragraph, right after the frontmatter. The text is the card's Part C, verbatim (checked as an exact line match against the card). It is one added line per file, in the blank-line gap that was already there. Nothing else in either post changes.

Part B1, shared nav. apps/docs/lib/layout.shared.tsx adds links: [{ text: 'Blog', url: '/blog', active: 'nested-url' }] to baseOptions(). I read the shape from the installed fumadocs-ui 16.14.4 dist/layouts/shared/index.d.ts: BaseLayoutProps.links is LinkItemType[], and MainItemType needs text and url, with active one of url, nested-url or none. Four layouts spread baseOptions():

  • DocsLayout (app/[lang]/docs/layout.tsx, sidebar menu items)
  • HomeLayout on the home page
  • HomeLayout in both branches of the blog route (index and post), header nav items

Because the home page uses the shared header, the hero button row is unchanged.

Part B2, home closing card. apps/docs/app/[lang]/page.tsx: the external "Read why" anchor becomes Read the long form: followed by a next/link to /blog/the-ontology-is-the-software, with the essay title as the link text. The slogan and the positioning sentence are unchanged. The home page no longer links the external post (0 occurrences in the built en.html).

Part B3, README. The "Read why" link under "You own it" now targets https://objectstack.ai/blog/the-ontology-is-the-software. That one line is the only README change.

Verification (every reading below is at HEAD 92eda4bd)

  • Docs build. Ran pnpm --filter @objectstack/docs build through the shared verify lock: VERDICT command-exit 0. The route list includes /en/blog/the-ontology-is-the-software. Before it, the dependency closure was built (pnpm --filter '@objectstack/docs^...' build, VERDICT 0). The tree was clean afterwards, so the build's gen:schema / gen:docs steps wrote nothing tracked.
  • Rendered output. I served the build with next start on a random high port (since stopped):
    • /blog answers 200, and the post cards come in this order: The Ontology Is the Software, The Constraint Isn't Typing Speed..., Protocol-First Development..., The Architecture of Metadata-Driven Systems...
    • The post page has one h1 and seven h2, and its JSON-LD carries datePublished 2026-10-05T00:00:00.000Z.
    • In the prerendered HTML, a href="/blog" Blog anchor appears in the header of en.html and of each post page, and in the sidebar of a docs page.
    • The essay link appears in en.html and in each 2024 post.
  • Typecheck. pnpm --filter @objectstack/docs typecheck exits 0. tsc --noEmit --listFiles lists both touched TSX files among 1252.
  • eslint, narrowed to the two touched TSX files, with the three pieces of evidence:
    1. Population, read from eslint's own config through ESLint.calculateConfigForFile / isPathIgnored: both files are in the linted population (not ignored), with 3 enabled rules each (no-restricted-imports, verify-stand-in/no-asserted-driver-argument, comment-swallow/no-code-inside-block-comment).
    2. File count, read from --format json: 2 files, 0 errors, 0 warnings, exit 0 (eslint v10.11.0, --no-inline-config).
    3. Invariance: the config sets no parserOptions.project and no projectService (read back as null for both files), so type-aware linting is off and per-file verdicts cannot move for untouched files. The README and MDX files are outside eslint's files globs.
  • Gates. node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 32 commands (24 by path, 8 whole-tree), and the dispatch named 8 more doc gates. All 40 exit 0.
    • Three of them first exited 3 (PREREQUISITE NOT MET, @objectstack/lint / @objectstack/formula not built). That is not a measurement. All three exit 0 after turbo run build --filter=@objectstack/formula --filter=@objectstack/lint.
    • --ran reconciliation: 32 derived famil(ies) accounted for — 32 run, 0 NOT-MEASURED (a DERIVED zero — all 32 recorded an exit code and none of them is 3).
  • Readings the card asked for:
    • check:published-readme-links: 221 outbound link(s) across 101 published markdown file(s): 0 root-relative, 0 non-canonical origin(s), 27 docs-site page(s) resolved (0 via redirect), 1 anchor(s) verified, 144/144 relative target(s) found in the tree. It is green, and the link was not rewritten. See the first acceptance note for what this green does not cover.
    • check:docs-audit-scope: 198 hand-written doc(s), in sync with content/docs/. It did not ask for a blog entry, so scripts/docs-audit/handwritten-docs.json is untouched.
    • check-doc-frontmatter: content/blog (blogSchema, floor 1): 4 page(s) parse, and tags is an array of strings on all 4.

Acceptance notes

  • The README blog link is not checked by check:published-readme-links. The gate classifies a path on the canonical host outside /docs as docs-host-other and does not resolve it, by design: its self-test pins "A3 SILENT on the canonical host outside /docs". So its green is not evidence about the README blog link. The target's existence is shown instead by the build's route list and the 200 above. The live URL answers only once the docs site deploys from main with this change.
  • Two code comments still count three blog posts. The scripts/check-doc-frontmatter.mjs header says content/blog "holds 3 pages today". The blog route's postGraph comment says the Organization author is right for "all three current posts". Both still hold in substance: the floor is 1, not a ratchet, and all four posts are by ObjectStack Team. It is prose drift only and is left untouched here.
  • Changeset: none, label skip-changeset. packages/** has 0 changed paths, @objectstack/docs is private: true, the root package is private, and no package copies the root README into its tarball.

Generated by Claude Code

claude added 3 commits October 5, 2026 07:39
The long form of the project's positioning sentence, landed byte-exact
from the maintainer-approved copy.

Claude-Session: https://claude.ai/code/session_011hRnra93sK5Q2gTYYTbdJR
Co-authored-by: Claude <noreply@anthropic.com>
One italic editor's note as the first body paragraph of each, pointing
at The Ontology Is the Software; the rest of both posts is unchanged.

Claude-Session: https://claude.ai/code/session_011hRnra93sK5Q2gTYYTbdJR
Co-authored-by: Claude <noreply@anthropic.com>
- shared nav: a Blog link in baseOptions(), which DocsLayout and every
  HomeLayout (home page, blog index, blog posts) spread
- home closing card: point at /blog/the-ontology-is-the-software instead
  of the external post
- README "You own it": the Read why link targets the new essay

Claude-Session: https://claude.ai/code/session_011hRnra93sK5Q2gTYYTbdJR
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added the size/m label Oct 5, 2026
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 5, 2026
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Oct 5, 2026
@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review October 5, 2026 08:12
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Oct 5, 2026
Merged via the queue into main with commit 5b2d189 Oct 5, 2026
37 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-21838-ontology-blog-post branch October 5, 2026 08:44
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/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants