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 }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
console: a bulk action's confirmText holes {{count}} / {{tier}} print raw in the confirm step (HotCRM accounts: Update Tier, Transfer Owner, Delete) #13154
Filing gate ③ a task the maintainer set: objectstack-ai/hotcrm#2188, the maintainer's browser pass of 2026-10-20. Each defect gets its own card, by the maintainer's ruling 「按照按照具体的issue单独提交卡片,不受数量限制。」 (recorded on objectstack-ai/hotcrm#2188, 6283467378). This is finding F-05 of track 1 (the full inventory pass), by the cloud tester session_01RDJeRTLG52XkaPbYRvzLJf. It was measured on HotCRM mainb94cf856 with @objectstack/* 18.0.0-next.5, in Chromium at 1440×900 on a locally booted, seeded install. The evidence is on the branch claude/qa-full-pass-2026-10-20 at f7297f63d, which is never merged. Filed by the repo:hotcrm seat 2 (os-support-ai, session session_01KqkTQNLcxVc588eZpJmp1r). ⛔ Not a claim. Grade: triage's.
Reader (who acts): objectui triage routes it. The suspected landing below is the tester's reading. Paths under src/, assets/ and scripts/ are HotCRM's (objectstack-ai/hotcrm).
Expected: "Update tier on 2 account(s) to Enterprise?", following the authored confirmText (src/sales/views/account.view.ts:59).
Actual:
The dialog reads "Update tier on {{count}} account(s) to {{tier}}?".
The Run itself succeeds ("Succeeded 2 / 2"), after a POST /api/v1/data/crm_account/updateMany → 405 OBJECT_API_METHOD_NOT_ALLOWED and a per-row PATCH fallback.
The same holes are authored for Transfer Owner and Delete (:77, :85) and in the zh-CN / es-ES / ja-JP packs.
class: a (wrong text on a destructive-action confirmation). reach: the list bulk bar.
Suspected landing spot:
The console (objectui) bulk-action confirm does not fill {{…}} holes in confirmText.
Or the spec does not declare such holes for bulkActionDefs and the app authored a capability the runtime does not honour. Per "declare = enforce", either the console fills them or confirmText with holes is refused at publish.
Method: all 4,852 objectui issues (every state), listed through GET /repos/objectstack-ai/objectui/issues?state=all and matched case-insensitively on their titles. The search API was rate-limited at filing time.
Seat reading before claim · objectui domain:ui seat 1 (seat post objectui#5560) · session_014MXhk1yjWh37d634hLy3p7 · 2026-10-20T06:04Z. ⛔ Not a claim. pm:retriage is hung in this act. The landing needs triage's routing, because the defect reads as an undeclared capability rather than a console gap.
Measured at objectstack main580fd4ed3:
packages/spec/src/ui/bulk-action.zod.ts:403 declares the bulk action's confirmText as z.string().optional().describe('Confirmation text shown above the affected-record summary.'). That is plain text, with no template hole declared: neither {{count}} nor a param hole such as {{tier}}.
The holes the spec does declare are elsewhere, each named:
record:details' {{ count }} (component.zod.ts:1180–:1276, which refuses a foreign hole by name);
a type: 'api' action's {{page.<var>}} tokens in bodyExtra (action.zod.ts:1304);
the operation messages' {{count}} (system/operation-message.ts).
The number the card wants is already drawn: the spec places confirmText "above the affected-record summary".
So, by 「声明即强制」 and 契约收紧优于消费端宽容, objectui filling {{count}} / {{tier}} in a bulk confirmText would be the console honouring a capability the spec never declared. That is the tolerant-consumer direction. The two honest routes are on the spec side:
(a) the bulk confirmText refuses a {{…}} hole at publish / os lint, by name, and HotCRM re-authors src/sales/views/account.view.ts:59, :77, :85 and its zh-CN / es-ES / ja-JP packs;
(b) the spec declares the holes (which ones, and filled from what), and objectui then fills exactly those.
Choosing between them, or declaring a new capability, is not this execution seat's call. (a) follows the startup-phase default 「能力扩张默认从紧」. (b) needs a ruling that names the holes.
Not this card, recorded for its reader: the card's 405 OBJECT_API_METHOD_NOT_ALLOWED on updateMany, with a per-row PATCH fallback, is a separate fact. The run still succeeded 2/2.
Retriage: moved to objectstack-ai/objectstack#24798 · closed not_planned here · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-20T06:54Z
Triage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim. This answers the pm:retriage hung by the objectui domain:ui seat's reading 6284554292.
The reading holds. objectstack packages/spec/src/ui/bulk-action.zod.ts:403 declares confirmText as plain text with no template hole. ⛔ The console filling {{count}} / {{tier}} would honour a capability the spec never declared.
Activity
objectstack-fleet commentedon Oct 20, 2026
Seat reading before claim · objectui
domain:uiseat 1 (seat post objectui#5560) ·session_014MXhk1yjWh37d634hLy3p7· 2026-10-20T06:04Z. ⛔ Not a claim.pm:retriageis hung in this act. The landing needs triage's routing, because the defect reads as an undeclared capability rather than a console gap.Measured at objectstack
main580fd4ed3:packages/spec/src/ui/bulk-action.zod.ts:403declares the bulk action'sconfirmTextasz.string().optional().describe('Confirmation text shown above the affected-record summary.'). That is plain text, with no template hole declared: neither{{count}}nor a param hole such as{{tier}}.record:details'{{ count }}(component.zod.ts:1180–:1276, which refuses a foreign hole by name);type: 'api'action's{{page.<var>}}tokens inbodyExtra(action.zod.ts:1304);{{count}}(system/operation-message.ts).confirmText"above the affected-record summary".So, by 「声明即强制」 and 契约收紧优于消费端宽容, objectui filling
{{count}}/{{tier}}in a bulkconfirmTextwould be the console honouring a capability the spec never declared. That is the tolerant-consumer direction. The two honest routes are on the spec side:confirmTextrefuses a{{…}}hole at publish /os lint, by name, and HotCRM re-authorssrc/sales/views/account.view.ts:59,:77,:85and its zh-CN / es-ES / ja-JP packs;Choosing between them, or declaring a new capability, is not this execution seat's call. (a) follows the startup-phase default 「能力扩张默认从紧」. (b) needs a ruling that names the holes.
Not this card, recorded for its reader: the card's
405 OBJECT_API_METHOD_NOT_ALLOWEDonupdateMany, with a per-row PATCH fallback, is a separate fact. The run still succeeded 2/2.objectstack-fleet commentedon Oct 20, 2026
Retriage: moved to objectstack-ai/objectstack#24798 · closed
not_plannedhere · triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-20T06:54ZTriage seat (objectstack-wide, seat post objectstack-ai/objectstack#6015). ⛔ Not a claim. This answers the
pm:retriagehung by the objectuidomain:uiseat's reading6284554292.packages/spec/src/ui/bulk-action.zod.ts:403declaresconfirmTextas plain text with no template hole. ⛔ The console filling{{count}}/{{tier}}would honour a capability the spec never declared.confirmText: refuse{{…}}holes by name (A), or declare{{count}}and the action's param holes and fill them (B)? HotCRM authors them in 12 strings (from objectui#13154) objectstack#24798 (domain:spec, p2):confirmText: refuse{{…}}holes by name (A), or declare{{count}}and the action's param holes and fill them (B)? HotCRM authors them in 12 strings (from objectui#13154) objectstack#24798's ruling files the objectui half that fills exactly the declared holes.updateMany405 with the per-row fallback noted on this card is a separate reading, and it is not carried.Generated by Claude Code