From 59a4e2ff3fe06237d390b1975bb22c47efb5d316 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 7 Oct 2026 03:47:16 +0000 Subject: [PATCH 1/3] site(blog): put the pillar post in the Recommended grid and retitle its lead The four pinned "start here" picks now open with the pillar definition post (what-does-the-ontology-is-the-software-mean, slot 2026-10-08) as the feature card, keep enterprise-ontology-race-open-vs-closed (the "you own it" pick; #228 retitles it to the business definition layer), metadata-not-code- generation and vibe-coding-technical-debt-2026, and drop natural-language- to-app-metadata: its actor is an "AI Builder" turning a business user's sentence into pages, where the positioning's writer is a coding agent pointed at ObjectStack, and it is the least cross-linked of the four (3 inbound files). The recommendedLead in all eight locales now describes those four posts in the canonical vocabulary: what "the ontology is the software" means, whose the business definition layer should be, and why AI-built apps stay governable as metadata rather than generated code. The "business semantic layer should be open" clause is retired (the README: the ontology is not a semantic layer over your existing systems). zh-Hant is the repo's s2t of the zh-Hans string. Each lead stays within +25 characters of today's, so the section head keeps its two desktop lines. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr --- src/components/ArticleList.astro | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/components/ArticleList.astro b/src/components/ArticleList.astro index ed52e9e..9c2ba4c 100644 --- a/src/components/ArticleList.astro +++ b/src/components/ArticleList.astro @@ -24,11 +24,16 @@ const heroLead = activeTerm ? termDescription(activeTerm, locale) : t.articlesLead(shown.length); +// The four "start here" picks; the first renders as the feature card. The +// `recommendedLead` strings below describe exactly these four, in this order: +// the pillar definition post, who owns the business definition layer, and the +// two posts on why AI-built apps are governable and changeable only as +// metadata rather than generated code. const featuredSlugs = [ + 'what-does-the-ontology-is-the-software-mean', 'enterprise-ontology-race-open-vs-closed', 'metadata-not-code-generation', 'vibe-coding-technical-debt-2026', - 'natural-language-to-app-metadata', ]; const isBlogHome = !activeTerm; const featured = isBlogHome @@ -46,49 +51,49 @@ const homeCopy: Record = { en: { recommendedTitle: 'Recommended', - recommendedLead: 'Start here: why the business semantic layer should be open, why AI-native software is metadata rather than generated code, and how one request becomes a governable app.', + recommendedLead: 'Start here: what "the ontology is the software" means, why the business definition layer should be yours, and why AI-built apps stay governable as metadata rather than generated code.', latestTitle: 'Latest Articles', latestLead: 'New writing from the ObjectOS blog.', }, 'zh-Hans': { recommendedTitle: '推荐文章', - recommendedLead: '从这几篇读起:业务语义层为什么该开放、AI 原生应用为什么是元数据而非代码,以及如何用一句话搭出可治理的应用。', + recommendedLead: '从这几篇读起:「本体即软件」是什么意思、业务定义层为什么该归你所有,以及 AI 生成的应用为什么要是元数据而非代码才能保持可治理、可改动。', latestTitle: '最新文章', latestLead: '按发布时间浏览 ObjectOS 的最新内容。', }, 'zh-Hant': { recommendedTitle: '推薦文章', - recommendedLead: '從這幾篇讀起:業務語意層為什麼該開放、AI 原生應用為什麼是後設資料而非程式碼,以及如何用一句話搭出可治理的應用。', + recommendedLead: '從這幾篇讀起:「本體即軟體」是什麼意思、業務定義層為什麼該歸你所有,以及 AI 生成的應用為什麼要是後設資料而非程式碼才能保持可治理、可改動。', latestTitle: '最新文章', latestLead: '按發布時間瀏覽 ObjectOS 的最新內容。', }, ja: { recommendedTitle: 'おすすめ記事', - recommendedLead: 'まずはここから:ビジネスセマンティックレイヤーがなぜオープンであるべきか、AI-native の核心がなぜコードではなくメタデータなのか、そして一文がどうガバナンス可能なアプリになるのか。', + recommendedLead: 'まずはここから:「オントロジーがソフトウェアである」とはどういう意味か、業務定義層はなぜ自分で所有すべきか、そして AI が作ったアプリはなぜコードではなくメタデータであればガバナンス可能で後から変えられるのか。', latestTitle: '最新記事', latestLead: 'ObjectOS ブログの新着記事です。', }, de: { recommendedTitle: 'Empfohlen', - recommendedLead: 'Hier anfangen: warum die Business-Semantikschicht offen sein sollte, warum AI-native Metadaten statt Code bedeutet, und wie aus einem Satz eine governte Anwendung wird.', + recommendedLead: 'Hier anfangen: was „Die Ontologie ist die Software“ bedeutet, wem die Geschäftsdefinitionsschicht gehören sollte, und warum AI-gebaute Apps als Metadaten statt Code steuerbar und änderbar bleiben.', latestTitle: 'Neueste Artikel', latestLead: 'Aktuelle Beiträge aus dem ObjectOS Blog.', }, es: { recommendedTitle: 'Recomendados', - recommendedLead: 'Empieza por aquí: por qué la capa semántica de negocio debe ser abierta, por qué AI-native significa metadatos en vez de código, y cómo una frase se convierte en una app gobernable.', + recommendedLead: 'Empieza por aquí: qué significa «La ontología es el software», de quién debe ser la capa de definición del negocio, y por qué las apps hechas con AI siguen siendo gobernables como metadatos y no como código.', latestTitle: 'Artículos Recientes', latestLead: 'Publicaciones recientes del blog de ObjectOS.', }, fr: { recommendedTitle: 'Recommandés', - recommendedLead: 'Commencez ici : pourquoi la couche sémantique métier doit être ouverte, pourquoi l’AI-native, c’est des métadonnées plutôt que du code, et comment une phrase devient une application gouvernable.', + recommendedLead: 'Commencez ici : ce que signifie « L’ontologie est le logiciel », à qui doit appartenir la couche de définition du métier, et pourquoi les apps écrites par l’AI restent gouvernables en métadonnées plutôt qu’en code.', latestTitle: 'Articles Récents', latestLead: 'Les dernières publications du blog ObjectOS.', }, ko: { recommendedTitle: '추천 글', - recommendedLead: '여기서부터: 비즈니스 시맨틱 레이어가 왜 열려 있어야 하는지, AI-native가 왜 코드가 아니라 메타데이터인지, 그리고 한 문장이 어떻게 거버넌스 가능한 앱이 되는지.', + recommendedLead: '여기서부터: 「온톨로지가 곧 소프트웨어다」가 무슨 뜻인지, 비즈니스 정의 계층을 왜 당신이 소유해야 하는지, 그리고 AI가 만든 앱이 왜 코드가 아니라 메타데이터여야 거버넌스 가능하고 바꾸기 쉬운지.', latestTitle: '최신 글', latestLead: 'ObjectOS 블로그의 최신 글입니다.', }, From beb41e2dbb1ee9c40112e5276b0b66aea5736b6d Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 7 Oct 2026 03:57:53 +0000 Subject: [PATCH 2/3] site(blog): keep the Recommended lead on today's line count in every locale Measured in the DOM at the six AGENTS.md viewports: the first wording took a third desktop line in ja and an extra phone line in en and zh-Hans. These shorter leads render the same number of lines as today's at every viewport in en, zh-Hans, zh-Hant, ja and ko; de, es and fr keep their two desktop lines and take one more line at 390px, which no wording within today's length avoided. zh-Hant is again the repo's s2t of the zh-Hans string. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr --- src/components/ArticleList.astro | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/components/ArticleList.astro b/src/components/ArticleList.astro index 9c2ba4c..69c8c25 100644 --- a/src/components/ArticleList.astro +++ b/src/components/ArticleList.astro @@ -51,49 +51,49 @@ const homeCopy: Record = { en: { recommendedTitle: 'Recommended', - recommendedLead: 'Start here: what "the ontology is the software" means, why the business definition layer should be yours, and why AI-built apps stay governable as metadata rather than generated code.', + recommendedLead: 'Start here: what "the ontology is the software" means, who should own the business definition layer, and why AI-built apps stay governable as metadata, not generated code.', latestTitle: 'Latest Articles', latestLead: 'New writing from the ObjectOS blog.', }, 'zh-Hans': { recommendedTitle: '推荐文章', - recommendedLead: '从这几篇读起:「本体即软件」是什么意思、业务定义层为什么该归你所有,以及 AI 生成的应用为什么要是元数据而非代码才能保持可治理、可改动。', + recommendedLead: '从这几篇读起:「本体即软件」是什么意思、业务定义层该归谁所有,以及 AI 生成的应用为什么是元数据而非代码才可治理、可改。', latestTitle: '最新文章', latestLead: '按发布时间浏览 ObjectOS 的最新内容。', }, 'zh-Hant': { recommendedTitle: '推薦文章', - recommendedLead: '從這幾篇讀起:「本體即軟體」是什麼意思、業務定義層為什麼該歸你所有,以及 AI 生成的應用為什麼要是後設資料而非程式碼才能保持可治理、可改動。', + recommendedLead: '從這幾篇讀起:「本體即軟體」是什麼意思、業務定義層該歸誰所有,以及 AI 生成的應用為什麼是後設資料而非程式碼才可治理、可改。', latestTitle: '最新文章', latestLead: '按發布時間瀏覽 ObjectOS 的最新內容。', }, ja: { recommendedTitle: 'おすすめ記事', - recommendedLead: 'まずはここから:「オントロジーがソフトウェアである」とはどういう意味か、業務定義層はなぜ自分で所有すべきか、そして AI が作ったアプリはなぜコードではなくメタデータであればガバナンス可能で後から変えられるのか。', + recommendedLead: 'まずはここから:「オントロジーがソフトウェアである」とはどういう意味か、業務定義層は誰が所有すべきか、AI が作ったアプリはなぜコードではなくメタデータならガバナンスでき変えられるのか。', latestTitle: '最新記事', latestLead: 'ObjectOS ブログの新着記事です。', }, de: { recommendedTitle: 'Empfohlen', - recommendedLead: 'Hier anfangen: was „Die Ontologie ist die Software“ bedeutet, wem die Geschäftsdefinitionsschicht gehören sollte, und warum AI-gebaute Apps als Metadaten statt Code steuerbar und änderbar bleiben.', + recommendedLead: 'Hier anfangen: was „Die Ontologie ist die Software“ bedeutet, wem die Geschäftsdefinitionsschicht gehören sollte, und warum AI-gebaute Apps als Metadaten statt Code änderbar bleiben.', latestTitle: 'Neueste Artikel', latestLead: 'Aktuelle Beiträge aus dem ObjectOS Blog.', }, es: { recommendedTitle: 'Recomendados', - recommendedLead: 'Empieza por aquí: qué significa «La ontología es el software», de quién debe ser la capa de definición del negocio, y por qué las apps hechas con AI siguen siendo gobernables como metadatos y no como código.', + recommendedLead: 'Empieza por aquí: qué significa «La ontología es el software», de quién debe ser la capa de definición del negocio, y por qué las apps hechas con AI se gobiernan como metadatos, no como código.', latestTitle: 'Artículos Recientes', latestLead: 'Publicaciones recientes del blog de ObjectOS.', }, fr: { recommendedTitle: 'Recommandés', - recommendedLead: 'Commencez ici : ce que signifie « L’ontologie est le logiciel », à qui doit appartenir la couche de définition du métier, et pourquoi les apps écrites par l’AI restent gouvernables en métadonnées plutôt qu’en code.', + recommendedLead: 'Commencez ici : ce que signifie « L’ontologie est le logiciel », à qui doit appartenir la couche de définition du métier, et pourquoi les apps écrites par l’AI restent gouvernables en métadonnées, pas en code.', latestTitle: 'Articles Récents', latestLead: 'Les dernières publications du blog ObjectOS.', }, ko: { recommendedTitle: '추천 글', - recommendedLead: '여기서부터: 「온톨로지가 곧 소프트웨어다」가 무슨 뜻인지, 비즈니스 정의 계층을 왜 당신이 소유해야 하는지, 그리고 AI가 만든 앱이 왜 코드가 아니라 메타데이터여야 거버넌스 가능하고 바꾸기 쉬운지.', + recommendedLead: '여기서부터: 「온톨로지가 곧 소프트웨어다」가 무슨 뜻인지, 비즈니스 정의 계층은 누가 소유해야 하는지, AI가 만든 앱이 왜 코드가 아니라 메타데이터여야 바꿀 수 있는지.', latestTitle: '최신 글', latestLead: 'ObjectOS 블로그의 최신 글입니다.', }, From a9c74f7fb7c57a28bfe24fcde6dde81904a0537c Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 7 Oct 2026 04:15:21 +0000 Subject: [PATCH 3/3] =?UTF-8?q?site(blog):=20align=20the=20Articles=20hero?= =?UTF-8?q?=20lead=20in=20six=20locales;=20close=20the=20641=E2=80=93900px?= =?UTF-8?q?=20grid=20hole?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit articlesLead (src/lib/i18n.ts) said "AI-native software" in zh-Hans, ja, de, es, fr and ko while en already read "executable business ontologies, runtime governance, and agent-operated applications". The six now carry that sentence with the positioning wave's terms per locale (positioning.ts, post 1, #228); zh-Hant keeps deriving through s2t. Measured in the DOM at eight viewports: every locale stays on one desktop line, and takes at tablet and phone widths the same line counts en's lead already does. The same function feeds the blog index meta description and the RSS channel description. .featured-grid was two columns at 641–900px with the feature spanning the row, so three standard cards left the fourth cell empty. In that range the feature now takes one cell (it is already the stacked card there: ArticleCard drops its side-by-side layout below 1024px) and its thumb takes the standard 16:10, so the four cards fill a 2×2 grid with matching cover heights. One column would stack three oversized cards and break ArticleCard's `sizes` promise that a standard thumb is one of two at this range; a third card spanning both columns reads as a second feature. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr --- src/components/ArticleList.astro | 18 ++++++++++++++++++ src/lib/i18n.ts | 12 ++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/components/ArticleList.astro b/src/components/ArticleList.astro index 69c8c25..3e626f1 100644 --- a/src/components/ArticleList.astro +++ b/src/components/ArticleList.astro @@ -239,6 +239,24 @@ const c = homeCopy[locale]; grid-template-columns: repeat(2, minmax(0, 1fr)); } } + /* 641–900px: the feature takes one cell instead of a row of its own, so the + four cards fill a 2×2 grid; a full-row feature over three standard cards + left the fourth cell empty. At this range the feature is already the + stacked card (ArticleCard drops its side-by-side layout below 1024px), so + it gives up nothing it still had, and its thumb takes the standard 16:10 + here so the two covers in a row are the same height. One column instead + would stack three oversized cards and break ArticleCard's `sizes` promise + that a standard thumb is one of two at this range; a third card spanning + both columns reads as a second feature. `.article-item.feature` outranks + ArticleCard's own `.feature .thumb` rule whatever the bundle order. */ + @media (min-width: 641px) and (max-width: 900px) { + .featured-grid :global(.feature) { + grid-column: auto; + } + .featured-grid :global(.article-item.feature .thumb) { + aspect-ratio: 16 / 10; + } + } @media (max-width: 640px) { .hero { margin-bottom: 1.5rem; diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts index 14948c5..cbbc99a 100644 --- a/src/lib/i18n.ts +++ b/src/lib/i18n.ts @@ -268,7 +268,7 @@ const zhHans: Strings = { all: '首页', audience: '受众', articlesTitle: '文章', - articlesLead: (n) => `${n} 篇关于构建 AI-native 软件的文章。`, + articlesLead: (n) => `${n} 篇关于可执行业务本体、运行时治理与 Agent 操作应用的文章。`, backToList: '全部文章', alsoOn: '同步发布于', references: '参考链接', @@ -328,7 +328,7 @@ const ja: Strings = { all: 'ホーム', audience: '読者', articlesTitle: '記事', - articlesLead: (n) => `AI-native ソフトウェア構築に関する ${n} 本の記事。`, + articlesLead: (n) => `実行可能なビジネスオントロジー、ランタイムガバナンス、エージェントが操作するアプリケーションに関する ${n} 本の記事。`, backToList: 'すべての記事', alsoOn: '同時掲載', references: '参考リンク', @@ -388,7 +388,7 @@ const de: Strings = { all: 'Start', audience: 'Zielgruppe', articlesTitle: 'Artikel', - articlesLead: (n) => `${n} ${n === 1 ? 'Artikel' : 'Artikel'} über den Aufbau AI-nativer Software.`, + articlesLead: (n) => `${n} ${n === 1 ? 'Artikel' : 'Artikel'} über ausführbare Geschäftsontologien, Runtime-Governance und von Agents bediente Anwendungen.`, backToList: 'Alle Artikel', alsoOn: 'Auch veröffentlicht auf', references: 'Referenzen', @@ -448,7 +448,7 @@ const es: Strings = { all: 'Inicio', audience: 'Audiencia', articlesTitle: 'Artículos', - articlesLead: (n) => `${n} ${n === 1 ? 'artículo' : 'artículos'} sobre crear software AI-native.`, + articlesLead: (n) => `${n} ${n === 1 ? 'artículo' : 'artículos'} sobre ontologías de negocio ejecutables, gobernanza del runtime y aplicaciones operadas por agentes.`, backToList: 'Todos los artículos', alsoOn: 'También publicado en', references: 'Referencias', @@ -508,7 +508,7 @@ const fr: Strings = { all: 'Accueil', audience: 'Audience', articlesTitle: 'Articles', - articlesLead: (n) => `${n} ${n === 1 ? 'article' : 'articles'} sur la construction de logiciels AI-native.`, + articlesLead: (n) => `${n} ${n === 1 ? 'article' : 'articles'} sur les ontologies métier exécutables, la gouvernance du runtime et les applications opérées par les agents.`, backToList: 'Tous les articles', alsoOn: 'Également publié sur', references: 'Références', @@ -568,7 +568,7 @@ const ko: Strings = { all: '홈', audience: '대상', articlesTitle: '글', - articlesLead: (n) => `AI-native 소프트웨어 구축에 관한 글 ${n}개.`, + articlesLead: (n) => `실행 가능한 비즈니스 온톨로지, 런타임 거버넌스, 에이전트가 운영하는 애플리케이션에 관한 글 ${n}개.`, backToList: '전체 글', alsoOn: '동시 게시', references: '참고 링크',