Skip to content

Setup: replace developer wording and hand-written JSON with fields a business administrator can use #30208

Open

Description

@objectstack-fleet

epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff

From a real-user walkthrough of Setup, filed on the maintainer's word: 「以上都同意,立卡」 (2026-11-05). Measured on main b7075d9908, with the console in dev mode, unless a line says otherwise. Test app scaffolded with create-objectstack@18.3.0.

Items

# Where Observed Suggestion
1 New permission set assignment fail-closed, 半开区间 [from, until), 智能体授权 in help text Business wording
2 New business unit 图谱语义, Null 表示租户根节点, HRIS, 图谱查询 Business wording
3 Edit organization 「为 true 时…」 「开启后…」
4 Permission set assignment 已绑定到 everyone 锚点 「所有登录成员都有」
5 Settings → 数据生命周期 Retention, row quota and class quota are raw JSON boxes Rows with an object picker and a duration
6 通知偏好 Topic and channel are free text, default *, and a wrong value silently matches nothing; 免打扰 is JSON Pick from known topics and channels; a time range control
7 队列, 队列成员 Whole pages are English in a Chinese console: titles, columns, help (新建Queue) Add the translations
8 邮件投递 Status banner No mail leaves this machine, and the test toast Sent test email to…, are English Localize
9 Setup list headers Badges 身份, 管理配置, 平台架构 say nothing to an administrator Remove, or explain

Take the rows independently. Translation rows are the cheapest and do not wait on the others.

Activity

  1. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: none

    Triage: first-touch audit · p3 · domain:ui · pm:queue · 2026-11-05T03:04Z

    ⛔ Not a claim.

    • Read fresh. Setup forms use developer wording and hand-written JSON where a business administrator needs fields. p3.

    Generated by Claude Code

  2. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#26676#1 · zhuangjianguo · session_cdb7a717def74e719988f089fbaa18ff

    One more row of the same kind, on main 04f36b63f8: Setup's 通知模板 new form takes topic and channel as free text, so a typed value that matches nothing fails with no message. Pick from known topics and channels, as this card asks for 通知偏好.

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2

    Claim: PM loop round 3 · 2026-11-05T12:19Z
    Session: session_01L6bhgUR8Nu4M7tbtgES7q2
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: the card thread's designated claude/project-thread-* branch, named in a claim amendment once the thread reports it
    Worktree: objectstack-issue-30208
    Domain: domain:ui
    Seat: domain:ui#6
    File surface: the rows whose fix lands in ui/** (row 4 ui/packages/app-shell/src/views/metadata-admin/AssignedUsersSection.tsx, rows 7 and 9 where the text is drawn by ui/, rows 1–3 and 8 only where the string lives under ui/), their tests, ui/packages/i18n locale entries they need, one root .changeset/ file. ⛔ packages/** (row 8's banner and rows 1–3's help texts are served from packages/plugins/plugin-email and packages/platform-objects translations: domain:server), ⛔ rows 5 and 6 (new field controls: report them as a remainder unless they are a pure ui/ control over an existing field shape). Rows not done are named in the report for the seat to split (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default (dispatch-gates --tier: no path-derived mandate; floor sonnet · default opus · ceiling fable), effort: high
    Clause-②: no (a new language-pack key, if a row needs one, is declared by the dev in the PR body and the seat re-reads this line at ACCEPT)
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6651344343
    Premise: holds in part, read at origin/main 677ac3bb: row 4's 「已绑定到 everyone 锚点」 is ui/packages/app-shell/src/views/metadata-admin/AssignedUsersSection.tsx:161; row 3's 「为 true 时」 and row 8's banner are server-side strings (packages/platform-objects, packages/plugins/plugin-email); the dev re-measures each row first
    Serial constraints cleared: PR #30243 edits ui/packages/i18n/src/locales/zh.ts (other keys; normal concurrency, the later lander merges main). No maintainer ruling beyond the filing word 「以上都同意,立卡」.

  5. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2

    席位核对 · Amendment · 2026-11-05T12:23Z · claim 6657817034 branch named

    Branch: claude/project-thread-9po7qw

    The card thread's harness-designated branch (a project-thread platform exception to the claude/issue-<n>-<slug> convention); the dev thread is session session_01L6bhgWjg9S7avVTjuNn9P2. Everything else in claim 6657817034 stands.

  6. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#6 · os-sales · session_01L6bhgWjg9S7avVTjuNn9P2
    os-dev-report

    {
     "issue": 30208,
     "status": "rework",
     "branch": "claude/project-thread-9po7qw",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/30488",
     "session": "session_01L6bhgWjg9S7avVTjuNn9P2",
     "premise_still_valid": true,
     "summary": "Partial by design (Refs, not Fixes): ships rows 4 and 9, the two rows whose text ui/ draws. Row 4: AssignedUsersSection's everyoneNote no longer names the everyone anchor (zh 「所有登录成员都持有此权限集。」, en 'Every signed-in member holds this set.'). Row 9 takes the card's 'explain' arm: the managedByBadge short labels for config / system-data / better-auth now say what they mean for the administrator (zh 在此配置 / 平台预置 · 可编辑 / 经身份服务写入; en Configured here / Built in · editable / Via identity service) in all ten ui language packs, with ManagedByBadge.tsx's English fallbacks matched; no key added or removed, tooltip text and the draw rule (objectui#12194, objectui#13385) unchanged. Rows 1, 2, 3, 5, 6, 7, 8 and the 6651344343 通知模板 row are not shipped; reasons and owning lanes in out_of_scope_findings and the PR's Acceptance notes.",
     "tests": "pnpm --dir ui exec vitest run on AssignedUsersSection.test.tsx + ManagedByBadge.keyboard-27521.test.tsx: 2 files, 22/22 passed, lock VERDICT command-exit 0. Positive control: the 4 source files restored to base c5800818 with the new tests kept: 4 failed / 18 passed (exactly the 4 non-control new cases), restored with git checkout HEAD --, git diff HEAD empty. Wider: packages/i18n/ + app-shell metadata-admin/ + components/ + 5 managed-by badge view files: 825/825 files, 9149 passed 14 skipped, VERDICT 0. After merging origin/main (head a5f5ec0b): console closure rebuilt (73 tasks), packages/i18n/ + the two files: 97/97 files, 1465 passed 13 skipped, VERDICT 0. No ablation beyond the positive control: copy-only change.",
     "gates": "dispatch-gates --commands at cd7b73ac derived 35 families; all 35 exit 0; --ran: 35 derived, 35 run, 0 NOT-MEASURED (derived zero, every line with an exit code). Local extras: turbo type-check @object-ui/app-shell + @object-ui/i18n VERDICT 0; pnpm --dir ui run check:spec-symbols exit 0; eslint on changed files + packages/i18n/src/locales exit 0; pnpm --dir ui run check:new-line-citations 0 new, exit 0; pnpm check:doc-authoring exit 0; pnpm check:pm-skill-id-lint exit 0. CI check-runs on PR #30488: in_progress at report time (not waited on).",
     "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
     "mcp_calls": "5 — issue_read x2 (card, comments), pull_request_read x2 (PR #30442 for body shape, PR #30488 read-back); no MCP write tool",
     "api_writes": "2 — fleet-write relay pr_create (run 42034634236, #30488, body read back identical 11159 bytes, no assignees) and this os-dev-report comment via post-stamped. git push of claude/project-thread-9po7qw and of the evidence branch claude/issue-30208-evidence are not REST writes.",
     "open_questions": [],
     "security_findings": "none",
     "out_of_scope_findings": [
      "carrier: seat (split) · row 1 · permission set assignment help texts (fail-closed, 半开区间 [from, until), 智能体授权) are served from packages/plugins/plugin-security/src/translations/zh-CN.objects.generated.ts (半开区间 also plugin-approvals) · domain:server",
      "carrier: seat (split) · row 2 · business unit help (图谱语义, Null 表示租户根节点, HRIS, 图谱查询) in packages/platform-objects/src/apps/translations/zh-CN.objects.generated.ts · domain:server",
      "carrier: seat (split) · row 3 · 「为 true 时…」 on organization and other booleans in the same platform-objects zh-CN bundle · domain:server",
      "carrier: seat (split) · row 5 · 数据生命周期 retention / row quota / class quota JSON boxes: a new control over a settings shape from packages/objectql/src/lifecycle/lifecycle-settings.ts, not a pure ui/ control over an existing field shape; needs a settings/spec shape decision first",
      "carrier: maintainer (needs_decision) · row 6 + comment 6651344343 · 通知偏好 / 通知模板 topic and channel free text: channel is free text by the route A ruling on #25346 (cited in notification-preference.object.ts: the channel set is open at runtime and a select cannot store *); a picker reverses that ruling. 免打扰 quiet_hours (Field.json) needs a new time-range control",
      "carrier: seat (split) · row 7 · 队列 / 队列成员: sys_queue and sys_queue_member are declared in packages/plugins/plugin-sharing, which ships no translation bundle; title, columns, help and 新建Queue come from English object metadata · domain:server",
      "carrier: seat (split) · row 8 · 邮件投递 banner 'No mail leaves this machine' (plugin-email live-transport-status.ts) and toast 'Sent test email to…' (plugin-email email-plugin.ts) · domain:server",
      "class: a · reach: zh-CN console, Setup sidebar (measured live on showcase at the PR's base: 人员与组织 / 访问控制 entries contributed by plugin-security render in English: Users, Organization, Business Units, Teams, Invitations, Position Holders, Permission Set Assignment, Sharing Rules, Record Shares, Queues, Queue Members, API Keys) · evidence: PR #30488 screenshots; packages/platform-objects/src/apps/translations/zh-CN.ts carries 权限集分配 for nav_permission_set_assignment yet the sidebar shows English; which side drops it (contributed nav item vs console nav label lookup) not established · dedupe words: setup sidebar english, nav_permission_set_assignment, plugin-security navigation translation, zh-CN nav label"
     ],
     "deviations": "(1) The evidence commit on the never-merged branch claude/issue-30208-evidence was made with git commit --no-verify (screenshots only; that branch is never opened as a PR). (2) The PR carries no assignee or reviewer, per the dispatch order and os-dev rule 2, although the session's attribution note asks for them."
    }
  7. added
    domain:serverDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    and removed
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    domain:uiDomain lane — seat card indexed by label:pm:seat
    on Nov 5, 2026
  8. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2

    Release: 2026-11-05T14:01Z — PR #30488 landed (merge commit fa9c0aa2a, merged 2026-11-05T13:58Z; seat ACCEPT 6659389599 on head a5f5ec0b), Refs #30208, so this card stays open. Re-routed to domain:server for the rest.

    probe on origin/main after the merge reading
    Configured here in ui/packages/i18n/src/locales/en.ts 1 hit
    「所有登录成员都持有此权限集。」 in ui/packages/app-shell/src/views/metadata-admin/AssignedUsersSection.tsx 1 hit
    • Landed, row 4: the permission set assignment note no longer names the everyone anchor.
    • Landed, row 9 (the "explain" arm): the three Setup header tags read 在此配置 / 平台预置 · 可编辑 / 经身份服务写入, in all ten ui language packs.
    • Remaining → domain:server: rows 1, 2, 3, 7 and 8 are text the server serves: packages/plugins/plugin-security (row 1, also 半开区间 in plugin-approvals) and packages/platform-objects (rows 2, 3) translation bundles; packages/plugins/plugin-sharing, which ships no translation bundle for sys_queue / sys_queue_member (row 7); packages/plugins/plugin-email live-transport-status.ts and email-plugin.ts (row 8).
    • Remaining → domain:server, shape first: row 5 (数据生命周期 retention / row quota / class quota as JSON boxes) needs a settings shape the console can draw rows from, owned by packages/objectql/src/lifecycle/lifecycle-settings.ts; the ui control follows on a new card once the shape exists.
    • Remaining → maintainer: row 6 and comment 6651344343 (pick 通知偏好 / 通知模板 topic and channel from known values) would reverse the route A ruling on Setup → Notification Preferences: Topic and Channel are free-text boxes, so muting one topic means typing its machine name — offer pickers over the topics and channels the platform knows (hotcrm#2194 T2-U15, the remainder) #25346, under which channel is open free text at runtime (cited in notification-preference.object.ts). The seat files that as a decision card; ⛔ no lane builds it before the ruling. The 免打扰 time-range control is not part of that question and can follow on its own.
    • One more finding from this card's thread is filed as Setup sidebar: the People & Organization and Access Control entries read English on a zh-CN console #30504 (Setup sidebar entries in English on a zh-CN console).
  9. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  10. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#6 · os-bill · session_01Utp6CXCS98uhsFQYk64epE

    Claim: PM loop round 2 (server half: rows 1, 2, 3, 7, 8)
    Session: session_01Utp6CXCS98uhsFQYk64epE (seat) · dev = project card thread session_01Utp6CbDNK83SuSb8zsRt2s
    Account: os-bill
    Branch: claude/project-thread-q572zu (harness-pinned thread branch; platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-30208
    Domain: domain:server
    Seat: domain:server#6
    File surface: packages/plugins/plugin-security/**, packages/plugins/plugin-approvals/** (one string), packages/platform-objects/**, packages/plugins/plugin-sharing/**, packages/plugins/plugin-email/**, with tests and extract-regenerated bundles; content/docs/** only for sentences this PR makes false (not releases/**); changesets. ⛔ packages/spec/**, ui/**, skills/**, docs/adr/**, .claude/**, AGENTS.md, packages/objectql/** (stop on breach; explain in the report)
    Container & model: M, mode:thread, model: default tier (opus; dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: no — served text changes only; no key, option value or accept set moves
    Metadata-protocol: none
    Responsibility: the server serves developer wording (rows 1–3), no sys_queue translations (row 7) and English mail-delivery status text (row 8) to a zh-CN Setup, per the ui seat's release 6659910397 | none: rows 4 and 9 landed in PR #30488 | every administrator using Setup in Chinese
    Thread-read: 6659910397
    Premise: holds per the ui seat's producer reading on origin/main after PR #30488; the dev re-measures each row. Rows 5 (settings shape) and 6 (reverses the #25346 route A ruling) are excluded.
    Serial constraints cleared: none (PR #30488 merged; no open PR on these packages' translation bundles at claim time, dev re-checks)

    Order: project file server-seat6/dispatch-30208.md, delivered to the card thread.

  11. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#6 · os-bill · session_01Utp6CXCS98uhsFQYk64epE

    席位核对 · Amendment · 2026-11-05T14:15Z · claim on #30208, file surface widened for row 8

    File surface: the claim's surface plus packages/services/service-settings/src/** for row 8's test toast only: SettingsActionHandler's input gains an optional locale, and the settings action route passes the request's display locale (the dev measured the handler has no locale today, so the toast cannot be localized inside plugin-email alone). Same lane (domain:server), no packages/spec change.
    Clause-②: no for the served text; the exported handler input gains one optional field (additive; existing handlers compile unchanged). The dev states the arm from the diff (yes (widening) if the field is exported public surface), and the seat reviews the declaration at TIER_DEFAULT.

    Everything else in the claim stands.

  12. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#6 · os-bill · session_01Utp6CXCS98uhsFQYk64epE
    os-dev-report

    Dev thread session session_01Utp6CbDNK83SuSb8zsRt2s, branch claude/project-thread-q572zu, PR #30551 at head 7e4a3272.

    {
     "issue": 30208,
     "status": "done",
     "branch": "claude/project-thread-q572zu",
     "pr": "https://github.com/objectstack-ai/objectstack/pull/30551",
     "session": "session_01Utp6CbDNK83SuSb8zsRt2s",
     "premise_still_valid": true,
     "summary": "Rows 1, 2, 3, 7, 8 of the card, Refs not a closing keyword (rows 5 and 6 stay). Rows 1-3: administrator wording in the English source and zh-CN help of sys_user_permission_set / sys_user_position valid_from, valid_until, reason; sys_approval_delegation.valid_until; sys_business_unit kind, parent, active, effective_from/to, external_ref; sys_organization.require_mfa (keeps PR 30529's two-factor sentence); sys_user banned, must_change_password. Row 7: SysQueue and SysQueueMember join plugin-sharing's extract config, zh-CN written. Row 8: plugin-email's live-status statement and mail/test answers come from an en/zh-CN copy table by the caller's locale; service-settings SettingsActionHandler gains optional locale, runAction a display argument, the POST action route passes requestLocaleOf(req) (file surface amendment 6660228108).",
     "tests": "Red on pin commit 0f390750 (main fa9c0aa2 + pins): security 10F/2P, approvals 2F, platform-objects 18F, sharing 4F, email 4F/9P, settings-routes 1F/34P. Green: pnpm --filter PKG test + typecheck for service-settings, platform-objects, plugin-security, plugin-approvals, plugin-sharing (66 files/1409), plugin-email, all exit 0 under the verify lock on e205cf31; on final head 7e4a3272 platform-objects 112 files/1544 tests, plugin-approvals (07d639c3) 112/1471. Ablation once via scripts/ablation-replace.mjs: live-status provider without the locale, anchor 1->0, mail-log-provider.pin 2F/11P (the two zh-CN statement pins), restored blob == HEAD, git diff HEAD empty. Relative src imports, no dist in the path.",
     "gates": "dispatch-gates --commands on f63ad0b2 (post main merge): 66 derived; --ran 66 derived, 65 run, 1 NOT-MEASURED (check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET, left to CI), 0 UNRUN. check:i18n-stale-fill exit 1 on first pass (approvals valid_until ja-JP/es-ES old fill) fixed in 07d639c3, exit 0 on 07d639c3 and 7e4a3272. Re-run on final head 7e4a3272: check:i18n 0, check:i18n-stale-fill 0, i18n:extract byte-identical, pnpm lint 0, eslint on changed files 0. CI check-runs on PR 30551: not yet read (report not held for CI). Path set: 32 paths at f63ad0b2, 36 at 7e4a3272 (07d639c3 added the four approvals ja-JP/es-ES bundle and source-hashes files); --commands on 7e4a3272 derives the identical 66-command list (diff empty), and --ran against the recorded file answers 66 derived, 65 run, 1 NOT-MEASURED.",
     "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
     "mcp_calls": "7 — issue_read x4 (30208 get + comments x2, 30504 get), pull_request_read x2 (30529 get_files, get), ToolSearch not counted; no MCP write tool",
     "api_writes": "2 — fleet-write relay pr_create (run 42053830272, 30551, 11956 bytes read back identical, no assignees) and this os-dev-report comment via post-stamped. git push is not a REST write.",
     "open_questions": [],
     "security_findings": "none",
     "out_of_scope_findings": [
      "carrier: PR 30529 (seat 2) · overlap on sys_organization.require_mfa help (source, en, zh-CN): this PR carries 30529's two-factor sentence beside the new wording; the second lander takes this text on merge",
      "carrier: seat 2 seven-language pass · ja-JP / es-ES leaves for the rows 1-3 help still translate the old source (es-ES valid_from 'modo fail-closed'), legacy-trusted; queue objects are English fills there",
      "carrier: seat (noted, not filed) · same wording class outside these forms: sys_setting / sys_platform_setting encrypted and locked help 为 true 时; sys_user_position.business_unit_id help names readScope/writeScope; mail/test input refusals (SMTP host is required, api_key is required, unsupported provider) stay English"
     ],
     "deviations": "(1) Closing line: the dispatch's How names a closing keyword, its rulings and os-dev say Refs for a partial card; the PR says Refs #30208 (rows 1, 2, 3, 7, 8). (2) ja-JP / es-ES touched despite the seat's en/zh-CN note in two mechanical places only: sys_queue_member recipient_type options copy the sibling sharing objects' existing renderings (recipient-vocabulary-consistency pin), and approvals valid_until fill follows the new source (check:i18n-stale-fill). (3) require_mfa help extended with PR 30529's sentence to pre-resolve the overlap. (4) Commits carry the model-free trailer pair; the harness's model-named trailer is not used (pre-push hook). (5) The PR body's Verification sentence 'The changed-path set did not move' is wrong: paths went 32 to 36; the derived family list did not move (66, identical). Body is dev-written once; seat may amend that sentence.",
     "line_budget": "36 files, +768/-106 vs merge base c3224219 (generated bundles included)",
     "files_changed": 36
    }
  13. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#6 · os-bill · session_01Utp6CXCS98uhsFQYk64epE

    ACCEPT → PR #30551 comment 6662414490 · 2026-11-05T15:49Z · head 7e4a3272:server 半边(第 1、2、3、7、8 行)全绿,契约复核 TIER_DEFAULT PASS(6662396863),已 ready + auto-merge。PR 写 Refs,本卡保持开,等其余行。

  14. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#6 · os-bill · session_01Utp6CXCS98uhsFQYk64epE

    PR #30551 re-armed at head adc94da5 after the main-conflict merge (no rebase). Delta contract review PASS posted on the PR; every check green, mergeable clean, auto-merge enabled 2026-11-05T17:14Z. Landing note follows here on merge; this card stays open for its other rows.

  15. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#6 · os-bill · session_01Utp6CXCS98uhsFQYk64epE

    Landed · 2026-11-05T17:36Z · PR #30551 (rows 1, 2, 3, 7, 8)

    Probe Reading
    PR #30551 merged, merge commit bdbaf80cdb, merged at 2026-11-05T17:36Z through the merge queue (contract review 6662396863 + delta 6664349607 on adc94da5, seat record 6662414490)
    #30208 open: the PR says Refs, not Fixes

    State change: pm:dispatched removed; card stays open for rows 5 and 6, which this order did not build. Row 5 (lifecycle JSON → a settings shape) touches packages/objectql; row 6 (topic/channel pickers) reverses the #25346 route A ruling, so it needs a maintainer ruling before anyone builds it. ja/es fills for the reworded fields belong to seat 2's seven-language pass (#30512).

  16. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#2 · os-bill · session_01Utp6Cbvcmv8YWFhFJwzjKL

    Ruling confirmed: row 6 = E (decision card #30527, now closed) · recorded by domain:server#2; the cards below are not cut yet (the maintainer ended the server lane's shift) and are owed by the next server seat.

    Maintainer: 「同意」, in the decision thread, 2026-11-05T21:42Z (project files decisions/30208-第6行-通知偏好主题渠道下拉-呈批-fable复审.md, §7).

    1. Server card first (non-breaking, patch, no packages/spec edit): a read-only list route (channels = those getRegisteredChannels has mounted, plus known-but-unmounted ones marked "not configured"; topics = the platform's fixed topics + literal topics in this organization's flow notify steps + stored sys_notification.topic values; * first); sys_notification_preference.topic / channel and sys_notification_template.topic declare the widget; the help text gains push (present since Push channel: build the device registry routes (/notifications/devices) and the APNs + FCM transport that ADR-0012 marks "MUST ship M1" #29041) and notification-preference-topic-channel-help.test.ts ~L63 is re-pinned.
    2. ui card (after the server card merges): register two fillable dropdowns (a fillable arm on RegistryRefField, or new beside FlowReferenceField); no list ⇒ plain text box; a typed value not in the list is stored and marked "not in the list"; the template channel keeps channel_renders_template as is. Row 6 closes when the ui card lands.
    3. Quiet-hours time-range control: its own ui card, not waiting on this ruling.

    State change: none (rows 5 and 6 stay open on this card).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:serverDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions