content(ja): name the semantic-layer category セマンティックレイヤー, not the calque 意味層 - #196
Conversation
Japanese data-engineering writing names this category セマンティックレイヤー. 意味層 appears in that same writing as an inline gloss explaining the term, not as the term itself — and a word used to explain the term is not the term. That matters for retrieval, which is what the tier-2 tag vocabulary is for: セマンティックレイヤー is the string a Japanese reader would actually type. Swept content/blog/**/index.ja.mdx (38 files): 18 occurrences of 意味層, all of them the category used as a NAME — every one corresponds to a literal "semantic layer" in the English source. Zero glosses, so the "leave the glosses" half of the ruling had no instances to apply to. frontmatter 3 -> 0 body 15 -> 0 セマンティックレイヤー: 0 -> 18 (frontmatter 3, body 15) Frontmatter title and description are included because the ruling rests on retrieval and tags are not routes on this site — <title> and the meta description are where a Japanese query lands. The post slug is locale-independent, so no URL changes. 16 of the 17 changed lines are a pure 意味層 -> セマンティックレイヤー substitution. The one non-mechanical line renders "semantic-layer tool" as セマンティックレイヤーのツール rather than the 13-kana run セマンティックレイヤーツール. Left untouched: セマンティック層 in give-your-agent-rules-for-governable-apps (the issue itself records it as acceptable field usage, not the calque under this card), フォワードデプロイドエンジニア (per the ruling), and ビジネス意味層 in src/components/ArticleList.astro (site chrome, outside the declared surface — reported instead). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
|
PATCH ROUND — one line, and the reason it is needed is another gap in my scoping. The work itself is accepted and verified independently. The sweep reproduces exactly. Across all 38 Your name-vs-gloss claim checks out from a direction you didn't use. You verified each occurrence against its English source line. I counted the English siblings independently:
One for one, per file. That is as close to proof as this gets: every Japanese occurrence corresponds to a literal semantic layer in the English, so all 18 are the category used as a name and there was never a gloss to preserve. Your point that the 「セマンティックレイヤー(意味層)」 pattern could not have existed — because セマンティックレイヤー occurred zero times before — is right, and declining to mint glosses was right too. Ruling on the call you flagged: confirmed, keep Ruling on What is missing — one line, in a file I never put on your surface. That is the recommended-reading lead on the Japanese blog index — the first Japanese prose a visitor reads on this site. It is the only 意味層 left in the repository, and it is the same term in the same wrong rendering. Two things make it clearly in scope even though my ruling didn't name it. Its English sibling on line 49 reads "why the business semantic layer should be open" — so it is the same category used as a name, by the same test that governed your 18. And the Korean sibling on line 91 already reads 비즈니스 시맨틱 레이어 — the transliteration, not a calque. Japanese is the odd one out in its own table. My claim comment scoped your file surface to What to do:
On Serial constraints: Generated by Claude Code |
…emantic-layer-term
Patch round on #159. The seat's ruling scoped the sweep to content/blog/**/index.ja.mdx plus the #78 vocabulary table, so this string was reported rather than edited in the first pass. The seat has since ruled it in scope, on two pieces of evidence I re-verified here: - Its English sibling (ArticleList.astro:49) reads "why the business semantic layer should be open" — the category used as a NAME, the same test that governed the other 18 occurrences. - Its Korean sibling (line 91) already reads 비즈니스 시맨틱 레이어, the transliteration. Across the eight locale entries, Japanese was the only calque: zh-Hans 业务语义层, zh-Hant 業務語意層, de Business-Semantikschicht, es capa semántica de negocio, fr couche sémantique métier, ko 시맨틱 레이어. This is the recommended-reading lead on /ja/blog/ — the first Japanese prose a visitor to the site reads — and it was the last 意味層 in the repository. grep -rn '意味層' src content scripts -> 1 hit before, 0 after widened to the whole repo (minus node_modules/dist/.git) -> same 1, now 0 ビジネスセマンティックレイヤー matches what this branch already uses in ai-ontology-open-protocol/index.ja.mdx for the same English phrase. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr
|
ACCEPT. The agent was killed by a container restart before it could report, so this is a review of the branch alone — The sweep is now complete across both places this site keeps translated text.
The Japanese blog index now leads with 「まずはここから:ビジネスセマンティックレイヤーがなぜオープンであるべきか…」, and the diff on Union with current Browser pass, and the width concern was the right thing to check. The chip went from 3 characters to 11 and the lead paragraph grew by 8, so the question was real. Four pages × two viewports (1440×900 and 390×844): page-level horizontal overflow 0px on all eight, Confirming both calls you raised, for the record:
And the thing you proved that I only asserted. I ruled from usage that 意味層 appears as a gloss rather than a name. You checked all 18 against their English source lines; I checked the count from the other side and got 5/9/3 English against 5/9/3 Japanese, one for one per file. Every occurrence corresponds to a literal semantic layer. There was no gloss to preserve, and declining to mint one was right — the ruling protected a pattern that did not exist yet, and inventing instances of it would have been editorial matter nobody asked for. Landing on Generated by Claude Code |
Fixes #159
Fixes #197
Japanese data-engineering writing names this category
セマンティックレイヤー.意味層appears in that same writing as an inline gloss explaining the term — and a word used to explain the term is not the term. That matters for retrieval, which is what #78's tier-2 vocabulary exists for:セマンティックレイヤーis the string a Japanese reader would actually type.Sweep — measured, not assumed, and now covering
src/as well ascontent/grep -rn '意味層' src content scripts, and widened to the whole repo (minusnode_modules/dist/.git) — both return the same set:content/blog/**/index.ja.mdx— frontmattercontent/blog/**/index.ja.mdx— bodysrc/components/ArticleList.astro— ja UI string意味層in the repositoryセマンティックレイヤーContent side, per file —
enterprise-ontology-race-open-vs-closed(fm 3, body 7),ai-ontology-open-protocol(body 5),why-ai-agent-pilots-fail-four-layers(body 3). The card named one file; the sweep found three, plus the UI string.Name vs gloss: 19 names, 0 glosses
Every occurrence is the category used as a name; there are no glosses. Each was checked against its English source line, and all correspond to a literal "semantic layer" there (
Looker semantic layer,three expose their semantic layer,a governed business semantic layer,① Semantic layer,why the business semantic layer should be open). The seat verified this independently from the other direction by counting English siblings per file — en 5 / 9 / 3 against ja 5 / 9 / 3, one for one.Since
セマンティックレイヤーoccurred zero times in the repo before this change, the 「セマンティックレイヤー(意味層)」 pattern the ruling protects did not exist anywhere, so the "leave the glosses" half had no instances to apply to. No gloss was minted either — the ruling said leave glosses, not create them.src/components/ArticleList.astro:67— the blog-index leadThe recommended-reading lead on
/ja/blog/, the first Japanese prose a visitor to the site reads. Reported rather than edited in the first pass because it sits outside the file surface the ruling scoped; ruled in scope since, on evidence re-verified here:en(line 49)zh-Hanszh-HantdeesfrkojabeforejaafterThe English sibling is the category used as a name — the same test that governed the other 18. Korean already used the transliteration. Japanese was the only calque in its own table.
Frontmatter
titleanddescription— confirmed by the seatFlagged in the first round because the ruling named neither. Confirmed: keep them. #78 measured that tags are not routes here and rank nothing — three consumers, all unlinked — so if this card rests on retrieval,
<title>/og:title/ the meta description are the retrieval surface, and fixing the body while leaving業務意味層in the title would fix everything except the part that matters.updateddeliberately not set, also confirmed: AGENTS.md scopes it to a substantive revision — new sections, corrected claims, refreshed numbers — and rendering one term correctly is none of the three.topic/audience/date/statusuntouched; the slug is locale-independent, so no URL changes. Lint thresholds re-measured, no new warnings: title 28 → 36 chars (warn >95), description 112 → 120 (warn >230).Diff is mechanical, with one declared exception
Every changed line was checked by re-applying
意味層→セマンティックレイヤーto the removed line and comparing to the added line: 17 of 18 are a pure substitution, including theArticleList.astroline. The one exception renders "semantic-layer tool" asセマンティックレイヤーのツールrather than the 13-kana runセマンティックレイヤーツール. Compounds follow each file's own established style:業務セマンティックレイヤー(kanji + katakana, as in業務プロセス) andビジネスセマンティックレイヤーin the files that already writeビジネスオントロジー/ビジネスオブジェクト.Deliberately left alone
フォワードデプロイドエンジニア— per the ruling. The sweep turned up no contrary evidence: one file, one tag, a transliteration rather than a calque displacing a standard term.セマンティック層(1 occurrence, body ofgive-your-agent-rules-for-governable-apps) — Japanese renders "semantic layer" as 意味層, a literal calque rather than the term the category uses #159 itself records this as acceptable field usage ("overwhelmingly usesセマンティックレイヤー(orセマンティック層)"), so it is not the calque this card rules on. Reported for the seat.zh-Hant— generated; untouched, and the clean tree afterpnpm buildproves it.Gates
All five through the shared lock, each exit captured by redirecting to a file before any pipe, re-run after the patch commit on the merged tree at
901948b(origin/mainc2b3171merged in):os-verify-lock: VERDICT command-exit 0 · held the lock 48s · waited 0s; per-gate exitslint=0 lintpub=0 check=0 build=0 seo=0.git status --porcelainempty afterwards, which also proves the generated zh-Hant is untouched (pnpm buildrunsgen-zh-hantfirst). Control-byte scan of every edited file returned no hits. No changeset: this repo has no.changesetdirectory.Browser pass — measured against a baseline build
For the first round I built
origin/main(435ff61) in a second worktree, served both, and diffed identical measurements at 1440×900 and 390×844 across the post, two topic pages, the ja blog index and the ja glossary page. The patch round re-ran the same pass on the merged tree, with/ja/blog/as a second explicit target.No page-level horizontal overflow anywhere, at either width, before or after:
documentElement.scrollWidth == clientWidthon every page. CLS0.0000. Zero page errors.What actually changed — this is what I saw, not an assertion that nothing moved:
display:nonedisplay:none(unchanged)/ja/blog/lead @1440/ja/blog/lead @390scrollWidth == clientWidth) and never escapes its container (chipRight 1174 < facetsRight 1235). Chips wrap onto a new row cleanly at both widths.display:none, so the widest-chip risk does not exist there at all — card height is identical at 390 (374px before and after). Measured, not inferred from the screenshot.overflow: visible,scrollHeight == clientHeight), nothing escapes the column.ビジネスセマンティックレイ / ヤー. That is browser-default CJK line-breaking and it is pre-existing on this exact paragraph: the baseline screenshot breaksオープ / ンin the same sentence. The change moves where it happens, not whether it happens. The post h1's業 / 務break at 1440 is the same story — the baseline breaks at exactly the same point.One correction to an earlier reading of mine, recorded because it nearly became a bogus finding. A first probe suggested the article's wide comparison table overflowed unscrollably at 390 — it measured the wrong element (the
.prosewrapper)..prose tableis itself the scroll container and works:display:block,overflow-x:auto,scrollWidth 1904vsclientWidth 358,scrollLeftreaches 1546 (= 1904 − 358), pagescrollWidthstays 390. The patch-round probe confirms it structurally — every past-viewport element on that page reportsinsideScroller: true. Unchanged by this PR either way, and no defect.Screenshots reviewed at both widths for both builds and for the patch round.
🤖 Generated with Claude Code
https://claude.ai/code/session_01FeA1nwBz1ohH65dvffUGKr