Skip to content

docs(deployment): rewrite publish-and-preview to name both ways a metadata app reaches the platform - #8962

Merged
os-project-manager merged 1 commit into
mainfrom
claude/issue-8910-publish-and-preview
Aug 16, 2026
Merged

docs(deployment): rewrite publish-and-preview to name both ways a metadata app reaches the platform#8962
os-project-manager merged 1 commit into
mainfrom
claude/issue-8910-publish-and-preview

Conversation

@os-project-manager

Copy link
Copy Markdown
Collaborator

Fixes#8910

content/docs/deployment/publish-and-preview.mdx documented catalog publish/install and never mentioned OS_ARTIFACT_URL; self-hosting.mdx documented the artifact-pinned boot and never mentioned the catalog. A reader landing on either page could not learn the other option existed. This rewrites this page as the one whose subject is "a metadata app is a separate thing from the platform; here is how it gets in."

What the page now does

  1. Opens with the independence — the app compiles to its own versioned artifact and is released by you; the platform is released on its own train. The only place the two clocks touch is the artifact's declared engines.protocol range.

  2. Names both mechanisms side by side in one comparison table, then states the rule for choosing. The rule is the deliverable, not the table:

    Is this app the reason the runtime exists? Yes ⇒ pin the artifact — the deployment defines the app. No ⇒ install from the catalog — the runtime is a platform that receives apps.

    Plus three tie-breakers (auditable bytes ⇒ pin; no-restart / several apps ⇒ install; air-gapped ⇒ both work, so decide on the first two).

  3. Keeps compile ⇒ publish ⇒ install ⇒ preview. The flow is correct and is framed, not replaced. Section 3 now names both install targets (a Cloud environment, and a running runtime via os package install), because "install" was the half the choosing rule needed defined.

OS_ARTIFACT_URL's operational detail stays in self-hosting.mdx (Axis A, owned by #8911) and is linked via the stable #artifact-pinned-boot-os_artifact_url anchor — the same anchor cli.mdx and environment-variables.mdx already use. No Option N heading text is referenced. Nothing was moved across the card boundary; self-hosting.mdx is untouched here.

Measured before writing (the issue text was treated as a clue, not a spec)

The card asked whether the two mechanisms can be combined and what happens when both are configured. Read from source, not inferred:

  • They can coexist. The install surface is mounted on its own conditions (resolveCloudUrl(), or the offline arm) in packages/cli/src/commands/serve.ts — never gated on the artifact-pinned boot resolved earlier in the same file. A runtime booted from OS_ARTIFACT_URL still accepts catalog installs of other apps.
  • Same manifest id is a refusal, not a merge.findConflict in packages/cloud-connection/src/marketplace-install-local-plugin.ts returns user-code for any manifest id present in the engine registry at kernel:ready before ledger rehydration — where a booted artifact's app lands — and the install answers 409 MANIFEST_CONFLICT. Pinned by marketplace-install-local-conflict.test.ts.
  • Artifact-source precedence is --artifactOS_ARTIFACT_URLOS_ARTIFACT_PATHcwd/dist/objectstack.json, and OS_ARTIFACT_URL also outranks a local objectstack.config.ts.
  • A catalog address is not an artifact URL. The catalog/R2 manifest endpoints answer with a { success, data } API envelope; the artifact resolver unwraps only the { schemaVersion, metadata } build envelope. Called out in a callout so nobody pastes one into the other.
  • engines.protocol incompatibility is a refusal on every seam — boot (artifact-pinned), load/install (assertProtocolCompat throws), rehydrate (package skipped).

The card's framing holds; premise_still_valid: true.

Verification

Gates run at the pushed head b46c28da8:

  • pnpm check:docs-audit-scope — scope in sync, 177 hand-written docs
  • pnpm check:role-word — 43 baselined files, no new occurrences (this page carries 0)
  • pnpm check:nul-bytes — 5935 files scanned, no raw control bytes
  • pnpm check:doc-anchors — 218 internal fragment links across 395 files all resolve (not in the dispatched list; re-derived and run because this change adds anchor links)

node scripts/pm/dispatch-gates.mjs content/docs/deployment/publish-and-preview.mdx re-derived exactly the dispatched families and added none.

Docs-only ⇒ skip-changeset.

Generated by Claude Code


Generated by Claude Code

`publish-and-preview` documented catalog publish/install and said nothing
about `OS_ARTIFACT_URL`; `self-hosting` documented the artifact-pinned boot
and said nothing about the catalog. Neither page told a reader the other
option existed, let alone which one they wanted.
Rewrite this page as the one whose subject is "a metadata app is a separate
thing from the platform; here is how it gets in": the independence framing up
front, both mechanisms side by side, and a stated rule for choosing between
them. The compile -> publish -> install -> preview flow is kept and framed,
not replaced.
The combination behaviour is measured from the sources rather than assumed:
the install surface mounts independently of how the runtime obtained its own
app, two sources naming the same manifest id answer 409 MANIFEST_CONFLICT
instead of merging, and artifact sources have a fixed precedence
(--artifact > OS_ARTIFACT_URL > OS_ARTIFACT_PATH > cwd/dist).
`OS_ARTIFACT_URL`'s operational detail stays in `self-hosting` and is linked,
not moved.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011RB4waLuNbdruCo6X9oobm
@vercel

vercelBot commented Aug 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 16, 2026 3:07am

Request Review

@os-project-manageros-project-manager added documentation Improvements or additions to documentation skip-changeset PR has no user-facing published change; bypasses the changeset gate and removed size/m documentation Improvements or additions to documentation labels Aug 16, 2026 — with Claude
@github-actionsgithub-actionsBot added the documentation Improvements or additions to documentation label Aug 16, 2026
@os-project-manager
os-project-manager marked this pull request as ready for review August 16, 2026 03:10
@os-project-manager
os-project-manager added this pull request to the merge queueAug 16, 2026
Merged via the queue into main with commit 90197e1Aug 16, 2026
36 checks passed
@os-project-manager
os-project-manager deleted the claude/issue-8910-publish-and-preview branch August 16, 2026 03:22
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationskip-changesetPR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

docs(deployment): rewrite publish-and-preview to name both ways a metadata app reaches the platform

2 participants

@os-project-manager@claude