Skip to content

docs(skills): the os package publish row points app authors at the marketplace handbook - #28429

Merged
os-zhuang merged 2 commits into
mainfrom
claude/project-thread-ce0xlt
Oct 31, 2026
Merged

os-zhuang merged 2 commits into
mainfrom
claude/project-thread-ce0xlt

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

domain:server#2 · os-project-manager · session_0186vfjHHMsRXC9EUT9hTFMo

Requested by Leehom · project thread

Fixes #27331

Clause-②: no (governed prose only, no accept set moves; the dev declares)
Metadata-protocol: none

维护者速读

  • 改了什么:skills/objectstack-platform/references/operations.md 的 os package publish 一行加了一句,指向 Marketplace handbook(/docs/deployment/marketplace-handbook):listing 文件、README、审核、以及客户管理员会经过的每个界面。为付 token 棘轮,删掉了同文件 cloud-connection 引文块的尾巴(LocalManifestSource 账本、runtime-identity bind v2),那是插件内部机制,应用作者不碰。
  • 为什么改:写应用的 agent 先读 skills;没有这一句,它永远找不到那页,发布时不知道 listing 由什么组成、审核查什么、客户管理员装进去会经过什么(北极星第④步)。PR docs(deployment): a marketplace handbook for app authors #27321 落地 handbook 时刻意没碰受管面,欠下这一句。
  • 风险与回滚:只动一个 markdown 文件、两处文字,附 @objectstack/skills patch changeset;无代码、无 spec。回滚即还原本 PR。
  • 先看:skills/objectstack-platform/references/operations.md 第 106 行(新句与链接),第 109–114 行(删掉的引文块尾巴)。
  • 两分钟验证:node scripts/check-skills-token-ratchet.mjs,预期该文件 3124 tokens (ceiling 3125; headroom 1),全绿。
  • 需要你做的:Tier H(skills/**),本 PR 保持 draft,需要你批准后由席位落地。附:卡上的 rider(openapi include 两行)在 PR docs(skills): teach connector_action input as an evaluated value slot and the openapi include allowlist #28012 已改好,本 PR 不再动它,见 Acceptance notes。

What changes

One file, skills/objectstack-platform/references/operations.md, two hunks:

  1. The os package publish row (Environments & deploy table) gains one sentence: "Listing file, README, review and every screen the customer's administrator meets: Marketplace handbook". This is the reference file where an app-authoring agent reads about os package publish (the card allows the reference file in place of SKILL.md; SKILL.md names the marketplace service token once and nothing about publishing). The link form matches the four existing docs links in skills/**, all https://objectstack.ai/docs/.... The page is on main and listed in content/docs/deployment/meta.json.
    • Reader: the app-authoring agent at the moment it runs os package publish.
    • Mistake it prevents: publishing with no listing file or README (the publish answers with marketplace policy violations), and shipping an app with no idea what review checks or what the customer's administrator goes through (credentials, sample data, enable/disable, upgrade).
  2. Paid for under the skills token ratchet by deleting, in the same file, the tail of the cloud-connection blockquote: ", and maintain LocalManifestSource (a local desired-state ledger) plus runtime-identity bind v2 (environment-less self-hosted binding)". Those are plugin internals an app author never acts on; their home is the plugin's own source (packages/cloud-connection/src/connection-credential-store.ts names the LocalManifestSource ledger and the runtime-identity-binding ADR; cloud-connection-plugin.ts carries the binding). What the blockquote still teaches (the package, its plugins, the install-local endpoint os package install targets, the Installed Apps page and Setup nav) is unchanged. No re-wrap: the two hunks are a content addition and a content deletion.

Skills readings (two, as the landing rule asks)

Reading Before (origin/main 5da3a8c) After (head)
operations.md lines 202 200
operations.md tokens (ratchet unit, ceil(bytes/4)) 3117 / ceiling 3125 (headroom 8) 3124 / ceiling 3125 (headroom 1)
Whole package, all skills/*/SKILL.md lines summed 4607 4607 (no SKILL.md touched)
Whole shipped bundle, tokens 219807 219814

Why

The card: a follow-up PR #27321 owed when it landed the handbook and deliberately left the governed skills/** line out. The agent that writes an app reads the skills first; without this line it never finds the page that says what a listing is made of and what the customer's administrator will go through, North Star step ④.

Tests

No code changes; no package test suite reads this file. The gate that prices it:

node scripts/check-skills-token-ratchet.mjs                     exit 0
  ✓ skills/objectstack-platform/references/operations.md is 3124 tokens (ceiling 3125; headroom 1).
  ✓ 56 authored bundle file(s) within their ceilings; 10 generator-owned file(s) and 28 eval fixture(s) measured, not ratcheted.

Acceptance notes

  • The rider on the card (the openapi include lines) is already delivered on main, so this PR does not touch the two automation files the claim's file surface lists. The epic PM's request 6488631558 asked that, once PR feat(connector-openapi): declarative providerConfig.include operation allowlist #27387 merged, skills/objectstack-automation/references/integration-recipes.md line 63 ("The openapi provider has no include key — the trimmed document is the allowlist.") and case 1's expected_output in skills/objectstack-automation/evals/integrations-declared.json be rewritten in the same skills PR. Read at origin/main 5da3a8c on 2026-10-31, both already teach include: the recipe reads "providerConfig.include allowlists operation keys as the mcp provider's does (absent = every operation; a non-array or unknown entry is fatal)", and the eval reads "(or providerConfig.include names those three operation keys, the mcp provider's allowlist meaning, where a non-array or unknown entry is fatal)". The commit list for both files names PR docs(skills): teach connector_action input as an evaluated value slot and the openapi include allowlist #28012 (merged 2026-10-30, "docs(skills): teach connector_action input as an evaluated value slot and the openapi include allowlist") as the change, and its body says in so many words that items 3, 4 and 5 are those two lines. Measured against packages/connectors/connector-openapi/src/openapi-provider.ts on main (resolveIncludeList: absent returns undefined, a non-array or a non-string or empty entry throws; an entry the document does not carry is refused after generation), the published text is exact. Nothing to change; the token ratchet shows integration-recipes.md at headroom 0, so a re-touch would have cost a deletion for no gain.
  • Governed surface. node scripts/pm/check-governed-merges.mjs --branch claude/project-thread-ce0xlt, exit 3: "derived from git diff --name-only --no-renames 5da3a8ce31 1212152e32 (three-dot): 1 path(s). governed-surface predicate: 1 of 1 path(s) hit the register (13 surfaces govern objectstack). ⛔ GOVERNED — a human merge is the review record for this PR. landing tier: H(人合). skills/** ×1 — the published skills catalog: skills/objectstack-platform/references/operations.md. size: 6 changed line(s) (+2 / -4) ≤ 3000". The PR stays draft for the maintainer's approval; no seat readies, queues or arms it.
  • Changeset: the change ships in @objectstack/skills (dist/skills via sync-catalog.mjs, and dist is in its files[]), so .changeset/27331-skills-marketplace-handbook-link.md carries a patch bump with the two declaration lines; no skip-changeset label (the one sent on the pr_create was removed).
  • pnpm lint scoped to touched packages: no package is touched (the diff is one markdown file under skills/, which eslint does not lint), so there is no scoped lint run to cite; pnpm lint repo-wide belongs to CI's Lint & Repo Gates.
  • Nothing else found; no cards to file.

Verification

Local gate subset (derived by node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack from the diff at 1212152; each exit code captured before any pipe; reconciled with --ran):

node scripts/check-closing-keyword-parity.mjs :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0
node scripts/check-comment-mask-corpus.mjs :: exit 0
node scripts/check-doc-route-spelling.mjs --advisory :: exit 0
node scripts/check-doc-route-spelling.mjs --self-test :: exit 0
node scripts/check-dts-emitted.mjs --self-test :: exit 0
node scripts/check-skills-token-ratchet.mjs :: exit 0
node scripts/check-skills-token-ratchet.mjs --self-test :: exit 0
node scripts/ci/assert-turbo-remote-cache.mjs --self-test :: exit 0
node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0
node scripts/ci/prune-turbo-cache.mjs --self-test :: exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0
pnpm --filter @objectstack/spec run check:skill-refs :: exit 0
pnpm check:agent-test-spelling :: exit 0
pnpm check:ci-filter-parity :: exit 0
pnpm check:corpus-claim-drift :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:doc-authoring :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:dts-closure :: exit 3
pnpm check:dual-build-cjs-loads :: exit 3
pnpm check:gitlink-declared :: exit 0
pnpm check:lean-entry-closure :: exit 3
pnpm check:nul-bytes :: exit 0
pnpm check:pm-governed-merges :: exit 0
pnpm check:pm-skill-id-lint :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:role-word :: exit 0
pnpm check:skill-compatibility :: exit 0
pnpm check:skill-frame-sync :: exit 0
pnpm check:skill-identifier-liveness :: exit 0
pnpm check:sourcemap-no-sources-content :: exit 3
pnpm check:watch-hint-literal :: exit 0

node scripts/pm/dispatch-gates.mjs --ran: "33 derived famil(ies) accounted for — 29 run, 4 NOT-MEASURED (4 DERIVED from a recorded exit 3)". The four exit-3 families (check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:sourcemap-no-sources-content) read every package's built dist/ and refuse before measuring on a tree with no full build; this diff touches no package, so no build closure is owed locally (os-dev.md local-verification scope ①) and CI's Lint & Repo Gates runs them on the PR. check:doc-formula-expressions does read skills/, so @objectstack/formula and @objectstack/lint were built under the verify lock (VERDICT command-exit 0, 1m40s) and the gate re-run: exit 0. Governed check and the token ratchet are quoted under Acceptance notes and Tests.

Head d9530dd (the changeset commit) re-derived the gates: 44 derived, 40 run green (the changeset adds 11 families, all exit 0), 4 NOT MEASURED (the four exit-3 families above). Token ratchet re-run at d9530dd: exit 0, headroom 1.

Every CI family runs on this PR's check-runs; the seat reads them there.

Human Minimum

  • 1. Schemas start as Zod; packages/spec holds no runtime logic. (No schema touched.)
  • 2. Every name I added uses the casing for its kind. (No name added.)
  • 3. No formatter ran; pnpm lint passes. (Nothing in the diff is lint input; CI runs the repo-wide lint.)
  • 4. One issue, one branch off an up-to-date main, one pull request.
  • 5. A change that publishes carries a changeset, and both declaration lines are filled in here and in the changeset. (A patch changeset for @objectstack/skills carries both lines; they are also above.)
  • 6. packages/spec touched: its generated artifacts are regenerated and committed. (Not touched.)
  • 7. No hand edits to content/docs/references/, packages/*/CHANGELOG.md or content/docs/releases/.
  • 8. Title, body and comments are in English (the 维护者速读 block is the Chinese maintainer digest the landing rule asks for).
  • The Before Submitting list in CONTRIBUTING.md is done.

Generated by Claude Code

…rketplace handbook

The app-authoring agent reads `os package publish` in
skills/objectstack-platform/references/operations.md and never found the
page that says what a listing is made of (objectstack.manifest.json, the
README), what review checks, and what the customer's administrator goes
through. One link line on that row names it.

Paid for under the skills token ratchet by deleting the cloud-connection
blockquote's tail (the LocalManifestSource ledger and runtime-identity
bind v2), which describes plugin internals an app author never acts on
and whose home is the plugin's own source comments.

Claude-Session: https://claude.ai/code/session_01FEkQ5p7yCAhAMSXLu1fXaZ
Co-authored-by: Claude <noreply@anthropic.com>
…ook line

skills/** ships inside @objectstack/skills (dist/skills via sync-catalog.mjs,
and dist is in its files[]), so a skills-only change releases and owes a
patch changeset; the skip-changeset label sent on the PR create was wrong
and is removed in the same round.

Claude-Session: https://claude.ai/code/session_01FEkQ5p7yCAhAMSXLu1fXaZ
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet objectstack-fleet Bot removed the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 31, 2026
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#2 · os-project-manager · session_0186vfjHHMsRXC9EUT9hTFMo

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: d9530dd0e3f70ae5434f403bf49f45bb202eb39e
Local-runs: probe — node scripts/check-skills-token-ratchet.mjs on a detached worktree of the head, to read the ratchet verdict the dev quotes from the tree instead of from prose (worktree removed afterwards)
Scope: skills/objectstack-platform/references/operations.md + content/docs/deployment/marketplace-handbook.mdx, content/docs/deployment/meta.json, apps/docs/lib/source.ts, packages/cloud-connection/src/local-manifest-source.ts, packages/cloud-connection/src/cloud-connection-plugin.ts, packages/cloud-connection/src/connection-credential-store.ts, docs/adr/0003-package-as-first-class-citizen.md, packages/skills/package.json, packages/connectors/connector-openapi/src/openapi-provider.ts, skills/objectstack-automation/references/integration-recipes.md, skills/objectstack-automation/evals/integrations-declared.json, .changeset/27331-skills-marketplace-handbook-link.md

Face: reviewFace on the PR's two paths returns the rules face (hits.rules = skills/objectstack-platform/references/operations.md, hits.schema empty); the changeset is a prose face and is read here only for its package, bump and declaration lines. PR user.login is objectstack-fleet[bot], so no third-party author note is owed. No earlier record, claim or hold names this head on the PR or the card.

① Derived judgments

  • Accept set: unchanged. The diff is two hunks in one published skill reference plus a changeset. No packages/spec/**, no code, no frontmatter, no new key taught. Clause-②: no and Metadata-protocol: none are the right declarations; the PR body's line reads as declared / no / arm null through clause2-line.mjs, so the parenthetical after no is not mistaken for a narrowing arm. Correct.
  • Published surface: @objectstack/skills. packages/skills/package.json ships dist (built by scripts/sync-catalog.mjs from skills/**), so the text change reaches customers through that package and owes a changeset. The order ruled skip-changeset; the dev named the conflict and followed os-dev.md (published = what files[] ships), with .changeset/26475-skills-teach-queues-assignment-rules.md as the precedent and check-empty-changeset.mjs GREEN 3 as the gate's own reading. The deviation is declared in the dev report and the label was removed; the head carries the changeset. Correct.
  • Governed surface: Tier H. check-governed-merges --test on the two paths: one path hits the register (skills/**), the changeset does not. The PR is draft, no auto-merge is armed, and the maintainer's merge is the landing record. Correct.
  • Link target. content/docs/deployment/marketplace-handbook.mdx exists on main, content/docs/deployment/meta.json lists marketplace-handbook, and apps/docs/lib/source.ts mounts content/docs at baseUrl: '/docs', so the published route is /docs/deployment/marketplace-handbook. The absolute https://objectstack.ai/docs/... form is the one the ten existing docs links in skills/** use (for example skills/objectstack-data/rules/security.md to /docs/deployment/tenancy-modes), and it is the only form that resolves for an agent that installed the skills outside this repository. Correct.
  • Rider: already on main, correctly left untouched. skills/objectstack-automation/references/integration-recipes.md lines 70 to 72 read "providerConfig.include allowlists operation keys as the mcp provider's does (absent = every operation; a non-array or unknown entry is fatal)", and case 1 of evals/integrations-declared.json carries the matching sentence. git log on both files names PR docs(skills): teach connector_action input as an evaluated value slot and the openapi include allowlist #28012 (merged; merge commit 99fa527e6) as the change, and its body items 3 to 5 are those lines. Against packages/connectors/connector-openapi/src/openapi-provider.ts: resolveIncludeList returns undefined when absent and throws on a non-array or on a non-string or empty entry (lines 73 to 83); an entry the document does not carry is refused after generation (lines 300 to 311). The published text is a faithful summary. Touching those files again would have cost a deletion under the ratchet (integration-recipes.md is at headroom 0) for no change in meaning. Correct.
  • Skills readings. The dev's before/after table (202 to 200 lines, 3117 to 3124 tokens of a 3125 ceiling, no SKILL.md touched) matches what the diff shows and what the probe measured. Correct.

② Semver level

@objectstack/skills: patch. Two sentences of guidance in a reference file: one pointer added, one descriptive tail removed; nothing an agent declares or a runtime reads changes, no eval, frontmatter or ceiling moves. The changeset names the right package, the right bump, and carries Clause-②: no and Metadata-protocol: none at line start, the same shape as the precedent changeset. The PR body's declarations agree with it. Consistent.

③ Boundary flags

  • open_questions: none raised. The dev's four deviations are answered as follows.
  • No assignee / reviewer through GitHub MCP. Right by os-dev.md and the order; the seat hands the draft to the maintainer. Closed.
  • Rider untouched. Verified above against main and against the provider source. Closed.
  • skip-changeset ruling versus os-dev.md. The file wins and the head reflects it; the PR body's four owed edits (Acceptance notes bullet, Human Minimum item 5, the maintainer digest risk-and-rollback line, the Verification tally of 44 derived / 40 run / 4 not measured) are already present in the body as read now, so nothing remains for the seat to patch there. Closed.
  • Four gate families not measured locally (check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:sourcemap-no-sources-content): they read every package's built dist/ and this diff touches no package; CI's Lint & Repo Gates owns them on the PR. Accepted.
  • Check-runs on this head at the time of this read: 24 success (including Lint & Repo Gates, PR-body guards, Dogfood Regression Gate), 18 skipped (UI and labelling jobs the diff does not reach), 4 still in progress (Check Changeset, Test Core (1/8), Type Check · consumer gates, Type Check · workspace), none failed. Landing clause ② (every check green) is the seat's read at landing time, not a condition this record can discharge early.
  • Headroom after this PR is 1 token on operations.md. Not a defect, but the next edit to this file pays before it adds. Noted for the lane.
  • Changeset and PR-body prose, outside this face: the changeset's "Before" bullet and the PR body's "mistake it prevents" say the handbook tells the author "what review checks"; the handbook itself says review's checks are the control plane's business and documents only --submit, the visibility it needs and the statuses the CLI prints. The governed sentence in the skill says only "review", which is accurate. For the seat's sentence-by-sentence ACCEPT of the prose faces; not a must-fix on the reviewed face.

④ Design judgment

skills/objectstack-platform/references/operations.md, judged against the handbook on main, the cloud-connection source it summarises, and the card's acceptance (an app-authoring agent, at os package publish, finds the page that says what a listing is made of and what the customer's administrator goes through).

  • The new sentence is truthful to the page. "Listing file, README, review and every screen the customer's administrator meets" maps one for one onto the handbook's sections: "The listing file: objectstack.manifest.json", "The README the listing depends on", "Publish and submit for review" (the --submit flag, marketplace visibility, the three listing statuses), and "The customer's side", nine numbered steps that each name the Console screen or runtime route (Setup → Browse Marketplace, Install to cloud…, install mode, dependency check, credentials, sample data, Setup → Installed Apps enable/disable, upgrade, uninstall). The page's own description line is the same list. Nothing in the sentence promises what the page does not hold.
  • Placement is where the reader is. SKILL.md names marketplace once, as a service token in the requires table (line 350 on main), and says nothing about publishing; the os package publish row of the Environments & deploy table is the line an agent reads when it is about to publish. The card allowed the reference file for exactly this reason. The link sits after the row's existing description (ADR-0008 P3), so the command's meaning is unchanged and the pointer is additive.
  • The deletion loses nothing an app author acts on. The removed tail said the plugins "maintain LocalManifestSource (a local desired-state ledger) plus runtime-identity bind v2 (environment-less self-hosted binding)". Read in the source: local-manifest-source.ts is the self-hosted runtime's on-disk ledger under .objectstack/installed-packages/, consumed by MarketplaceInstallLocalPlugin and exported for hosts and reconcilers; the runtime-identity binding is the cloud-minted durable identity the plugin negotiates during registration (cloud-connection-plugin.ts, connection-credential-store.ts). Neither is a key an app declares, a flag any command in this table takes, or a screen the author or the administrator meets; the removed text named no path, no flag and no behaviour to choose. The operator action that touches the binding, os register, keeps its own row. The ledger keeps its home in ADR-0003's revision note and in the source headers. What the blockquote still teaches is the actionable part: the install-local endpoint that os package install targets, the Installed Apps page and the marketplace Setup nav. The shortened sentence reads cleanly.
  • Nothing misleads a third-party agent installing the published skills. The link is absolute and resolves outside the repository; the text is English, teaches only what main ships, carries no tracker number, and the handbook it points to is itself on main (PR docs(deployment): a marketplace handbook for app authors #27321, with the later "Disabling a module" section). An agent following the link learns that review is entered through --submit rather than by every publish, which is the one thing the short word "review" could otherwise be read to imply.
  • Ratchet. Probe on the head: operations.md 3124 of 3125 tokens (headroom 1), 56 authored files within ceilings, exit 0. No ceiling moved and no line was re-wrapped; the two hunks are one addition and one deletion.

No must-fix found.

Implemented-by: claude/project-thread-ce0xlt
Reviewed-by: session_0186vfjHHMsRXC9EUT9hTFMo

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#2 · os-tesla · session_01L9qibw58ehQ2gRHP2h2Puz

Contract-review-claim: session_01L9qibw58ehQ2gRHP2h2Puz · head d9530dd0e3f70ae5434f403bf49f45bb202eb39e · 2026-10-31T15:44Z

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#2 · os-project-manager · session_0186vfjHHMsRXC9EUT9hTFMo

席位核对

ACCEPT · domain:server seat 2 · os-project-manager · session_0186vfjHHMsRXC9EUT9hTFMo · 2026-10-31T15:45Z · head d9530dd0 · #27331

The maintainer's standing authorisation for landing reviewed PRs, verbatim: 「按照 pm-dispatch 规则复核过的都授权」. This PR is Tier H: that authorisation does not reach it. It stays draft until the maintainer approves.

  1. Shape:
    • A draft against main with no assignees, Fixes #27331, and a patch changeset for @objectstack/skills. No skip-changeset label.
    • check-governed-merges --pr 28429 reads ⛔ GOVERNED, skills/** ×1, +14 / −4. Landing tier H(人合).
    • The claim (6545196812) names this PR's branch, claude/project-thread-ce0xlt.
  2. Against the order:
    • One sentence added. The os package publish row of objectstack-platform's operations reference now points app authors at the Marketplace handbook. The link resolves to the published route.
    • Paid under the token ratchet by deleting the cloud-connection note's tail, which names only plugin internals an app author never acts on. 3124 of 3125 tokens.
    • The rider is already on main. The openapi include lines were delivered by PR docs(skills): teach connector_action input as an evaluated value slot and the openapi include allowlist #28012 and match resolveIncludeList, so this PR leaves them alone.
    • The order's skip-changeset ruling was wrong, and the dev was right to depart from it. skills/** ships inside @objectstack/skills. The seat has corrected its order template, and the seat edited this PR's body to match the head.
  3. Contract review: owed at CONTRACT_REVIEW_TIER (governed rules text). PASS on this head, 6545577299. One note, not blocking: the changeset and body prose say the handbook covers "what review checks", which the governed skill text itself does not claim.
  4. Gates:
    • Locally, the dev ran 44 derived families: 40 exit 0 and 4 NOT MEASURED (whole-workspace dist readers, which CI runs).
    • CI on head d9530dd0: 30 success, 18 skipped, 0 red. The state is clean.
  5. Overlap: no other open PR touches skills/objectstack-platform/references/operations.md.
  6. Next:
    • ⛔ No seat flips it ready, enqueues it or arms auto-merge. The maintainer's approval (or merge) is the review record.
    • After it merges, the landing record goes on the card and the claim is released.

Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

domain:server#2 · os-tesla · session_01L9qibw58ehQ2gRHP2h2Puz

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: d9530dd0e3f70ae5434f403bf49f45bb202eb39e
Local-runs: none
Scope: skills/objectstack-platform/references/operations.md (the os package publish row gains one sentence and the Marketplace handbook link; the cloud-connection blockquote loses its LocalManifestSource / runtime-identity bind v2 tail), .changeset/27331-skills-marketplace-handbook-link.md (@objectstack/skills patch)

Inputs: card #27331 (the Skills-docs follow-up PR #27321 owed; triage 6487593861 p2 domain:skills; the epic PM's rider 6488631558 on the openapi include lines; the cross-lane claim 6545196812 by domain:server#2 with no skills seat online, Tier H named, contract review owed; the dev reports 6545394131 and its correction 6545487551 adding the changeset), PR #28429 (body with the two skills readings and the governed-surface read; 2 files, +14/−4, the diff read whole), the 48 check-runs on this head (read 2026-10-31T15:46Z: all 48 runs completed, none failed, none cancelled, none in progress; success: Build Core, Check Changeset, Dogfood Regression Gate, Governed Surface Queue Guard, Lint & Repo Gates, Lint · CI, release & engine gates, Lint · ESLint, Lint · PM dispatch-gates, Lint · docs & code guards, Lint · repo & tooling gates, Lint · scoped · query-options erasure, Lint · scoped · slot lookup & corpus, Lint · scoped · tooling self-tests, Live E2E UI, PR-body guards (claim · duplicate · Part-of · single-writer path), Plan Test Core shards, Test Core, Test Core (all 8), Test UI, Type Check · consumer gates, Type Check · debt ledger, Type Check · source gates, Type Check · workspace, TypeScript Type Check, filter; skipped: 18.x upgrade harness (opt-in), Auto Label, Build & E2E UI, Build Docs, Build UI Deps, Check PR Size, Dogfood Regression Gate (matrix shard/3), Dogfood Verify CLI, Lint UI, Packed-tarball smoke (opt-in), Schedule gate · skip when a green push run covers the commit, Temporal Conformance (live PG + MySQL), Test UI (matrix shard/16), Type Check UI, UI Published Artifacts), and the tree on main and at this head: content/docs/deployment/marketplace-handbook.mdx exists and content/docs/deployment/meta.json lists it; the ten existing docs links under skills/** all take the https://objectstack.ai/docs/... form the new one uses; LocalManifestSource and the runtime-identity binding live in packages/cloud-connection/src (cloud-connection-plugin.ts, connection-credential-store.ts, local-manifest-source.test.ts), so the deleted tail has a home; operations.md at this head is 12494 bytes = 3124 tokens against the ratchet row ['skills/objectstack-platform/references/operations.md', 3125] in scripts/check-skills-token-ratchet.mjs, so the ceiling holds with headroom 1 and no ceiling moves; the rider's two lines (integration-recipes.md and integrations-declared.json case 1) already teach providerConfig.include on main (PR #28012), so the claim's two automation files are rightly untouched. No file of this PR moved on main since the merge-base; the head is mergeable and clean.

① Derived judgments

  • The sentence sends the right reader to the right page - right. The row an app-authoring agent reads when it runs os package publish now names what the handbook covers (listing file, README, review, the customer administrator's screens) and links the page that exists on main under the deployment section, in the link form every other docs link in the skills uses. It adds no claim about behaviour the page does not make; the handbook's content stays the handbook's.
  • The deletion is the right payment - right. The removed clause named two plugin internals (LocalManifestSource, runtime-identity bind v2) an app author never acts on; what the blockquote still teaches (the package, its plugins, the install-local endpoint, the Installed Apps page, the Setup nav) is unchanged, and the internals keep their home in the plugin's own source. Under the shrink-only ratchet the file goes 3117 → 3124 of 3125, no ceiling is raised and no SKILL.md line count moves.
  • The rider is satisfied without a change - right. Both lines the epic PM asked to be rewritten already read providerConfig.include on main through PR docs(skills): teach connector_action input as an evaluated value slot and the openapi include allowlist #28012, and the dev measured them against resolveIncludeList; re-touching integration-recipes.md at headroom 0 would have cost a deletion for nothing.
  • Clause-②: no and Metadata-protocol: none - accepted. Governed prose only; nothing an author writes and no accept set moves. The @objectstack/skills changeset is right because the catalog ships in dist/skills through sync-catalog.mjs, and the earlier skip-changeset label was rightly removed.
  • Check-runs as gate verdicts - read as above; every latest run per name on this head completed green or skipped, the skills token ratchet and Check Changeset among them.

② Semver level

  • @objectstack/skills patch - accepted. A reference sentence and a link in the shipped catalog.

③ Boundary flags

  • Tier H, human approval owed - skills/** is a GOVERNED surface; the PR stays draft until a GOVERNED_APPROVER (os-zhuang or hotlong) approves, and the seat then lands it. No reviewer is requested on the PR (the seat's order forbids GitHub MCP writes); Tesla's routing asks for os-zhuang to be requested when he is the approver.
  • PR body edits - the body already carries the changeset wording the corrected report asked for; nothing owed there.
  • Headroom 1 - the next sentence into operations.md costs a deletion; noted for whoever touches it next.

④ Design judgment

  • Tried: whether the link should go in SKILL.md instead (it names the marketplace token once and says nothing about publishing; the reference row is where the agent is at the moment of publishing, and the card allows the reference file); whether the deleted clause was the only safe payment (the other candidates in the file are command rows an agent acts on). Nothing to add.

Verdict reasoning. One sentence and one link in the row an app author reads at publish time, pointing at a page that exists on main in the catalog's own link form, paid for by a clause about plugin internals that keep their home in source, with the ratchet ceiling unmoved, the rider already delivered on main, the changeset right for a shipped catalog, and every check on this head green or skipped.

Implemented-by: claude/project-thread-ce0xlt
Reviewed-by: session_01L9qibw58ehQ2gRHP2h2Puz

VERDICT: PASS

@os-zhuang
os-zhuang marked this pull request as ready for review October 31, 2026 20:41
@os-zhuang
os-zhuang added this pull request to the merge queue Oct 31, 2026
Merged via the queue into main with commit 96d12ec Oct 31, 2026
49 checks passed
@os-zhuang
os-zhuang deleted the claude/project-thread-ce0xlt branch October 31, 2026 21:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

skills: point skills/objectstack-platform at the new marketplace handbook (/docs/deployment/marketplace-handbook), the Skills-docs follow-up #27321 owes

2 participants