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
settings(localization): the Default timezone help reads "IANA zone for today()/daysFromNow, analytics date buckets, and rendered datetimes." to administrators #22136
Filing gate ① — product defect with a named location and a reproduction. reach: first app open as an administrator: the Set the workspace timezone prompt (objectstack-ai/objectui#11758) shows the Settings timezone field with the help "IANA zone for today()/daysFromNow, analytics date buckets, and rendered datetimes."; Settings → Localization shows the same.
Who acts on it: objectstack triage → the service-settings owner. ⛔ Not a claim. Filed on the maintainer's word: 「首次进入应用时,时区设置弹窗写的是 "IANA zone for today()/daysFromNow…"。应改成白话,并自动预选浏览器所在时区。」.
What happens
The prompt's own description is plain language and the field is pre-filled with the browser's zone (objectstack-ai/objectui#11758), so that half of the ask is already done. The help under the field, though, names CEL functions and an analytics term to an administrator. It comes from the localization settings manifest: the timezone key's description in service-settings' localization.manifest.ts, and the timezone.help translation (en, es-ES, ja-JP carry the same wording).
Expected
Help in the prompt's own terms, e.g. "Decides what 'today' means in formulas, how reports group dates, and how dates and times are shown."
Suggested direction (triage to rule)
Rewrite the manifest description and the timezone.help strings in every pack; sweep the other localization keys for the same register. The missing-translation console warnings for these keys are tracked in objectstack-ai/objectui#11801.
Environment
Source read on objectui main at 82500a7 and objectstack main at 033e5c53. Live observations are from the 2026-10-07 browser QA pass: examples/app-showcase booted with objectstack dev --ui --seed-admin (objectstack 879bd38c), console from objectui 179f6fe9, Chromium 141 at 1440×900, signed in as the seeded platform admin admin@objectos.ai.
Duplicate check
Semantic issue search on objectstack-ai/objectstack (open and closed), default timezone setting help text names daysFromNow and analytics buckets, written for developers: 2 hits (0 open, 2 closed).
Path: ② the capabilities an end user meets in the app — setting the workspace timezone | 缺项 | P3
Triage: first grade, bug · priority:p3 · domain:services · area:i18n · pm:queue. Direction: the help says it in the administrator's words, in every locale
Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-08T02:56Z. ⛔ Not a claim, ⛔ not a dispatch.
Triage: lands in service-settings's localization.manifest.ts (the timezone key's description) and the timezone.help translations ⇒ domain:services; rationale: packages/services/* is that lane's.
Claim: PM loop round 1 · 2026-10-08T03:14Z
Session: session_01WkL6Eijt432S1Y7ekb6ovQ
Account: os-bill (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-22136-timezone-help-plain
Worktree: objectstack-issue-22136
Domain: domain:services
Seat: domain:services#1 (seat post #6021)
File surface (at origin/mainef1fcb26), per triage 6051233478:
packages/services/service-settings/src/manifests/localization.manifest.ts: the timezone key's description (near :48).
packages/services/service-settings/src/translations/{en,es-ES,ja-JP,zh-CN}.ts: the timezone.help string in each pack (near :117, :299, :299, :155).
Any other key in the same manifest and packs whose help names a function identifier or an implementation term to an administrator, only under the bounded in-place rule (same defect class, mechanical, no other claim, same gate family), each named in the PR.
The pin (the served help for timezone names no function identifier, in every locale), any generated translation artefact the packs feed, and one @objectstack/service-settingspatch changeset.
⛔ No setting key, default or behaviour changes; no packages/spec; no settings-service*.ts (held by feat(spec,services): deployment-level state has no organization column — settings global rung, plumbing objects, the audit ledger, #12699 made total (ADR-0131 D7) #15207's claim). Stop on breach; explain in the report.
Container & model: S, mode:subagent, model: opus (dispatch-gates --tier: no path-derived mandate; default tier for wording in four locales)
Clause-②: no
Responsibility: this repository's own code: service-settings' localization manifest and its four translation packs carry developer wording in the timezone help | none: the console renders the served help as it is (objectstack-ai/objectui#11758 already pre-fills the zone) | every administrator who opens the first-run timezone prompt or Settings → Localization
Thread-read: 6051233478
Serial constraints cleared: of the open PRs, only the Version Packages PR (chore: version packages (next) #21988) touches service-settings, and only its CHANGELOG.md / package.json. feat(spec,services): deployment-level state has no organization column — settings global rung, plumbing objects, the audit ledger, #12699 made total (ADR-0131 D7) #15207 (domain:spec seat 1) holds settings-service.ts, its types, its plugin and sys-secret-orphan-report.ts, none of which this claim touches.
os-dev-report
{
"issue": 22136,
"status": "done",
"branch": "claude/issue-22136-timezone-help-plain",
"pr": "#22174",
"session": "session_01WkL6Eijt432S1Y7ekb6ovQ — the dispatching PM session (subagent = parent's), the id in the commit's Claude-Session trailer and the relay envelope",
"premise_still_valid": true,
"summary": "Rewrote the Default timezone help into plain language in the manifest description and all four packs; no key, default, accepted value or behaviour changed; one patch changeset for @objectstack/service-settings (Clause-②: no, copied into the PR body line start). H1 confirmed: exactly five copies on origin/main ef1fcb2 (manifest :48, en :117, es-ES :299, ja-JP :299, zh-CN :155); the packs are hand-written, no generator or *.generated.ts feeds service-settings/src/translations. H2 measured: objectui SettingsField renders labels.fieldHelp(key, spec.description), which resolves settings.localization.keys.timezone.help from the bundle the settings plugin loads into i18n at kernel:ready and falls back to the manifest description served by GET /api/settings/localization; both layers rewritten and both pinned at the served layer. IANA kept only as a short second sentence because the timezone control is a free-text DomainCombobox (valueDomain iana_time_zone) and the server accepts any IANA zone. H3: locale/currency/default_country help still uses standard names and implementation terms; NOT changed, because bounded-fix condition 2 (mechanical, shape already ruled) does not hold for new prose in four locales; noted in Acceptance notes. BEFORE/AFTER — manifest description: "IANA zone used to resolve today()/daysFromNow, analytics date buckets, and rendered datetimes." -> "Decides what \"today\" means in formulas, how reports group dates, and how dates and times are shown. Accepts any IANA time zone name (e.g. Europe/Paris)." · en: "IANA zone for today()/daysFromNow, analytics date buckets, and rendered datetimes." -> same text as the manifest after · es-ES: "Zona IANA usada para resolver today()/daysFromNow, los buckets de fecha de analítica y las fechas/horas renderizadas." -> "Determina qué significa «hoy» en las fórmulas, cómo agrupan las fechas los informes y cómo se muestran las fechas y horas. Acepta cualquier nombre de zona horaria IANA (p. ej. Europe/Madrid)." · ja-JP: "today()/daysFromNow の解決、分析の日付バケット、日時レンダリングに使う IANA タイムゾーン。" -> "数式での「今日」がどの日か、レポートでの日付のまとめ方、日付と時刻の表示方法を決めます。任意の IANA タイムゾーン名(例:Asia/Tokyo)を指定できます。" · zh-CN: "用于 today()/daysFromNow、分析日期分桶和 datetime 渲染的 IANA 时区。" -> "决定公式中的\"今天\"是哪一天、报表如何按日期分组,以及日期和时间如何显示。可填写任意 IANA 时区名称(如 Asia/Shanghai)。" FILES_CHANGED (7, +171/-5 vs merge base ef1fcb2): .changeset/22136-settings-timezone-help-plain.md (new); packages/services/service-settings/src/localization-timezone-help.pin.test.ts (new); packages/services/service-settings/src/manifests/localization.manifest.ts; packages/services/service-settings/src/translations/en.ts; .../es-ES.ts; .../ja-JP.ts; .../zh-CN.ts. DEVIATION: label-write.mjs --repo objectstack-ai/objectstack --issue 22174 --assign os-bill was refused by the session auto-mode classifier ([External System Writes]) before any request; not retried by another route; PR #22174 has NO assignee — the seat sets os-bill. Cleanup: worktree /home/user/objectstack-issue-22136 was clean at 40fd214 (= origin branch head); node_modules removed and git worktree remove (no --force) exit 0.",
"tests": "All at head 40fd214 (the final commit; no push after). (1) pnpm --filter @objectstack/service-settings exec vitest run --maxWorkers=2 (under os-verify-lock, slot dev-22136): "Test Files 37 passed (37)", "Tests 632 passed (632)", VERDICT command-exit 0. (An earlier run before the closure build: 10 suites failed to load with "Failed to resolve entry for package @objectstack/metadata-core" — missing dist in a fresh worktree, NOT MEASURED, cleared by the build.) (2) pnpm --filter @objectstack/service-settings typecheck: tsc --noEmit exit 0; tsc --noEmit --listFiles lists 37 service-settings test files incl. localization-timezone-help.pin.test.ts and all five edited sources. (3) pnpm --filter @objectstack/service-settings build: "check-dts-emitted: @objectstack/service-settings - 2/2 declared declaration file(s) present." after turbo run build --filter=@objectstack/service-settings^... --concurrency=1: "Tasks: 15 successful, 15 total", VERDICT command-exit 0. (4) Pin (new): localization-timezone-help.pin.test.ts boots the real SettingsServicePlugin on LiteKernel with a recording i18n stub and GETs /api/settings/localization; 4 tests pass. ABLATION (two legs, committed state, scripts/ablation-replace.mjs, expected direction red, observed red): leg A ja-JP help restored to old string — "anchor 1 -> 0, blob a3fc0989896d -> 05f68412ae70", on-disk grep -c daysFromNow = 1, "× the translated help, in every locale the plugin loads", "AssertionError: ja-JP: today()/daysFromNow の解決… expected [ today(, daysFromNow ] to deeply equal []", "Tests 1 failed | 3 passed (4)"; restore "blob == HEAD (a3fc0989896d) and git diff HEAD is empty". Leg B manifest description restored to old string — "anchor 1 -> 0, blob e9af7ed9adef -> fd0f99a11be2", grep -c = 1, "× the manifest description served by GET /api/settings/localization", "Tests 1 failed | 3 passed (4)"; restore "blob == HEAD (e9af7ed9adef)". No dist involved: subject imported by relative src paths. (5) GATES: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths) derived 63 families from 7 paths vs merge base ef1fcb2; all 63 run, 62 exit 0; NOT MEASURED: pnpm check:dual-build-cjs-loads exit 3 "PREREQUISITE NOT MET — this gate reads built output, and some package has no dist/" (reason: only the service-settings closure was built). --ran reconciliation: "63 derived famil(ies) accounted for — 62 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)", 0 UNRUN. Extra families run, exit 0: check:i18n "OK (9 package(s) — all bundles in sync, no undeclared authoring keys)"; check:i18n-stale-fill "OK (10 bundle set(s) — no new stale fills, 0 baselined)"; check:i18n-coverage "OK (13 config(s), 621 baselined untranslated string(s), none new)"; check:i18n-walk-parity "11 declared group(s), 9 walked, 2 exempted"; check:settings-bind-window "4 declared / 0 self / 1 structurally upstream / 0 ledgered". Selected derived verdicts: check:nul-bytes "OK (scanned 10135 text file(s) … no raw ASCII control bytes)"; check:test-source-alias OK; check:cross-package-test-inputs OK; check:published-files pass; check-empty-changeset "No empty-frontmatter changeset introduced (1 declaring changeset(s) added)"; check-adr-0087-registration "adds no declared-breaking changeset". (6) LINT narrowed: eslint --no-inline-config --format json on the 6 touched .ts files: 6 files, 0 errors, 0 warnings (no ignored-file warning, so all 6 are in the linted population); eslint.config.mjs enables no type-aware linting (no parserOptions.project), so untouched files cannot change verdict; repo-wide pnpm lint left to CI. CI: not awaited (in_progress at report time).",
"mcp_calls": "0",
"api_writes": "2 — (1) relay repository_dispatch to objectstack-ai/objectstack (HTTP 204) executing pr_create = POST /repos/objectstack-ai/objectstack/pulls, draft, PR #22174 (run 37725195071 success; read-back 7875 bytes sent = stored); (2) this os-dev-report comment, POST /repos//issues/22136/comments via post-stamped.mjs. Refused, zero requests: label-write --assign os-bill on #22174. git push x2 (empty-branch probe, then 40fd214) are git ops, not REST.",
"deviations": [
"label-write.mjs --repo objectstack-ai/objectstack --issue 22174 --assign os-bill refused by the session auto-mode classifier (reason: External System Writes) before any request; not re-sent by another route; the seat sets the PR assignee os-bill.",
"check:dual-build-cjs-loads NOT MEASURED (exit 3, needs every package dist; only the closure was built)."
],
"open_questions": [],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted in PR Acceptance notes, not filed (polish, no filing class) · the other Localization help strings keep standard names and implementation terms: locale "BCP-47 locale for message catalogs and number/date formatting", currency "ISO 4217 code … render code-less amounts as plain numbers", default_country "ISO 3166-1 alpha-2 code"; the issue body suggested a sweep but the triage ruling covers timezone only, and bounded-fix condition 2 fails (new prose in four locales; the locale "message catalogs" claim would need verifying first) · dedupe words: localization settings help developer wording · locale help BCP-47 message catalogs · currency help code-less amounts",
"carrier: 承接者:无 · noted in PR Acceptance notes, not filed (locale drift, no filing class) · pack drift on keys this PR leaves alone: currency has no en help (en serves the two-sentence manifest literal) while zh-CN/ja-JP/es-ES carry only the first sentence; default_country carries "Used for address and phone defaults." in es-ES and ja-JP but not in en or zh-CN · dedupe words: settings localization translation drift currency help · default_country help missing sentence"
]
}
Checked against GitHub and the branch, not the report's prose.
Form: draft, base main, first line Fixes #22136, line-start Clause-②: no from the claim 6051419255.
Files: 7, all inside the claim: the manifest's timezone description, the timezone.help string in en, es-ES, ja-JP and zh-CN, one new pin file, one changeset. The packs are hand-written, so no generated artefact moves.
Wording: the first sentence names no function or standard ("Decides what "today" means in formulas, how reports group dates, and how dates and times are shown"), in all four locales with the same meaning. A second sentence keeps "IANA" with an example zone because the field is a free-text combobox over valueDomain: 'iana_time_zone'. Accepted: an administrator typing a zone needs the format.
Pin: it boots the real SettingsServicePlugin and reads both served layers: the description GET /api/settings/localization serves, and the help in every bundle the plugin loads (floor: the four shipped locales). It carries a positive control: the detector flags the old wording. Ablation: putting the old string back in ja-JP, then in the manifest, each turned its own case red, and the restore matched HEAD.
Changeset, sentence by sentence:patch; the quoted before and after strings match the diff; "the timezone key, its default (UTC), its accepted values (any IANA zone) … are unchanged" holds (default: 'UTC', valueDomain: 'iana_time_zone' untouched).
Not governed; no contract review owed (Clause-②: no, no packages/spec, no governed path).
Noted, not filed (the PR's Acceptance notes): the locale / currency / default_country help still uses standard names, and two packs drift on keys this PR leaves alone. Both are polish outside the filing gate's classes, and triage's direction covered timezone only.
PR #22174 merged through the merge queue as 98998caa; the new help text is on origin/main (localization.manifest.ts). The card was closed completed by the PR's Fixes line; pm:dispatched and the assignee are removed in this act. Carried, not filed (in the PR's Acceptance notes): the other Localization help strings' register, and two packs' drift on keys this PR left alone.
Activity
objectstack-fleet commentedon Oct 8, 2026
Path: ② the capabilities an end user meets in the app — setting the workspace timezone | 缺项 | P3
Triage: first grade,
bug·priority:p3·domain:services·area:i18n·pm:queue. Direction: the help says it in the administrator's words, in every localeTriage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-10-08T02:56Z. ⛔ Not a claim, ⛔ not a dispatch.Triage: lands in
service-settings'slocalization.manifest.ts(thetimezonekey'sdescription) and thetimezone.helptranslations ⇒domain:services; rationale:packages/services/*is that lane's.timezonenames no function identifier, in every locale.Clause-②: no. Patch changeset for the settings service.objectstack-fleet commentedon Oct 8, 2026
Claim: PM loop round 1 · 2026-10-08T03:14Z
Session:
session_01WkL6Eijt432S1Y7ekb6ovQAccount:
os-bill(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-22136-timezone-help-plainWorktree:
objectstack-issue-22136Domain:
domain:servicesSeat:
domain:services#1(seat post #6021)File surface (at
origin/mainef1fcb26), per triage6051233478:packages/services/service-settings/src/manifests/localization.manifest.ts: thetimezonekey'sdescription(near:48).packages/services/service-settings/src/translations/{en,es-ES,ja-JP,zh-CN}.ts: thetimezone.helpstring in each pack (near:117,:299,:299,:155).timezonenames no function identifier, in every locale), any generated translation artefact the packs feed, and one@objectstack/service-settingspatchchangeset.⛔ No setting key, default or behaviour changes; no
packages/spec; nosettings-service*.ts(held by feat(spec,services): deployment-level state has no organization column — settings global rung, plumbing objects, the audit ledger, #12699 made total (ADR-0131 D7) #15207's claim). Stop on breach; explain in the report.Container & model:
S,mode:subagent,model: opus(dispatch-gates --tier: no path-derived mandate; default tier for wording in four locales)Clause-②: no
Responsibility:
this repository's own code: service-settings' localization manifest and its four translation packs carry developer wording in the timezone help | none: the console renders the served help as it is (objectstack-ai/objectui#11758 already pre-fills the zone) | every administrator who opens the first-run timezone prompt or Settings → LocalizationThread-read: 6051233478
Serial constraints cleared: of the open PRs, only the Version Packages PR (chore: version packages (next) #21988) touches
service-settings, and only itsCHANGELOG.md/package.json. feat(spec,services): deployment-level state has no organization column — settings global rung, plumbing objects, the audit ledger, #12699 made total (ADR-0131 D7) #15207 (domain:specseat 1) holdssettings-service.ts, its types, its plugin andsys-secret-orphan-report.ts, none of which this claim touches.objectstack-fleet commentedon Oct 8, 2026
os-dev-report
{
"issue": 22136,
"status": "done",
"branch": "claude/issue-22136-timezone-help-plain",
"pr": "#22174",
"session": "session_01WkL6Eijt432S1Y7ekb6ovQ — the dispatching PM session (subagent = parent's), the id in the commit's Claude-Session trailer and the relay envelope",
"premise_still_valid": true,
"summary": "Rewrote the Default timezone help into plain language in the manifest description and all four packs; no key, default, accepted value or behaviour changed; one patch changeset for @objectstack/service-settings (Clause-②: no, copied into the PR body line start). H1 confirmed: exactly five copies on origin/main ef1fcb2 (manifest :48, en :117, es-ES :299, ja-JP :299, zh-CN :155); the packs are hand-written, no generator or *.generated.ts feeds service-settings/src/translations. H2 measured: objectui SettingsField renders labels.fieldHelp(key, spec.description), which resolves settings.localization.keys.timezone.help from the bundle the settings plugin loads into i18n at kernel:ready and falls back to the manifest description served by GET /api/settings/localization; both layers rewritten and both pinned at the served layer. IANA kept only as a short second sentence because the timezone control is a free-text DomainCombobox (valueDomain iana_time_zone) and the server accepts any IANA zone. H3: locale/currency/default_country help still uses standard names and implementation terms; NOT changed, because bounded-fix condition 2 (mechanical, shape already ruled) does not hold for new prose in four locales; noted in Acceptance notes. BEFORE/AFTER — manifest description: "IANA zone used to resolve today()/daysFromNow, analytics date buckets, and rendered datetimes." -> "Decides what \"today\" means in formulas, how reports group dates, and how dates and times are shown. Accepts any IANA time zone name (e.g. Europe/Paris)." · en: "IANA zone for today()/daysFromNow, analytics date buckets, and rendered datetimes." -> same text as the manifest after · es-ES: "Zona IANA usada para resolver today()/daysFromNow, los buckets de fecha de analítica y las fechas/horas renderizadas." -> "Determina qué significa «hoy» en las fórmulas, cómo agrupan las fechas los informes y cómo se muestran las fechas y horas. Acepta cualquier nombre de zona horaria IANA (p. ej. Europe/Madrid)." · ja-JP: "today()/daysFromNow の解決、分析の日付バケット、日時レンダリングに使う IANA タイムゾーン。" -> "数式での「今日」がどの日か、レポートでの日付のまとめ方、日付と時刻の表示方法を決めます。任意の IANA タイムゾーン名(例:Asia/Tokyo)を指定できます。" · zh-CN: "用于 today()/daysFromNow、分析日期分桶和 datetime 渲染的 IANA 时区。" -> "决定公式中的\"今天\"是哪一天、报表如何按日期分组,以及日期和时间如何显示。可填写任意 IANA 时区名称(如 Asia/Shanghai)。" FILES_CHANGED (7, +171/-5 vs merge base ef1fcb2): .changeset/22136-settings-timezone-help-plain.md (new); packages/services/service-settings/src/localization-timezone-help.pin.test.ts (new); packages/services/service-settings/src/manifests/localization.manifest.ts; packages/services/service-settings/src/translations/en.ts; .../es-ES.ts; .../ja-JP.ts; .../zh-CN.ts. DEVIATION: label-write.mjs --repo objectstack-ai/objectstack --issue 22174 --assign os-bill was refused by the session auto-mode classifier ([External System Writes]) before any request; not retried by another route; PR #22174 has NO assignee — the seat sets os-bill. Cleanup: worktree /home/user/objectstack-issue-22136 was clean at 40fd214 (= origin branch head); node_modules removed and git worktree remove (no --force) exit 0.",
"tests": "All at head 40fd214 (the final commit; no push after). (1) pnpm --filter @objectstack/service-settings exec vitest run --maxWorkers=2 (under os-verify-lock, slot dev-22136): "Test Files 37 passed (37)", "Tests 632 passed (632)", VERDICT command-exit 0. (An earlier run before the closure build: 10 suites failed to load with "Failed to resolve entry for package @objectstack/metadata-core" — missing dist in a fresh worktree, NOT MEASURED, cleared by the build.) (2) pnpm --filter @objectstack/service-settings typecheck: tsc --noEmit exit 0; tsc --noEmit --listFiles lists 37 service-settings test files incl. localization-timezone-help.pin.test.ts and all five edited sources. (3) pnpm --filter @objectstack/service-settings build: "check-dts-emitted: @objectstack/service-settings - 2/2 declared declaration file(s) present." after turbo run build --filter=@objectstack/service-settings^... --concurrency=1: "Tasks: 15 successful, 15 total", VERDICT command-exit 0. (4) Pin (new): localization-timezone-help.pin.test.ts boots the real SettingsServicePlugin on LiteKernel with a recording i18n stub and GETs /api/settings/localization; 4 tests pass. ABLATION (two legs, committed state, scripts/ablation-replace.mjs, expected direction red, observed red): leg A ja-JP help restored to old string — "anchor 1 -> 0, blob a3fc0989896d -> 05f68412ae70", on-disk grep -c daysFromNow = 1, "× the translated help, in every locale the plugin loads", "AssertionError: ja-JP: today()/daysFromNow の解決… expected [ today(, daysFromNow ] to deeply equal []", "Tests 1 failed | 3 passed (4)"; restore "blob == HEAD (a3fc0989896d) and git diff HEAD is empty". Leg B manifest description restored to old string — "anchor 1 -> 0, blob e9af7ed9adef -> fd0f99a11be2", grep -c = 1, "× the manifest description served by GET /api/settings/localization", "Tests 1 failed | 3 passed (4)"; restore "blob == HEAD (e9af7ed9adef)". No dist involved: subject imported by relative src paths. (5) GATES: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (no paths) derived 63 families from 7 paths vs merge base ef1fcb2; all 63 run, 62 exit 0; NOT MEASURED: pnpm check:dual-build-cjs-loads exit 3 "PREREQUISITE NOT MET — this gate reads built output, and some package has no dist/" (reason: only the service-settings closure was built). --ran reconciliation: "63 derived famil(ies) accounted for — 62 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)", 0 UNRUN. Extra families run, exit 0: check:i18n "OK (9 package(s) — all bundles in sync, no undeclared authoring keys)"; check:i18n-stale-fill "OK (10 bundle set(s) — no new stale fills, 0 baselined)"; check:i18n-coverage "OK (13 config(s), 621 baselined untranslated string(s), none new)"; check:i18n-walk-parity "11 declared group(s), 9 walked, 2 exempted"; check:settings-bind-window "4 declared / 0 self / 1 structurally upstream / 0 ledgered". Selected derived verdicts: check:nul-bytes "OK (scanned 10135 text file(s) … no raw ASCII control bytes)"; check:test-source-alias OK; check:cross-package-test-inputs OK; check:published-files pass; check-empty-changeset "No empty-frontmatter changeset introduced (1 declaring changeset(s) added)"; check-adr-0087-registration "adds no declared-breaking changeset". (6) LINT narrowed: eslint --no-inline-config --format json on the 6 touched .ts files: 6 files, 0 errors, 0 warnings (no ignored-file warning, so all 6 are in the linted population); eslint.config.mjs enables no type-aware linting (no parserOptions.project), so untouched files cannot change verdict; repo-wide pnpm lint left to CI. CI: not awaited (in_progress at report time).",
"mcp_calls": "0",
"api_writes": "2 — (1) relay repository_dispatch to objectstack-ai/objectstack (HTTP 204) executing pr_create = POST /repos/objectstack-ai/objectstack/pulls, draft, PR #22174 (run 37725195071 success; read-back 7875 bytes sent = stored); (2) this os-dev-report comment, POST /repos//issues/22136/comments via post-stamped.mjs. Refused, zero requests: label-write --assign os-bill on #22174. git push x2 (empty-branch probe, then 40fd214) are git ops, not REST.",
"deviations": [
"label-write.mjs --repo objectstack-ai/objectstack --issue 22174 --assign os-bill refused by the session auto-mode classifier (reason: External System Writes) before any request; not re-sent by another route; the seat sets the PR assignee os-bill.",
"check:dual-build-cjs-loads NOT MEASURED (exit 3, needs every package dist; only the closure was built)."
],
"open_questions": [],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted in PR Acceptance notes, not filed (polish, no filing class) · the other Localization help strings keep standard names and implementation terms: locale "BCP-47 locale for message catalogs and number/date formatting", currency "ISO 4217 code … render code-less amounts as plain numbers", default_country "ISO 3166-1 alpha-2 code"; the issue body suggested a sweep but the triage ruling covers timezone only, and bounded-fix condition 2 fails (new prose in four locales; the locale "message catalogs" claim would need verifying first) · dedupe words: localization settings help developer wording · locale help BCP-47 message catalogs · currency help code-less amounts",
"carrier: 承接者:无 · noted in PR Acceptance notes, not filed (locale drift, no filing class) · pack drift on keys this PR leaves alone: currency has no en help (en serves the two-sentence manifest literal) while zh-CN/ja-JP/es-ES carry only the first sentence; default_country carries "Used for address and phone defaults." in es-ES and ja-JP but not in en or zh-CN · dedupe words: settings localization translation drift currency help · default_country help missing sentence"
]
}
Generated by Claude Code
objectstack-fleet commentedon Oct 8, 2026
Seat ACCEPT: PR #22174 at
40fd2141· seatdomain:services#1(#6021) ·session_01WkL6Eijt432S1Y7ekb6ovQ· 2026-10-08T04:02ZChecked against GitHub and the branch, not the report's prose.
main, first lineFixes #22136, line-startClause-②: nofrom the claim6051419255.timezonedescription, thetimezone.helpstring inen,es-ES,ja-JPandzh-CN, one new pin file, one changeset. The packs are hand-written, so no generated artefact moves.valueDomain: 'iana_time_zone'. Accepted: an administrator typing a zone needs the format.SettingsServicePluginand reads both served layers: the descriptionGET /api/settings/localizationserves, and the help in every bundle the plugin loads (floor: the four shipped locales). It carries a positive control: the detector flags the old wording. Ablation: putting the old string back inja-JP, then in the manifest, each turned its own case red, and the restore matched HEAD.patch; the quoted before and after strings match the diff; "thetimezonekey, its default (UTC), its accepted values (any IANA zone) … are unchanged" holds (default: 'UTC',valueDomain: 'iana_time_zone'untouched).Clause-②: no, nopackages/spec, no governed path).locale/currency/default_countryhelp still uses standard names, and two packs drift on keys this PR leaves alone. Both are polish outside the filing gate's classes, and triage's direction coveredtimezoneonly.CI at this stamp: 17 success, 3 skipped, 11 in progress, 0 failed. Ready and auto-merge follow once every check on the head is green.
objectstack-fleet commentedon Oct 8, 2026
Landed ·
domain:servicesseat 1 (#6021) ·session_01WkL6Eijt432S1Y7ekb6ovQ· 2026-10-08T05:05ZPR #22174 merged through the merge queue as
98998caa; the new help text is onorigin/main(localization.manifest.ts). The card was closedcompletedby the PR'sFixesline;pm:dispatchedand the assignee are removed in this act. Carried, not filed (in the PR's Acceptance notes): the other Localization help strings' register, and two packs' drift on keys this PR left alone.fix(app-shell,console): zh names a Studio pillar by its tab label; se…
fix(service-settings): the Default timezone help says what the settin…