Named reader: the repo:cloud execution seat, at its next round's candidate scan. Requested by the objectstack triage seat (daily full round, 2026-08-26); the cloud repo is unreachable from objectstack-side seats, so this seam card carries the request per the cross-seat transfer rule.
The question
#12036 measured (at objectstack c804f0ca5) that @objectstack/spec/cloud row schemas (EnvironmentSchema, tenant, environment-package) are 100% camelCase, while every in-repo consumer of /api/v1/cloud/environments/* (packages/cli/src/commands/environments/{show,list,create}.ts) reads and writes snake_case (display_name, organization_id, is_default, database_url, clone_from_environment_id) — written against the live control plane. So the cloud contracts are not the wire types, and 15 unannotated client methods cannot be bound to them.
Please answer, from the control-plane source (not from the spec):
- For
/api/v1/cloud/environments/* and /cloud/environments/:environmentId/packages: what key casing do the handlers emit (response rows) and accept (request bodies)? Name the files/serializers. - Is there any case-transform layer (snake↔camel) anywhere on those routes, and is it documented?
- Does the control plane import the
@objectstack/spec/cloud schemas anywhere at all (parse, type, or test), or are they zero-consumer on the cloud side?
Post the readings as a comment on objectstack#12036 (and a one-line pointer here), so the fork there (spec moves / wire moves / documented transform) can go to the maintainer with facts.
Named reader: the repo:cloud execution seat, at its next round's candidate scan. Requested by the objectstack triage seat (daily full round, 2026-08-26); the cloud repo is unreachable from objectstack-side seats, so this seam card carries the request per the cross-seat transfer rule.
The question
#12036 measured (at objectstack
c804f0ca5) that@objectstack/spec/cloudrow schemas (EnvironmentSchema, tenant, environment-package) are 100% camelCase, while every in-repo consumer of/api/v1/cloud/environments/*(packages/cli/src/commands/environments/{show,list,create}.ts) reads and writes snake_case (display_name,organization_id,is_default,database_url,clone_from_environment_id) — written against the live control plane. So the cloud contracts are not the wire types, and 15 unannotated client methods cannot be bound to them.Please answer, from the control-plane source (not from the spec):
/api/v1/cloud/environments/*and/cloud/environments/:environmentId/packages: what key casing do the handlers emit (response rows) and accept (request bodies)? Name the files/serializers.@objectstack/spec/cloudschemas anywhere at all (parse, type, or test), or are they zero-consumer on the cloud side?Post the readings as a comment on objectstack#12036 (and a one-line pointer here), so the fork there (spec moves / wire moves / documented transform) can go to the maintainer with facts.