Summary
GET /api/workspaces/{workspaceId}/teams in the v1beta3 workspace API still $refs the v1beta1 TeamPage, so the operation's response is documented in snake_case even though the v1beta2 team construct - the one meshery-cloud actually serves - is camelCase.
schemas/constructs/v1beta3/workspace/api.yml:
operationId: getTeamsOfWorkspace
...
$ref: "../../v1beta1/team/api.yml#/components/schemas/TeamPage"
schemas/constructs/v1beta1/team/api.yml TeamPage publishes page_size / total_count, and its Team publishes created_at / updated_at / deleted_at. schemas/constructs/v1beta2/team/api.yml publishes pageSize / totalCount / createdAt / updatedAt / deletedAt.
This is visible in the generated TypeScript, where one file carries both spellings: constructs/v1beta3/workspace/Workspace.d.ts types operations.getTeamsOfWorkspace 200 with page_size / total_count / created_at / updated_at / deleted_at, while constructs/v1beta2/team/Team.d.ts types components.schemas.TeamPage with pageSize / totalCount and Team with createdAt / updatedAt / deletedAt.
Why it matters
meshery-cloud now aliases its team model straight to the canonical v1beta2 construct - server/models/model_aliases_org.go:
// Team is the canonical schemas contract for a team (meshery/schemas v1beta2).
type Team = team.Team
and the Phase 4 wire-format flip (fix(wire-format): flip Credential/Organization/Team/MesheryFilter/sibling JSON tags to canonical camelCase (Phase 4 tail)) removed the snake_case aliases from the server. So a consumer that generates its client from this operation gets field names the server stopped emitting, and the mismatch is silent: the fields simply read undefined.
We hit exactly that downstream. Sistent's Team type carried teamId and team_name, and the bulk-delete button read both off a team record; neither has existed on the wire since the flip, so both pushed undefined into the delete payload. Fixed in layer5io/sistent#1780 by deriving the local type from the canonical v1beta2 construct.
Suggested resolution
Point getTeamsOfWorkspace (and any sibling v1beta3 workspace operations still reaching into v1beta1/team) at ../../v1beta2/team/api.yml#/components/schemas/TeamPage, and regenerate.
Filed from the sistent schema-consumer audit (layer5io/sistent#1780).
Summary
GET /api/workspaces/{workspaceId}/teamsin the v1beta3 workspace API still$refs the v1beta1TeamPage, so the operation's response is documented in snake_case even though the v1beta2 team construct - the one meshery-cloud actually serves - is camelCase.schemas/constructs/v1beta3/workspace/api.yml:schemas/constructs/v1beta1/team/api.ymlTeamPagepublishespage_size/total_count, and itsTeampublishescreated_at/updated_at/deleted_at.schemas/constructs/v1beta2/team/api.ymlpublishespageSize/totalCount/createdAt/updatedAt/deletedAt.This is visible in the generated TypeScript, where one file carries both spellings:
constructs/v1beta3/workspace/Workspace.d.tstypesoperations.getTeamsOfWorkspace200 withpage_size/total_count/created_at/updated_at/deleted_at, whileconstructs/v1beta2/team/Team.d.tstypescomponents.schemas.TeamPagewithpageSize/totalCountandTeamwithcreatedAt/updatedAt/deletedAt.Why it matters
meshery-cloud now aliases its team model straight to the canonical v1beta2 construct -
server/models/model_aliases_org.go:and the Phase 4 wire-format flip (
fix(wire-format): flip Credential/Organization/Team/MesheryFilter/sibling JSON tags to canonical camelCase (Phase 4 tail)) removed the snake_case aliases from the server. So a consumer that generates its client from this operation gets field names the server stopped emitting, and the mismatch is silent: the fields simply readundefined.We hit exactly that downstream. Sistent's
Teamtype carriedteamIdandteam_name, and the bulk-delete button read both off a team record; neither has existed on the wire since the flip, so both pushedundefinedinto the delete payload. Fixed in layer5io/sistent#1780 by deriving the local type from the canonical v1beta2 construct.Suggested resolution
Point
getTeamsOfWorkspace(and any sibling v1beta3 workspace operations still reaching intov1beta1/team) at../../v1beta2/team/api.yml#/components/schemas/TeamPage, and regenerate.Filed from the sistent schema-consumer audit (layer5io/sistent#1780).