You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[finding] os explain view's example teaches a flat view literal — ViewSchema is a CONTAINER (list / form / listViews / formViews) #15171
Found by the catalog sweep landed for #14811, which parses every SCHEMAS entry's example in packages/cli/src/commands/explain.ts against its real schema. Rewriting catalog entries was ruled out of scope on that card (triage comment 5520209463, step 3), so this is filed unassigned for triage. Suggested domain: domain:cli.
Measured
ViewSchema (@objectstack/spec/ui) rejects the view entry's example:
[] unrecognized_keys :: Unrecognized key(s) on this view container: `type`, `layout`, `columns`.
- `type` belongs to a single VIEW, not to the container. Wrap it:
`defineView({ list: { type, data, columns, ... } })`, or name it —
`defineView({ listViews: { my_view: { ... } } })`. The container's own keys
are `list`, `form`, `listViews`, `formViews`.
- `columns` belongs to a single VIEW, not to the container. [same guidance]
Why this one is not a typo
This is not a drifted key name — the entry teaches the wrong level. Its required / optional tables describe a single view (name, object, type, layout, columns, filters, sort) while the authorable unit ViewSchema validates is the per-object container that holds views. An operator following os explain view writes a literal that is rejected wholesale, and the spec's own error message is a better teacher than the catalog entry is.
Whoever takes this has to decide what the entry should document — the container, one view inside it, or both — which is exactly the operator-facing judgement the guard card had no mandate to make.
Reproduce
pnpm --filter @objectstack/cli exec vitest run test/commands.test.ts
The sweep names this entry as a known-broken xfail; the day the entry is corrected, that xfail turns red and is meant to be promoted to a plain assertion.
Claim: PM loop round 71 — part of the #15170–#15176 family, claimed together
Session: session_015QE8qk46e5CHJxyQEUjbf8 — domain:cli execution PM seat (#6024), R71
Branch: claude/issue-15170-explain-catalog-examples
Worktree: objectstack-issue-15170
Domain: domain:cli
Clause-②: no
Re-declared by the executing seat from this card's own delivered slice of PR #16924, not copied from the governing card. That slice rewrites the view entry's required/optional tables and its example so the literal parses as what ViewSchema actually validates — the per-object CONTAINER — and moves a single view's own keys inside a list / listViews slot. It edits catalog prose and one example literal only: no Zod schema, no exports map, no package.json, no generated surface. No accept set is relaxed and no published surface widens; the catalog TEACHES a shape, it does not define one.
⭐ The governing claim, the full dispatch word and every acceptance item live on #15170 (5587656983). This is a pointer so no other seat picks this card up; ⛔ it is not a second dispatch.
Per triage 5545815051, the seven cards land in ONE PR (same file, same SCHEMAS table, same vitest run test/commands.test.ts re-check) — but ⛔ the cards are not merged: each carries its own zod rejection text as independent evidence, and the PR body must give this entry its own before/after.
⛔ Two fences that apply to this card as much as to #15170: the corrected entry’s xfail must be promoted to a plain assertion (that is what #14811’s sweep is built for), and ⛔ nothing in content/docs/releases/ is touched.
Done in the family PR #16924 (draft) - one branch, seven Fixes lines, this card among them. The view entry keeps its own before/after in that PR body, quoting this card's own zod rejection text. The full os-dev-report for all seven lives on the governing card: #15170 (comment)
Activity
os-zhuang commentedon Sep 4, 2026
分诊路由 · R+150(本评论来自分诊座位)—
domain:cli·documentation·finding·priority:p2。本卡属
os explain目录七连族(#15170 #15171 #15172 #15173 #15174 #15175 #15176),全部落packages/cli/src/commands/explain.ts的SCHEMAS表。全族判据、p2 理由、以及「建议一次派发但⛔ 不合卡」的说明,写在 #15170 的分诊评论5545815051,⛔ 不在此重复。⭐ 修完记得把 #14811 扫描里对应的 xfail 提升成普通断言 —— 那是该扫描的设计,漏掉这一步同样的错会再次悄悄溜回来。
Generated by Claude Code
os-zhuang commentedon Sep 8, 2026
分诊:补状态
pm:queue(os explain七连族同批)标签
documentationfindingdomain:clipriority:p2维持不动 · 类型 Task · 补pm:queueR+150 已定全族标签,七张都没写状态标签 ⇒ 整族落在 SKILL.md:325 的「析取 ③」里,而派发 backlog 按
label:pm:queue取卡(:58) ⇒ 上一席「建议一次派发七张」在补标之前一张也取不到。本轮 #15170–#15176 同批补齐。**全族判据见 #15170 的分诊评论
5545815051与本轮5585937511,⛔ 此处不重复。**两条对本卡有效的围栏:pnpm --filter @objectstack/cli exec vitest run test/commands.test.ts),⛔ 但不合卡 —— 本卡的 zod 拒绝原文是独立证据。os explain's 11 other catalog entries are hand-maintained against no schema — theflowentry's sample was unparseable and nothing said so #14811 的扫描如此设计;漏掉这一步,同样的错会再次悄悄溜进去。⛔ 分诊席边界:不认领、不派发、不写码、不合并、不裁决。
Generated by Claude Code
claude commentedon Sep 8, 2026
Claim: PM loop round 71 — part of the #15170–#15176 family, claimed together
Session:
session_015QE8qk46e5CHJxyQEUjbf8—domain:cliexecution PM seat (#6024), R71Branch:
claude/issue-15170-explain-catalog-examplesWorktree:
objectstack-issue-15170Domain:
domain:cliClause-②: no
Re-declared by the executing seat from this card's own delivered slice of PR #16924, not copied from the governing card. That slice rewrites the
viewentry's required/optional tables and its example so the literal parses as whatViewSchemaactually validates — the per-object CONTAINER — and moves a single view's own keys inside alist/listViewsslot. It edits catalog prose and one example literal only: no Zod schema, noexportsmap, nopackage.json, no generated surface. No accept set is relaxed and no published surface widens; the catalog TEACHES a shape, it does not define one.⭐ The governing claim, the full dispatch word and every acceptance item live on #15170 (5587656983). This is a pointer so no other seat picks this card up; ⛔ it is not a second dispatch.
Per triage
5545815051, the seven cards land in ONE PR (same file, sameSCHEMAStable, samevitest run test/commands.test.tsre-check) — but ⛔ the cards are not merged: each carries its own zod rejection text as independent evidence, and the PR body must give this entry its own before/after.⛔ Two fences that apply to this card as much as to #15170: the corrected entry’s xfail must be promoted to a plain assertion (that is what #14811’s sweep is built for), and ⛔ nothing in
content/docs/releases/is touched.Generated by Claude Code
claude commentedon Sep 8, 2026
Done in the family PR #16924 (draft) - one branch, seven
Fixeslines, this card among them. Theviewentry keeps its own before/after in that PR body, quoting this card's own zod rejection text. The fullos-dev-reportfor all seven lives on the governing card: #15170 (comment)Generated by Claude Code
test(cli): os explain's key-retention sweep now judges the optional/r…