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
Setup → Create User with a typed password still shows "If a temporary password was generated, copy it now" (#27521 row 12) #27858
Filing gate: ② a wrong or confusing state shown to the user. Split from #27521 row 12 by the seat; the parent's acceptance says each row is taken as its own card or answered.
Business reason
Who: every administrator creating a user with a typed password. What happens: the result dialog still reads "If a temporary password was generated, copy it now — it is shown only once and never stored.", though nothing was generated and there is nothing to copy, so the administrator looks for a password that does not exist. Reach: every administrator creating a user with a typed password.
Mechanism
packages/platform-objects/src/identity/sys-user.object.ts: two result texts (create user and set password) carry the conditional sentence unconditionally; on main the generated en bundle has it at packages/platform-objects/src/apps/translations/en.objects.generated.ts lines 194 and 221.
Read in the 18.3.0 RC browser walkthrough at c4c515ad; the source line is confirmed on main (not re-driven).
Wanted
The copy line only when the server generated a temporary password; a typed password's result says the user was created (or the password set) with no copy line.
Acceptance
Create User with a typed password: the result shows no copy-password line.
Create User with Generate Temporary Password: the result shows the generated password and the copy line.
This card is in pm:queue with domain:server and priority:p3 set by the filing seat, with no triage first touch, so no lane seat may claim it. Asking triage for the first touch (grade, lane, and whether it is dispatched under 「低优先级的先不考虑」 or rides another PR).
Claim: PM loop round 2 · 2026-10-30T10:26Z · the maintainer pointed the lane at the open pm:queue + domain:server list (「明明有这么多任务啊」, 2026-10-30 10:19Z, seat-1 project), so these p3 rows are dispatched instead of waiting for a ride · fold head, members #27859#27863#27869
Session: session_016WV4cwXFwjU2YZW2dRuZZt (card thread; seat session_016WV4czVnUdQQCVKSW5J2uk)
Account: os-elon-musk
Branch: claude/project-thread-9wtlmh (the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread opened).
Worktree: objectstack-issue-27858
Domain: domain:server
Seat: domain:server#1
File surface: packages/platform-objects/src/identity/sys-user.object.ts (fields, page/details, list view, the create-user result copy), packages/platform-objects/src/apps/translations/** and the sys_user translation bundles (fr included) with their generated files, tests under packages/platform-objects/src/, .changeset/*. Stop and report on any other breach.
Container & model: M, mode:thread, model: opus (TIER_DEFAULT; dispatch-gates --tier: no path-derived mandate), effort: high
Clause-②: no (presentation and copy on the sys_user surface; the dev confirms from the diff)
Metadata-protocol: none
Responsibility: the Setup sys_user surface in platform-objects (platform's own metadata) | none | every Setup admin, today (HotCRM 18.2.0 pass, parent #27356)
Thread-read: 6515396241
Premise: holds (the dev re-measures each row on main first; a row already fixed is reported, not built)
Serial constraints cleared: no open PR touches sys-user.object.ts or its translations (21 open PRs read at 10:2xZ); #27857 (same thread, plugin-auth refusal) lands as a separate PR after this fold.
Fold-or-serial (five gates): ① one defect shape — the Setup sys_user surface shows engine state or untranslated text instead of the customer's saved state in the customer's language; one fix kind, metadata/copy on the sys_user object, its views and bundles. ② one package (platform-objects), one changeset, one queue slot. ③ every member graded by triage (p3, first touches 05:02–05:04Z). ④ each member has its own named check: #27858 notice only when a password was generated; #27859 Details shows saved Locale + ban state and the role reads through its label; #27863 Users list shows Status and Role columns; #27869 French strings resolve, a missing key falls back loudly. ⑤ excluded: #27857 — its fix is the plugin-auth refusal wording plus the dialog's required marker (another package, refusal shape), so it runs serially in the same thread as its own PR; #27853/#27854/#27855/#27867 (other Setup rows) are other seats' claims.
{
"issue": 27858,
"status": "done",
"branch": "claude/project-thread-9wtlmh",
"pr": "https://github.com/objectstack-ai/objectstack/pull/28065",
"session": "session_016WV4cwXFwjU2YZW2dRuZZt",
"premise_still_valid": true,
"summary": "Fold of #27858 #27859 #27863 and part of #27869, one commit each, all in @objectstack/platform-objects. Create User / Set Password drop the dialog-level description and put the copy-it-now line on the temporaryPassword field label, which shows only when a password was generated. The user Details tab shows locale (Identity) and an Account Status section (banned, ban_reason, ban_expires); all_users gains banned and role columns; the locale help names the interface language in all four packs. Seat rulings applied: #27869 is Part of (French pack, silent fallback and the Invalid password refusal are not built here), and sys_user.role stays Field.text (the label half is a finding).",
"tests": "head 24220933. pnpm --filter @objectstack/platform-objects test: Test Files 102 passed (102), Tests 1445 passed (1445); typecheck exit 0. Pins: create-user-result-dialog-copy.test.ts (rewritten), sys-user-details-tab.test.ts (extended), sys-user-list-status-role-columns.test.ts and sys-user-locale-help.test.ts (new). Ablations via scripts/ablation-replace.mjs, each restored to the HEAD blob, git diff HEAD empty after: #27858 description re-added on set_user_password -> 1 failed/8 passed; #27859 locale dropped from Identity -> 2 failed/3 passed; #27863 banned+role dropped from all_users -> 1 failed/1 passed (a first try was a parse error from a line comment, rerun with a block-comment marker); #27869 old source help restored -> 1 failed/4 passed. Tests import source by relative path, so no dist leg.",
"gates": "dispatch-gates --commands on head 24220933: 59 families; 58 exit 0, check:dual-build-cjs-loads exit 3 (PREREQUISITE NOT MET, NOT MEASURED). --ran: 59 accounted, 58 run, 1 NOT-MEASURED, exit 0. pnpm lint exit 0. check:dts-closure and check:sourcemap-no-sources-content swept the 62 built packages only. CI check-runs: in_progress at report time.",
"dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
"mcp_calls": "9 — mcp__github__issue_read (get x5: 27858 27859 27863 27869 27857; get_comments x4: 27858 27859 27863 27869); no write tool",
"api_writes": "2 — relay pr_create (objectstack#28065), relay comment (this report on #27858)",
"open_questions": [],
"out_of_scope_findings": [
"class: a · reach: Setup user record highlight and the all_users Role column show the raw stored value (user, admin) to every admin · evidence: sys_user.role is Field.text; a label needs Field.select, and driver-sql createColumn emits TEXT for text but the default varchar(255) for select, so schema-drift reads existing deployments as narrow_varchar (destructive) · seat ruling A: own card · dedupe words: sys_user role label, platform role select, role options",
"class: a · reach: a user whose sys_user.locale is fr sees English sys_user labels (Home feed field labels) · evidence: platform-objects ships en/zh-CN/ja-JP/es-ES only (setup.translation.ts SetupAppTranslations; root i18n:extract --locales=zh-CN,ja-JP,es-ES), HotCRM declares the same four; fr exists only in ui/packages/i18n/src/locales/fr.ts · carries #27869 (b) · dedupe words: French platform locale, fr translation bundle, platform-objects fr",
"class: a · reach: any locale without a bundle falls back to the source text with no signal · evidence: service-i18n FileI18nAdapter.t resolves requested locale then fallbackLocale silently, returns the key when neither has it · carries the #27869 'falls back loudly' half · dedupe words: i18n fallback silent, missing translation warning, FileI18nAdapter fallback",
"carrier: #27857's PR (seat ruling) · #27869 (a) the English 'Invalid password' refusal under fr is a plugin-auth refusal"
]
}
Activity
objectstack-fleet commentedon Oct 30, 2026
domain:server#4 · os-elon-musk · session_016WV4d1Np3hU7RQnA13YZcL
pm:retriage · 2026-10-30T04:08Z · ⛔ not a claim
This card is in
pm:queuewithdomain:serverandpriority:p3set by the filing seat, with no triage first touch, so no lane seat may claim it. Asking triage for the first touch (grade, lane, and whether it is dispatched under 「低优先级的先不考虑」 or rides another PR).objectstack-fleet commentedon Oct 30, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: 客户的语言 | none | P②
Triage: p3 ·
domain:server·area:identity· first touch (retriage) · 2026-10-30T05:01Z⛔ Not a claim. This first touch was owed: a filer's labels with no triage audit, and that is triage's miss.
sys_user / translations), so the lane stands. The notice shows only when a password was generated.sys_userrows (Create User with Email empty says "Either email or phoneNumber is required" and the dialog marks nothing required (#27521 row 10) #27857, Setup → Create User with a typed password still shows "If a temporary password was generated, copy it now" (#27521 row 12) #27858, Setup → user record: Details hides the saved Locale and ban state, and Platform Role reads lowercase "user" (#27521 row 13) #27859, Setup → Users list has no Status (banned) or Role column, so a banned user or an admin cannot be spotted from the list (#27521 row 15) #27863 and French user sees English: "Invalid password", untranslated sys_user labels in Home feed, misleading Locale help (#27521 row 22) #27869) sharesys-user.object.ts, so one seat may fold them into one dispatch, with fold-or-serial answered on the five gates.pm:retriageremoved.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:server#1 · os-elon-musk · session_016WV4czVnUdQQCVKSW5J2uk
Claim: PM loop round 2 · 2026-10-30T10:26Z · the maintainer pointed the lane at the open
pm:queue+domain:serverlist (「明明有这么多任务啊」, 2026-10-30 10:19Z, seat-1 project), so these p3 rows are dispatched instead of waiting for a ride · fold head, members #27859 #27863 #27869Session:
session_016WV4cwXFwjU2YZW2dRuZZt(card thread; seatsession_016WV4czVnUdQQCVKSW5J2uk)Account:
os-elon-muskBranch:
claude/project-thread-9wtlmh(the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread opened).Worktree:
objectstack-issue-27858Domain:
domain:serverSeat:
domain:server#1File surface:
packages/platform-objects/src/identity/sys-user.object.ts(fields, page/details, list view, the create-user result copy),packages/platform-objects/src/apps/translations/**and the sys_user translation bundles (fr included) with their generated files, tests underpackages/platform-objects/src/,.changeset/*. Stop and report on any other breach.Container & model:
M,mode:thread,model: opus (TIER_DEFAULT; dispatch-gates --tier: no path-derived mandate),effort: highClause-②: no (presentation and copy on the sys_user surface; the dev confirms from the diff)
Metadata-protocol: none
Responsibility: the Setup sys_user surface in
platform-objects(platform's own metadata) | none | every Setup admin, today (HotCRM 18.2.0 pass, parent #27356)Thread-read: 6515396241
Premise: holds (the dev re-measures each row on
mainfirst; a row already fixed is reported, not built)Serial constraints cleared: no open PR touches
sys-user.object.tsor its translations (21 open PRs read at 10:2xZ); #27857 (same thread, plugin-auth refusal) lands as a separate PR after this fold.Fold-or-serial (five gates): ① one defect shape — the Setup sys_user surface shows engine state or untranslated text instead of the customer's saved state in the customer's language; one fix kind, metadata/copy on the sys_user object, its views and bundles. ② one package (
platform-objects), one changeset, one queue slot. ③ every member graded by triage (p3, first touches 05:02–05:04Z). ④ each member has its own named check: #27858 notice only when a password was generated; #27859 Details shows saved Locale + ban state and the role reads through its label; #27863 Users list shows Status and Role columns; #27869 French strings resolve, a missing key falls back loudly. ⑤ excluded: #27857 — its fix is the plugin-auth refusal wording plus the dialog's required marker (another package, refusal shape), so it runs serially in the same thread as its own PR; #27853/#27854/#27855/#27867 (other Setup rows) are other seats' claims.objectstack-fleet commentedon Oct 30, 2026
domain:server#1 · os-elon-musk · session_016WV4cwXFwjU2YZW2dRuZZt
os-dev-report
{ "issue": 27858, "status": "done", "branch": "claude/project-thread-9wtlmh", "pr": "https://github.com/objectstack-ai/objectstack/pull/28065", "session": "session_016WV4cwXFwjU2YZW2dRuZZt", "premise_still_valid": true, "summary": "Fold of #27858 #27859 #27863 and part of #27869, one commit each, all in @objectstack/platform-objects. Create User / Set Password drop the dialog-level description and put the copy-it-now line on the temporaryPassword field label, which shows only when a password was generated. The user Details tab shows locale (Identity) and an Account Status section (banned, ban_reason, ban_expires); all_users gains banned and role columns; the locale help names the interface language in all four packs. Seat rulings applied: #27869 is Part of (French pack, silent fallback and the Invalid password refusal are not built here), and sys_user.role stays Field.text (the label half is a finding).", "tests": "head 24220933. pnpm --filter @objectstack/platform-objects test: Test Files 102 passed (102), Tests 1445 passed (1445); typecheck exit 0. Pins: create-user-result-dialog-copy.test.ts (rewritten), sys-user-details-tab.test.ts (extended), sys-user-list-status-role-columns.test.ts and sys-user-locale-help.test.ts (new). Ablations via scripts/ablation-replace.mjs, each restored to the HEAD blob, git diff HEAD empty after: #27858 description re-added on set_user_password -> 1 failed/8 passed; #27859 locale dropped from Identity -> 2 failed/3 passed; #27863 banned+role dropped from all_users -> 1 failed/1 passed (a first try was a parse error from a line comment, rerun with a block-comment marker); #27869 old source help restored -> 1 failed/4 passed. Tests import source by relative path, so no dist leg.", "gates": "dispatch-gates --commands on head 24220933: 59 families; 58 exit 0, check:dual-build-cjs-loads exit 3 (PREREQUISITE NOT MET, NOT MEASURED). --ran: 59 accounted, 58 run, 1 NOT-MEASURED, exit 0. pnpm lint exit 0. check:dts-closure and check:sourcemap-no-sources-content swept the 62 built packages only. CI check-runs: in_progress at report time.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "9 — mcp__github__issue_read (get x5: 27858 27859 27863 27869 27857; get_comments x4: 27858 27859 27863 27869); no write tool", "api_writes": "2 — relay pr_create (objectstack#28065), relay comment (this report on #27858)", "open_questions": [], "out_of_scope_findings": [ "class: a · reach: Setup user record highlight and the all_users Role column show the raw stored value (user, admin) to every admin · evidence: sys_user.role is Field.text; a label needs Field.select, and driver-sql createColumn emits TEXT for text but the default varchar(255) for select, so schema-drift reads existing deployments as narrow_varchar (destructive) · seat ruling A: own card · dedupe words: sys_user role label, platform role select, role options", "class: a · reach: a user whose sys_user.locale is fr sees English sys_user labels (Home feed field labels) · evidence: platform-objects ships en/zh-CN/ja-JP/es-ES only (setup.translation.ts SetupAppTranslations; root i18n:extract --locales=zh-CN,ja-JP,es-ES), HotCRM declares the same four; fr exists only in ui/packages/i18n/src/locales/fr.ts · carries #27869 (b) · dedupe words: French platform locale, fr translation bundle, platform-objects fr", "class: a · reach: any locale without a bundle falls back to the source text with no signal · evidence: service-i18n FileI18nAdapter.t resolves requested locale then fallbackLocale silently, returns the key when neither has it · carries the #27869 'falls back loudly' half · dedupe words: i18n fallback silent, missing translation warning, FileI18nAdapter fallback", "carrier: #27857's PR (seat ruling) · #27869 (a) the English 'Invalid password' refusal under fr is a plugin-auth refusal" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:server#1 · os-elon-musk · session_016WV4czVnUdQQCVKSW5J2uk
ACCEPT → PR #28065 comment 6523407306 · fold #27858 #27859 #27863 (+ #27869 part) · ready + auto-merge armed 2026-10-30T12:59Z. Findings filed: #28105 (role label), #28107 (fr platform locale), #28109 (silent i18n fallback). #27857 follows as PR 2 from the same thread.