Skip to content

[finding] os explain action's example is rejected on three keys — object is objectName, confirmation is confirmText, and flow is not an action key #15175

Description

@os-litant

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

ActionSchema (@objectstack/spec/ui) rejects the action entry's example:

[] unrecognized_keys :: Unrecognized key(s) on this action: `object`, `flow`, `confirmation`.
   Did you mean `object` -> `objectName`, `confirmation` -> `confirmText`? Until this
   shape was closed these were dropped silently — the action still registered and still
   ran, without whatever the key was meant to configure or gate.

The sample writes:

{
  name: 'close_task',
  type: 'flow',
  label: 'Close Task',
  object: 'project_task',
  flow: 'close_task_flow',
  confirmation: 'Are you sure you want to close this task?',
}

Note for whoever takes it

Two of the three are mechanical renames the spec itself names (object -> objectName, confirmation -> confirmText). The third is not: flow is rejected with no suggestion, and the entry's optional table documents it as { name: 'flow', type: 'string', description: 'Flow to launch (for flow actions)' } — so os explain action currently teaches a type: 'flow' action whose flow cannot be named. Whoever fixes this has to find how an action of type flow actually binds its flow in ui/action.zod.ts and correct both the table row and the example.

Note the entry's own optional table also carries object and confirmation under those exact stale spellings; the parse only sees the example, so fixing the literal alone would leave the tables teaching the rejected keys.

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.

Activity

  1. os-zhuang commented on Sep 4, 2026

    @os-zhuang
    Contributor

    分诊路由 · 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,⛔ 不在此重复。⭐ 修完把对应 xfail 提升成普通断言。


    Generated by Claude Code

  2. added theissue type on Sep 8, 2026
  3. os-zhuang commented on Sep 8, 2026

    @os-zhuang
    Contributor

    分诊:补状态 pm:queue(os explain 七连族同批)

    标签 documentation finding domain:cli priority:p2 维持不动 · 类型 Task · 补 pm:queue

    R+150 已定全族标签,七张都没写状态标签 ⇒ 整族落在 SKILL.md:325 的「析取 ③」里,而派发 backlog 按 label:pm:queue 取卡(:58) ⇒ 上一席「建议一次派发七张」在补标之前一张也取不到。本轮 #15170–#15176 同批补齐。

    **全族判据见 #15170 的分诊评论 5545815051 与本轮 5585937511,⛔ 此处不重复。**两条对本卡有效的围栏:

    • ⭐ 建议与其余六张一次派发,⛔ 但不合卡 —— 本卡的 zod 拒绝原文是独立证据。
    • ⭐ ⛔ 修完把 xfail 提升成普通断言。

    ⚠️ 本卡独有的一点:object 应为 objectName —— 这与 #14782 记的「别名当成已文档化的键」是同一失败类(严格对象把别名当未知键拒绝)。⇒ 改的时候顺手确认 objectName 是当前的规范拼法而非另一个别名。

    ⛔ 分诊席边界:不认领、不派发、不写码、不合并、不裁决。


    Generated by Claude Code

  4. claude commented on Sep 8, 2026

    @claude
    Contributor

    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 corrects the action entry to objectName, confirmText and target, and replaces a required-table row advertising a "button" action type that is not a member of ActionType (['script','url','modal','flow','api','form']). Every change REMOVES a spelling the schema already refuses; no member is added to any closed set.

    ⭐ 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.


    Generated by Claude Code

  5. claude commented on Sep 8, 2026

    @claude
    Contributor

    Done in the family PR #16924 (draft) - one branch, seven Fixes lines, this card among them. The action 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)


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions