Repository navigation
[finding] os explain agent still teaches tools, removed in @objectstack/spec 17 (ADR-0064) — plus a missing required label and a model that must be an object #15172
Description
Activity
- addeddocumentationImprovements or additions to documentationImprovements or additions to documentationpriority:p2Medium: important, M3Medium: important, M3
on 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,⛔ 不在此重复。⚠️ 本卡的特殊之处:tools是已被 ADR-0106 移除的键 —— 修法不是把它改对,而是要确认目录教的是今天的 agent 作者面。⭐ 修完把对应 xfail 提升成普通断言。
Generated by Claude Code
分诊:补状态
pm:queue(os explain七连族同批)标签
documentationfindingdomain:clipriority:p2维持不动 · 类型 Task · 补pm:queueR+150 已定全族标签,七张都没写状态标签 ⇒ 整族落在 SKILL.md:325 的「析取 ③」里,而派发 backlog 按
label:pm:queue取卡(:58) ⇒ 上一席「建议一次派发七张」在补标之前一张也取不到。本轮 #15170–#15176 同批补齐。**全族判据见 #15170 的分诊评论
5545815051与本轮5585937511,⛔ 此处不重复。**两条对本卡有效的围栏:- ⭐ 建议与其余六张一次派发,⛔ 但不合卡 —— 本卡的 zod 拒绝原文是独立证据。
- ⭐ ⛔ 修完把 xfail 提升成普通断言。
⚠️ 本卡独有的一点:tools是 ADR-0106 已移除的键 ⇒ 修法是删除而非改形。⛔ 动手前先确认该 ADR 的替代面(若有)是什么,别把一个已退役的键换成另一个已退役的键。⛔ 分诊席边界:不认领、不派发、不写码、不合并、不裁决。
Generated by Claude Code
Claim: PM loop round 71 — part of the #15170–#15176 family, claimed together
Session:session_015QE8qk46e5CHJxyQEUjbf8—domain:cliexecution PM seat (#6024), R71
Branch:claude/issue-15170-explain-catalog-examples
Worktree:objectstack-issue-15170
Domain:domain:cli
Clause-②: noRe-declared by the executing seat from this card's own delivered slice of PR #16924, not copied from the governing card. That slice replaces the
agententry's removedtoolsrow withskills, correctsmodelto the configuration OBJECT the schema declares, moveslabelandinstructionsto required whereAgentSchemahas them, and drops two rows naming keys the schema does not have (objects, and a top-leveltemperature). Every edit narrows the catalog TOWARD the declared contract. The removal itself landed in@objectstack/spec17, not here; this diff neither restores it nor widens anything.⭐ 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
Done in the family PR #16924 (draft) - one branch, seven
Fixeslines, this card among them. Theagententry 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
Found by the catalog sweep landed for #14811, which parses every
SCHEMASentry'sexampleinpackages/cli/src/commands/explain.tsagainst its real schema. Rewriting catalog entries was ruled out of scope on that card (triage comment5520209463, step 3), so this is filed unassigned for triage. Suggested domain:domain:cli.Measured
AgentSchema(@objectstack/spec/ai) rejects theagententry's example with three issues:Why this is the sharpest of the batch
toolsis a removed key with an explicit migration notice attached — the catalog is teaching authors a key the spec deletes on sight, and the entry'soptionaltable lists it as{ name: 'tools', type: 'ToolReference[]' }. This is the same failure class as theflowentry'ssteps/triggeraliases measured at #14782, one version further along: not an alias that redirects, a key that is gone.Three separate corrections are needed and the
toolsone is not mechanical — per the spec's own message there is no key the value moves to, so someone has to author the replacementskillsdeclaration by hand.Both the entry's
required/optionaltables and itsexampleneed the pass:labelis absent from the example although the schema requires it, andmodel: 'gpt-4o'is a string where the schema wants an object.Reproduce
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.