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: Settings sidebar and hub disagree — "Email" vs "Mail Delivery", SMS and Data Lifecycle missing from the sidebar (#27521 row 3) #27854
Filing gate: ② a wrong or confusing state shown to the user. Split from #27521 row 3 by the seat; the parent's acceptance says each row is taken as its own card or answered.
Business reason
Who: every administrator in Setup. What happens: the sidebar says "Email" where the hub card says "Mail Delivery"; the hub lists SMS Delivery and Data Lifecycle, the sidebar has neither, so two of the settings pages cannot be reached from the sidebar and one page has two names. Reach: every administrator.
Mechanism
packages/platform-objects/src/apps/setup-nav.contributions.ts, Configuration group: nav_settings_mail is labelled 'Email' (line 140 on main), and no entry exists for SMS Delivery or Data Lifecycle.
Against the manifests' title in packages/services/service-settings/src/manifests/* (the hub reads those).
Measured at main @ 561b7642, re-driven (stock examples/app-showcase --seed-admin, admin, Chromium 1440×900).
Wanted
One name per settings page, the same in the sidebar and the hub, and the same set of pages in both.
Acceptance
The sidebar label for the mail page equals the hub card's title (in en and the shipped packs).
SMS Delivery and Data Lifecycle are reachable from the sidebar, or the hub and sidebar otherwise list the same set.
A test pins sidebar entries against the settings manifests so the two cannot drift again.
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 · 2026-10-30T10:22Z · the maintainer pointed the lane at the open pm:queue + domain:server list (2026-10-30 10:19Z), so this p3 is dispatched on its own instead of waiting for a ride · fold head, member #27855 (same platform-objects Setup surfaces)
Session: session_016WV4cxh364AJYtdpWoPiHV (card thread; seat session_016WV4d1Np3hU7RQnA13YZcL)
Account: os-elon-musk
Branch: claude/project-thread-9z96wv
Worktree: objectstack-issue-27854
Domain: domain:server
Seat: domain:server#4
File surface: packages/platform-objects/src/apps/setup-nav.contributions.ts (one label per settings page, the same set as the settings hub), packages/platform-objects/src/apps/dashboards/system.datasets.ts (#27855: labelled audit-action dimension), packages/platform-objects/src/audit/sys-notification.object.ts (#27855: source object label, title-case severity labels; the open-vocabulary topic stays out — Refs #27855, the card stays open for it), packages/platform-objects/src/apps/translations/* (generated bundles they feed), their tests, .changeset/* — amended before push: packages/services/service-settings/src/setup-nav-hub-parity.test.ts (test-only, the sidebar/hub drift pin; platform-objects cannot import the manifests without a cycle), packages/plugins/plugin-audit/src/objects/sys-audit-log.object.ts (action option labels only, stored values unchanged) and packages/plugins/plugin-audit/src/translations/en.objects.generated.ts (its regenerated bundle); packages/cli/test/connect-agent-both-halves-wire.pin.test.ts (test-only: the Setup tree count 32 → 34 for the two new sidebar entries, amended after CI); system.datasets.ts needs no change; ⛔ not identity/sys-user.object.ts (#27855's env_native label bullet stays with the sys_user rows), no packages/spec, no governed path
Container & model: M, mode:thread, model: default (TIER_DEFAULT), effort: high; no contract review owed (labels and navigation entries; nothing accepted today is refused)
Clause-②: no (labels, option labels and navigation entries; stored values and accepted inputs unchanged — the dev confirms from the diff)
Metadata-protocol: none
Responsibility: Setup's sidebar and settings hub disagree on names and on which pages exist, and System Overview / Notifications show raw keys (config_change, approval.requested, lowercase severity); the platform path that covers it is the setup navigation contributions matching the settings manifests (pinned so they cannot drift) and labelled values on the system dataset and the notification object; reached by every administrator in Setup.
Thread-read: 6515381331
Premise: holds (origin/main5aee2065: setup-nav.contributions.ts L140 nav_settings_mail labelled 'Email'; no entry for SMS Delivery or Data Lifecycle)
Serial constraints cleared: no open PR touches setup-nav.contributions.ts, system.datasets.ts, sys-notification.object.ts or apps/translations.
Withdrawn: claim race. Seat 4's claim 6520415969 came first, so seat 3 yields #27854 and makes no claim here. The labels and assignee are the same account's, so nothing else changes. ⛔ Not a claim.
{
"issue": 27854,
"status": "done",
"branch": "claude/project-thread-9z96wv",
"pr": "https://github.com/objectstack-ai/objectstack/pull/28062",
"session": "session_016WV4cxh364AJYtdpWoPiHV",
"premise_still_valid": true,
"summary": "Sidebar settings entries now carry the hub card's title in en/zh-CN/ja-JP/es-ES (en mail 'Email' -> 'Mail Delivery'; zh/ja company and mail, es mail/storage/feature flags take the hub wording) and SMS Delivery + Data Lifecycle gain entries (manage_platform_settings). Drift pin lives in service-settings (platform-objects cannot import it: cycle) and boots the real plugin + lifecycle manifest + registry fold. #27855 partly: severity options Info/Warning/Critical, source_object widget 'object-ref'; audit action option labels in plugin-audit (the chart resolves dimensions through field options, so system.datasets.ts is unchanged). Topic left out (open vocabulary, no label source; seat ruling), sys_user env_native untouched; PR says Fixes #27854, Refs #27855.",
"tests": "On main 5aee2065: setup-nav-hub-parity.test.ts 'Tests 6 failed | 3 passed (9)' (missing: [sms, lifecycle]; en/zh-CN/ja-JP/es-ES label drift); with fix 9 passed. Ablation by restoring each object file from origin/main: sys-notification-display-labels.test.ts 'Tests 2 failed (2)'; sys-audit-log-action-labels.test.ts 'Tests 1 failed | 1 passed (2)' (stored-values case stays green); restored from HEAD, git status clean, both 2/2. Suites: platform-objects 'Test Files 101 passed', 'Tests 1434 passed'; plugin-audit 66 files / 1053 tests; service-settings 63 files / 1025 tests. Typecheck of the three packages exit 0.",
"gates": "dispatch-gates --commands at f3487c44 derived 61 families; each run with exit code captured to a file: 60 exit 0, pnpm check:dual-build-cjs-loads exit 3 (NOT MEASURED, needs every package's dist). --ran: '61 derived famil(ies) accounted for — 60 run, 1 NOT-MEASURED'. Plus check:i18n-coverage, pnpm lint exit 0. check-plugin-teardown-shape --self-test run after fetching the pinned commit. CI check-runs on PR #28062: queued at report time.",
"line_budget": "355 changed lines (+315/-40, 16 files) at f3487c44 vs the 3000 threshold: under (PR adds a changeset; no generated file outside the two en bundles).",
"deviations": "1) File surface amended by the seat (two strokes on claim 6520415969): service-settings/src/setup-nav-hub-parity.test.ts (test only) and plugin-audit sys-audit-log.object.ts + its en bundle; system.datasets.ts dropped. 2) A plugin-audit test file sys-audit-log-action-labels.test.ts was added under the claim's 'their tests' clause. 3) Topic bullet of #27855 not done (seat ruling); #27855 referenced, not closed. 4) The mail entry's recorded source hashes refreshed in zh-CN/ja-JP/es-ES together with its re-translation (en source changed); sms/lifecycle hashes recorded.",
"files_changed": [
".changeset/27854-setup-settings-names.md",
"packages/platform-objects/src/apps/setup-nav.contributions.ts",
"packages/platform-objects/src/apps/translations/{en,zh-CN,ja-JP,es-ES}.ts",
"packages/platform-objects/src/apps/translations/{zh-CN,ja-JP,es-ES}.source-hashes.ts",
"packages/platform-objects/src/apps/translations/en.objects.generated.ts",
"packages/platform-objects/src/audit/sys-notification.object.ts",
"packages/platform-objects/src/audit/sys-notification-display-labels.test.ts",
"packages/plugins/plugin-audit/src/objects/sys-audit-log.object.ts",
"packages/plugins/plugin-audit/src/objects/sys-audit-log-action-labels.test.ts",
"packages/plugins/plugin-audit/src/translations/en.objects.generated.ts",
"packages/services/service-settings/src/setup-nav-hub-parity.test.ts"
],
"dogfood_battery": "n/a — no '!' in the PR title and no (narrowing) arm",
"mcp_calls": "4 — mcp__github__issue_read x4 (get #27854, get #27855, get_comments #27854, get_comments #27855); no write tool",
"api_writes": "3 — git push of claude/project-thread-9z96wv; relay pr_create (fw-20261030T111820Z-90bb49, PR #28062, read-back identical 7907 bytes); this os-dev-report comment via post-stamped",
"open_questions": [],
"out_of_scope_findings": [
"class: b · reach: Setup → All Settings → Data Lifecycle card and page, zh-CN/ja-JP/es-ES · evidence: objectql's lifecycleSettingsManifest has no settings.lifecycle.* entry in any bundle (settingsBuiltinTranslations covers service-settings' own manifests only, and its coverage test refuses a namespace no bundled manifest declares), so the card title, description and every field read English under a translated UI; the sidebar entry is translated here, so in those locales sidebar and hub differ for this one page (pinned as HUB_UNTRANSLATED = ['lifecycle']) · dedupe words: lifecycle settings translation, Data Lifecycle hub untranslated",
"class: b · reach: Setup → Notification Events topic column · evidence: sys_notification.topic is open-vocabulary text (about 30 distinct emitted topics) and no topic catalog with labels exists · dedupe words: readable notification topic label source (remains on #27855)"
]
}
ACCEPT → PR #28062 comment 6522181656 · head 8037b1c3 · 2026-10-30T12:00Z · landing sent (no contract review owed). Closes this card; #27855 is Refs and stays open for topic and the env_native label.
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:studio· first touch (retriage) · 2026-10-30T05:00Z⛔ Not a claim. This first touch was owed: a filer's labels with no triage audit, and that is triage's miss.
platform-objects/src/apps/setup-nav.contributions.ts), so the lane stands. One name per settings page in the sidebar and the hub.pm:retriageremoved.Generated by Claude Code
objectstack-fleet commentedon Oct 30, 2026
domain:server#4 · os-elon-musk · session_016WV4d1Np3hU7RQnA13YZcL
Claim: PM loop · 2026-10-30T10:22Z · the maintainer pointed the lane at the open
pm:queue+domain:serverlist (2026-10-30 10:19Z), so this p3 is dispatched on its own instead of waiting for a ride · fold head, member #27855 (sameplatform-objectsSetup surfaces)Session:
session_016WV4cxh364AJYtdpWoPiHV(card thread; seatsession_016WV4d1Np3hU7RQnA13YZcL)Account:
os-elon-muskBranch:
claude/project-thread-9z96wvWorktree:
objectstack-issue-27854Domain:
domain:serverSeat:
domain:server#4File surface:
packages/platform-objects/src/apps/setup-nav.contributions.ts(one label per settings page, the same set as the settings hub),packages/platform-objects/src/apps/dashboards/system.datasets.ts(#27855: labelled audit-action dimension),packages/platform-objects/src/audit/sys-notification.object.ts(#27855: source object label, title-case severity labels; the open-vocabularytopicstays out —Refs #27855, the card stays open for it),packages/platform-objects/src/apps/translations/*(generated bundles they feed), their tests,.changeset/*— amended before push:packages/services/service-settings/src/setup-nav-hub-parity.test.ts(test-only, the sidebar/hub drift pin; platform-objects cannot import the manifests without a cycle),packages/plugins/plugin-audit/src/objects/sys-audit-log.object.ts(actionoption labels only, stored values unchanged) andpackages/plugins/plugin-audit/src/translations/en.objects.generated.ts(its regenerated bundle);packages/cli/test/connect-agent-both-halves-wire.pin.test.ts(test-only: the Setup tree count 32 → 34 for the two new sidebar entries, amended after CI);system.datasets.tsneeds no change; ⛔ notidentity/sys-user.object.ts(#27855'senv_nativelabel bullet stays with thesys_userrows), nopackages/spec, no governed pathContainer & model:
M,mode:thread,model: default (TIER_DEFAULT),effort: high; no contract review owed (labels and navigation entries; nothing accepted today is refused)Clause-②: no (labels, option labels and navigation entries; stored values and accepted inputs unchanged — the dev confirms from the diff)
Metadata-protocol: none
Responsibility: Setup's sidebar and settings hub disagree on names and on which pages exist, and System Overview / Notifications show raw keys (
config_change,approval.requested, lowercase severity); the platform path that covers it is the setup navigation contributions matching the settings manifests (pinned so they cannot drift) and labelled values on the system dataset and the notification object; reached by every administrator in Setup.Thread-read: 6515381331
Premise: holds (
origin/main5aee2065:setup-nav.contributions.tsL140nav_settings_maillabelled'Email'; no entry for SMS Delivery or Data Lifecycle)Serial constraints cleared: no open PR touches
setup-nav.contributions.ts,system.datasets.ts,sys-notification.object.tsorapps/translations.objectstack-fleet commentedon Oct 30, 2026
domain:server#3 · os-elon-musk · session_016WV4czuTWNgKR22fKv7jia
Withdrawn: claim race. Seat 4's claim 6520415969 came first, so seat 3 yields #27854 and makes no claim here. The labels and assignee are the same account's, so nothing else changes. ⛔ Not a claim.
objectstack-fleet commentedon Oct 30, 2026
domain:server#4 · os-elon-musk · session_016WV4cxh364AJYtdpWoPiHV
os-dev-report
{ "issue": 27854, "status": "done", "branch": "claude/project-thread-9z96wv", "pr": "https://github.com/objectstack-ai/objectstack/pull/28062", "session": "session_016WV4cxh364AJYtdpWoPiHV", "premise_still_valid": true, "summary": "Sidebar settings entries now carry the hub card's title in en/zh-CN/ja-JP/es-ES (en mail 'Email' -> 'Mail Delivery'; zh/ja company and mail, es mail/storage/feature flags take the hub wording) and SMS Delivery + Data Lifecycle gain entries (manage_platform_settings). Drift pin lives in service-settings (platform-objects cannot import it: cycle) and boots the real plugin + lifecycle manifest + registry fold. #27855 partly: severity options Info/Warning/Critical, source_object widget 'object-ref'; audit action option labels in plugin-audit (the chart resolves dimensions through field options, so system.datasets.ts is unchanged). Topic left out (open vocabulary, no label source; seat ruling), sys_user env_native untouched; PR says Fixes #27854, Refs #27855.", "tests": "On main 5aee2065: setup-nav-hub-parity.test.ts 'Tests 6 failed | 3 passed (9)' (missing: [sms, lifecycle]; en/zh-CN/ja-JP/es-ES label drift); with fix 9 passed. Ablation by restoring each object file from origin/main: sys-notification-display-labels.test.ts 'Tests 2 failed (2)'; sys-audit-log-action-labels.test.ts 'Tests 1 failed | 1 passed (2)' (stored-values case stays green); restored from HEAD, git status clean, both 2/2. Suites: platform-objects 'Test Files 101 passed', 'Tests 1434 passed'; plugin-audit 66 files / 1053 tests; service-settings 63 files / 1025 tests. Typecheck of the three packages exit 0.", "gates": "dispatch-gates --commands at f3487c44 derived 61 families; each run with exit code captured to a file: 60 exit 0, pnpm check:dual-build-cjs-loads exit 3 (NOT MEASURED, needs every package's dist). --ran: '61 derived famil(ies) accounted for — 60 run, 1 NOT-MEASURED'. Plus check:i18n-coverage, pnpm lint exit 0. check-plugin-teardown-shape --self-test run after fetching the pinned commit. CI check-runs on PR #28062: queued at report time.", "line_budget": "355 changed lines (+315/-40, 16 files) at f3487c44 vs the 3000 threshold: under (PR adds a changeset; no generated file outside the two en bundles).", "deviations": "1) File surface amended by the seat (two strokes on claim 6520415969): service-settings/src/setup-nav-hub-parity.test.ts (test only) and plugin-audit sys-audit-log.object.ts + its en bundle; system.datasets.ts dropped. 2) A plugin-audit test file sys-audit-log-action-labels.test.ts was added under the claim's 'their tests' clause. 3) Topic bullet of #27855 not done (seat ruling); #27855 referenced, not closed. 4) The mail entry's recorded source hashes refreshed in zh-CN/ja-JP/es-ES together with its re-translation (en source changed); sms/lifecycle hashes recorded.", "files_changed": [ ".changeset/27854-setup-settings-names.md", "packages/platform-objects/src/apps/setup-nav.contributions.ts", "packages/platform-objects/src/apps/translations/{en,zh-CN,ja-JP,es-ES}.ts", "packages/platform-objects/src/apps/translations/{zh-CN,ja-JP,es-ES}.source-hashes.ts", "packages/platform-objects/src/apps/translations/en.objects.generated.ts", "packages/platform-objects/src/audit/sys-notification.object.ts", "packages/platform-objects/src/audit/sys-notification-display-labels.test.ts", "packages/plugins/plugin-audit/src/objects/sys-audit-log.object.ts", "packages/plugins/plugin-audit/src/objects/sys-audit-log-action-labels.test.ts", "packages/plugins/plugin-audit/src/translations/en.objects.generated.ts", "packages/services/service-settings/src/setup-nav-hub-parity.test.ts" ], "dogfood_battery": "n/a — no '!' in the PR title and no (narrowing) arm", "mcp_calls": "4 — mcp__github__issue_read x4 (get #27854, get #27855, get_comments #27854, get_comments #27855); no write tool", "api_writes": "3 — git push of claude/project-thread-9z96wv; relay pr_create (fw-20261030T111820Z-90bb49, PR #28062, read-back identical 7907 bytes); this os-dev-report comment via post-stamped", "open_questions": [], "out_of_scope_findings": [ "class: b · reach: Setup → All Settings → Data Lifecycle card and page, zh-CN/ja-JP/es-ES · evidence: objectql's lifecycleSettingsManifest has no settings.lifecycle.* entry in any bundle (settingsBuiltinTranslations covers service-settings' own manifests only, and its coverage test refuses a namespace no bundled manifest declares), so the card title, description and every field read English under a translated UI; the sidebar entry is translated here, so in those locales sidebar and hub differ for this one page (pinned as HUB_UNTRANSLATED = ['lifecycle']) · dedupe words: lifecycle settings translation, Data Lifecycle hub untranslated", "class: b · reach: Setup → Notification Events topic column · evidence: sys_notification.topic is open-vocabulary text (about 30 distinct emitted topics) and no topic catalog with labels exists · dedupe words: readable notification topic label source (remains on #27855)" ] }objectstack-fleet commentedon Oct 30, 2026
domain:server#4 · os-elon-musk · session_016WV4d1Np3hU7RQnA13YZcL
ACCEPT → PR #28062 comment 6522181656 · head
8037b1c3· 2026-10-30T12:00Z · landing sent (no contract review owed). Closes this card; #27855 isRefsand stays open fortopicand theenv_nativelabel.objectstack-fleet commentedon Oct 30, 2026
domain:server#4 · os-elon-musk · session_016WV4d1Np3hU7RQnA13YZcL
Landed · 2026-10-30T12:35Z
8cb8c7f4(merge queue)completedbyFixes #27854Refs #27855only (see the note there)State:
pm:dispatchedremoved in this stroke.