Skip to content

Commit 71fa166

Browse files
fix(cloud-connection,mcp): in-system copy says "this system" or drops the noun, not "this environment" (cloud#3002 ruling A) (#24413)
Fixes #24404 Clause-②: no Basis: copy only. Every HTTP status, error code, `details` object and response shape is unchanged; only human-readable text moves. ## What changed The user-facing strings in `packages/cloud-connection/src` and `packages/mcp/src` that called the running system "this environment" now follow objectstack-ai/cloud#3002 ruling A, as triage applied it (`6250167038` on #24327, confirmed for this family in `6252585695` on #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 seven `401 UNAUTHENTICATED` answers on `/api/v1/cloud-connection/*` drop the noun. The install-local `409 RESOURCE_CONFLICT` and the unmanaged-install success `note` say "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:409` pinned the old 409 prose. It now pins the named base (`'com.example.crm-copy'`), next to the code, status and `details` it already pinned. This is the only prose-pinning test that moved. - Changesets: `.changeset/24404-cloud-connection-this-system.md` and `.changeset/24404-mcp-this-system.md`, both `patch`, both `Clause-②: 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 on `origin/main` `31e7d0ba2` and are unchanged at this head. | site | before | after | clause / reason | |:--|:--|:--|:--| | `cloud-connection-plugin.ts:597` (`POST bind/start`, 401) | Sign in to this environment to connect a cloud account. | Sign in to connect a cloud account. | the system the caller is in: drop the noun (triage `6252585695` names this string) | | `cloud-connection-plugin.ts:659` (`POST bind/poll`, 401) | Sign in to this environment. | Sign in. | same | | `cloud-connection-plugin.ts:761` (`POST unbind`, 401) | Sign in to this environment. | Sign in. | same | | `cloud-connection-plugin.ts:813` (`POST install`, 401) | Sign in to this environment to install apps. | Sign in to install apps. | same | | `cloud-connection-plugin.ts:867` (`GET installation`, 401) | Sign in to this environment. | Sign in. | same | | `cloud-connection-plugin.ts:930` (`GET installed`, 401) | Sign in to this environment. | Sign in. | same | | `cloud-connection-plugin.ts:968` (`GET org-packages`, 401) | Sign in to this environment. | Sign in. | same | | `cloud-connection-plugin.ts:215` `ENVIRONMENT_NOT_FOUND_MESSAGE` (404) | Could not resolve an environment for this request host. | kept | configuration scope: a multi-environment runtime resolves an environment per request host, and the sentence pairs with the code `ENVIRONMENT_NOT_FOUND`, which is held | | `marketplace-install-local-plugin.ts:1497` (409 `RESOURCE_CONFLICT`) | … held by the environment base 'BASE' … | … held by the writable base 'BASE' … | "environment base" is not a documented name (zero hits in `docs/adr`, `content/docs`, `packages/spec/src`); the docs call this base a "writable base" (`content/docs/deployment/install-modes.mdx:132`, the `package-lifecycle` reference) | | `marketplace-install-local-plugin.ts:1497-1498`, same message, split across `+` | … or a base authored in this environment … | … or a base authored in this system … | made here, not from a package: "authored in this system" | | `marketplace-install-local-plugin.ts:1498`, same message | … whose items are this environment's own metadata. | … whose items are this system's own metadata. | the system the caller is in: "this system" | | `marketplace-install-local-plugin.ts:2562` (200 `note`, unmanaged install) | The package's metadata is now this environment's own, in the base 'BASE' … | The package's metadata is now this system's own, in the base 'BASE' … | same | | `mcp/src/metadata-completeness.ts:47` (the `warning` on a known-partial `list_objects` / `objectstack://objects` answer) | … this environment declares at least that many objects, possibly more. | … this system declares at least that many objects, possibly more. | the system the MCP caller is in: "this system" | | `mcp/src/connect-ui.ts:84` (UI bundle `description`) | … for connecting MCP clients to this environment. | … for connecting MCP clients to this system. | same | | `mcp/src/connect-ui.ts:63-64` (Connect-an-Agent `page:header` subtitle; split across `+`) | Give any MCP-capable AI client governed access to this environment — every call runs … | **kept in this PR**; chosen sentence below | coupled with `platform-objects/src/apps/translations/en.ts:270` by a byte-identity guard (next section) | | `mcp/src/skill-md.ts:36-39` `OBJECTSTACK_SKILL_DESCRIPTION` | … change data in their ObjectStack environment. | kept | a deployment addressed from outside: the portable `SKILL.md` that an external coding agent installs, naming the deployment it connects to by URL (the sense triage kept for `cli`) | | `mcp/src/skill-md.ts:62` (intro, with the deployment's label) | This skill connects you to the **ENV** ObjectStack environment. | kept | same; it names a deployment by its label | | `mcp/src/skill-md.ts:63` (intro, no label) | This skill connects you to an ObjectStack environment. | kept | same | | `mcp/src/skill-md.ts:65` template, body | An ObjectStack environment exposes its data objects … | kept | same | | `mcp/src/skill-md.ts:65` template, "When to use" | … the environment is the source of truth … | kept | same | | `cloud-connection-route-ledger.ts:115-118` (`/status` row `note`) | … is this environment bound to a cloud account? … | kept | not user-visible: package-internal data for `cloud-connection-route-ledger.conformance.test.ts`, never exported or bundled (its header, `:55-60`). Measured: the note is in 0 of the files in `packages/cloud-connection/dist`, while the new 401 text is in `index.js` and `index.cjs` | | `cloud-connection-route-ledger.ts:157-159` (`/install` row `note`) | installs a package into this environment VIA the control plane … | kept | same | | `cloud-connection-route-ledger.ts:177-179` (`/installed` row `note`) | the environment's full installed list … | kept | same; it also names the control plane's per-environment record | | `cloud-connection-route-ledger.ts:239-241` (`reseed-sample-data` row `note`) | … trigger against a remote environment. | kept | same; a deployment addressed from outside | | `marketplace-install-local-plugin.ts:2533-2536` (`logger.info`) | … copied into the environment base … | kept | a log line, outside this card | | `marketplace-install-local-plugin.ts:3709-3711` (`logger.warn`) | … the environment's metadata is the platform operator's … | kept | a log line, outside this card | | `mcp/src/mcp-server-runtime.ts:905-909` (`logger.warn`) | … would understate the environment. | kept | a log line, outside this card | | `mcp/src/mcp-server-runtime.ts:1446-1451` (`logger.warn`, the card's `:1448`) | … fewer than this environment declares. | kept | a log line, outside this card | | `telemetry-posture.ts:98` | `OS_TELEMETRY_CLIENT_ERROR_REPORTING_ENVIRONMENT` | kept | an environment-variable name, not copy | Not copy, and held by this card: the error codes `ENVIRONMENT_NOT_FOUND` (`cloud-connection-plugin.ts:532`, `:593`, `:655`, `:757`, `:805`, `:861`, `:924`, `:962`) and `ENVIRONMENT_BIND_FAILED` (`:746`), and the wire paths that carry `environment_id` or `/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 in `marketplace-install-local-plugin.ts` because `:201` is a comment and `:1498` carries the phrase twice; `mcp-http-tools.ts` (1) and `skill-prompts.ts` (1) are comments; `mcp-server-runtime.ts` (4) is the `:1448` log line and three comments. The census also reads strings that a `this environment` grep cannot see: "the environment base" (`:1497`), the route-ledger notes at `:177` and `:239`, the `ENVIRONMENT_NOT_FOUND_MESSAGE` at `:215`, the two log lines that say "the environment", and the five `skill-md.ts` uses. ## The coupled sentence: `connect-ui.ts:63` and `platform-objects` `en.ts:270` #24405 has not landed: it is open and unclaimed, and `en.ts:270` on `origin/main` `31e7d0ba2` still reads "this environment". The sentence chosen per the rule (the system the caller is in, "this system"): > Give any MCP-capable AI client governed access to this system — every call runs under the caller's own permissions and row-level security. 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.ts` holds the `en` bundle byte-identical to the page literal, because `translatePage` applies the `en` bundle over the literal. So neither file can change alone: the guard goes red, and the `en` user would see no change anyway. Measured at `9355bce52`, through `scripts/pm/os-verify-lock.sh`, with `scripts/ablation-replace.mjs` doing the mutation and its restore: - Control, unmutated: `pnpm --filter @objectstack/cli exec vitest run --maxWorkers=2 test/platform-page-i18n-parity.test.ts`: "Tests 27 passed (27)". - `connect-ui.ts:63` alone changed to the sentence above ("anchor 1 → 0, blob 400cf11 → d9173cb002db"), `@objectstack/mcp` rebuilt, then `ablation-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". - Restored ("blob == HEAD (400cf11) and git diff HEAD is empty"), rebuilt, preflight `--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, so `connect-ui.ts:63` is 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. The `zh-CN`, `ja-JP` and `es-ES` subtitles also say "this environment" (此环境, この環境, este entorno). Each locale records a source hash for the key (`pages.connect_agent.subtitle` in `*.source-hashes.ts`), and under `source-hash.ts` (#8765 Option B) a hash that disagrees with the new `en` text serves the English source. The same parity file's "rewrites the page:header copy end-to-end for a non-English locale" asserts that the `zh-CN` subtitle differs from the source. So the joint PR also owes the three translated values and their hashes. ## Readers of the changed strings, measured `git grep` over the whole tree (packages, `content/docs`, `docs/qa`, skills, examples, `.changeset`), and over objectui `origin/main` `024b7b6`, for each changed string and its fragments: - `content/docs/deployment/cloud-connection.mdx:128` quoted the sign-in 401 text. It is updated here. - `marketplace-install-local-install-modes.test.ts:409` pinned the 409 prose. It now pins the named base. `:321` pins the `logger.info` line, which is not changed, and stays as it is. - No test pins the sign-in 401 prose, the install `note`, the MCP partial-listing sentence or the bundle description. The MCP partial listing is discriminated by its code `SERVICE_UNAVAILABLE`, which is unchanged. - objectui `packages/app-shell/src/console/marketplace/marketplaceApi.ts:32` quotes the old 401 text in a comment. Nothing there parses it: the Cloud Connection panel shows `body.error.message` verbatim. - `CHANGELOG.md` entries that quote the old text are release-owned history, left as they are. - No consumer parses any of these texts. ## Verification All builds and tests ran through `scripts/pm/os-verify-lock.sh` at head `9355bce52` (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-examples` and `check:dual-build-cjs-loads`. After `pnpm 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-files` and `check:published-readme-links` were also re-run on the full build, all exit 0 ("76 built package(s) swept"). The `--ran` reconciliation: "Run reconciliation — 95 derived, 95 run, 0 NOT-MEASURED, 0 UNRUN." - The 10 declared wide-population families, all exit 0: `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`. - The artifact-roster families whose roster sits under a changed directory, plus the route-ledger census, all exit 0: `check-changeset-fixed.mjs`, `check:authz-resolver`, `check:error-code-casing`, `check:filter-alias-parity`, `check:route-ledger-census`. - `pnpm exec eslint --no-inline-config` over the five changed `.ts` files: exit 0, no output. - `test:repo` was not run locally. It belongs to CI's `Test 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 - The `logger.info` line at `marketplace-install-local-plugin.ts:2534` still says "environment base" while the 409 now says "writable base". Log lines are outside this card. Not filed. - The objectui comment at `marketplaceApi.ts:32` quotes the old 401 text. It is a comment, and per triage `6252585695` the 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 #24368's `plugin-auth` scope, not this card's. --- _Generated by [Claude Code](https://claude.ai/code/session_01SYEJqDL3NXxrJRBVqaMu9T)_ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 97cb5c5 commit 71fa166

8 files changed

Lines changed: 34 additions & 14 deletions
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
'@objectstack/cloud-connection': patch
3+
---
4+
5+
Clause-②: no
6+
7+
fix(cloud-connection): the sign-in refusals and the unmanaged-install copy no longer call the running system "this environment"
8+
9+
- **What changed.** Inside the running system, user-facing copy names the system the user is in as "this system", or drops the noun. The seven `401 UNAUTHENTICATED` answers on `/api/v1/cloud-connection/*` now read "Sign in to connect a cloud account." (`bind/start`), "Sign in to install apps." (`install`) and "Sign in." (`bind/poll`, `unbind`, `installation`, `installed`, `org-packages`), where each used to say "Sign in to this environment …". On `/api/v1/marketplace/install-local`, the `409 RESOURCE_CONFLICT` that refuses a managed install over an unmanaged copy now names the holder as "the writable base 'BASE' — an unmanaged install of this package, or a base authored in this system — whose items are this system's own metadata", and the unmanaged install's success `note` reads "The package's metadata is now this system's own, in the base 'BASE' …".
10+
- **Unchanged.** Every HTTP status, error code (`UNAUTHENTICATED`, `RESOURCE_CONFLICT`), `details` object and response shape. Server log lines are not touched.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
'@objectstack/mcp': patch
3+
---
4+
5+
Clause-②: no
6+
7+
fix(mcp): the known-partial listing warning and the Connect-an-Agent bundle description say "this system"
8+
9+
- **What changed.** Inside the running system, user-facing copy names the system the caller is in as "this system". The warning an MCP client receives with a known-partial object listing (the `objectstack://objects` resource and the `list_objects` tool) now says "this system declares at least that many objects, possibly more", and the Connect-an-Agent UI bundle's description ends "for connecting MCP clients to this system".
10+
- **Unchanged.** The `SERVICE_UNAVAILABLE` code that marks a partial listing, every payload shape, the portable `SKILL.md` (which names the deployment an outside agent connects to), and server log lines.

‎content/docs/deployment/cloud-connection.mdx‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ button:
125125
| *The request expired before it was approved. Start again.* | The code's lifetime ran out, or the cloud answered `expired_token`. |
126126
| *The connection request was denied. Start again.* | The cloud answered `access_denied`. |
127127
| *Device authorization failed: …* | The cloud ended the request with another error, named after the colon. |
128-
| *Sign in to this environment to connect a cloud account.* (or *Sign in to this environment.* while waiting) | Your session on the server has ended. |
128+
| *Sign in to connect a cloud account.* (or *Sign in.* while waiting) | Your session on the server has ended. |
129129
| *No cloud control plane configured.* | The plugin is mounted without a control-plane URL. |
130130
| a network error such as *fetch failed* | The server could not reach the cloud. |
131131

‎packages/cloud-connection/src/cloud-connection-plugin.ts‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,7 @@ export class CloudConnectionPlugin implements Plugin {
594594
}
595595
const session = await resolveSession(environmentId ?? '', c.req.raw);
596596
if (session?.authGate) return refuseHeldSession(c, session.authGate);
597-
if (!session?.userId) return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in to this environment to connect a cloud account.' } }, 401);
597+
if (!session?.userId) return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in to connect a cloud account.' } }, 401);
598598
// [#24148] Refused before any work, so a caller without the
599599
// capability cannot learn whether a control plane is configured.
600600
if (!(await holdsSetupAccess(c.req.raw, session))) return refuseWithoutSetupAccess(c);
@@ -656,7 +656,7 @@ export class CloudConnectionPlugin implements Plugin {
656656
}
657657
const session = await resolveSession(environmentId ?? '', c.req.raw);
658658
if (session?.authGate) return refuseHeldSession(c, session.authGate);
659-
if (!session?.userId) return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in to this environment.' } }, 401);
659+
if (!session?.userId) return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in.' } }, 401);
660660
// [#24148] This is the door that persists the binding.
661661
if (!(await holdsSetupAccess(c.req.raw, session))) return refuseWithoutSetupAccess(c);
662662
if (!cloudUrl) return c.json({ success: false, error: { code: 'CLOUD_UNCONFIGURED', message: 'No cloud control plane configured.' } }, 503);
@@ -758,7 +758,7 @@ export class CloudConnectionPlugin implements Plugin {
758758
}
759759
const session = await resolveSession(environmentId ?? '', c.req.raw);
760760
if (session?.authGate) return refuseHeldSession(c, session.authGate);
761-
if (!session?.userId) return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in to this environment.' } }, 401);
761+
if (!session?.userId) return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in.' } }, 401);
762762
// [#24148] Refused before the revoke and before the local clear.
763763
if (!(await holdsSetupAccess(c.req.raw, session))) return refuseWithoutSetupAccess(c);
764764

@@ -810,7 +810,7 @@ export class CloudConnectionPlugin implements Plugin {
810810
const session = await resolveSession(environmentId, c.req.raw);
811811
if (session?.authGate) return refuseHeldSession(c, session.authGate);
812812
if (!session?.userId) {
813-
return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in to this environment to install apps.' } }, 401);
813+
return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in to install apps.' } }, 401);
814814
}
815815

816816
if (!cloudUrl || !credential()) {
@@ -864,7 +864,7 @@ export class CloudConnectionPlugin implements Plugin {
864864
const session = await resolveSession(environmentId, c.req.raw);
865865
if (session?.authGate) return refuseHeldSession(c, session.authGate);
866866
if (!session?.userId) {
867-
return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in to this environment.' } }, 401);
867+
return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in.' } }, 401);
868868
}
869869

870870
let packageId = '';
@@ -927,7 +927,7 @@ export class CloudConnectionPlugin implements Plugin {
927927
const session = await resolveSession(environmentId, c.req.raw);
928928
if (session?.authGate) return refuseHeldSession(c, session.authGate);
929929
if (!session?.userId) {
930-
return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in to this environment.' } }, 401);
930+
return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in.' } }, 401);
931931
}
932932

933933
if (!cloudUrl || !credential()) {
@@ -965,7 +965,7 @@ export class CloudConnectionPlugin implements Plugin {
965965
const session = await resolveSession(environmentId ?? '', c.req.raw);
966966
if (session?.authGate) return refuseHeldSession(c, session.authGate);
967967
if (!session?.userId) {
968-
return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in to this environment.' } }, 401);
968+
return c.json({ success: false, error: { code: 'UNAUTHENTICATED', message: 'Sign in.' } }, 401);
969969
}
970970

971971
if (!cloudUrl || !credential()) {

‎packages/cloud-connection/src/marketplace-install-local-install-modes.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ describe('install-local — a managed install never takes over an unmanaged copy
406406
expect(res.status).toBe(409);
407407
expect(res.payload.error.code).toBe('RESOURCE_CONFLICT');
408408
expect(res.payload.error.details).toEqual({ namespace: 'crm', base: 'com.example.crm-copy' });
409-
expect(res.payload.error.message).toContain("held by the environment base 'com.example.crm-copy'");
409+
expect(res.payload.error.message).toContain("'com.example.crm-copy'");
410410
expect(h.register).not.toHaveBeenCalled();
411411
expect(h.syncSchemas).not.toHaveBeenCalled();
412412
expect(h.ledgerHas('com.example.crm')).toBe(false);

‎packages/cloud-connection/src/marketplace-install-local-plugin.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1494,8 +1494,8 @@ export class MarketplaceInstallLocalPlugin implements Plugin {
14941494
error: {
14951495
code: 'RESOURCE_CONFLICT',
14961496
message: `Package '${manifestId}' cannot be installed managed: its namespace '${copyBase.namespace}' is held by `
1497-
+ `the environment base '${copyBase.base}' — an unmanaged install of this package, or a base authored `
1498-
+ 'in this environment — whose items are this environment\'s own metadata. A managed '
1497+
+ `the writable base '${copyBase.base}' — an unmanaged install of this package, or a base authored `
1498+
+ 'in this system — whose items are this system\'s own metadata. A managed '
14991499
+ 'install would hand that namespace to the package and stop serving them. Keep the copy (it follows '
15001500
+ `no upgrade), or uninstall the base '${copyBase.base}' first; its items go with it.`,
15011501
details: { namespace: copyBase.namespace, base: copyBase.base },
@@ -2559,7 +2559,7 @@ export class MarketplaceInstallLocalPlugin implements Plugin {
25592559
},
25602560
}
25612561
: {}),
2562-
note: `The package's metadata is now this environment's own, in the base '${result.targetPackageId}', `
2562+
note: `The package's metadata is now this system's own, in the base '${result.targetPackageId}', `
25632563
+ 'and it follows no upgrade. Refresh the console to see it.',
25642564
},
25652565
}, 200);

‎packages/mcp/src/connect-ui.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export const CONNECT_AGENT_UI_BUNDLE = {
8181
type: 'plugin',
8282
scope: 'system',
8383
name: 'Connect an Agent UI',
84-
description: 'Connect-an-Agent page + Setup and Account navigation for connecting MCP clients to this environment.',
84+
description: 'Connect-an-Agent page + Setup and Account navigation for connecting MCP clients to this system.',
8585
pages: [CONNECT_AGENT_PAGE],
8686
// Both entries point at the one `connect_agent` page and share the item id.
8787
// That is legal and deliberate, read off the fold rather than assumed: the

‎packages/mcp/src/metadata-completeness.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export function metadataPartialListingSentence(plural: string, served: number):
4444
return (
4545
`The metadata service could not be fully read, so this listing of ${plural} is known to be INCOMPLETE. `
4646
+ `${served} ${served === 1 ? 'is' : 'are'} being served and the total is withheld — `
47-
+ `this environment declares at least that many ${plural}, possibly more. `
47+
+ `this system declares at least that many ${plural}, possibly more. `
4848
+ 'Retry once the metadata service is reachable.'
4949
);
5050
}

0 commit comments

Comments
 (0)