Repository navigation
fix(i18n,app-shell): the same-origin marketplace hint stops claiming the runtime serves the catalog (objectui#11726) - #11740
Merged
objectstack-fleet[bot] merged 2 commits intoOct 6, 2026
Conversation
…the runtime serves the catalog (objectui#11726) `cloudUrl: ''` is the producer's "stay on this origin" spelling. The CLI's cloud-connected `os serve` answers it while its marketplace proxy forwards to the default control plane, so "This runtime serves the marketplace catalog itself" was false there. The hint now says only that the catalog is reached through this runtime, in all ten packs, and names no host: no failure the proxy returns carries the upstream host in a structured place. runtime-config's two docblocks and the page's own comment stop reading `''` as "this runtime is the cloud". The two tests that name the key and the retired-5504 docblock are updated, and a new pin reads the real en and zh packs over the measured proxy failure shapes. Claude-Session: https://claude.ai/code/session_01FngvPpdrnhHMdHHq6vwwju Co-authored-by: Claude <noreply@anthropic.com>
…igin objectui#11731 landed edits to all ten locale packs; the claim asks this branch to merge main once it does. Claude-Session: https://claude.ai/code/session_01FngvPpdrnhHMdHHq6vwwju Co-authored-by: Claude <noreply@anthropic.com>
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
objectstack-fleet
Bot
deleted the
claude/issue-11726-marketplace-hint-same-origin
branch
October 6, 2026 18:30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #11726
Clause-②: no
What changed
On a runtime whose config reports
cloudUrl: '', a catalog load that failed for a reachability reason drew "This runtime serves the marketplace catalog itself. Check that the runtime is online."''is the producer's "stay on this origin" spelling. The CLI's cloud-connectedos servereports it while its marketplace proxy forwards tocloud.objectos.ai, so on that runtime the sentence named the wrong server.marketplace.load.failedHintSameOriginnow says only that the catalog is reached through this runtime, plus the advice to check that the runtime is online and can reach the catalog. All ten packs change. Inen: "The marketplace catalog is reached through this runtime. Check that the runtime is online and can reach the catalog." No key is added, removed or moved.runtime-config.ts: theAppShellRuntimeConfig.cloudUrlandgetCloudBasedocblocks no longer say the runtime "is the cloud".''means requests stay on this origin, and the runtime may serve the catalog or proxy a control plane it does not name.MarketplacePage.tsx: comments only, at thecloudBaseread and on the hint branch. The rendering logic is unchanged.marketplace.load.failedHintConfigured, which names it.The hint stays true on each
''runtime:features.marketplace: false): it draws the disabled state and never this hint.Why "and can reach the catalog"
On the proxying runtime, every hint-showing failure except "no answer" is a
502/503/504that the runtime itself answered, so "check that the runtime is online" alone points at a server that just replied. The added clause covers the hop behind it without naming the hop or claiming one exists.Naming the host: none, measured
The ruling allowed naming the upstream host where a failure carries it. No failure carries it in a structured place, so the hint names none and
failedHintConfiguredis not reused. Measured by bundlingMarketplaceProxyPluginfrom objectstack803764a36f(a ref fetched for this run; objectstack is not edited), driving its real handler with a stubbed upstream, and recording the response:causenamescloud.objectos.ai)content-type: application/json{"success":false,"error":{"code":"MARKETPLACE_PROXY_FAILED","message":"fetch failed"}}content-type,x-cache: BYPASScontent-type,x-cache: BYPASScontent-type: text/plain;charset=UTF-8,x-cache: BYPASSThe proxy drops the error's
cause, adds no field naming the upstream, and forwards onlycontent-type/cache-control/etag/last-modified/varyplusx-cache. A browser-side network failure has no response at all. The resolved plane under noOS_CLOUD_URLwashttps://cloud.objectos.ai. Reading a host out of the message would parse server prose as data, so nothing does. A new pin case puts a host in the server's message and asserts it stays in the cause line and never reaches the hint.Tests
All at head
4658b17unless marked. That head is the merge ofmain02a3896, made after objectui#11731 landed in the same ten packs.git diff 02a3896 HEADis exactly this change's 17 files.pnpm exec vitest run packages/app-shell/ packages/i18n/at1a1bdd3(this change before the merge):Test Files 1115 passed | 1 skipped (1116),Tests 11511 passed | 22 skipped (11533), lock VERDICT command-exit 0.pnpm exec vitest run packages/i18n/ packages/app-shell/src/console/marketplace/ packages/app-shell/src/__tests__/at4658b17:Test Files 116 passed (116),Tests 1809 passed | 13 skipped (1822), exit 0. The merge brought only changes that had already been through CI.MarketplacePage.sameOriginHint-11726.test.tsxpasses all 12 cases:cloudUrl: '': the proxy's 502 envelope, a forwarded 503, an empty 504, no answer at all, and a host named in the server prose;enandzh.pnpm --workspace-concurrency=2 --filter '@object-ui/app-shell^...' run buildexits 0. Thenpnpm --filter @object-ui/i18n type-checkandpnpm --filter @object-ui/app-shell type-checkboth exit 0. Both runtsc --noEmit && tsc -p tsconfig.test.json, and--listFilesOnlyputs the three touched app-shell test files and the touched i18n test in those programs.@object-ui/i18nlocales/en.d.ts, the one literal type offailedHintSameOriginchanges to the new sentence. No key is added or removed..ts/.tsxfiles.eslint --format jsonreports 16 files, 0 errors and 2 warnings. Both warnings are inMarketplacePage.tsxand both are present at the merge base:react-hooks/set-state-in-effectonvoid load(), andno-explicit-anyoncatch (e: any). The population is the config's**/*.{ts,tsx}block. Type-aware linting is not enabled (tseslint.configs.recommended, noparserOptions.project), and no custom rule reads another file, so this diff cannot move an untouched file's verdict.4658b17, all exit 0:check:i18n-keys,check:i18n-drift(1envalue changed, 9 packs followed),check:i18n-dead-keys,check:i18n-designer-parity;check:new-line-citations(0 new),check:control-bytes;check:changeset-claims,check:pending-changeset-literals,check-changeset-no-major,check-changeset-presence,check-changeset-fixed,check-changeset-overwrite;check:vi-mock-specifiers,check:vi-mock-inherit,check:vi-mock-override-shape,check:test-path-roots;check-governed-queue-guard --testover the 17 paths: NOT GOVERNED.Ablation
Run from the committed tree, with
scripts/ablation-replace.mjs(objectstack) doing each mutation and its proven restore. The direction was predicted before each run.enandzh. Predicted: the 8 same-origin claim cases red on the "routes through this runtime" assertion; the 2 host-in-prose cases and the 2 configured-plane cases green. Observed:Tests 8 failed | 4 passed (12), red onexpected 'This runtime serves the marketplace c…' to match /through this runtime/iandexpected '本运行时自己提供应用市场目录。请检查运行时是否在线。' to match /通过本运行时/. Restore:en.tsblob2305b97065cb== HEAD,zh.tsblob94c6684df880== HEAD,git diff HEADempty, status clean.enkeeps "through this runtime" but adds "which serves it itself". This proves the negative half can fail on its own. Predicted: the 4enclaim cases red on the no-serving-claim assertion, everything else green. Observed:Tests 4 failed | 8 passed (12), red onnot to match /\bserves?\b|\bitself\b/i. Restore: blob == HEAD,git diff HEADempty.@object-ui/i18nresolves topackages/i18n/srcthrough the root vitest alias, so nodistrebuild sat between mutation and measurement.Acceptance notes
Same reading, outside this card's surface, left untouched. These sites gate install and sample-data behaviour, not this hint. Whether that behaviour is right on a proxying
''runtime was not measured here.marketplaceApi.ts: theinstallPackagedocblock ("When the runtime is the cloud") andcloudConsoleUrl()("''when this runtime has no upstream cloud").MarketplacePackagePage.tsx: the reseed/purge gate comment ("Only offer them when the runtime IS the cloud (same-origin)").Noted, not filed; no carrier.
The producer's docblock, objectstack side.
RuntimeConfigPluginConfig.controlPlaneUrlin@objectstack/cloud-connectionsays an explicit''declares "this runtime IS the cloud" (same-origin for marketplace + install). The same file's constructor comment, the package README andServe.RUNTIME_CONFIG_OPTIONSall say "stay on this origin", and the CLI's cloud-connected arm passes''beside a mounted proxy. This is reported to the seat as an out-of-scope finding; it is not edited here.No new runtime-config key, per the ruling. Nothing measured here says the console needs to know that an upstream exists: the hint is true without knowing.
The
{{url}}hint is unreachable on the CLI's cloud arm. That arm reports'', so a host can appear in the hint only if the producer reports one. That is the ruling's ⛔ on a new key, kept as ruled.NOT MEASURED:
check:eager-locale-catalogues, reason: it needs a built console bundle (PREREQUISITE NOT MET). This diff changes no import, which is the composition that gate weighs. The byte budget (performance-budget.yml) is CI's.skip-changesetis not used..changeset/11726-marketplace-hint-same-origin.mddeclares@object-ui/i18n: patch: a published pack value changes, and no key, export or prop moves. The app-shell files change only comments and tests.Generated by Claude Code