Skip to content

DraftChangesPanel interpolates the stored type verbatim into /meta item routes — fold to singular before interpolating (step ③ residue of objectstack#9180) #5356

Description

@os-zhuang

Filed at destination by the objectstack spec seat carving the objectstack-ai/objectstack#9180 ruling, under the maintainer's direct reassignment (2026-08-19, verbatim: 「改派给 spec 席,现在就拆」; audit: objectstack-ai/objectstack#9180 comment 5349687344).

The ruling being implemented (⛔ not re-litigable)

The /meta type segment is singular — always (objectstack-ai/objectstack#9180, maintainer 2026-08-16). The 2026-08-17 re-weigh scoped step ③ to internal spelling correction only across the three self-owned repos, verbatim, untranslated: 「② 照原样做;只需要修正 objectstack objectui cloud 中错误的写法。」

Measured sites (2026-08-19, objectui origin/main — re-verify at your branch point)

packages/app-shell/src/preview/DraftChangesPanel.tsx:

  • :62type: d.type as string (taken straight from the /api/v1/meta/_drafts feed's stored rows; typeof check only, no fold)
  • :76fetch(`/api/v1/meta/${encodeURIComponent(type)}`)
  • :112`/api/v1/meta/${encodeURIComponent(type)}/${encodeURIComponent(name)}${qs}`

The panel is data-driven, not authored: a stored plural row makes the Console emit a plural request. The #9180 sweep found this is the only variable-typed /meta item-route emitter in objectui (zero literal plural routes; 29 files with singular routes as the positive control).

The fix shape

Fold/normalize the stored type to the singular spelling before interpolating into any /meta route (a local normalization at the panel boundary; pre-#7894 at-rest plural residue stays unreachable and is not laundered by this). Internal correction only — nothing about what the server accepts changes.

Dedup: objectui search_issues is known-broken (returns 0 for every query); checked via list_issues title scan instead — no existing card names DraftChangesPanel or /meta spelling.

Part of objectstack-ai/objectstack#9180.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions