Skip to content

feat(runtime): MarketplaceProxyPlugin browse-only — drop the install 405 dead-end (ADR §5.2)#1568

Merged
xuyushun441-sys merged 1 commit into
mainfrom
feat/marketplace-proxy-browse-only
Jun 3, 2026
Merged

feat(runtime): MarketplaceProxyPlugin browse-only — drop the install 405 dead-end (ADR §5.2)#1568
xuyushun441-sys merged 1 commit into
mainfrom
feat/marketplace-proxy-browse-only

Conversation

@xuyushun441-sys
Copy link
Copy Markdown
Contributor

What

Removes the framework's hardcoded marketplace install-policy dead-end. MarketplaceProxyPlugin is a browse mechanism — it forwards GET/HEAD reads and carries no credentialled cloud auth. It should not pretend to own install policy.

Before: a non-GET marketplace request returned 405 marketplace_method_not_allowed — "install via cloud" — a dead-end the in-env Install button hit (framework#1548).

After: non-GET requests pass through (next()), so a host-supplied install route — mounted after this plugin via the createObjectOSStack extraPlugins seam (framework #1566) — can claim them. If none does, the app returns its normal 404 instead of a misleading policy 405.

Why now

This is the "remove framework's hardcoded policy" half of ADR §5.2, deliberately deferred until the cloud side landed + deployed. It has:

So the framework can now drop its browse-only install policy and keep only the neutral browse forwarder.

Test

pnpm --filter @objectstack/runtime exec vitest run src/cloud/marketplace-proxy-browse-only.test.ts
# 3 passed: non-GET passes through (not 405); install-local still passes through; no-control-plane still 503s

Full src/cloud suite (40 tests) stays green.

Sequencing note

Pairs with cloud PR #53 (binding + install gate, deployed) and framework #1566 (extraPlugins seam, merged). The remaining cloud-side follow-ups (bump .framework-sha; migrate apps/objectos/objectstack.config.ts from config.plugins.push to the extraPlugins seam) are tracked separately and don't block this.

🤖 Generated with Claude Code

…on-GET (ADR §5.2)

Removes the framework's hardcoded install-policy dead-end. The marketplace proxy
is a BROWSE mechanism: it forwards GET/HEAD reads and carries no credentialled
cloud auth. It must not pretend to own install *policy*.

Previously a non-GET marketplace request returned a 405
`marketplace_method_not_allowed` "install via cloud" — a dead-end the in-env
Install button hit (framework#1548). Now non-GET requests PASS THROUGH (`next()`)
so a host-supplied install route — mounted after this plugin via the
createObjectOSStack `extraPlugins` seam — can claim them; if none does, the app
returns its normal 404 instead of a misleading policy 405.

This is the "remove framework's hardcoded marketplace policy" half of ADR §5.2,
now that the cloud side has landed + deployed: ObjectStack Cloud owns install
(the `/cloud-connection/install` route + `sys_package.install_package` action +
the tiered cloud-connection gate — cloud PR #53). The framework keeps only the
neutral browse mechanism.

Test: 3 cases — non-GET passes through (not 405); install-local still passes
through; no-control-plane still 503s. Full src/cloud suite (40) stays green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented Jun 3, 2026

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

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jun 3, 2026 10:48am

Request Review

@xuyushun441-sys xuyushun441-sys merged commit 2227ea9 into main Jun 3, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants