docs: define Studio in the glossary, make the Setup/Studio split canonical - #151

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name
Aug 22, 2026
Merged

docs: define Studio in the glossary, make the Setup/Studio split canonical#151
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Fixes#102

Executes the 2026-08-20 maintainer ruling: option 1 — Studio survives as the named metadata-authoring surface. The product's named places are the unnamed end-user surface, Setup (administration) and Studio (authoring). All three ruled deliverables, and nothing else.

What changed (6 files, +37/-9)

1. resources/glossary.mdx gains a Studio entry in alphabetical position, between Sharing Rule and Surface. It defines the surface — route, gate, what is authored there, how many pillars, and its relation to Setup — instead of describing it. The card's stop condition was explicit about this: a describing-without-deciding entry is how this corpus grew two mutually-referential Console entries (#89). The relation is stated in both directions ("Peer of Setup, not part of it"), so neither entry can be read without the other's boundary.

2. configure/index.mdx promotes the split to a canonical statement. "Permissions are designed in Studio, assigned in Setup" was a blockquote aside above the Setup section; it is now ## Setup and Studio, a section whose body says the sentence is the canonical statement of a split that runs through the whole product, with a table giving both names' route, capability and audience side by side. The original aside's second sentence is kept verbatim underneath. The glossary entry deep-links to the new anchor.

3. The four PR #100 rewrites now name the destination:

FileWasNow
build/data/index.mdx:21**Objects → New Object** → forms**Studio → Objects → New Object** → forms
build/packages.mdx:54**Packages → New Package****Studio → Packages → New Package**
build/agents.mdx:50Or in the UI: **Agents → New Agent**.Or in the UI: **Studio → Agents → New Agent**.
configure/permissions/index.mdx:164"It surfaces as the …""Studio's Access pillar surfaces it as the …"

The last one is pillar-qualified because that is what the sibling page already says (managing-access.mdx:84, "Studio's Access pillar → Explain access") and because it is measurable: PILLAR_FOR_SURFACE_TYPE maps permission to the access pillar.

Measured, not composed — including one correction to the dispatch's assumption

Every product fact asserted here was read off the sibling repos at objectstackorigin/main2866d5f97e and objectuiorigin/main6ff0eb1.

The dispatch assumed Studio is an app at /apps/studio, a syntactic peer of Setup's /apps/setup. It is not. Studio is a dedicated route subtree of the console SPA at /_console/studio/studio, /studio/:packageId, /studio/:packageId/:tab — declared in objectui apps/console/src/App.tsx via studioRoutes, and explicitly outside the /apps/:appName/* mount, as studioEntry.ts states in prose: "today the /studio/* routes sit OUTSIDE the only mount of it (AppContent, which covers /apps/:appName/*)". A STUDIO_APP metadata app does exist (packages/platform-objects/src/apps/studio.app.ts), but packages/apps/studio/src/index.ts records that it is deliberately not default-loaded: "the console ships a dedicated Studio surface at /_console/studio/<pkg>/<pillar>, so Studio no longer needs to exist as a navigable app tile in a stock boot" — and packages/cli/src/commands/serve.ts:2470 and packages/cli/src/adr-0048-app-split.test.ts:13 say the same thing independently.

The consequence the dispatch was guarding against does not occur, which is why this did not stop. The stop condition was that the Surface entry ("There are two, not three") would need a decision this card cannot make. It does not: createConsoleStaticPlugin serves one /_console/* catch-all and every Studio path is a route inside it, so Studio is inside the UI surface, not a third one. Surface is left untouched and stays true; the new Studio entry carries the relation instead ("inside the UI served at /_console/"). Had the entry been written as the assumed /apps/studio, the glossary would have shipped a route that does not resolve.

The rest of the measured basis: the entry gate is studio.access (STUDIO_ENTRY_CAPABILITY, objectui studioEntry.ts:107, an entry-level gate, fail-closed); the four pillars are Data, Automations, Interfaces, Access (StudioDesignSurface.tsx:149); the five metadata kinds Studio creates are package, app, object, flow and permission (CreateItemDialog.tsx header); and scope is one package at a time (/studio/:packageId/:tab).

Sweep result — the dispatch's second assumption is falsified, and not fixed here

The dispatch assumed the four sites above are the only places PR #100 dropped the noun, and asked for a sweep. Answered by diffing PR #100 (git show adbcafc -U0 -- 'content/docs') and classifying every removed Console occurrence, not by enumeration. Five more sites drop a metadata-authoring destination: build/index.mdx:3, :13, :52, and build/automation/flows.mdx:9, :279. build/index.mdx:13 is the sharpest — the same "click-build" row as build/data/index.mdx:21, so after this PR one of the pair names Studio and the other does not.

All five are outside this card's declared six-file surface, so none is touched here. Filed as #148 with the full classification. Everything else PR #100 dropped is the end-user sense of the word and is correctly gone.

Separately filed as #150: reference/cli.mdx:74 documents an os studio command that the CLI does not ship (oclif discovers commands from packages/cli/src/commands/; there is no studio command, and the upstream packages/cli/README.md:45 carries the same stale claim). That line is cited in the card as evidence Studio is live; the ruling is unaffected, since it rests on studio.access and on the shipped /_console/studio surface, both measured above.

Surface discipline

Exactly the six declared files are touched. build/automation/approvals.mdx (queued for #131), configure/notifications.mdx (in flight for #132), build/interface/apps.mdx and configure/permissions/managing-access.mdx (read as the vocabulary model, not rewritten) and every locale sibling are untouched — git diff --name-only is the six.

Gates — all green on 46fc8b0, the tree this PR pushes

GateResult
pnpm install --frozen-lockfileDone in 9.1s
pnpm turbo run type-check --continueTasks: 1 successful, 1 totalcache miss, executing a4d54c7845f5b5ba
pnpm turbo run buildTasks: 1 successful, 1 totalcache miss, executing cc6753e43e7379eb
pnpm turbo run testTasks: 1 successful, 1 total — re-run with --force (cache bypass, force executing) after the first run replayed from the shared worktree cache
check-node-floor.mjs --self-test + checkexit 0; Every declared floor clears what the dependency tree requires
check-translation-ownership.mjsexit 0; This PR touches 0 translation artifact(s) and 6 other file(s)
check-translations.mjs (freshness)✓ translations gate passed — the six English edits report as locale staleness, non-blocking by design
check-translation-output.mjs --self-test + PR-scoped✓ translation output gate passed (138 pre-existing finding(s) reported) — none in the changed files

Both turbo tasks that consume content/docs report cache miss, so the greens were computed on this content rather than replayed from a sibling worktree's tree.

The glossary's /docs/configure#setup-and-studio link was verified against the built output rather than assumed: id="setup-and-studio" appears in apps/docs/.next for the configure page.

No changeset: this repo has no changeset flow. English only; locale siblings left alone per AGENTS.md.


Generated by Claude Code

…nical
Executes the 2026-08-20 maintainer ruling on #102 (option 1: Studio
survives as the named metadata-authoring surface).
- resources/glossary.mdx gains a `Studio` entry in alphabetical position
that DEFINES the surface -- route, gate, what is authored there, and
its relation to Setup -- rather than describing it. Describing without
deciding is how this corpus grew two mutually-referential `Console`
entries (#89), which the card forbids explicitly.
- configure/index.mdx promotes "Permissions are designed in Studio,
assigned in Setup" from a page callout to `## Setup and Studio`: the
canonical statement of the split, with both names' routes,
capabilities and audiences side by side.
- The four PR #100 rewrites that dropped the noun now name Studio as the
destination: build/data/index.mdx, build/packages.mdx,
build/agents.mdx, configure/permissions/index.mdx.
Every product fact asserted here was measured on the sibling repos'
origin/main (objectstack 2866d5f97e, objectui 6ff0eb1), not composed:
the route (`/studio/:packageId/:tab` inside the `/_console/` SPA), the
entry gate (`studio.access`, STUDIO_ENTRY_CAPABILITY), the four pillars
(Data, Automations, Interfaces, Access) and the five metadata kinds
Studio creates (package, app, object, flow, permission).
English only; locale siblings left alone and report stale, per AGENTS.md.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V8AcCw8C1feB7b5kiaJd7b
@os-project-manager
os-project-manager marked this pull request as ready for review August 22, 2026 13:59
@os-project-manager
os-project-manager merged commit cb41537 into mainAug 22, 2026
3 checks passed
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites (#232)
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Studio is a third surface name the #79 naming decision does not cover

2 participants

@os-project-manager@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

docs: define Studio in the glossary, make the Setup/Studio split canonical - #151

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name
Aug 22, 2026
Merged

docs: define Studio in the glossary, make the Setup/Studio split canonical#151
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Fixes#102

Executes the 2026-08-20 maintainer ruling: option 1 — Studio survives as the named metadata-authoring surface. The product's named places are the unnamed end-user surface, Setup (administration) and Studio (authoring). All three ruled deliverables, and nothing else.

What changed (6 files, +37/-9)

1. resources/glossary.mdx gains a Studio entry in alphabetical position, between Sharing Rule and Surface. It defines the surface — route, gate, what is authored there, how many pillars, and its relation to Setup — instead of describing it. The card's stop condition was explicit about this: a describing-without-deciding entry is how this corpus grew two mutually-referential Console entries (#89). The relation is stated in both directions ("Peer of Setup, not part of it"), so neither entry can be read without the other's boundary.

2. configure/index.mdx promotes the split to a canonical statement. "Permissions are designed in Studio, assigned in Setup" was a blockquote aside above the Setup section; it is now ## Setup and Studio, a section whose body says the sentence is the canonical statement of a split that runs through the whole product, with a table giving both names' route, capability and audience side by side. The original aside's second sentence is kept verbatim underneath. The glossary entry deep-links to the new anchor.

3. The four PR #100 rewrites now name the destination:

FileWasNow
build/data/index.mdx:21**Objects → New Object** → forms**Studio → Objects → New Object** → forms
build/packages.mdx:54**Packages → New Package****Studio → Packages → New Package**
build/agents.mdx:50Or in the UI: **Agents → New Agent**.Or in the UI: **Studio → Agents → New Agent**.
configure/permissions/index.mdx:164"It surfaces as the …""Studio's Access pillar surfaces it as the …"

The last one is pillar-qualified because that is what the sibling page already says (managing-access.mdx:84, "Studio's Access pillar → Explain access") and because it is measurable: PILLAR_FOR_SURFACE_TYPE maps permission to the access pillar.

Measured, not composed — including one correction to the dispatch's assumption

Every product fact asserted here was read off the sibling repos at objectstackorigin/main2866d5f97e and objectuiorigin/main6ff0eb1.

The dispatch assumed Studio is an app at /apps/studio, a syntactic peer of Setup's /apps/setup. It is not. Studio is a dedicated route subtree of the console SPA at /_console/studio/studio, /studio/:packageId, /studio/:packageId/:tab — declared in objectui apps/console/src/App.tsx via studioRoutes, and explicitly outside the /apps/:appName/* mount, as studioEntry.ts states in prose: "today the /studio/* routes sit OUTSIDE the only mount of it (AppContent, which covers /apps/:appName/*)". A STUDIO_APP metadata app does exist (packages/platform-objects/src/apps/studio.app.ts), but packages/apps/studio/src/index.ts records that it is deliberately not default-loaded: "the console ships a dedicated Studio surface at /_console/studio/&lt;pkg&gt;/&lt;pillar&gt;, so Studio no longer needs to exist as a navigable app tile in a stock boot" — and packages/cli/src/commands/serve.ts:2470 and packages/cli/src/adr-0048-app-split.test.ts:13 say the same thing independently.

The consequence the dispatch was guarding against does not occur, which is why this did not stop. The stop condition was that the Surface entry ("There are two, not three") would need a decision this card cannot make. It does not: createConsoleStaticPlugin serves one /_console/* catch-all and every Studio path is a route inside it, so Studio is inside the UI surface, not a third one. Surface is left untouched and stays true; the new Studio entry carries the relation instead ("inside the UI served at /_console/"). Had the entry been written as the assumed /apps/studio, the glossary would have shipped a route that does not resolve.

The rest of the measured basis: the entry gate is studio.access (STUDIO_ENTRY_CAPABILITY, objectui studioEntry.ts:107, an entry-level gate, fail-closed); the four pillars are Data, Automations, Interfaces, Access (StudioDesignSurface.tsx:149); the five metadata kinds Studio creates are package, app, object, flow and permission (CreateItemDialog.tsx header); and scope is one package at a time (/studio/:packageId/:tab).

Sweep result — the dispatch's second assumption is falsified, and not fixed here

The dispatch assumed the four sites above are the only places PR #100 dropped the noun, and asked for a sweep. Answered by diffing PR #100 (git show adbcafc -U0 -- 'content/docs') and classifying every removed Console occurrence, not by enumeration. Five more sites drop a metadata-authoring destination: build/index.mdx:3, :13, :52, and build/automation/flows.mdx:9, :279. build/index.mdx:13 is the sharpest — the same "click-build" row as build/data/index.mdx:21, so after this PR one of the pair names Studio and the other does not.

All five are outside this card's declared six-file surface, so none is touched here. Filed as #148 with the full classification. Everything else PR #100 dropped is the end-user sense of the word and is correctly gone.

Separately filed as #150: reference/cli.mdx:74 documents an os studio command that the CLI does not ship (oclif discovers commands from packages/cli/src/commands/; there is no studio command, and the upstream packages/cli/README.md:45 carries the same stale claim). That line is cited in the card as evidence Studio is live; the ruling is unaffected, since it rests on studio.access and on the shipped /_console/studio surface, both measured above.

Surface discipline

Exactly the six declared files are touched. build/automation/approvals.mdx (queued for #131), configure/notifications.mdx (in flight for #132), build/interface/apps.mdx and configure/permissions/managing-access.mdx (read as the vocabulary model, not rewritten) and every locale sibling are untouched — git diff --name-only is the six.

Gates — all green on 46fc8b0, the tree this PR pushes

GateResult
pnpm install --frozen-lockfileDone in 9.1s
pnpm turbo run type-check --continueTasks: 1 successful, 1 totalcache miss, executing a4d54c7845f5b5ba
pnpm turbo run buildTasks: 1 successful, 1 totalcache miss, executing cc6753e43e7379eb
pnpm turbo run testTasks: 1 successful, 1 total — re-run with --force (cache bypass, force executing) after the first run replayed from the shared worktree cache
check-node-floor.mjs --self-test + checkexit 0; Every declared floor clears what the dependency tree requires
check-translation-ownership.mjsexit 0; This PR touches 0 translation artifact(s) and 6 other file(s)
check-translations.mjs (freshness)✓ translations gate passed — the six English edits report as locale staleness, non-blocking by design
check-translation-output.mjs --self-test + PR-scoped✓ translation output gate passed (138 pre-existing finding(s) reported) — none in the changed files

Both turbo tasks that consume content/docs report cache miss, so the greens were computed on this content rather than replayed from a sibling worktree's tree.

The glossary's /docs/configure#setup-and-studio link was verified against the built output rather than assumed: id="setup-and-studio" appears in apps/docs/.next for the configure page.

No changeset: this repo has no changeset flow. English only; locale siblings left alone per AGENTS.md.


Generated by Claude Code

…nical
Executes the 2026-08-20 maintainer ruling on #102 (option 1: Studio
survives as the named metadata-authoring surface).
- resources/glossary.mdx gains a `Studio` entry in alphabetical position
that DEFINES the surface -- route, gate, what is authored there, and
its relation to Setup -- rather than describing it. Describing without
deciding is how this corpus grew two mutually-referential `Console`
entries (#89), which the card forbids explicitly.
- configure/index.mdx promotes "Permissions are designed in Studio,
assigned in Setup" from a page callout to `## Setup and Studio`: the
canonical statement of the split, with both names' routes,
capabilities and audiences side by side.
- The four PR #100 rewrites that dropped the noun now name Studio as the
destination: build/data/index.mdx, build/packages.mdx,
build/agents.mdx, configure/permissions/index.mdx.
Every product fact asserted here was measured on the sibling repos'
origin/main (objectstack 2866d5f97e, objectui 6ff0eb1), not composed:
the route (`/studio/:packageId/:tab` inside the `/_console/` SPA), the
entry gate (`studio.access`, STUDIO_ENTRY_CAPABILITY), the four pillars
(Data, Automations, Interfaces, Access) and the five metadata kinds
Studio creates (package, app, object, flow, permission).
English only; locale siblings left alone and report stale, per AGENTS.md.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V8AcCw8C1feB7b5kiaJd7b
@os-project-manager
os-project-manager marked this pull request as ready for review August 22, 2026 13:59
@os-project-manager
os-project-manager merged commit cb41537 into mainAug 22, 2026
3 checks passed
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites (#232)
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Studio is a third surface name the #79 naming decision does not cover

2 participants

@os-project-manager@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: define Studio in the glossary, make the Setup/Studio split canonical - #151

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name
Aug 22, 2026
Merged

docs: define Studio in the glossary, make the Setup/Studio split canonical#151
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Fixes#102

Executes the 2026-08-20 maintainer ruling: option 1 — Studio survives as the named metadata-authoring surface. The product's named places are the unnamed end-user surface, Setup (administration) and Studio (authoring). All three ruled deliverables, and nothing else.

What changed (6 files, +37/-9)

1. resources/glossary.mdx gains a Studio entry in alphabetical position, between Sharing Rule and Surface. It defines the surface — route, gate, what is authored there, how many pillars, and its relation to Setup — instead of describing it. The card's stop condition was explicit about this: a describing-without-deciding entry is how this corpus grew two mutually-referential Console entries (#89). The relation is stated in both directions ("Peer of Setup, not part of it"), so neither entry can be read without the other's boundary.

2. configure/index.mdx promotes the split to a canonical statement. "Permissions are designed in Studio, assigned in Setup" was a blockquote aside above the Setup section; it is now ## Setup and Studio, a section whose body says the sentence is the canonical statement of a split that runs through the whole product, with a table giving both names' route, capability and audience side by side. The original aside's second sentence is kept verbatim underneath. The glossary entry deep-links to the new anchor.

3. The four PR #100 rewrites now name the destination:

FileWasNow
build/data/index.mdx:21**Objects → New Object** → forms**Studio → Objects → New Object** → forms
build/packages.mdx:54**Packages → New Package****Studio → Packages → New Package**
build/agents.mdx:50Or in the UI: **Agents → New Agent**.Or in the UI: **Studio → Agents → New Agent**.
configure/permissions/index.mdx:164"It surfaces as the …""Studio's Access pillar surfaces it as the …"

The last one is pillar-qualified because that is what the sibling page already says (managing-access.mdx:84, "Studio's Access pillar → Explain access") and because it is measurable: PILLAR_FOR_SURFACE_TYPE maps permission to the access pillar.

Measured, not composed — including one correction to the dispatch's assumption

Every product fact asserted here was read off the sibling repos at objectstackorigin/main2866d5f97e and objectuiorigin/main6ff0eb1.

The dispatch assumed Studio is an app at /apps/studio, a syntactic peer of Setup's /apps/setup. It is not. Studio is a dedicated route subtree of the console SPA at /_console/studio/studio, /studio/:packageId, /studio/:packageId/:tab — declared in objectui apps/console/src/App.tsx via studioRoutes, and explicitly outside the /apps/:appName/* mount, as studioEntry.ts states in prose: "today the /studio/* routes sit OUTSIDE the only mount of it (AppContent, which covers /apps/:appName/*)". A STUDIO_APP metadata app does exist (packages/platform-objects/src/apps/studio.app.ts), but packages/apps/studio/src/index.ts records that it is deliberately not default-loaded: "the console ships a dedicated Studio surface at /_console/studio/&lt;pkg&gt;/&lt;pillar&gt;, so Studio no longer needs to exist as a navigable app tile in a stock boot" — and packages/cli/src/commands/serve.ts:2470 and packages/cli/src/adr-0048-app-split.test.ts:13 say the same thing independently.

The consequence the dispatch was guarding against does not occur, which is why this did not stop. The stop condition was that the Surface entry ("There are two, not three") would need a decision this card cannot make. It does not: createConsoleStaticPlugin serves one /_console/* catch-all and every Studio path is a route inside it, so Studio is inside the UI surface, not a third one. Surface is left untouched and stays true; the new Studio entry carries the relation instead ("inside the UI served at /_console/"). Had the entry been written as the assumed /apps/studio, the glossary would have shipped a route that does not resolve.

The rest of the measured basis: the entry gate is studio.access (STUDIO_ENTRY_CAPABILITY, objectui studioEntry.ts:107, an entry-level gate, fail-closed); the four pillars are Data, Automations, Interfaces, Access (StudioDesignSurface.tsx:149); the five metadata kinds Studio creates are package, app, object, flow and permission (CreateItemDialog.tsx header); and scope is one package at a time (/studio/:packageId/:tab).

Sweep result — the dispatch's second assumption is falsified, and not fixed here

The dispatch assumed the four sites above are the only places PR #100 dropped the noun, and asked for a sweep. Answered by diffing PR #100 (git show adbcafc -U0 -- 'content/docs') and classifying every removed Console occurrence, not by enumeration. Five more sites drop a metadata-authoring destination: build/index.mdx:3, :13, :52, and build/automation/flows.mdx:9, :279. build/index.mdx:13 is the sharpest — the same "click-build" row as build/data/index.mdx:21, so after this PR one of the pair names Studio and the other does not.

All five are outside this card's declared six-file surface, so none is touched here. Filed as #148 with the full classification. Everything else PR #100 dropped is the end-user sense of the word and is correctly gone.

Separately filed as #150: reference/cli.mdx:74 documents an os studio command that the CLI does not ship (oclif discovers commands from packages/cli/src/commands/; there is no studio command, and the upstream packages/cli/README.md:45 carries the same stale claim). That line is cited in the card as evidence Studio is live; the ruling is unaffected, since it rests on studio.access and on the shipped /_console/studio surface, both measured above.

Surface discipline

Exactly the six declared files are touched. build/automation/approvals.mdx (queued for #131), configure/notifications.mdx (in flight for #132), build/interface/apps.mdx and configure/permissions/managing-access.mdx (read as the vocabulary model, not rewritten) and every locale sibling are untouched — git diff --name-only is the six.

Gates — all green on 46fc8b0, the tree this PR pushes

GateResult
pnpm install --frozen-lockfileDone in 9.1s
pnpm turbo run type-check --continueTasks: 1 successful, 1 totalcache miss, executing a4d54c7845f5b5ba
pnpm turbo run buildTasks: 1 successful, 1 totalcache miss, executing cc6753e43e7379eb
pnpm turbo run testTasks: 1 successful, 1 total — re-run with --force (cache bypass, force executing) after the first run replayed from the shared worktree cache
check-node-floor.mjs --self-test + checkexit 0; Every declared floor clears what the dependency tree requires
check-translation-ownership.mjsexit 0; This PR touches 0 translation artifact(s) and 6 other file(s)
check-translations.mjs (freshness)✓ translations gate passed — the six English edits report as locale staleness, non-blocking by design
check-translation-output.mjs --self-test + PR-scoped✓ translation output gate passed (138 pre-existing finding(s) reported) — none in the changed files

Both turbo tasks that consume content/docs report cache miss, so the greens were computed on this content rather than replayed from a sibling worktree's tree.

The glossary's /docs/configure#setup-and-studio link was verified against the built output rather than assumed: id="setup-and-studio" appears in apps/docs/.next for the configure page.

No changeset: this repo has no changeset flow. English only; locale siblings left alone per AGENTS.md.


Generated by Claude Code

…nical
Executes the 2026-08-20 maintainer ruling on #102 (option 1: Studio
survives as the named metadata-authoring surface).
- resources/glossary.mdx gains a `Studio` entry in alphabetical position
that DEFINES the surface -- route, gate, what is authored there, and
its relation to Setup -- rather than describing it. Describing without
deciding is how this corpus grew two mutually-referential `Console`
entries (#89), which the card forbids explicitly.
- configure/index.mdx promotes "Permissions are designed in Studio,
assigned in Setup" from a page callout to `## Setup and Studio`: the
canonical statement of the split, with both names' routes,
capabilities and audiences side by side.
- The four PR #100 rewrites that dropped the noun now name Studio as the
destination: build/data/index.mdx, build/packages.mdx,
build/agents.mdx, configure/permissions/index.mdx.
Every product fact asserted here was measured on the sibling repos'
origin/main (objectstack 2866d5f97e, objectui 6ff0eb1), not composed:
the route (`/studio/:packageId/:tab` inside the `/_console/` SPA), the
entry gate (`studio.access`, STUDIO_ENTRY_CAPABILITY), the four pillars
(Data, Automations, Interfaces, Access) and the five metadata kinds
Studio creates (package, app, object, flow, permission).
English only; locale siblings left alone and report stale, per AGENTS.md.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V8AcCw8C1feB7b5kiaJd7b
@os-project-manager
os-project-manager marked this pull request as ready for review August 22, 2026 13:59
@os-project-manager
os-project-manager merged commit cb41537 into mainAug 22, 2026
3 checks passed
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites (#232)
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Studio is a third surface name the #79 naming decision does not cover

2 participants

@os-project-manager@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: define Studio in the glossary, make the Setup/Studio split canonical - #151

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name
Aug 22, 2026
Merged

docs: define Studio in the glossary, make the Setup/Studio split canonical#151
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Fixes#102

Executes the 2026-08-20 maintainer ruling: option 1 — Studio survives as the named metadata-authoring surface. The product's named places are the unnamed end-user surface, Setup (administration) and Studio (authoring). All three ruled deliverables, and nothing else.

What changed (6 files, +37/-9)

1. resources/glossary.mdx gains a Studio entry in alphabetical position, between Sharing Rule and Surface. It defines the surface — route, gate, what is authored there, how many pillars, and its relation to Setup — instead of describing it. The card's stop condition was explicit about this: a describing-without-deciding entry is how this corpus grew two mutually-referential Console entries (#89). The relation is stated in both directions ("Peer of Setup, not part of it"), so neither entry can be read without the other's boundary.

2. configure/index.mdx promotes the split to a canonical statement. "Permissions are designed in Studio, assigned in Setup" was a blockquote aside above the Setup section; it is now ## Setup and Studio, a section whose body says the sentence is the canonical statement of a split that runs through the whole product, with a table giving both names' route, capability and audience side by side. The original aside's second sentence is kept verbatim underneath. The glossary entry deep-links to the new anchor.

3. The four PR #100 rewrites now name the destination:

FileWasNow
build/data/index.mdx:21**Objects → New Object** → forms**Studio → Objects → New Object** → forms
build/packages.mdx:54**Packages → New Package****Studio → Packages → New Package**
build/agents.mdx:50Or in the UI: **Agents → New Agent**.Or in the UI: **Studio → Agents → New Agent**.
configure/permissions/index.mdx:164"It surfaces as the …""Studio's Access pillar surfaces it as the …"

The last one is pillar-qualified because that is what the sibling page already says (managing-access.mdx:84, "Studio's Access pillar → Explain access") and because it is measurable: PILLAR_FOR_SURFACE_TYPE maps permission to the access pillar.

Measured, not composed — including one correction to the dispatch's assumption

Every product fact asserted here was read off the sibling repos at objectstackorigin/main2866d5f97e and objectuiorigin/main6ff0eb1.

The dispatch assumed Studio is an app at /apps/studio, a syntactic peer of Setup's /apps/setup. It is not. Studio is a dedicated route subtree of the console SPA at /_console/studio/studio, /studio/:packageId, /studio/:packageId/:tab — declared in objectui apps/console/src/App.tsx via studioRoutes, and explicitly outside the /apps/:appName/* mount, as studioEntry.ts states in prose: "today the /studio/* routes sit OUTSIDE the only mount of it (AppContent, which covers /apps/:appName/*)". A STUDIO_APP metadata app does exist (packages/platform-objects/src/apps/studio.app.ts), but packages/apps/studio/src/index.ts records that it is deliberately not default-loaded: "the console ships a dedicated Studio surface at /_console/studio/&lt;pkg&gt;/&lt;pillar&gt;, so Studio no longer needs to exist as a navigable app tile in a stock boot" — and packages/cli/src/commands/serve.ts:2470 and packages/cli/src/adr-0048-app-split.test.ts:13 say the same thing independently.

The consequence the dispatch was guarding against does not occur, which is why this did not stop. The stop condition was that the Surface entry ("There are two, not three") would need a decision this card cannot make. It does not: createConsoleStaticPlugin serves one /_console/* catch-all and every Studio path is a route inside it, so Studio is inside the UI surface, not a third one. Surface is left untouched and stays true; the new Studio entry carries the relation instead ("inside the UI served at /_console/"). Had the entry been written as the assumed /apps/studio, the glossary would have shipped a route that does not resolve.

The rest of the measured basis: the entry gate is studio.access (STUDIO_ENTRY_CAPABILITY, objectui studioEntry.ts:107, an entry-level gate, fail-closed); the four pillars are Data, Automations, Interfaces, Access (StudioDesignSurface.tsx:149); the five metadata kinds Studio creates are package, app, object, flow and permission (CreateItemDialog.tsx header); and scope is one package at a time (/studio/:packageId/:tab).

Sweep result — the dispatch's second assumption is falsified, and not fixed here

The dispatch assumed the four sites above are the only places PR #100 dropped the noun, and asked for a sweep. Answered by diffing PR #100 (git show adbcafc -U0 -- 'content/docs') and classifying every removed Console occurrence, not by enumeration. Five more sites drop a metadata-authoring destination: build/index.mdx:3, :13, :52, and build/automation/flows.mdx:9, :279. build/index.mdx:13 is the sharpest — the same "click-build" row as build/data/index.mdx:21, so after this PR one of the pair names Studio and the other does not.

All five are outside this card's declared six-file surface, so none is touched here. Filed as #148 with the full classification. Everything else PR #100 dropped is the end-user sense of the word and is correctly gone.

Separately filed as #150: reference/cli.mdx:74 documents an os studio command that the CLI does not ship (oclif discovers commands from packages/cli/src/commands/; there is no studio command, and the upstream packages/cli/README.md:45 carries the same stale claim). That line is cited in the card as evidence Studio is live; the ruling is unaffected, since it rests on studio.access and on the shipped /_console/studio surface, both measured above.

Surface discipline

Exactly the six declared files are touched. build/automation/approvals.mdx (queued for #131), configure/notifications.mdx (in flight for #132), build/interface/apps.mdx and configure/permissions/managing-access.mdx (read as the vocabulary model, not rewritten) and every locale sibling are untouched — git diff --name-only is the six.

Gates — all green on 46fc8b0, the tree this PR pushes

GateResult
pnpm install --frozen-lockfileDone in 9.1s
pnpm turbo run type-check --continueTasks: 1 successful, 1 totalcache miss, executing a4d54c7845f5b5ba
pnpm turbo run buildTasks: 1 successful, 1 totalcache miss, executing cc6753e43e7379eb
pnpm turbo run testTasks: 1 successful, 1 total — re-run with --force (cache bypass, force executing) after the first run replayed from the shared worktree cache
check-node-floor.mjs --self-test + checkexit 0; Every declared floor clears what the dependency tree requires
check-translation-ownership.mjsexit 0; This PR touches 0 translation artifact(s) and 6 other file(s)
check-translations.mjs (freshness)✓ translations gate passed — the six English edits report as locale staleness, non-blocking by design
check-translation-output.mjs --self-test + PR-scoped✓ translation output gate passed (138 pre-existing finding(s) reported) — none in the changed files

Both turbo tasks that consume content/docs report cache miss, so the greens were computed on this content rather than replayed from a sibling worktree's tree.

The glossary's /docs/configure#setup-and-studio link was verified against the built output rather than assumed: id="setup-and-studio" appears in apps/docs/.next for the configure page.

No changeset: this repo has no changeset flow. English only; locale siblings left alone per AGENTS.md.


Generated by Claude Code

…nical
Executes the 2026-08-20 maintainer ruling on #102 (option 1: Studio
survives as the named metadata-authoring surface).
- resources/glossary.mdx gains a `Studio` entry in alphabetical position
that DEFINES the surface -- route, gate, what is authored there, and
its relation to Setup -- rather than describing it. Describing without
deciding is how this corpus grew two mutually-referential `Console`
entries (#89), which the card forbids explicitly.
- configure/index.mdx promotes "Permissions are designed in Studio,
assigned in Setup" from a page callout to `## Setup and Studio`: the
canonical statement of the split, with both names' routes,
capabilities and audiences side by side.
- The four PR #100 rewrites that dropped the noun now name Studio as the
destination: build/data/index.mdx, build/packages.mdx,
build/agents.mdx, configure/permissions/index.mdx.
Every product fact asserted here was measured on the sibling repos'
origin/main (objectstack 2866d5f97e, objectui 6ff0eb1), not composed:
the route (`/studio/:packageId/:tab` inside the `/_console/` SPA), the
entry gate (`studio.access`, STUDIO_ENTRY_CAPABILITY), the four pillars
(Data, Automations, Interfaces, Access) and the five metadata kinds
Studio creates (package, app, object, flow, permission).
English only; locale siblings left alone and report stale, per AGENTS.md.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V8AcCw8C1feB7b5kiaJd7b
@os-project-manager
os-project-manager marked this pull request as ready for review August 22, 2026 13:59
@os-project-manager
os-project-manager merged commit cb41537 into mainAug 22, 2026
3 checks passed
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites (#232)
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Studio is a third surface name the #79 naming decision does not cover

2 participants

@os-project-manager@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

docs: define Studio in the glossary, make the Setup/Studio split canonical - #151

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name
Aug 22, 2026
Merged

docs: define Studio in the glossary, make the Setup/Studio split canonical#151
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Fixes#102

Executes the 2026-08-20 maintainer ruling: option 1 — Studio survives as the named metadata-authoring surface. The product's named places are the unnamed end-user surface, Setup (administration) and Studio (authoring). All three ruled deliverables, and nothing else.

What changed (6 files, +37/-9)

1. resources/glossary.mdx gains a Studio entry in alphabetical position, between Sharing Rule and Surface. It defines the surface — route, gate, what is authored there, how many pillars, and its relation to Setup — instead of describing it. The card's stop condition was explicit about this: a describing-without-deciding entry is how this corpus grew two mutually-referential Console entries (#89). The relation is stated in both directions ("Peer of Setup, not part of it"), so neither entry can be read without the other's boundary.

2. configure/index.mdx promotes the split to a canonical statement. "Permissions are designed in Studio, assigned in Setup" was a blockquote aside above the Setup section; it is now ## Setup and Studio, a section whose body says the sentence is the canonical statement of a split that runs through the whole product, with a table giving both names' route, capability and audience side by side. The original aside's second sentence is kept verbatim underneath. The glossary entry deep-links to the new anchor.

3. The four PR #100 rewrites now name the destination:

FileWasNow
build/data/index.mdx:21**Objects → New Object** → forms**Studio → Objects → New Object** → forms
build/packages.mdx:54**Packages → New Package****Studio → Packages → New Package**
build/agents.mdx:50Or in the UI: **Agents → New Agent**.Or in the UI: **Studio → Agents → New Agent**.
configure/permissions/index.mdx:164"It surfaces as the …""Studio's Access pillar surfaces it as the …"

The last one is pillar-qualified because that is what the sibling page already says (managing-access.mdx:84, "Studio's Access pillar → Explain access") and because it is measurable: PILLAR_FOR_SURFACE_TYPE maps permission to the access pillar.

Measured, not composed — including one correction to the dispatch's assumption

Every product fact asserted here was read off the sibling repos at objectstackorigin/main2866d5f97e and objectuiorigin/main6ff0eb1.

The dispatch assumed Studio is an app at /apps/studio, a syntactic peer of Setup's /apps/setup. It is not. Studio is a dedicated route subtree of the console SPA at /_console/studio/studio, /studio/:packageId, /studio/:packageId/:tab — declared in objectui apps/console/src/App.tsx via studioRoutes, and explicitly outside the /apps/:appName/* mount, as studioEntry.ts states in prose: "today the /studio/* routes sit OUTSIDE the only mount of it (AppContent, which covers /apps/:appName/*)". A STUDIO_APP metadata app does exist (packages/platform-objects/src/apps/studio.app.ts), but packages/apps/studio/src/index.ts records that it is deliberately not default-loaded: "the console ships a dedicated Studio surface at /_console/studio/&lt;pkg&gt;/&lt;pillar&gt;, so Studio no longer needs to exist as a navigable app tile in a stock boot" — and packages/cli/src/commands/serve.ts:2470 and packages/cli/src/adr-0048-app-split.test.ts:13 say the same thing independently.

The consequence the dispatch was guarding against does not occur, which is why this did not stop. The stop condition was that the Surface entry ("There are two, not three") would need a decision this card cannot make. It does not: createConsoleStaticPlugin serves one /_console/* catch-all and every Studio path is a route inside it, so Studio is inside the UI surface, not a third one. Surface is left untouched and stays true; the new Studio entry carries the relation instead ("inside the UI served at /_console/"). Had the entry been written as the assumed /apps/studio, the glossary would have shipped a route that does not resolve.

The rest of the measured basis: the entry gate is studio.access (STUDIO_ENTRY_CAPABILITY, objectui studioEntry.ts:107, an entry-level gate, fail-closed); the four pillars are Data, Automations, Interfaces, Access (StudioDesignSurface.tsx:149); the five metadata kinds Studio creates are package, app, object, flow and permission (CreateItemDialog.tsx header); and scope is one package at a time (/studio/:packageId/:tab).

Sweep result — the dispatch's second assumption is falsified, and not fixed here

The dispatch assumed the four sites above are the only places PR #100 dropped the noun, and asked for a sweep. Answered by diffing PR #100 (git show adbcafc -U0 -- 'content/docs') and classifying every removed Console occurrence, not by enumeration. Five more sites drop a metadata-authoring destination: build/index.mdx:3, :13, :52, and build/automation/flows.mdx:9, :279. build/index.mdx:13 is the sharpest — the same "click-build" row as build/data/index.mdx:21, so after this PR one of the pair names Studio and the other does not.

All five are outside this card's declared six-file surface, so none is touched here. Filed as #148 with the full classification. Everything else PR #100 dropped is the end-user sense of the word and is correctly gone.

Separately filed as #150: reference/cli.mdx:74 documents an os studio command that the CLI does not ship (oclif discovers commands from packages/cli/src/commands/; there is no studio command, and the upstream packages/cli/README.md:45 carries the same stale claim). That line is cited in the card as evidence Studio is live; the ruling is unaffected, since it rests on studio.access and on the shipped /_console/studio surface, both measured above.

Surface discipline

Exactly the six declared files are touched. build/automation/approvals.mdx (queued for #131), configure/notifications.mdx (in flight for #132), build/interface/apps.mdx and configure/permissions/managing-access.mdx (read as the vocabulary model, not rewritten) and every locale sibling are untouched — git diff --name-only is the six.

Gates — all green on 46fc8b0, the tree this PR pushes

GateResult
pnpm install --frozen-lockfileDone in 9.1s
pnpm turbo run type-check --continueTasks: 1 successful, 1 totalcache miss, executing a4d54c7845f5b5ba
pnpm turbo run buildTasks: 1 successful, 1 totalcache miss, executing cc6753e43e7379eb
pnpm turbo run testTasks: 1 successful, 1 total — re-run with --force (cache bypass, force executing) after the first run replayed from the shared worktree cache
check-node-floor.mjs --self-test + checkexit 0; Every declared floor clears what the dependency tree requires
check-translation-ownership.mjsexit 0; This PR touches 0 translation artifact(s) and 6 other file(s)
check-translations.mjs (freshness)✓ translations gate passed — the six English edits report as locale staleness, non-blocking by design
check-translation-output.mjs --self-test + PR-scoped✓ translation output gate passed (138 pre-existing finding(s) reported) — none in the changed files

Both turbo tasks that consume content/docs report cache miss, so the greens were computed on this content rather than replayed from a sibling worktree's tree.

The glossary's /docs/configure#setup-and-studio link was verified against the built output rather than assumed: id="setup-and-studio" appears in apps/docs/.next for the configure page.

No changeset: this repo has no changeset flow. English only; locale siblings left alone per AGENTS.md.


Generated by Claude Code

…nical
Executes the 2026-08-20 maintainer ruling on #102 (option 1: Studio
survives as the named metadata-authoring surface).
- resources/glossary.mdx gains a `Studio` entry in alphabetical position
that DEFINES the surface -- route, gate, what is authored there, and
its relation to Setup -- rather than describing it. Describing without
deciding is how this corpus grew two mutually-referential `Console`
entries (#89), which the card forbids explicitly.
- configure/index.mdx promotes "Permissions are designed in Studio,
assigned in Setup" from a page callout to `## Setup and Studio`: the
canonical statement of the split, with both names' routes,
capabilities and audiences side by side.
- The four PR #100 rewrites that dropped the noun now name Studio as the
destination: build/data/index.mdx, build/packages.mdx,
build/agents.mdx, configure/permissions/index.mdx.
Every product fact asserted here was measured on the sibling repos'
origin/main (objectstack 2866d5f97e, objectui 6ff0eb1), not composed:
the route (`/studio/:packageId/:tab` inside the `/_console/` SPA), the
entry gate (`studio.access`, STUDIO_ENTRY_CAPABILITY), the four pillars
(Data, Automations, Interfaces, Access) and the five metadata kinds
Studio creates (package, app, object, flow, permission).
English only; locale siblings left alone and report stale, per AGENTS.md.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V8AcCw8C1feB7b5kiaJd7b
@os-project-manager
os-project-manager marked this pull request as ready for review August 22, 2026 13:59
@os-project-manager
os-project-manager merged commit cb41537 into mainAug 22, 2026
3 checks passed
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites (#232)
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Studio is a third surface name the #79 naming decision does not cover

2 participants

@os-project-manager@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: define Studio in the glossary, make the Setup/Studio split canonical - #151

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name
Aug 22, 2026
Merged

docs: define Studio in the glossary, make the Setup/Studio split canonical#151
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Fixes#102

Executes the 2026-08-20 maintainer ruling: option 1 — Studio survives as the named metadata-authoring surface. The product's named places are the unnamed end-user surface, Setup (administration) and Studio (authoring). All three ruled deliverables, and nothing else.

What changed (6 files, +37/-9)

1. resources/glossary.mdx gains a Studio entry in alphabetical position, between Sharing Rule and Surface. It defines the surface — route, gate, what is authored there, how many pillars, and its relation to Setup — instead of describing it. The card's stop condition was explicit about this: a describing-without-deciding entry is how this corpus grew two mutually-referential Console entries (#89). The relation is stated in both directions ("Peer of Setup, not part of it"), so neither entry can be read without the other's boundary.

2. configure/index.mdx promotes the split to a canonical statement. "Permissions are designed in Studio, assigned in Setup" was a blockquote aside above the Setup section; it is now ## Setup and Studio, a section whose body says the sentence is the canonical statement of a split that runs through the whole product, with a table giving both names' route, capability and audience side by side. The original aside's second sentence is kept verbatim underneath. The glossary entry deep-links to the new anchor.

3. The four PR #100 rewrites now name the destination:

FileWasNow
build/data/index.mdx:21**Objects → New Object** → forms**Studio → Objects → New Object** → forms
build/packages.mdx:54**Packages → New Package****Studio → Packages → New Package**
build/agents.mdx:50Or in the UI: **Agents → New Agent**.Or in the UI: **Studio → Agents → New Agent**.
configure/permissions/index.mdx:164"It surfaces as the …""Studio's Access pillar surfaces it as the …"

The last one is pillar-qualified because that is what the sibling page already says (managing-access.mdx:84, "Studio's Access pillar → Explain access") and because it is measurable: PILLAR_FOR_SURFACE_TYPE maps permission to the access pillar.

Measured, not composed — including one correction to the dispatch's assumption

Every product fact asserted here was read off the sibling repos at objectstackorigin/main2866d5f97e and objectuiorigin/main6ff0eb1.

The dispatch assumed Studio is an app at /apps/studio, a syntactic peer of Setup's /apps/setup. It is not. Studio is a dedicated route subtree of the console SPA at /_console/studio/studio, /studio/:packageId, /studio/:packageId/:tab — declared in objectui apps/console/src/App.tsx via studioRoutes, and explicitly outside the /apps/:appName/* mount, as studioEntry.ts states in prose: "today the /studio/* routes sit OUTSIDE the only mount of it (AppContent, which covers /apps/:appName/*)". A STUDIO_APP metadata app does exist (packages/platform-objects/src/apps/studio.app.ts), but packages/apps/studio/src/index.ts records that it is deliberately not default-loaded: "the console ships a dedicated Studio surface at /_console/studio/&lt;pkg&gt;/&lt;pillar&gt;, so Studio no longer needs to exist as a navigable app tile in a stock boot" — and packages/cli/src/commands/serve.ts:2470 and packages/cli/src/adr-0048-app-split.test.ts:13 say the same thing independently.

The consequence the dispatch was guarding against does not occur, which is why this did not stop. The stop condition was that the Surface entry ("There are two, not three") would need a decision this card cannot make. It does not: createConsoleStaticPlugin serves one /_console/* catch-all and every Studio path is a route inside it, so Studio is inside the UI surface, not a third one. Surface is left untouched and stays true; the new Studio entry carries the relation instead ("inside the UI served at /_console/"). Had the entry been written as the assumed /apps/studio, the glossary would have shipped a route that does not resolve.

The rest of the measured basis: the entry gate is studio.access (STUDIO_ENTRY_CAPABILITY, objectui studioEntry.ts:107, an entry-level gate, fail-closed); the four pillars are Data, Automations, Interfaces, Access (StudioDesignSurface.tsx:149); the five metadata kinds Studio creates are package, app, object, flow and permission (CreateItemDialog.tsx header); and scope is one package at a time (/studio/:packageId/:tab).

Sweep result — the dispatch's second assumption is falsified, and not fixed here

The dispatch assumed the four sites above are the only places PR #100 dropped the noun, and asked for a sweep. Answered by diffing PR #100 (git show adbcafc -U0 -- 'content/docs') and classifying every removed Console occurrence, not by enumeration. Five more sites drop a metadata-authoring destination: build/index.mdx:3, :13, :52, and build/automation/flows.mdx:9, :279. build/index.mdx:13 is the sharpest — the same "click-build" row as build/data/index.mdx:21, so after this PR one of the pair names Studio and the other does not.

All five are outside this card's declared six-file surface, so none is touched here. Filed as #148 with the full classification. Everything else PR #100 dropped is the end-user sense of the word and is correctly gone.

Separately filed as #150: reference/cli.mdx:74 documents an os studio command that the CLI does not ship (oclif discovers commands from packages/cli/src/commands/; there is no studio command, and the upstream packages/cli/README.md:45 carries the same stale claim). That line is cited in the card as evidence Studio is live; the ruling is unaffected, since it rests on studio.access and on the shipped /_console/studio surface, both measured above.

Surface discipline

Exactly the six declared files are touched. build/automation/approvals.mdx (queued for #131), configure/notifications.mdx (in flight for #132), build/interface/apps.mdx and configure/permissions/managing-access.mdx (read as the vocabulary model, not rewritten) and every locale sibling are untouched — git diff --name-only is the six.

Gates — all green on 46fc8b0, the tree this PR pushes

GateResult
pnpm install --frozen-lockfileDone in 9.1s
pnpm turbo run type-check --continueTasks: 1 successful, 1 totalcache miss, executing a4d54c7845f5b5ba
pnpm turbo run buildTasks: 1 successful, 1 totalcache miss, executing cc6753e43e7379eb
pnpm turbo run testTasks: 1 successful, 1 total — re-run with --force (cache bypass, force executing) after the first run replayed from the shared worktree cache
check-node-floor.mjs --self-test + checkexit 0; Every declared floor clears what the dependency tree requires
check-translation-ownership.mjsexit 0; This PR touches 0 translation artifact(s) and 6 other file(s)
check-translations.mjs (freshness)✓ translations gate passed — the six English edits report as locale staleness, non-blocking by design
check-translation-output.mjs --self-test + PR-scoped✓ translation output gate passed (138 pre-existing finding(s) reported) — none in the changed files

Both turbo tasks that consume content/docs report cache miss, so the greens were computed on this content rather than replayed from a sibling worktree's tree.

The glossary's /docs/configure#setup-and-studio link was verified against the built output rather than assumed: id="setup-and-studio" appears in apps/docs/.next for the configure page.

No changeset: this repo has no changeset flow. English only; locale siblings left alone per AGENTS.md.


Generated by Claude Code

…nical
Executes the 2026-08-20 maintainer ruling on #102 (option 1: Studio
survives as the named metadata-authoring surface).
- resources/glossary.mdx gains a `Studio` entry in alphabetical position
that DEFINES the surface -- route, gate, what is authored there, and
its relation to Setup -- rather than describing it. Describing without
deciding is how this corpus grew two mutually-referential `Console`
entries (#89), which the card forbids explicitly.
- configure/index.mdx promotes "Permissions are designed in Studio,
assigned in Setup" from a page callout to `## Setup and Studio`: the
canonical statement of the split, with both names' routes,
capabilities and audiences side by side.
- The four PR #100 rewrites that dropped the noun now name Studio as the
destination: build/data/index.mdx, build/packages.mdx,
build/agents.mdx, configure/permissions/index.mdx.
Every product fact asserted here was measured on the sibling repos'
origin/main (objectstack 2866d5f97e, objectui 6ff0eb1), not composed:
the route (`/studio/:packageId/:tab` inside the `/_console/` SPA), the
entry gate (`studio.access`, STUDIO_ENTRY_CAPABILITY), the four pillars
(Data, Automations, Interfaces, Access) and the five metadata kinds
Studio creates (package, app, object, flow, permission).
English only; locale siblings left alone and report stale, per AGENTS.md.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V8AcCw8C1feB7b5kiaJd7b
@os-project-manager
os-project-manager marked this pull request as ready for review August 22, 2026 13:59
@os-project-manager
os-project-manager merged commit cb41537 into mainAug 22, 2026
3 checks passed
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites (#232)
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Studio is a third surface name the #79 naming decision does not cover

2 participants

@os-project-manager@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

docs: define Studio in the glossary, make the Setup/Studio split canonical - #151

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name
Aug 22, 2026
Merged

docs: define Studio in the glossary, make the Setup/Studio split canonical#151
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Fixes#102

Executes the 2026-08-20 maintainer ruling: option 1 — Studio survives as the named metadata-authoring surface. The product's named places are the unnamed end-user surface, Setup (administration) and Studio (authoring). All three ruled deliverables, and nothing else.

What changed (6 files, +37/-9)

1. resources/glossary.mdx gains a Studio entry in alphabetical position, between Sharing Rule and Surface. It defines the surface — route, gate, what is authored there, how many pillars, and its relation to Setup — instead of describing it. The card's stop condition was explicit about this: a describing-without-deciding entry is how this corpus grew two mutually-referential Console entries (#89). The relation is stated in both directions ("Peer of Setup, not part of it"), so neither entry can be read without the other's boundary.

2. configure/index.mdx promotes the split to a canonical statement. "Permissions are designed in Studio, assigned in Setup" was a blockquote aside above the Setup section; it is now ## Setup and Studio, a section whose body says the sentence is the canonical statement of a split that runs through the whole product, with a table giving both names' route, capability and audience side by side. The original aside's second sentence is kept verbatim underneath. The glossary entry deep-links to the new anchor.

3. The four PR #100 rewrites now name the destination:

FileWasNow
build/data/index.mdx:21**Objects → New Object** → forms**Studio → Objects → New Object** → forms
build/packages.mdx:54**Packages → New Package****Studio → Packages → New Package**
build/agents.mdx:50Or in the UI: **Agents → New Agent**.Or in the UI: **Studio → Agents → New Agent**.
configure/permissions/index.mdx:164"It surfaces as the …""Studio's Access pillar surfaces it as the …"

The last one is pillar-qualified because that is what the sibling page already says (managing-access.mdx:84, "Studio's Access pillar → Explain access") and because it is measurable: PILLAR_FOR_SURFACE_TYPE maps permission to the access pillar.

Measured, not composed — including one correction to the dispatch's assumption

Every product fact asserted here was read off the sibling repos at objectstackorigin/main2866d5f97e and objectuiorigin/main6ff0eb1.

The dispatch assumed Studio is an app at /apps/studio, a syntactic peer of Setup's /apps/setup. It is not. Studio is a dedicated route subtree of the console SPA at /_console/studio/studio, /studio/:packageId, /studio/:packageId/:tab — declared in objectui apps/console/src/App.tsx via studioRoutes, and explicitly outside the /apps/:appName/* mount, as studioEntry.ts states in prose: "today the /studio/* routes sit OUTSIDE the only mount of it (AppContent, which covers /apps/:appName/*)". A STUDIO_APP metadata app does exist (packages/platform-objects/src/apps/studio.app.ts), but packages/apps/studio/src/index.ts records that it is deliberately not default-loaded: "the console ships a dedicated Studio surface at /_console/studio/&lt;pkg&gt;/&lt;pillar&gt;, so Studio no longer needs to exist as a navigable app tile in a stock boot" — and packages/cli/src/commands/serve.ts:2470 and packages/cli/src/adr-0048-app-split.test.ts:13 say the same thing independently.

The consequence the dispatch was guarding against does not occur, which is why this did not stop. The stop condition was that the Surface entry ("There are two, not three") would need a decision this card cannot make. It does not: createConsoleStaticPlugin serves one /_console/* catch-all and every Studio path is a route inside it, so Studio is inside the UI surface, not a third one. Surface is left untouched and stays true; the new Studio entry carries the relation instead ("inside the UI served at /_console/"). Had the entry been written as the assumed /apps/studio, the glossary would have shipped a route that does not resolve.

The rest of the measured basis: the entry gate is studio.access (STUDIO_ENTRY_CAPABILITY, objectui studioEntry.ts:107, an entry-level gate, fail-closed); the four pillars are Data, Automations, Interfaces, Access (StudioDesignSurface.tsx:149); the five metadata kinds Studio creates are package, app, object, flow and permission (CreateItemDialog.tsx header); and scope is one package at a time (/studio/:packageId/:tab).

Sweep result — the dispatch's second assumption is falsified, and not fixed here

The dispatch assumed the four sites above are the only places PR #100 dropped the noun, and asked for a sweep. Answered by diffing PR #100 (git show adbcafc -U0 -- 'content/docs') and classifying every removed Console occurrence, not by enumeration. Five more sites drop a metadata-authoring destination: build/index.mdx:3, :13, :52, and build/automation/flows.mdx:9, :279. build/index.mdx:13 is the sharpest — the same "click-build" row as build/data/index.mdx:21, so after this PR one of the pair names Studio and the other does not.

All five are outside this card's declared six-file surface, so none is touched here. Filed as #148 with the full classification. Everything else PR #100 dropped is the end-user sense of the word and is correctly gone.

Separately filed as #150: reference/cli.mdx:74 documents an os studio command that the CLI does not ship (oclif discovers commands from packages/cli/src/commands/; there is no studio command, and the upstream packages/cli/README.md:45 carries the same stale claim). That line is cited in the card as evidence Studio is live; the ruling is unaffected, since it rests on studio.access and on the shipped /_console/studio surface, both measured above.

Surface discipline

Exactly the six declared files are touched. build/automation/approvals.mdx (queued for #131), configure/notifications.mdx (in flight for #132), build/interface/apps.mdx and configure/permissions/managing-access.mdx (read as the vocabulary model, not rewritten) and every locale sibling are untouched — git diff --name-only is the six.

Gates — all green on 46fc8b0, the tree this PR pushes

GateResult
pnpm install --frozen-lockfileDone in 9.1s
pnpm turbo run type-check --continueTasks: 1 successful, 1 totalcache miss, executing a4d54c7845f5b5ba
pnpm turbo run buildTasks: 1 successful, 1 totalcache miss, executing cc6753e43e7379eb
pnpm turbo run testTasks: 1 successful, 1 total — re-run with --force (cache bypass, force executing) after the first run replayed from the shared worktree cache
check-node-floor.mjs --self-test + checkexit 0; Every declared floor clears what the dependency tree requires
check-translation-ownership.mjsexit 0; This PR touches 0 translation artifact(s) and 6 other file(s)
check-translations.mjs (freshness)✓ translations gate passed — the six English edits report as locale staleness, non-blocking by design
check-translation-output.mjs --self-test + PR-scoped✓ translation output gate passed (138 pre-existing finding(s) reported) — none in the changed files

Both turbo tasks that consume content/docs report cache miss, so the greens were computed on this content rather than replayed from a sibling worktree's tree.

The glossary's /docs/configure#setup-and-studio link was verified against the built output rather than assumed: id="setup-and-studio" appears in apps/docs/.next for the configure page.

No changeset: this repo has no changeset flow. English only; locale siblings left alone per AGENTS.md.


Generated by Claude Code

…nical
Executes the 2026-08-20 maintainer ruling on #102 (option 1: Studio
survives as the named metadata-authoring surface).
- resources/glossary.mdx gains a `Studio` entry in alphabetical position
that DEFINES the surface -- route, gate, what is authored there, and
its relation to Setup -- rather than describing it. Describing without
deciding is how this corpus grew two mutually-referential `Console`
entries (#89), which the card forbids explicitly.
- configure/index.mdx promotes "Permissions are designed in Studio,
assigned in Setup" from a page callout to `## Setup and Studio`: the
canonical statement of the split, with both names' routes,
capabilities and audiences side by side.
- The four PR #100 rewrites that dropped the noun now name Studio as the
destination: build/data/index.mdx, build/packages.mdx,
build/agents.mdx, configure/permissions/index.mdx.
Every product fact asserted here was measured on the sibling repos'
origin/main (objectstack 2866d5f97e, objectui 6ff0eb1), not composed:
the route (`/studio/:packageId/:tab` inside the `/_console/` SPA), the
entry gate (`studio.access`, STUDIO_ENTRY_CAPABILITY), the four pillars
(Data, Automations, Interfaces, Access) and the five metadata kinds
Studio creates (package, app, object, flow, permission).
English only; locale siblings left alone and report stale, per AGENTS.md.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V8AcCw8C1feB7b5kiaJd7b
@os-project-manager
os-project-manager marked this pull request as ready for review August 22, 2026 13:59
@os-project-manager
os-project-manager merged commit cb41537 into mainAug 22, 2026
3 checks passed
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites (#232)
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Studio is a third surface name the #79 naming decision does not cover

2 participants

@os-project-manager@claude
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

docs: define Studio in the glossary, make the Setup/Studio split canonical - #151

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name
Aug 22, 2026
Merged

docs: define Studio in the glossary, make the Setup/Studio split canonical#151
os-project-manager merged 1 commit into
mainfrom
claude/issue-102-studio-surface-name

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Fixes#102

Executes the 2026-08-20 maintainer ruling: option 1 — Studio survives as the named metadata-authoring surface. The product's named places are the unnamed end-user surface, Setup (administration) and Studio (authoring). All three ruled deliverables, and nothing else.

What changed (6 files, +37/-9)

1. resources/glossary.mdx gains a Studio entry in alphabetical position, between Sharing Rule and Surface. It defines the surface — route, gate, what is authored there, how many pillars, and its relation to Setup — instead of describing it. The card's stop condition was explicit about this: a describing-without-deciding entry is how this corpus grew two mutually-referential Console entries (#89). The relation is stated in both directions ("Peer of Setup, not part of it"), so neither entry can be read without the other's boundary.

2. configure/index.mdx promotes the split to a canonical statement. "Permissions are designed in Studio, assigned in Setup" was a blockquote aside above the Setup section; it is now ## Setup and Studio, a section whose body says the sentence is the canonical statement of a split that runs through the whole product, with a table giving both names' route, capability and audience side by side. The original aside's second sentence is kept verbatim underneath. The glossary entry deep-links to the new anchor.

3. The four PR #100 rewrites now name the destination:

FileWasNow
build/data/index.mdx:21**Objects → New Object** → forms**Studio → Objects → New Object** → forms
build/packages.mdx:54**Packages → New Package****Studio → Packages → New Package**
build/agents.mdx:50Or in the UI: **Agents → New Agent**.Or in the UI: **Studio → Agents → New Agent**.
configure/permissions/index.mdx:164"It surfaces as the …""Studio's Access pillar surfaces it as the …"

The last one is pillar-qualified because that is what the sibling page already says (managing-access.mdx:84, "Studio's Access pillar → Explain access") and because it is measurable: PILLAR_FOR_SURFACE_TYPE maps permission to the access pillar.

Measured, not composed — including one correction to the dispatch's assumption

Every product fact asserted here was read off the sibling repos at objectstackorigin/main2866d5f97e and objectuiorigin/main6ff0eb1.

The dispatch assumed Studio is an app at /apps/studio, a syntactic peer of Setup's /apps/setup. It is not. Studio is a dedicated route subtree of the console SPA at /_console/studio/studio, /studio/:packageId, /studio/:packageId/:tab — declared in objectui apps/console/src/App.tsx via studioRoutes, and explicitly outside the /apps/:appName/* mount, as studioEntry.ts states in prose: "today the /studio/* routes sit OUTSIDE the only mount of it (AppContent, which covers /apps/:appName/*)". A STUDIO_APP metadata app does exist (packages/platform-objects/src/apps/studio.app.ts), but packages/apps/studio/src/index.ts records that it is deliberately not default-loaded: "the console ships a dedicated Studio surface at /_console/studio/&lt;pkg&gt;/&lt;pillar&gt;, so Studio no longer needs to exist as a navigable app tile in a stock boot" — and packages/cli/src/commands/serve.ts:2470 and packages/cli/src/adr-0048-app-split.test.ts:13 say the same thing independently.

The consequence the dispatch was guarding against does not occur, which is why this did not stop. The stop condition was that the Surface entry ("There are two, not three") would need a decision this card cannot make. It does not: createConsoleStaticPlugin serves one /_console/* catch-all and every Studio path is a route inside it, so Studio is inside the UI surface, not a third one. Surface is left untouched and stays true; the new Studio entry carries the relation instead ("inside the UI served at /_console/"). Had the entry been written as the assumed /apps/studio, the glossary would have shipped a route that does not resolve.

The rest of the measured basis: the entry gate is studio.access (STUDIO_ENTRY_CAPABILITY, objectui studioEntry.ts:107, an entry-level gate, fail-closed); the four pillars are Data, Automations, Interfaces, Access (StudioDesignSurface.tsx:149); the five metadata kinds Studio creates are package, app, object, flow and permission (CreateItemDialog.tsx header); and scope is one package at a time (/studio/:packageId/:tab).

Sweep result — the dispatch's second assumption is falsified, and not fixed here

The dispatch assumed the four sites above are the only places PR #100 dropped the noun, and asked for a sweep. Answered by diffing PR #100 (git show adbcafc -U0 -- 'content/docs') and classifying every removed Console occurrence, not by enumeration. Five more sites drop a metadata-authoring destination: build/index.mdx:3, :13, :52, and build/automation/flows.mdx:9, :279. build/index.mdx:13 is the sharpest — the same "click-build" row as build/data/index.mdx:21, so after this PR one of the pair names Studio and the other does not.

All five are outside this card's declared six-file surface, so none is touched here. Filed as #148 with the full classification. Everything else PR #100 dropped is the end-user sense of the word and is correctly gone.

Separately filed as #150: reference/cli.mdx:74 documents an os studio command that the CLI does not ship (oclif discovers commands from packages/cli/src/commands/; there is no studio command, and the upstream packages/cli/README.md:45 carries the same stale claim). That line is cited in the card as evidence Studio is live; the ruling is unaffected, since it rests on studio.access and on the shipped /_console/studio surface, both measured above.

Surface discipline

Exactly the six declared files are touched. build/automation/approvals.mdx (queued for #131), configure/notifications.mdx (in flight for #132), build/interface/apps.mdx and configure/permissions/managing-access.mdx (read as the vocabulary model, not rewritten) and every locale sibling are untouched — git diff --name-only is the six.

Gates — all green on 46fc8b0, the tree this PR pushes

GateResult
pnpm install --frozen-lockfileDone in 9.1s
pnpm turbo run type-check --continueTasks: 1 successful, 1 totalcache miss, executing a4d54c7845f5b5ba
pnpm turbo run buildTasks: 1 successful, 1 totalcache miss, executing cc6753e43e7379eb
pnpm turbo run testTasks: 1 successful, 1 total — re-run with --force (cache bypass, force executing) after the first run replayed from the shared worktree cache
check-node-floor.mjs --self-test + checkexit 0; Every declared floor clears what the dependency tree requires
check-translation-ownership.mjsexit 0; This PR touches 0 translation artifact(s) and 6 other file(s)
check-translations.mjs (freshness)✓ translations gate passed — the six English edits report as locale staleness, non-blocking by design
check-translation-output.mjs --self-test + PR-scoped✓ translation output gate passed (138 pre-existing finding(s) reported) — none in the changed files

Both turbo tasks that consume content/docs report cache miss, so the greens were computed on this content rather than replayed from a sibling worktree's tree.

The glossary's /docs/configure#setup-and-studio link was verified against the built output rather than assumed: id="setup-and-studio" appears in apps/docs/.next for the configure page.

No changeset: this repo has no changeset flow. English only; locale siblings left alone per AGENTS.md.


Generated by Claude Code

…nical
Executes the 2026-08-20 maintainer ruling on #102 (option 1: Studio
survives as the named metadata-authoring surface).
- resources/glossary.mdx gains a `Studio` entry in alphabetical position
that DEFINES the surface -- route, gate, what is authored there, and
its relation to Setup -- rather than describing it. Describing without
deciding is how this corpus grew two mutually-referential `Console`
entries (#89), which the card forbids explicitly.
- configure/index.mdx promotes "Permissions are designed in Studio,
assigned in Setup" from a page callout to `## Setup and Studio`: the
canonical statement of the split, with both names' routes,
capabilities and audiences side by side.
- The four PR #100 rewrites that dropped the noun now name Studio as the
destination: build/data/index.mdx, build/packages.mdx,
build/agents.mdx, configure/permissions/index.mdx.
Every product fact asserted here was measured on the sibling repos'
origin/main (objectstack 2866d5f97e, objectui 6ff0eb1), not composed:
the route (`/studio/:packageId/:tab` inside the `/_console/` SPA), the
entry gate (`studio.access`, STUDIO_ENTRY_CAPABILITY), the four pillars
(Data, Automations, Interfaces, Access) and the five metadata kinds
Studio creates (package, app, object, flow, permission).
English only; locale siblings left alone and report stale, per AGENTS.md.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V8AcCw8C1feB7b5kiaJd7b
@os-project-manager
os-project-manager marked this pull request as ready for review August 22, 2026 13:59
@os-project-manager
os-project-manager merged commit cb41537 into mainAug 22, 2026
3 checks passed
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
os-zhuang pushed a commit that referenced this pull request Aug 29, 2026
…sites (#232)
PR #100 retired the noun `Console` corpus-wide. In five places it removed
a metadata-authoring destination and put nothing in its place. The
2026-08-20 ruling landed by PR #151 settled how such a site is repaired --
name Studio as the destination, never reintroduce `Console` -- and applied
it to its own four sites. This transcribes the same ruling to the five it
could not cover.
- build/index.mdx frontmatter `description`: "by clicking through forms"
-> "by clicking through forms in Studio" (119 chars, still a usable meta
description; it renders in `<meta name="description">`, `og:description`
and the JSON-LD block).
- build/index.mdx click-build table row: the destination goes in the
audience cell, "Admins who prefer Studio's forms". This table has THREE
columns (Path / Who's it for / Output) where the model row at
build/data/index.mdx:21 has two, so the row is not copied literally --
copying it would corrupt the table. The path name stays bare
`**Click-build**`, exactly as the model leaves it.
- build/index.mdx "What you'll never have to do": "Wire a form."
-> "Wire a Studio form.", the same noun restoration the ruling applied
elsewhere.
- automation/flows.mdx:9: "the flow builder" -> "Studio's flow builder",
matching "Studio's **Access** pillar" from the ruling's own output.
- automation/flows.mdx visual-builder section: an ADDITION, not a
replacement. "ObjectOS ships a visual flow builder" is true as it stands
-- the product does ship it -- it is merely unlocated, so the sentence is
kept and "It is Studio's **Automations** pillar." follows it.
The claim that flow authoring is Studio's was re-verified by content on
objectui `origin/main` (107babef, not the stale 6ff0eb1 the card cites):
StudioDesignSurface.tsx routes /studio/:packageId/{data|automations|
interfaces}, PILLAR_FOR_SURFACE_TYPE still maps `flow` -> `automations`,
and AutomationsPillar renders the flow preview with `editing: true`.
Everything else PR #100 dropped is the end-user/rendering sense of the
word and stays dropped. `Console` occurs zero times in both files after
this change. English only; locale siblings untouched and reported stale by
design.
Claude-Session: https://claude.ai/code/session_016TUrhcggSFrYctvp5dsV1A
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Studio is a third surface name the #79 naming decision does not cover

2 participants

@os-project-manager@claude