Found while implementing #3720 (measuring what the deploy API's accepted vocabulary actually is). Filed unassigned, recording only — PD #10.
Fact
packages/data-objectstack/src/cloud.ts exports a CloudOperations class whose four methods all call into client.cloud?.*. The installed @objectstack/client@17.0.0-rc.5 exports no cloud namespace at all — its export list is ObjectStackClient, ScopedProjectClient, RealtimeAPI, QueryBuilder, FilterBuilder and their types. There is no deploy, no getDeployment, no marketplace.
The constructor's getClient is typed to return any, so every one of these optional chains resolves undefined at runtime and falls through to its literal fallback:
| method |
what it returns when the client has no cloud surface (i.e. always) |
deploy(appId, config) |
{ deploymentId: 'deploy-' + Date.now(), status: 'pending' } |
getDeploymentStatus(id) |
{ status: 'unknown' } |
searchMarketplace(...) |
[] |
installPlugin(id) |
{ success: false } |
CloudOperations and the three Cloud*Config / CloudMarketplaceEntry types are re-exported from packages/data-objectstack/src/index.ts (lines 3783-3784), so this is published public surface of @object-ui/data-objectstack. Nothing in this repo constructs it except src/v3-compat.test.ts, whose two cloud cases assert only that the fallback has the right keys — which is why the emptiness has never shown up as a failure.
Why this is graded observation-class (and why that grade may be wrong)
By the stated criterion it is dormant: no in-repo consumer wires CloudOperations, so nobody is bitten today.
The reason I would not be surprised to see this promoted: deploy() does not degrade to an error, it manufactures a plausible-looking success. A caller gets a well-formed deploymentId and status: 'pending' for an operation that never left the process, then polls getDeploymentStatus(thatId) and receives { status: 'unknown' } forever. That is the consumer-side-tolerance shape AGENTS.md #12 exists to forbid, sitting in shipped public API rather than in a private helper — a latent defect rather than merely an observation. Severity judged at filing time being unreliable, I am recording both readings and leaving the grade to triage.
Adjacent, same file, same theme
The module header still reads Cloud namespace integration for @objectstack/spec v3.0.0 / Replaces the legacy Hub namespace. The resolved spec is 17.0.0-rc.5, and the "cloud deployment, hosting, and marketplace schemas" it claims to integrate are not what the package consumes. Noted here rather than as its own card, since any disposition of the surface above settles it too.
Possible directions (left for triage)
Whichever way it goes, #3720's pin test and comment on environment stay correct — they document a deploy-target vocabulary and explicitly name the missing producer as the reason nothing is imported.
Refs #3720, PR #4151.
Generated by Claude Code
Found while implementing #3720 (measuring what the deploy API's accepted vocabulary actually is). Filed unassigned, recording only — PD #10.
Fact
packages/data-objectstack/src/cloud.tsexports aCloudOperationsclass whose four methods all call intoclient.cloud?.*. The installed@objectstack/client@17.0.0-rc.5exports nocloudnamespace at all — its export list isObjectStackClient,ScopedProjectClient,RealtimeAPI,QueryBuilder,FilterBuilderand their types. There is nodeploy, nogetDeployment, nomarketplace.The constructor's
getClientis typed to returnany, so every one of these optional chains resolvesundefinedat runtime and falls through to its literal fallback:deploy(appId, config){ deploymentId: 'deploy-' + Date.now(), status: 'pending' }getDeploymentStatus(id){ status: 'unknown' }searchMarketplace(...)[]installPlugin(id){ success: false }CloudOperationsand the threeCloud*Config/CloudMarketplaceEntrytypes are re-exported frompackages/data-objectstack/src/index.ts(lines 3783-3784), so this is published public surface of@object-ui/data-objectstack. Nothing in this repo constructs it exceptsrc/v3-compat.test.ts, whose two cloud cases assert only that the fallback has the right keys — which is why the emptiness has never shown up as a failure.Why this is graded observation-class (and why that grade may be wrong)
By the stated criterion it is dormant: no in-repo consumer wires
CloudOperations, so nobody is bitten today.The reason I would not be surprised to see this promoted:
deploy()does not degrade to an error, it manufactures a plausible-looking success. A caller gets a well-formeddeploymentIdandstatus: 'pending'for an operation that never left the process, then pollsgetDeploymentStatus(thatId)and receives{ status: 'unknown' }forever. That is the consumer-side-tolerance shape AGENTS.md #12 exists to forbid, sitting in shipped public API rather than in a private helper — a latent defect rather than merely an observation. Severity judged at filing time being unreliable, I am recording both readings and leaving the grade to triage.Adjacent, same file, same theme
The module header still reads
Cloud namespace integration for @objectstack/spec v3.0.0 / Replaces the legacy Hub namespace. The resolved spec is17.0.0-rc.5, and the "cloud deployment, hosting, and marketplace schemas" it claims to integrate are not what the package consumes. Noted here rather than as its own card, since any disposition of the surface above settles it too.Possible directions (left for triage)
CloudDeploymentConfig.environment.Whichever way it goes, #3720's pin test and comment on
environmentstay correct — they document a deploy-target vocabulary and explicitly name the missing producer as the reason nothing is imported.Refs #3720, PR #4151.
Generated by Claude Code