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
qa(checklist): ux-conventions — 5 ledger edits from the 18.2.0 release sweep (#25807) #25849
Filing gate: maintainer-directed task. Filed by the 18.2.0 release-assessment thread · session_01G3h9iZTpL8aCiXbfsp8H5u. ⛔ Not a claim, ⛔ not dispatched.
Maintainer's words (project thread, 2026-10-25, verbatim): 22:54Z 「约 300 条清单准确性问题:是不是应该开卡?」, then 22:55Z 「写issue,不派发」.
Parent: wave anchor #25807 (18.2.0 release test sweep). RUNNER's extraction obligation parks checklist-accuracy findings on the anchor; the maintainer asked for them as issues, so the wave's findings are split into one card per ledger file and the anchor links each card. This is not a release blocker, so it carries no target:v18.
Reader who acts: the lane owning docs/qa/platform-checklist/** (domain:devx). Dedupe (open and closed): no card holds these lines; the 18.0 precedent closed its accuracy rows on its anchor #24579.
Wanted
For each line below, edit docs/qa/platform-checklist/areas/ux-conventions.json: revise the item's text, bump its revision, and append a history entry citing the run record the line comes from. Keep pnpm check:platform-checklist green. A line that turns out to describe a product defect rather than stale text gets its own card instead of a ledger edit.
Findings (5)
From #25817 — release-18.2.0-manual-set, 29 items, at 6679644a, pin b41ed7f68956
ux-conventions.write-feedback:
knownGaps[3] and A5 ("no stock surface offers Undo") are stale: import Undo works in both create and update modes.
variants[10]: Discard draft is now an in-app dialog.
variants[6]: the approvals route has no drawer.
steps[3]: the console offers a member no inline edit, selection or drag, so use the member's Mark Done for the refusal row.
A1 needs a ruling on object-only strings ("Task created successfully", "Settings saved", Flow "Reassign Task" completed).
Acceptance
Every line above is either applied (item revised, revision bumped, history cites the record) or answered on this card with the reason it was not.
Claim: PM loop round 1 · 2026-10-26T12:25Z
Session: session_01Q4MDXRbEJCNdPAP4SiXwp9 (devx seat 2) · card thread session_01K6HUHL4N3MV54PMcKnRgP3
Account: os-steve
Branch: claude/project-thread-jk51nb (the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn); family dispatch, chain head #25842, one shared branch and one PR for #25842#25847#25848#25849#25850
Worktree: objectstack-issue-25842
Domain: domain:devx
Seat: domain:devx#2 (seat post #20163)
File surface: docs/qa/platform-checklist/areas/ux-conventions.json only (family: docs/qa/platform-checklist/areas/i18n.json, docs/qa/platform-checklist/areas/search.json, docs/qa/platform-checklist/areas/studio-authoring.json, docs/qa/platform-checklist/RUNNER.md are the sibling members' files) (stop on breach; explain in the report)
Container & model: M, mode:thread, model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate), effort: high
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: none
Premise: holds (action surface git log origin/main on the file since filing: no commit; the dev re-reads each line against main first)
Serial constraints cleared: own ledger file only; seat 1 holds #25835 / #25836 on other files; #26035 left the retired objectui pin wording in these files to these cards; no other Claim: names this file
Family fold (five gates): same shape (stale checklist text, ledger edit + revision + history), same region (docs/qa/platform-checklist/, one PR, skip-changeset), every member graded p2 by triage, each member checked on its own by pnpm check:platform-checklist and its own line list, excluded: #25835 / #25836 (seat 1) and #25837–#25846 minus #25842 (sized for their own threads).
devx seat 2 · review: ACCEPT → PR #26109 comment 6416357640. Landing: ready + merge queue once every check on the reviewed head is green or skipped. This card is Part of, not Fixes: acceptance[1] of ux-conventions.write-feedback waits on a maintainer ruling, so the card stays open after merge.
背景: 清单条款 acceptance[1] 原文是 "success feedback names what changed — the record, item or count — rather than a bare 'Success' or a machine name"。QA run #25817(6679644a)在三处只看到对象名或页面名,规则没法判,于是请求裁决。
Governing text: 维护者 2026-10-07 原话(条目 source[0]):「每个写操作都有反馈」「不对用户显示机器名」。原话没有讲「必须点名到具体记录」。检索 success toast should name the record 与 write feedback toast names what changed,两条都是 0 hit;ADR 无。
Director seat, summon #51 continuation (ledger objectstack#12708). Presented to the maintainer in batch #399 as its one item: the fork devx seat 2 raised in 6416962662 (acceptance[1] of ux-conventions.write-feedback), the other four lines of this card having landed in PR #26109. Seat increment (re-verified on origin/maincdd4eea9; the seat's analysis is not restated):
Premises hold: form.createSuccess is '{{object}} created successfully' (ui/packages/i18n/src/locales/en.ts:325) and both call sites pass only { object: label } (AppContent.tsx:817, :843); SettingsPage.tsx:152 toasts a fixed "Settings saved"; the flow toast is built in flowResponse.ts from the run's status. The clause under test is ux-conventions.json:63 ("success feedback names what changed — the record, item or count — rather than a bare 'Success' or a machine name"); the maintainer's 2026-10-07 words it cites say every write has feedback and no machine names — nothing about naming the record.
git grep -iE 'names what changed|success feedback' on AGENTS.md + docs/adr → 0 rulings (the clause itself is the only hit); ADR none. ADR-0079 (record display name, canonical nameField) is the platform mechanism C would use for the title in the create toast — the create response carries the record, so the title is available at the toast site; the fallback to the object label when an object declares no title is the ui card's one edge.
Facets read: same direction; the seat agrees with C (record-level writes name the record title or the count; singleton pages and named automations are their own subject; the clause says so). Workload (card column): devx ledger · 1 PR (~10 lines, precedent qa(checklist): 18.2.0 sweep ledger edits — i18n, search, studio-authoring, ux-conventions, RUNNER #26109 +14/−8) + ui · 1 card (form.createSuccess and the edit-success toast carry the record title). Not A (the clause loses its test) and not B (a forced subject on the settings page).
Prior rulings read: success feedback · names what changed · createSuccess → the clause and the two call sites only; ADR-0079 as mechanism; thread: 6416962662.
Ruling: batch #399 item 1 · letter C · maintainer 「同意」 2026-10-26T14:04Z
Recorded by the director seat (summon #51 continuation, session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708, brief 6417619020) on the fork devx seat 2 raised in 6416962662. Letter C: acceptance[1] of ux-conventions.write-feedback reads — a record-level write names the record (its title) or the count; a singleton page (settings) and a named automation (Flow "X" completed) are their own subject and pass as they are; the clause states that boundary. The 2026-10-07 words it cites (every write has feedback; no machine names) are unchanged in meaning; this ruling sharpens the test the clause performs. Not A (the clause loses its test) and not B (a forced subject on the settings page, three ui cards).
Workload of the chosen letter (card column): devx ledger · 1 PR (~10 lines, precedent #26109 +14/−8: acceptance[1] reworded, revision bumped, history cites this card and run #25817) + ui · 1 card (form.createSuccess — '{{object}} created successfully', en.ts:325, call sites AppContent.tsx:817/:843 — and the edit-success toast carry the record title via ADR-0079's display name, falling back to the object label when an object declares no title).
Execution: needs-user-decision → pm:dispatched in this act (devx seat 2 holds the card, claim 6415957906; the assignee stays). The holding seat dispatches the ledger PR and files the ui card with Ruling-ref: naming this comment, then closes this card once the ledger PR lands (the ui card tracks its own landing). Clause-②: no, Metadata-protocol: none.
Claim: PM loop round 4 · ruling execution · 2026-10-26T14:44Z
Session: session_01Q4MDXRbEJCNdPAP4SiXwp9 (devx seat 2) · card thread session_01LxjRCZExSRaXN87XaS2A33
Account: os-steve
Branch: claude/project-thread-a10sjo (the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn)
Worktree: objectstack-issue-25849
Domain: domain:devx
Seat: domain:devx#2 (seat post #20163)
File surface: docs/qa/platform-checklist/areas/ux-conventions.json only — item ux-conventions.write-feedback: acceptance[1] clause and verify reworded to ruling 6417978207 letter C, revision 5 → 6, one history entry citing this card, the ruling comment and QA run #25817 (stop on breach; explain in the report)
Container & model: S, mode:thread, model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate), effort: medium
Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6417978207
Premise: holds on origin/main — the item is at revision 5 and acceptance[1] still reads "success feedback names what changed — the record, item or count — rather than a bare 'Success' or a machine name"; the earlier round's PR #26109 landed the other four lines
Serial constraints cleared: no other Claim: names ux-conventions.json; the ui half of the ruling is its own card #26172 (domain:ui), which this PR does not wait for — the clause defines the test, the ui card makes the console pass it
{
"issue": 25849,
"status": "done",
"branch": "claude/project-thread-a10sjo",
"pr": "https://github.com/objectstack-ai/objectstack/pull/26185",
"head": "fa4e25d8",
"session": "session_01LxjRCZExSRaXN87XaS2A33",
"premise_still_valid": true,
"summary": "ux-conventions.write-feedback acceptance[1] clause and verify reworded to ruling 6417978207 letter C (record-level names the record or count; settings page and named automation are their own subject; bare Success/Done or machine name FAIL; object-only record toast is an expected FAIL citing #26172); revision 5 to 6; one history row citing #25849, 6417978207 and QA run #25817.",
"files_changed": ["docs/qa/platform-checklist/areas/ux-conventions.json"],
"line_budget": "+9 / -3 (12 changed lines, 1 file); ruling workload estimate ~10 lines, precedent #26109 +14/-8",
"gates": "local at fa4e25d8, dispatch-gates --commands derived 13, all exit 0 (captured before any pipe): check-ci-filter-parity, check-closing-keyword-parity, check-closing-keyword-parity --self-test, check-comment-mask-corpus, lint check:doc-formula-expressions (after turbo build formula+lint under os-verify-lock, VERDICT command-exit 0), check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:platform-checklist (OK, 16 areas, 329 items), check:refd-timer-probe, check:watch-hint-literal. --ran: 13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN. CI check-runs on fa4e25d8: in_progress at report time (9 completed, 19 in progress), not awaited per contract.",
"dogfood_battery": "n/a: no ! in the PR title and Clause-2 has no (narrowing) arm",
"mcp_calls": "0",
"api_writes": "2 relay writes (fleet-write pr_create #26185 with assignee os-steve and label skip-changeset, read back identical; this os-dev-report comment via post-stamped) plus 1 git push",
"deviations": [
"history ref is #25849 (the card), following the revision-5 row of the same card and PR #26109; no PENDING swap commit",
"reviewer request for os-steve not made: the harness asks for a GitHub MCP update_pull_request, the dispatch order forbids every GitHub MCP write; the seat may request it through the relay",
"record-level class keeps the original clause's item (Studio rows named by label) so the Studio variants keep a class; noted in the PR Acceptance notes"
],
"open_questions": [],
"out_of_scope_findings": []
}
Activity
objectstack-fleet commentedon Oct 26, 2026
Claim: PM loop round 1 · 2026-10-26T12:25Z
Session:
session_01Q4MDXRbEJCNdPAP4SiXwp9(devx seat 2) · card threadsession_01K6HUHL4N3MV54PMcKnRgP3Account:
os-steveBranch:
claude/project-thread-jk51nb(the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn); family dispatch, chain head #25842, one shared branch and one PR for #25842 #25847 #25848 #25849 #25850Worktree:
objectstack-issue-25842Domain:
domain:devxSeat:
domain:devx#2(seat post #20163)File surface:
docs/qa/platform-checklist/areas/ux-conventions.jsononly (family:docs/qa/platform-checklist/areas/i18n.json,docs/qa/platform-checklist/areas/search.json,docs/qa/platform-checklist/areas/studio-authoring.json,docs/qa/platform-checklist/RUNNER.mdare the sibling members' files) (stop on breach; explain in the report)Container & model: M,
mode:thread,model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate),effort: highClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: none
Premise: holds (action surface
git log origin/mainon the file since filing: no commit; the dev re-reads each line against main first)Serial constraints cleared: own ledger file only; seat 1 holds #25835 / #25836 on other files; #26035 left the retired objectui pin wording in these files to these cards; no other
Claim:names this fileFamily fold (five gates): same shape (stale checklist text, ledger edit + revision + history), same region (
docs/qa/platform-checklist/, one PR,skip-changeset), every member graded p2 by triage, each member checked on its own bypnpm check:platform-checklistand its own line list, excluded: #25835 / #25836 (seat 1) and #25837–#25846 minus #25842 (sized for their own threads).Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
devx seat 2 · review: ACCEPT → PR #26109 comment 6416357640. Landing: ready + merge queue once every check on the reviewed head is green or skipped. This card is
Part of, notFixes: acceptance[1] of ux-conventions.write-feedback waits on a maintainer ruling, so the card stays open after merge.Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
待维护者裁决 · ux-conventions.write-feedback acceptance[1] · devx seat 2 · 2026-10-26T13:16Z
State:
pm:dispatched→needs-user-decision. #26109 已合并(f0eb9bb8),本卡 5 条里 4 条已落地,只剩这一条,所以卡保持打开。一句话问题: 保存成功后,用户看到「任务 创建成功」「Settings saved」或「Flow "Reassign Task" completed」,却看不出是哪一条记录变了。这类提示应该算「说清了改了什么」还是算不合格?
背景: 清单条款 acceptance[1] 原文是 "success feedback names what changed — the record, item or count — rather than a bare 'Success' or a machine name"。QA run #25817(
6679644a)在三处只看到对象名或页面名,规则没法判,于是请求裁决。Governing text: 维护者 2026-10-07 原话(条目 source[0]):「每个写操作都有反馈」「不对用户显示机器名」。原话没有讲「必须点名到具体记录」。检索
success toast should name the record与write feedback toast names what changed,两条都是 0 hit;ADR 无。协议: 不涉及。这是清单口径加 UI 文案,不改 spec,也不改
/meta。前提(可复核):
git grep -n "createSuccess" origin/main -- ui/packages/app-shell/src/console/AppContent.tsx取到${label} created successfully(只插对象标签);ui/packages/app-shell/src/console/organizations/manage/SettingsPage.tsx:152是Settings saved;流程完成的提示由ui/packages/app-shell/src/utils/flowResponse.ts生成,形如Flow "…" completed。选项
form.createSuccess及编辑成功提示带记录标题);无先例业务含义: A 好比收银小票只印「商品已售出」;B 要求连「系统设置」也写出改了哪个设置项;C 的做法和 Salesforce 一样,记录写入时写出记录名(
Account "Acme" was created.),设置页只写「Changes saved」。四轴
os-decision-facets
Prior rulings read: "success toast should name the record" / "write feedback toast names what changed" → 0 hits; ADR none; thread: none
推荐 C. 只看 ① 就选 C:两年后平台的样子应当和主流 CRM 一致,记录写入写出记录名,设置页用通用确认。②③④ 是否翻转:否。置信缺口:
form.createSuccess拿记录标题要看各对象titleField是否齐全,这一点我没有实测;缺标题时退回对象名,这个降级是 ui 卡的事。不取 A: 条款会失去判别力,连续录入时分不清记录的问题会一直留着。不取 B: 设置页和具名流程本来就有主语,硬造只会增加文案负担。
裁后执行: 选 C:本席派一张 devx 账本 PR,把 acceptance[1] 写成「记录级写入点名记录或数量;单例页与具名自动化以其名称为主语」,bump revision,history 引本卡;并给 ui 车道立 1 张卡(
form.createSuccess与编辑成功提示插记录标题)。选 A:只派账本 PR。选 B:账本 PR 加 3 张 ui 卡。三种都由本席落地后关卡。相关: #25807(18.2.0 波次锚)· PR #26109(本卡其余 4 条,已合并)· QA run #25817。
Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Brief-claimed-by: session_01KrKXQVvgYk2AJ4VkqMobyb · batch #399 · 2026-10-26T13:47Z
Director seat, summon #51 continuation (ledger objectstack#12708). Presented to the maintainer in batch #399 as its one item: the fork devx seat 2 raised in 6416962662 (acceptance[1] of
ux-conventions.write-feedback), the other four lines of this card having landed in PR #26109. Seat increment (re-verified onorigin/maincdd4eea9; the seat's analysis is not restated):form.createSuccessis'{{object}} created successfully'(ui/packages/i18n/src/locales/en.ts:325) and both call sites pass only{ object: label }(AppContent.tsx:817,:843);SettingsPage.tsx:152toasts a fixed "Settings saved"; the flow toast is built inflowResponse.tsfrom the run's status. The clause under test isux-conventions.json:63("success feedback names what changed — the record, item or count — rather than a bare 'Success' or a machine name"); the maintainer's 2026-10-07 words it cites say every write has feedback and no machine names — nothing about naming the record.git grep -iE 'names what changed|success feedback'on AGENTS.md + docs/adr → 0 rulings (the clause itself is the only hit); ADR none. ADR-0079 (record display name, canonicalnameField) is the platform mechanism C would use for the title in the create toast — the create response carries the record, so the title is available at the toast site; the fallback to the object label when an object declares no title is the ui card's one edge.form.createSuccessand the edit-success toast carry the record title). Not A (the clause loses its test) and not B (a forced subject on the settings page).Prior rulings read:
success feedback·names what changed·createSuccess→ the clause and the two call sites only; ADR-0079 as mechanism; thread: 6416962662.objectstack-fleet commentedon Oct 26, 2026
Ruling: batch #399 item 1 · letter C · maintainer 「同意」 2026-10-26T14:04Z
Recorded by the director seat (summon #51 continuation,
session_01KrKXQVvgYk2AJ4VkqMobyb, ledger objectstack#12708, brief 6417619020) on the fork devx seat 2 raised in 6416962662. Letter C: acceptance[1] ofux-conventions.write-feedbackreads — a record-level write names the record (its title) or the count; a singleton page (settings) and a named automation (Flow "X" completed) are their own subject and pass as they are; the clause states that boundary. The 2026-10-07 words it cites (every write has feedback; no machine names) are unchanged in meaning; this ruling sharpens the test the clause performs. Not A (the clause loses its test) and not B (a forced subject on the settings page, three ui cards).Workload of the chosen letter (card column): devx ledger · 1 PR (~10 lines, precedent #26109 +14/−8: acceptance[1] reworded,
revisionbumped,historycites this card and run #25817) + ui · 1 card (form.createSuccess—'{{object}} created successfully',en.ts:325, call sitesAppContent.tsx:817/:843— and the edit-success toast carry the record title via ADR-0079's display name, falling back to the object label when an object declares no title).Execution:
needs-user-decision→pm:dispatchedin this act (devx seat 2 holds the card, claim 6415957906; the assignee stays). The holding seat dispatches the ledger PR and files the ui card withRuling-ref:naming this comment, then closes this card once the ledger PR lands (the ui card tracks its own landing).Clause-②: no,Metadata-protocol: none.objectstack-fleet commentedon Oct 26, 2026
Claim: PM loop round 4 · ruling execution · 2026-10-26T14:44Z
Session:
session_01Q4MDXRbEJCNdPAP4SiXwp9(devx seat 2) · card threadsession_01LxjRCZExSRaXN87XaS2A33Account:
os-steveBranch:
claude/project-thread-a10sjo(the harness-pinned branch of the card thread; it names no issue, so this claim is the identity record; amended on spawn)Worktree:
objectstack-issue-25849Domain:
domain:devxSeat:
domain:devx#2(seat post #20163)File surface:
docs/qa/platform-checklist/areas/ux-conventions.jsononly — itemux-conventions.write-feedback: acceptance[1]clauseandverifyreworded to ruling 6417978207 letter C,revision5 → 6, onehistoryentry citing this card, the ruling comment and QA run #25817 (stop on breach; explain in the report)Container & model: S,
mode:thread,model: default tier (TIER_DEFAULT, from dispatch-gates --tier: no path-derived mandate),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6417978207
Premise: holds on
origin/main— the item is at revision 5 and acceptance[1] still reads "success feedback names what changed — the record, item or count — rather than a bare 'Success' or a machine name"; the earlier round's PR #26109 landed the other four linesSerial constraints cleared: no other
Claim:namesux-conventions.json; the ui half of the ruling is its own card #26172 (domain:ui), which this PR does not wait for — the clause defines the test, the ui card makes the console pass itGenerated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
os-dev-report
{ "issue": 25849, "status": "done", "branch": "claude/project-thread-a10sjo", "pr": "https://github.com/objectstack-ai/objectstack/pull/26185", "head": "fa4e25d8", "session": "session_01LxjRCZExSRaXN87XaS2A33", "premise_still_valid": true, "summary": "ux-conventions.write-feedback acceptance[1] clause and verify reworded to ruling 6417978207 letter C (record-level names the record or count; settings page and named automation are their own subject; bare Success/Done or machine name FAIL; object-only record toast is an expected FAIL citing #26172); revision 5 to 6; one history row citing #25849, 6417978207 and QA run #25817.", "files_changed": ["docs/qa/platform-checklist/areas/ux-conventions.json"], "line_budget": "+9 / -3 (12 changed lines, 1 file); ruling workload estimate ~10 lines, precedent #26109 +14/-8", "gates": "local at fa4e25d8, dispatch-gates --commands derived 13, all exit 0 (captured before any pipe): check-ci-filter-parity, check-closing-keyword-parity, check-closing-keyword-parity --self-test, check-comment-mask-corpus, lint check:doc-formula-expressions (after turbo build formula+lint under os-verify-lock, VERDICT command-exit 0), check:cross-package-test-inputs, check:doc-authoring, check:driver-memory-census, check:gitlink-declared, check:nul-bytes, check:platform-checklist (OK, 16 areas, 329 items), check:refd-timer-probe, check:watch-hint-literal. --ran: 13 derived, 13 run, 0 NOT-MEASURED, 0 UNRUN. CI check-runs on fa4e25d8: in_progress at report time (9 completed, 19 in progress), not awaited per contract.", "dogfood_battery": "n/a: no ! in the PR title and Clause-2 has no (narrowing) arm", "mcp_calls": "0", "api_writes": "2 relay writes (fleet-write pr_create #26185 with assignee os-steve and label skip-changeset, read back identical; this os-dev-report comment via post-stamped) plus 1 git push", "deviations": [ "history ref is #25849 (the card), following the revision-5 row of the same card and PR #26109; no PENDING swap commit", "reviewer request for os-steve not made: the harness asks for a GitHub MCP update_pull_request, the dispatch order forbids every GitHub MCP write; the seat may request it through the relay", "record-level class keeps the original clause's item (Studio rows named by label) so the Studio variants keep a class; noted in the PR Acceptance notes" ], "open_questions": [], "out_of_scope_findings": [] }Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
devx seat 2 · review: ACCEPT → PR #26185 comment 6419628867. Landing: ready + merge queue, every check on the reviewed head green or skipped.
Generated by Claude Code