Repository navigation
fix(cloud-connection,mcp): in-system copy says "this system" or drops the noun, not "this environment" (cloud#3002 ruling A) - #24413
Conversation
… the noun, not "this environment" The seven cloud-connection 401 UNAUTHENTICATED answers drop the noun; the install-local 409 names the holder as the writable base authored in this system, and the unmanaged-install note says the metadata is this system's own. In mcp, the known-partial listing warning and the Connect-an-Agent bundle description say "this system". The deployment guide's troubleshooting row quotes the new sign-in text. The 409 test pins the named base instead of the old prose. Statuses, codes and shapes are unchanged. Claude-Session: https://claude.ai/code/session_01SYEJqDL3NXxrJRBVqaMu9T Co-authored-by: Claude <noreply@anthropic.com>
📓 Docs Drift Check3 anchor(s) derived from 2 changed package(s); no hand-written page names any of them, so this run has nothing to list — not a clean bill of health. This check sees only pages that NAME a derived anchor: one that documents this change in prose, or enumerates it in an authoring dialect, names none and stays invisible to it on every run. What this run could not see
Coarse fallback — 15 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin dd2ca3f02db89f8d6581dabbc94ddc138a0b4b68 && git checkout dd2ca3f02db89f8d6581dabbc94ddc138a0b4b68
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin ee882b845fc44a72fcdc85d6eb1ab251ee7462c0 9355bce5235e141b0659806cc4bfc6ce58a3c2bd && git checkout -B drift-repro ee882b845fc44a72fcdc85d6eb1ab251ee7462c0 && git merge --no-ff 9355bce5235e141b0659806cc4bfc6ce58a3c2bd
node scripts/docs-audit/affected-docs.mjs --json ee882b845fc44a72fcdc85d6eb1ab251ee7462c0 |
席位核对ACCEPT (lane review) ·
Generated by Claude Code |
Fixes #24404
Clause-②: no
Basis: copy only. Every HTTP status, error code,
detailsobject and response shape is unchanged; only human-readable text moves.What changed
The user-facing strings in
packages/cloud-connection/srcandpackages/mcp/srcthat called the running system "this environment" now follow objectstack-ai/cloud#3002 ruling A, as triage applied it (6250167038on #24327, confirmed for this family in6252585695on #24368): "made here, not from a package" reads "authored in this system"; the system the caller is in drops the noun or says "this system"; a deployment or configuration scope keeps "environment".cloud-connection: the seven401 UNAUTHENTICATEDanswers on/api/v1/cloud-connection/*drop the noun. The install-local409 RESOURCE_CONFLICTand the unmanaged-install successnotesay "this system".mcp: the known-partial listing warning and the Connect-an-Agent bundle description say "this system".content/docs/deployment/cloud-connection.mdx:128: the troubleshooting table quoted the old 401 text as what "the panel says". It now quotes the new text.marketplace-install-local-install-modes.test.ts:409pinned the old 409 prose. It now pins the named base ('com.example.crm-copy'), next to the code, status anddetailsit already pinned. This is the only prose-pinning test that moved..changeset/24404-cloud-connection-this-system.mdand.changeset/24404-mcp-this-system.md, bothpatch, bothClause-②: no.The census, one row per string
The census covers every string literal, template literal and
+chain in the 28 non-test source files of the two packages whose joined text contains "environment" (case-insensitive). It was taken by walking the TypeScript AST, so a phrase split across a concatenation is read as one string. Two strings here are split that way: the install-local 409 ('… a base authored '+'in this environment …') and the Connect-an-Agent subtitle. Line numbers are onorigin/main31e7d0ba2and are unchanged at this head.cloud-connection-plugin.ts:597(POST bind/start, 401)6252585695names this string)cloud-connection-plugin.ts:659(POST bind/poll, 401)cloud-connection-plugin.ts:761(POST unbind, 401)cloud-connection-plugin.ts:813(POST install, 401)cloud-connection-plugin.ts:867(GET installation, 401)cloud-connection-plugin.ts:930(GET installed, 401)cloud-connection-plugin.ts:968(GET org-packages, 401)cloud-connection-plugin.ts:215ENVIRONMENT_NOT_FOUND_MESSAGE(404)ENVIRONMENT_NOT_FOUND, which is heldmarketplace-install-local-plugin.ts:1497(409RESOURCE_CONFLICT)docs/adr,content/docs,packages/spec/src); the docs call this base a "writable base" (content/docs/deployment/install-modes.mdx:132, thepackage-lifecyclereference)marketplace-install-local-plugin.ts:1497-1498, same message, split across+marketplace-install-local-plugin.ts:1498, same messagemarketplace-install-local-plugin.ts:2562(200note, unmanaged install)mcp/src/metadata-completeness.ts:47(thewarningon a known-partiallist_objects/objectstack://objectsanswer)mcp/src/connect-ui.ts:84(UI bundledescription)mcp/src/connect-ui.ts:63-64(Connect-an-Agentpage:headersubtitle; split across+)platform-objects/src/apps/translations/en.ts:270by a byte-identity guard (next section)mcp/src/skill-md.ts:36-39OBJECTSTACK_SKILL_DESCRIPTIONSKILL.mdthat an external coding agent installs, naming the deployment it connects to by URL (the sense triage kept forcli)mcp/src/skill-md.ts:62(intro, with the deployment's label)mcp/src/skill-md.ts:63(intro, no label)mcp/src/skill-md.ts:65template, bodymcp/src/skill-md.ts:65template, "When to use"cloud-connection-route-ledger.ts:115-118(/statusrownote)cloud-connection-route-ledger.conformance.test.ts, never exported or bundled (its header,:55-60). Measured: the note is in 0 of the files inpackages/cloud-connection/dist, while the new 401 text is inindex.jsandindex.cjscloud-connection-route-ledger.ts:157-159(/installrownote)cloud-connection-route-ledger.ts:177-179(/installedrownote)cloud-connection-route-ledger.ts:239-241(reseed-sample-datarownote)marketplace-install-local-plugin.ts:2533-2536(logger.info)marketplace-install-local-plugin.ts:3709-3711(logger.warn)mcp/src/mcp-server-runtime.ts:905-909(logger.warn)mcp/src/mcp-server-runtime.ts:1446-1451(logger.warn, the card's:1448)telemetry-posture.ts:98OS_TELEMETRY_CLIENT_ERROR_REPORTING_ENVIRONMENTNot copy, and held by this card: the error codes
ENVIRONMENT_NOT_FOUND(cloud-connection-plugin.ts:532,:593,:655,:757,:805,:861,:924,:962) andENVIRONMENT_BIND_FAILED(:746), and the wire paths that carryenvironment_idor/cloud/environments/(:550,:891,:939,:978).Comments, not strings, so outside the census:
marketplace-install-local-plugin.ts:201,mcp-http-tools.ts:94,mcp-server-runtime.ts:863,:1558,:1590,skill-prompts.ts:61. The counts the dispatch asked about are lines:git grep -c -i 'this environment'reads 3 inmarketplace-install-local-plugin.tsbecause:201is a comment and:1498carries the phrase twice;mcp-http-tools.ts(1) andskill-prompts.ts(1) are comments;mcp-server-runtime.ts(4) is the:1448log line and three comments. The census also reads strings that athis environmentgrep cannot see: "the environment base" (:1497), the route-ledger notes at:177and:239, theENVIRONMENT_NOT_FOUND_MESSAGEat:215, the two log lines that say "the environment", and the fiveskill-md.tsuses.The coupled sentence:
connect-ui.ts:63andplatform-objectsen.ts:270#24405 has not landed: it is open and unclaimed, and
en.ts:270onorigin/main31e7d0ba2still reads "this environment". The sentence chosen per the rule (the system the caller is in, "this system"):The plan was for whichever card lands second to match the first. Measurement shows that cannot work.
packages/cli/test/platform-page-i18n-parity.test.tsholds theenbundle byte-identical to the page literal, becausetranslatePageapplies theenbundle over the literal. So neither file can change alone: the guard goes red, and theenuser would see no change anyway. Measured at9355bce52, throughscripts/pm/os-verify-lock.sh, withscripts/ablation-replace.mjsdoing the mutation and its restore:pnpm --filter @objectstack/cli exec vitest run --maxWorkers=2 test/platform-page-i18n-parity.test.ts: "Tests 27 passed (27)".connect-ui.ts:63alone changed to the sentence above ("anchor 1 → 0, blob 400cf11586d7 → d9173cb002db"),@objectstack/mcprebuilt, thenablation-dist-preflight.mjs("marker present in 2 built files"): "Tests 2 failed | 25 passed (27)". The two that failed: "keeps the en bundle byte-identical to the metadata literals" and "holds the en bundle in verbatim parity with the page sources".--absent("marker absent from all 6 built files", "working tree clean against HEAD"): "Tests 27 passed (27)".So the two strings must move in ONE PR. This card's hold-off keeps
packages/platform-objects/**out of it, soconnect-ui.ts:63is left unchanged here, with the sentence above named for the joint edit. #24405 remains open. The joint edit is also wider than two lines, read from source and not measured. Thezh-CN,ja-JPandes-ESsubtitles also say "this environment" (此环境, この環境, este entorno). Each locale records a source hash for the key (pages.connect_agent.subtitlein*.source-hashes.ts), and undersource-hash.ts(#8765 Option B) a hash that disagrees with the newentext serves the English source. The same parity file's "rewrites the page:header copy end-to-end for a non-English locale" asserts that thezh-CNsubtitle differs from the source. So the joint PR also owes the three translated values and their hashes.Readers of the changed strings, measured
git grepover the whole tree (packages,content/docs,docs/qa, skills, examples,.changeset), and over objectuiorigin/main024b7b6, for each changed string and its fragments:content/docs/deployment/cloud-connection.mdx:128quoted the sign-in 401 text. It is updated here.marketplace-install-local-install-modes.test.ts:409pinned the 409 prose. It now pins the named base.:321pins thelogger.infoline, which is not changed, and stays as it is.note, the MCP partial-listing sentence or the bundle description. The MCP partial listing is discriminated by its codeSERVICE_UNAVAILABLE, which is unchanged.packages/app-shell/src/console/marketplace/marketplaceApi.ts:32quotes the old 401 text in a comment. Nothing there parses it: the Cloud Connection panel showsbody.error.messageverbatim.CHANGELOG.mdentries that quote the old text are release-owned history, left as they are.Verification
All builds and tests ran through
scripts/pm/os-verify-lock.shat head9355bce52(the final commit):pnpm exec turbo run build --filter='@objectstack/mcp...' --filter='@objectstack/cloud-connection...' --filter='@objectstack/platform-objects...' --concurrency=2: "Tasks: 35 successful, 35 total".pnpm --filter @objectstack/cloud-connection exec vitest run --maxWorkers=2: "Test Files 52 passed (52) · Tests 614 passed (614)".pnpm --filter @objectstack/mcp exec vitest run --maxWorkers=2: "Test Files 40 passed (40) · Tests 479 passed (479)".pnpm --filter @objectstack/cloud-connection typecheck: exit 0.pnpm --filter @objectstack/mcp typecheck: exit 0 ("6 file(s) / 53 error(s) / 8 pinned signature(s) held").Gates, run after the final commit at head
9355bce52, each exit code captured before any pipe:node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(no paths) derived 95 commands from the 8 changed paths. All 95 exited 0. Two of them first answered exit 3, PREREQUISITE NOT MET, on the closure build:check:skill-examplesandcheck:dual-build-cjs-loads. Afterpnpm exec turbo run build --filter='!@objectstack/docs' --concurrency=2("76 successful, 75 cached") they were re-run with exit 0: "262 prose examples type-check across 3 surface(s)", and "111 published require entry point(s) across 69 package(s) load".check:dts-closure,check:sourcemap-no-sources-content,check:lean-entry-closure,check:published-filesandcheck:published-readme-linkswere also re-run on the full build, all exit 0 ("76 built package(s) swept"). The--ranreconciliation: "Run reconciliation — 95 derived, 95 run, 0 NOT-MEASURED, 0 UNRUN."check:init-service-contract,check:live-db-isolation,check:meta-type-normalized,check:optional-error-sink,check:resume-authority-declared,check:runner-env-posture,check:settings-bind-window,check:startup-registry-verdict,check:verify-stand-in,check:wildcard-fallthrough.check-changeset-fixed.mjs,check:authz-resolver,check:error-code-casing,check:filter-alias-parity,check:route-ledger-census.pnpm exec eslint --no-inline-configover the five changed.tsfiles: exit 0, no output.test:repowas not run locally. It belongs to CI'sTest Core, and this diff changes none of that project's tests.No ablation: the change is copy, and no test pins the behaviour. The one measurement that mutated code is the coupled-sentence guard probe above.
Acceptance notes
logger.infoline atmarketplace-install-local-plugin.ts:2534still says "environment base" while the 409 now says "writable base". Log lines are outside this card. Not filed.marketplaceApi.ts:32quotes the old 401 text. It is a comment, and per triage6252585695the objectui mirror is a pointer, not a card here.packages/plugins/plugin-auth/src/auth-manager.ts:2527("You are not authorized to sign in to this environment.") sits in platform copy, the rest of cloud#3002 ruling A: about 50 non-comment "this environment" strings outside #24327 and #24360 (cloud-connection, plugin-auth, service-settings, platform-objects, mcp, plugin-security, spec) need the per-string reading #24368'splugin-authscope, not this card's.Generated by Claude Code