Repository navigation
fix(console): rename the timezone-prompt logic module so no module stem collides by case (objectui#12184) - #12196
Merged
objectstack-fleet[bot] merged 1 commit intoOct 12, 2026
Conversation
…ides by case (objectui#12184) `apps/console/src/pages/settings/` held `WorkspaceTimezonePrompt.tsx` (the dialog) and `workspaceTimezonePrompt.ts` (its logic). Their extensionless stems differ only in case, and TypeScript tries `.ts` before `.tsx`, so on a case-insensitive filesystem (macOS APFS by default) the dialog's import resolved to the logic file and `tsc` failed. Linux CI is case-sensitive and stayed green. The logic module is now `workspaceTimezonePromptLogic.ts` (a git mv, content byte-identical). Its four readers follow: the dialog's import and doc comment, the dialog's test, `SetupPage`, and the `@object-ui/i18n` machine locale census row that names the file by path (that row's `file` only). No behaviour, export or i18n key changes. Claude-Session: https://claude.ai/code/session_016djJF12Qt14ejKR5Vjt4sK Co-authored-by: Claude <noreply@anthropic.com>
Contributor
✅ Console Performance Budget
The eager closure is every chunk the entry reaches through static imports — what the browser fetches and parses before the app renders. The entry chunk on its own is a small fraction of it. 📦 Bundle Size Report
Size Limits
|
Contributor
Author
CI:
|
| run | duration |
|---|---|
38209908789 |
17m48s |
38215231563 |
18m01s |
38207875462 (merge group) |
17m29s |
| this run | 20m16s, cancelled |
The fix and the re-run.
- No fix exists in a PR yet, and none belongs in this one.
- The one re-run is warranted, but this seat cannot send it: the fleet relay refuses run re-runs by construction (
scripts/pm/fleet-write/ops.mjs). - Someone with Actions write on this repo can re-run the failed job (run
38215707699, "Re-run failed jobs").
The seat keeps this PR watched. It enqueues once every check on 5a2a86c reads success or skipped by design. ACCEPT 6119454839 stands.
Generated by Claude Code
objectstack-fleet
Bot
deleted the
claude/issue-12184-timezone-prompt-module-rename
branch
October 12, 2026 13:25
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #12184
Clause-②: no
What and why
apps/console/src/pages/settings/held two modules whose extensionless stems differ only in case:WorkspaceTimezonePrompt.tsx(the dialog) andworkspaceTimezonePrompt.ts(its logic), both from objectui#11758. TypeScript tries.tsbefore.tsx, so on a case-insensitive filesystem (macOS APFS by default) the import./pages/settings/WorkspaceTimezonePromptlanded on the logic file andtscfailed. Linux CI is case-sensitive and stayed green.As triage
6118599573directed, the logic module is renamed toworkspaceTimezonePromptLogic.tswithgit mv(similarity 100%, content byte-identical), and its readers follow. No behaviour, export or i18n key changes. The optional case-collision CI check is not taken: triage ruled that a new gate defaults to no.Readers updated
Measured with
git grep -n workspaceTimezonePrompton base26b0bd2:WorkspaceTimezonePrompt.tsx: the import of the logic module, and the doc comment that names the file ("When to ask, and what to offer, is decided in ...").__tests__/WorkspaceTimezonePrompt.test.tsx: the import ofbrowserTimeZone,isAdmissibleZone,mayWriteandpromptRecordKey.pages/auth/SetupPage.tsx: the import ofbrowserTimeZone.packages/i18n/src/__tests__/machineLocaleCensus-9909.test.ts: the declared-exemption row forconst zone = Intl.DateTimeFormat().resolvedOptions().timeZone;names the file by path. Only itsfilechanges;expression,count,verdictandreasonstay. The card does not list this reader.The grep's other hits are i18n key names:
console.workspaceTimezonePrompt.*in the ten locale packs, the dialog'st()calls, and the pending changeset11758-workspace-timezone-prompt.md. They are keys, not paths, and stay unchanged. A re-read ofmainbefore opening this PR found no new reader.The stem pin (recorded here, not a gate)
Triage's pin,
git ls-files apps/console | sort -f | uniq -di, already prints nothing onmain, because the two paths differ in extension as well as case. It cannot fail. The pin set by the claim6119202194strips the extension first:origin/main26b0bd2: exactly one line,apps/console/src/pages/settings/WorkspaceTimezonePrompt.5a2a86c: no output (0 lines).git ls-tree -r --name-only 26b0bd2still prints that one line. So the empty answer comes from the rename, not from a broken pipeline.What this PR does not claim
It does not claim a macOS run. The failure needs a case-insensitive filesystem, and this change was verified on Linux. The evidence that the collision is gone is the pin above plus
type-checkfor@object-ui/consolepassing. The macOS reading is the card's own: the reporter measured the same rename on macOS.Verification, at head
5a2a86cturbo run build --filter='@object-ui/console^...' --concurrency=2, through the verify lock:Tasks: 34 successful, 34 total,VERDICT command-exit 0.pnpm --filter @object-ui/console type-check, which echoedtsc --noEmit && tsc -b tsconfig.node.json --force:VERDICT command-exit 0.tsc --listFilesOnlyshows the program includesworkspaceTimezonePromptLogic.ts, the dialog,SetupPage.tsxand the dialog's test.pnpm exec vitest runon four files:WorkspaceTimezonePrompt.test.tsx;setupCreateTimezone-11908.test.tsxandauthExitBasename.test.tsx(the two tests that importSetupPage); andmachineLocaleCensus-9909.test.ts. Result:Test Files 4 passed (4),Tests 44 passed (44).Tests 2 failed | 5 passed (7), in "no call site passes nothing, ..." and "every declared exemption matches exactly the sites it declares". The census reads files from disk, so the row has to follow the file.pnpm check:unreferenced-sources,pnpm check:test-path-rootsandpnpm check:vi-mock-specifiers: exit 0 each.node scripts/check-changeset-presence.mjs,pnpm check:changeset-claims,pnpm check:pending-changeset-literals,pnpm check:control-bytesandpnpm check:new-line-citations(VERDICT new-cross-file-line-citations: 0 new citation(s)): exit 0 each.--format json. For this diff the narrowing misses nothing.eslint.config.jsextendstseslint.configs.recommendedand sets noparserOptions.projectorprojectService, so type-aware linting is off. No rule undereslint-rules/reads the filesystem. So the diff cannot change a verdict on an untouched file.pnpm lintitself runs in CI.node scripts/check-governed-queue-guard.mjs --teston the diff's paths: NOT GOVERNED.Changeset
.changeset/12184-timezone-prompt-module-rename.mddeclares@object-ui/consolepatch.check-changeset-presencecounts two released packages, because the census test sits underpackages/i18n/src/. The changeset declares only the console, as the claim set, because the i18n change is one test row and the fixed group bumps together.Acceptance notes
26b0bd2, the stem pin shows no other case-only stem pair in the tree.Generated by Claude Code