Skip to content

TS strict (2/4): strictNullChecks null-safety guards - #3687

Merged
tegan-temporal merged 1 commit into
mainfrom
strict/2-mechanical
Jul 17, 2026
Merged

TS strict (2/4): strictNullChecks null-safety guards#3687
tegan-temporal merged 1 commit into
mainfrom
strict/2-mechanical

Conversation

@tegan-temporal

Copy link
Copy Markdown
Contributor

Second of a 4-PR split of #3640. Stacked on strict/1-base.

Mechanical null-safety introduced by strictNullChecks: nullish-coalescing defaults (?? '', ?? 0, ?? []), optional chaining, {#if} render guards, and a few generics-driven refactors. Intended to be behavior-preserving — no server-request or form-default semantics change (those are in 3/4). 189 files, verified strict-clean against the base PR.


Stack (merge bottom-up):

  1. strict/1-base — type annotations + CI infra (zero runtime)
  2. strict/2-mechanical — strictNullChecks null-safety guards
  3. strict/3-behavior — runtime-affecting model/form/service changes
  4. ts-strict-mode (TS strict (4/4): enable strict mode in base tsconfig #3640) — flip strict: true

Original combined branch preserved in #3640, now reduced to the final flag flip. Split verified: stacking all four reproduces the original tree byte-for-byte.

@vercel

vercel Bot commented Jul 17, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
holocene Ready Ready Preview, Comment Jul 17, 2026 5:37pm

Request Review

@andrewzamojc

andrewzamojc commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Because this PR doesn't target main, I don't think TS and such ran. How about merging the base (1/4) to main since it's safe and ready, then this one could target main and the TS checks will run again.

@temporal-cicd

temporal-cicd Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor
Warnings
⚠️

📊 Strict Mode: 2 errors in 1 file (1.2% of 167 total)

src/lib/components/schedule/utilities/get-request-body.ts (2)
  • L132:6: Type '{ indexedFields: { indexedFields?: { [k: string]: IPayload; } | null | undefined; }; } | null' is not assignable to type 'ISearchAttributes | null | undefined'.
  • L310:4: Type '{ indexedFields: { indexedFields?: { [k: string]: IPayload; } | null | undefined; }; } | null' is not assignable to type 'ISearchAttributes | null | undefined'.

Generated by 🚫 dangerJS against 8e9e26e

}

$form.specs = [...$form.specs, { kind: 'cron', cronString: '' }];
$form.specs = [...$form.specs, getFormSpecInitialData('cron')];

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this change was necessary because { kind: 'cron', cronString: '' } is incomplete, getFormSpecInitialData gives us the full shape.

Mechanical null-safety: nullish-coalescing defaults, optional chaining,
{#if} render guards, and generics-driven refactors. Behavior-preserving.
Rebased onto main after the base PR (#3686) merged.

@andrewzamojc andrewzamojc left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@tegan-temporal
tegan-temporal merged commit 51f04f8 into main Jul 17, 2026
18 checks passed
@tegan-temporal
tegan-temporal deleted the strict/2-mechanical branch July 17, 2026 20:25
laurakwhit added a commit that referenced this pull request Jul 29, 2026
Auto-generated version bump from 2.52.1 to 2.53.0

Bump type: minor

Changes included:
- [`b1602800`](b160280) Make serverless worker Terraform template configurable (COM-216) (#3671)
- [`d1ec2795`](d1ec279) Support markdown tables in Workflow details (#3673)
- [`5eae94c7`](5eae94c) Show IANA region names in schedule timezone picker (DT-4250) (#3668)
- [`f454220c`](f454220) fix(DT-4269): namespace selector tooltip overflow (#3676)
- [`b563bfff`](b563bff) Update format of Execution Duration (#3677)
- [`17f6d7a7`](17f6d7a) Add download json button to Standalone Activities table (#3675)
- [`6f45cc07`](6f45cc0) Migrate old column labels (#3678)
- [`af5c9408`](af5c940) Update to use formatDurationAbbreviated (#3679)
- [`066a662c`](066a662) feat(timeline): HTML virtualization + collapse idle time (#3627)
- [`eee96c60`](eee96c6) Update empty state for Standalone Activities (#3681)
- [`51164cb4`](51164cb) [COM-193] Lock compute provider for new deployment versions (#3674)
- [`0b700a38`](0b700a3) refactor: add es-toolkit (#3652)
- [`bf4ee86f`](bf4ee86) chore(proto): add local @temporalio/proto codegen tooling (#3684)
- [`892163b2`](892163b) TS strict (1/4): type annotations and dead-code cleanup (#3686)
- [`b06e30e7`](b06e30e)  Fix live timeline refresh for completed event groups (#3689)
- [`51f04f87`](51f04f8) TS strict (2/4): strictNullChecks null-safety guards (#3687)
- [`41dfc531`](41dfc53) Shared SavedViews component updates (#3670)
- [`ee6348b1`](ee6348b) Fix max height for paginated table in saved query views (#3691)
- [`60e4b6c0`](60e4b6c) TS strict (3/3): runtime model/form/service changes + enable strict mode (#3688)
- [`ddde6e70`](ddde6e7) Activity commands for Standalone Activities (#3564)
- [`40baeae6`](40baeae) Associate Combobox hints with form fields (#3667)
- [`9940a389`](9940a38) Start delay for standalone activities  (#3650)
- [`02aa74e9`](02aa74e) Add ExecutionTime search attribute for standalone activities (#3666)
- [`c84732e3`](c84732e) Fix TypeError in workflow JSON navigator on empty events (#3696)
- [`839bc0d5`](839bc0d) [DT-4154] Add Cloud Run replica scaling controls (#3694)
- [`32a49e4b`](32a49e4) fix(events): reflect pending-activity commands without reload (#3693)
- [`9f8ddee6`](9f8ddee) Add Batch Operations to Standalone Activities (#3695)
- [`d2eb9444`](d2eb944) Use standaloneActivityOperatorCommands ns capability check (#3698)
- [`ea731e45`](ea731e4) Fix state unsafe mutation error in EndTimeInterval (#3715)
- [`7a081c88`](7a081c8) Update holocene empty-state to runes syntax (#3701)
- [`9693355c`](9693355) Update holocene navigation-item to runes syntax (#3702)
- [`1b5b267e`](1b5b267) Update holocene table to runes syntax (#3711)
- [`e418bdbb`](e418bdb) Update holocene navigation-badge to runes syntax (#3703)
- [`4f45e370`](4f45e37) Remove unused compatibility-badge component (#3704)
- [`596740cd`](596740c) Update holocene navigation-button to runes syntax (#3705)
- [`9ac2f525`](9ac2f52) Remove unused expandable/button component (#3706)
- [`240561dc`](240561d) Update holocene copyable/button to runes syntax (#3707)
- [`4fc08c48`](4fc08c4) Update holocene radio-input and radio-card to runes syntax (#3708)
- [`d6e839f7`](d6e839f) Update holocene table-row and table-header-row to runes syntax (#3710)
- [`99a9ff71`](99a9ff7) fix: surgical security upgrades for Dependabot alerts (#3709)
- [`9b105b47`](9b105b4) fix(serverless-workers): interpolate form values into Terraform snippet (COM-216) (#3716)
- [`d126ea8a`](d126ea8) Fix deployment connection validation status refresh (#3718)
- [`f0edfbd7`](f0edfbd) [DT-4296] Add Terraform setup instructions to the GCP Cloud Run deployment form (#3700)
- [`38453f90`](38453f9) Fix event id param (#3745)
- [`bc70844a`](bc70844) Add runes button component (strangler migration, part 1) (#3727)
- [`a559c6fe`](a559c6f) Migrate app-level button consumers to runes button (#3728)
- [`3a7eaa19`](3a7eaa1) Migrate holocene-internal button renderers and stories to runes button (#3729)
- [`5a72155d`](5a72155) Migrate icon-button to runes with onclick prop (#3730)
- [`08654d88`](08654d8) Migrate split-button to runes with onclick prop (#3731)
- [`40ae4943`](40ae494) Migrate toggle-button to runes button (part 6) (#3732)
- [`9fc25bca`](9fc25bc) Finalize button migration: delete legacy, rename runes button (#3733)
- [`7ce3f72f`](7ce3f72) Bump API to v1.63.4 (#3723)

Co-authored-by: laurakwhit <15069288+laurakwhit@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants