Filing gate: ③ maintainer-directed task — the maintainer ruled in the dispatching session and asked for this card with the drafted rule (verbatim below).
Reader: triage first-touch → domain:skills lane; one PR touching three files under .claude/ (Tier S: lands by the owning seat on a contract-tier review of record). AGENTS.md Prime Directive #10 already says "reproducible defect" without excluding UX, so it needs no edit.
Dedup (semantic search, open + closed, objectstack): "filing gate admission classes exclude user-visible UX defects, layout and usability issues treated as observations not filed" → 38 hits, none about UX in the admission classes; "立卡门 三类 体验 用户体验 缺陷 不立卡" → 4 hits, all closed (#20088 set the reachability rule this card builds on, not a duplicate).
The ruling
仪表盘空白 很严重啊,这种为什么不处理,是不是标准有问题?这么明显的用户体验相关的为题
同意,立卡起草这条规则
What went wrong — the case
A browser dogfood sweep of the console found that every dashboard spends ~120px of the first screen on a row holding only "Refresh All". The seat classified it as a "design suggestion" and did not file it, reading class (a) "reproducible defect" through a prior triage closure's framing ("nothing is broken, no assertion is wrong") that treats works-but-visibly-wrong UX as an observation. The same sweep had filed toast-overlap and truncation findings, so the line was drawn inconsistently. Re-examined on the maintainer's challenge, seven UX findings met every other gate condition (stable repro on a public surface, named fix site, expected-vs-actual statable without taste) and were filed: objectstack-ai/objectui#11694 – objectstack-ai/objectui#11699 and #21960.
The gap: the class definitions (references/triage-duties.md, .claude/agents/os-dev.md) and the gate's ① (references/filing-gate.md) never say whether a user-visible UX defect is class (a), so a seat can read it narrowly. The fix states it, and fences it so the gate's purpose (fewer, real cards) is kept: taste, redesign and cost-free perf observations stay out.
Draft — exact lines (each ≤120 bytes, no issue numbers, so check:pm-skill-ratchet width and check:pm-skill-id-lint pass)
.claude/skills/pm-dispatch/references/filing-gate.md — after the ① line ("① 有具名落点或复现的产品缺陷…"):
- ① 含用户可见的体验缺陷,与功能缺陷同等:界面上稳定复现、落点具名、预期不凭审美。
- 体验缺陷形态:截断、遮挡、白占首屏、文案与页面矛盾、删除不点名对象、显示原始值。
- ⛔ 不是卡:纯审美偏好、重设计与新功能提议(走 ②)、无用户可见代价的性能观察。
…and after the existing 判例 line (the reach:-case line):
- 判例:仪表盘刷新按钮独占一行、首屏白占约 120px ⇒ 立;「配色换个好看的」⇒ 不立。
.claude/skills/pm-dispatch/references/triage-duties.md — after the line "(a) 的分界是不完整 vs 错误,不是文档 vs 代码:…":
- (a) 不分功能与体验:能用但用户可见地错(截断、遮挡、白占首屏、误导文案)也是 (a)。
.claude/agents/os-dev.md — §3 (scope), after the "(a) 可复现缺陷(复现或失败探针具名);(b) …" line:
- (a) 含用户可见的体验缺陷(截断、遮挡、白占首屏、误导文案),须复现且落点具名。
Constraints for the PR
- Net +6 lines (filing-gate +4, triage-duties +1, os-dev +1) against shrink-only per-file ceilings. Pay with deletions in the same files if the lane finds redundant lines; otherwise the ceiling raise cites this card's ruling in the PR body, as the ratchet requires. ⛔ No re-wrap to win lines.
- Wording is the lane's to tighten; the three properties are the ruling's and stay: (1) UX defects count as (a) on equal footing with functional ones; (2) each still needs a stable public-surface repro, a named fix site and an expected-vs-actual that does not rest on taste; (3) taste, redesign / new-feature proposals (→ ②) and perf observations with no user-visible cost are not cards.
reach: for a UX defect is the public surface where it was seen (the existing "公开入口 … 界面" arm) — no new reach type.
Filed by session session_01WEARdKfDHDT7rTuEhLyT1k.
Generated by Claude Code
Filing gate: ③ maintainer-directed task — the maintainer ruled in the dispatching session and asked for this card with the drafted rule (verbatim below).
Reader: triage first-touch →
domain:skillslane; one PR touching three files under.claude/(Tier S: lands by the owning seat on a contract-tier review of record).AGENTS.mdPrime Directive #10 already says "reproducible defect" without excluding UX, so it needs no edit.Dedup (semantic search, open + closed, objectstack): "filing gate admission classes exclude user-visible UX defects, layout and usability issues treated as observations not filed" → 38 hits, none about UX in the admission classes; "立卡门 三类 体验 用户体验 缺陷 不立卡" → 4 hits, all closed (#20088 set the reachability rule this card builds on, not a duplicate).
The ruling
What went wrong — the case
A browser dogfood sweep of the console found that every dashboard spends ~120px of the first screen on a row holding only "Refresh All". The seat classified it as a "design suggestion" and did not file it, reading class (a) "reproducible defect" through a prior triage closure's framing ("nothing is broken, no assertion is wrong") that treats works-but-visibly-wrong UX as an observation. The same sweep had filed toast-overlap and truncation findings, so the line was drawn inconsistently. Re-examined on the maintainer's challenge, seven UX findings met every other gate condition (stable repro on a public surface, named fix site, expected-vs-actual statable without taste) and were filed: objectstack-ai/objectui#11694 – objectstack-ai/objectui#11699 and #21960.
The gap: the class definitions (
references/triage-duties.md,.claude/agents/os-dev.md) and the gate's ① (references/filing-gate.md) never say whether a user-visible UX defect is class (a), so a seat can read it narrowly. The fix states it, and fences it so the gate's purpose (fewer, real cards) is kept: taste, redesign and cost-free perf observations stay out.Draft — exact lines (each ≤120 bytes, no issue numbers, so
check:pm-skill-ratchetwidth andcheck:pm-skill-id-lintpass).claude/skills/pm-dispatch/references/filing-gate.md— after the ① line ("① 有具名落点或复现的产品缺陷…"):…and after the existing 判例 line (the reach:-case line):
.claude/skills/pm-dispatch/references/triage-duties.md— after the line "(a) 的分界是不完整 vs 错误,不是文档 vs 代码:…":.claude/agents/os-dev.md— §3 (scope), after the "(a) 可复现缺陷(复现或失败探针具名);(b) …" line:Constraints for the PR
reach:for a UX defect is the public surface where it was seen (the existing "公开入口 … 界面" arm) — no new reach type.Filed by session
session_01WEARdKfDHDT7rTuEhLyT1k.Generated by Claude Code