Skip to content

build(deps): bump @preact/signals from 2.9.2 to 2.9.3 - #2884

Merged
daxtheduck merged 1 commit into
mainfrom
dependabot/npm_and_yarn/main/preact/signals-2.9.3
Jul 21, 2026
Merged

build(deps): bump @preact/signals from 2.9.2 to 2.9.3#2884
daxtheduck merged 1 commit into
mainfrom
dependabot/npm_and_yarn/main/preact/signals-2.9.3

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 21, 2026

Copy link
Copy Markdown
Contributor

Bumps @preact/signals from 2.9.2 to 2.9.3.

Release notes

Sourced from @​preact/signals's releases.

@​preact/signals@​2.9.3

Patch Changes

  • #950 76f9155 Thanks @​joeyTedeschi! - Allow <For> to accept readonly arrays and signals containing readonly arrays.

  • #948 6b0a76c Thanks @​JoviDeCroock! - Dispose signal prop updaters when an element re-renders without any signal props.

    The disposal pass only ran when the new render still carried at least one signal-bound prop. When every signal prop was replaced by plain values, the old updater effect stayed subscribed and kept writing the previous signal's values straight into the DOM, overriding whatever Preact rendered.

  • Updated dependencies [2910fbf, d40746b]:

    • @​preact/signals-core@​1.14.4
Changelog

Sourced from @​preact/signals's changelog.

2.9.3

Patch Changes

  • #950 76f9155 Thanks @​joeyTedeschi! - Allow <For> to accept readonly arrays and signals containing readonly arrays.

  • #948 6b0a76c Thanks @​JoviDeCroock! - Dispose signal prop updaters when an element re-renders without any signal props.

    The disposal pass only ran when the new render still carried at least one signal-bound prop. When every signal prop was replaced by plain values, the old updater effect stayed subscribed and kept writing the previous signal's values straight into the DOM, overriding whatever Preact rendered.

  • Updated dependencies [2910fbf, d40746b]:

    • @​preact/signals-core@​1.14.4
Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Note

Low Risk
Lockfile-only dependency patch bump with no repo code changes; upstream fixes are localized to Preact signals behavior.

Overview
Bumps @preact/signals in special-pages from 2.9.2 to 2.9.3, with package-lock.json updated accordingly (including @preact/signals-core 1.14.31.14.4).

No application source changes—only the dependency range and lockfile. Upstream 2.9.3 is a patch release (e.g. &lt;For&gt; readonly-array typing, fix for signal prop updaters when props stop using signals).

Reviewed by Cursor Bugbot for commit 05ae707. Bugbot is set up for automated code reviews on this repo. Configure here.

Bumps [@preact/signals](https://github.com/preactjs/signals/tree/HEAD/packages/preact) from 2.9.2 to 2.9.3.
- [Release notes](https://github.com/preactjs/signals/releases)
- [Changelog](https://github.com/preactjs/signals/blob/main/packages/preact/CHANGELOG.md)
- [Commits](https://github.com/preactjs/signals/commits/@preact/signals@2.9.3/packages/preact)

---
updated-dependencies:
- dependency-name: "@preact/signals"
  dependency-version: 2.9.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Update one or more dependencies version patch Increment the patch version when merged labels Jul 21, 2026
@dependabot
dependabot Bot requested a review from daxtheduck as a code owner July 21, 2026 10:53
@dependabot dependabot Bot added the patch Increment the patch version when merged label Jul 21, 2026
@dependabot
dependabot Bot requested a review from a team as a code owner July 21, 2026 10:53
@github-actions

Copy link
Copy Markdown
Contributor

Build Branch

Branch pr-releases/dependabot/npm_and_yarn/main/preact/signals-2.9.3
Commit 75c2c0b872
Updated July 21, 2026 at 10:54:04 AM UTC

Static preview entry points

QR codes (mobile preview)
Entry point QR code
Docs QR for docs preview
Static pages QR for static pages preview
Integration pages QR for integration pages preview

Integration commands

npm (Android / Extension):

npm i github:duckduckgo/content-scope-scripts#pr-releases/dependabot/npm_and_yarn/main/preact/signals-2.9.3

Swift Package Manager (Apple):

.package(url: "https://github.com/duckduckgo/content-scope-scripts.git", branch: "pr-releases/dependabot/npm_and_yarn/main/preact/signals-2.9.3")

git submodule (Windows):

git -C submodules/content-scope-scripts fetch origin pr-releases/dependabot/npm_and_yarn/main/preact/signals-2.9.3
git -C submodules/content-scope-scripts checkout origin/pr-releases/dependabot/npm_and_yarn/main/preact/signals-2.9.3
Pin to exact commit

npm (Android / Extension):

npm i github:duckduckgo/content-scope-scripts#75c2c0b8720f7ef07af50317526e258e00821697

Swift Package Manager (Apple):

.package(url: "https://github.com/duckduckgo/content-scope-scripts.git", revision: "75c2c0b8720f7ef07af50317526e258e00821697")

git submodule (Windows):

git -C submodules/content-scope-scripts fetch origin pr-releases/dependabot/npm_and_yarn/main/preact/signals-2.9.3
git -C submodules/content-scope-scripts checkout 75c2c0b8720f7ef07af50317526e258e00821697

@cursor cursor Bot 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.

Injected PR Evaluation: Web Compatibility & Security

Scope note: This PR is a dependency-only bump (@preact/signals 2.9.2 → 2.9.3, @preact/signals-core 1.14.3 → 1.14.4) in special-pages/package.json and package-lock.json. It does not modify injected/, messaging/, wrapper utilities, captured globals, or any runtime source files.

Web Compatibility Assessment

File Lines Severity Finding
special-pages/package.json 42 info @preact/signals is consumed only by embedded special-pages (New Tab Page, History). It is not bundled into content-scope injection and does not override browser APIs on third-party pages.
package-lock.json 1928–1946 info Transitive bump to @preact/signals-core@1.14.4. Release notes include a bug fix that disposes signal prop updaters when a component re-renders with no signal-bound props, preventing stale signal subscriptions from overwriting DOM values. This is a compatibility improvement for NTP/History components that toggle signal vs. plain props (e.g., customizer drawer, widget config, protections).
package-lock.json 1928–1946 info Also adds readonly-array typing support for <For> — compile-time only; no runtime API surface change.

No findings in API surface fidelity, prototype chain integrity, DOM safety, timing/race conditions, platform-specific injected breakage, or third-party script compatibility categories — none of that code is touched.

Security Assessment

File Lines Severity Finding
(entire diff) info No changes to global capture hygiene, messaging transports, message bridge trust boundaries, origin validation, config gating, or iframe security.
special-pages/package.json 42 info Signals run inside first-party embedded pages with mocked/native messaging only. A malicious third-party page cannot reach this dependency.
package-lock.json 1928–1946 info The signal-prop disposal fix reduces risk of stale effect subscriptions writing unexpected values into the DOM after prop transitions — a minor hardening for special-pages UI state.

No findings at warning, error, or critical severity.

Risk Level

Low Risk — Patch-version dependency bump confined to special-pages; zero changes to injected content-scope features, API overrides, or security-sensitive infrastructure.

Recommendations

  1. (Info) Merge after CI passes. No injected-specific blockers.
  2. (Info) Optional smoke-test: NTP customizer open/close and History search/filter flows — heaviest @preact/signals consumers and most likely to benefit from the signal-prop disposal fix.
  3. (Info) npm run build --workspace=special-pages succeeds locally with 2.9.3.
Open in Web View Automation 

Sent by Cursor Automation: Web compat and sec

@cursor cursor Bot 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.

Dependency update review: @preact/signals 2.9.2 → 2.9.3

Verdict: Low risk — recommend merging. No follow-up fix PR is needed.


Changelog impact (mapped to this repo)

This bump also pulls in @preact/signals-core@1.14.4. All changes are patch-level bug fixes.

Change Relevance here
Dispose signal prop updaters when an element re-renders without signal props (#948) Confirmed relevant. special-pages passes signal/computed objects directly as JSX props in several places — e.g. aria-hidden={hidden}, tabindex={tabIndex}, data-animating={animating} in App.js, and isOpen={isOpen} on drawer controls. This fix prevents stale DOM writes when signal props are replaced by plain values.
Fix computeds returning stale values after a batch reverts a signal (#947) Confirmed relevant. batch() is used in Drawer.js, BurnProvider.js, NormalizeDataProvider.js, and CustomizerDrawerInner.js, alongside widespread useComputed usage. This is a correctness fix for an edge case in batched updates.
<For> accepts readonly arrays (#950) Not used — no For import from @preact/signals in this repo.
createModel / untracked() / action() effect capture (#945) Not used — no createModel, untracked, or signals action usage in special-pages.

Overall, the fixes align with patterns already present in new-tab and history; this update is more likely to fix latent bugs than introduce regressions.


Test coverage

Indirect but broad coverage:

  • 40+ files import from @preact/signals, concentrated in new-tab and history.
  • Integration suites exercise signal-driven flows: new-tab.spec.js, history.spec.js, history-selections.spec.js, customizer.spec.js, activity.spec.js, protections.spec.js, favorites.spec.js, etc.
  • Unit tests: 116 passed (npm run test-unit in special-pages).
  • Build: passes (npm run build).

Gap (uncertain, not blocking): There are no dedicated unit tests for signal-as-prop binding or batch() + useComputed revert edge cases. Coverage is integration-level only. If regressions were to appear, they would most likely surface in drawer/customizer/activity integration tests.

Validation run: Signal-heavy integration tests (133 passed). Two customizer theme-variant tests failed once in a larger parallel batch but passed on isolated re-run — likely pre-existing timing flakiness, not attributable to this bump.


Is this dependency still needed?

Yes. @preact/signals is the established reactive-state layer for Preact in special-pages (providers, drawers, history selection, customizer, activity, protections, etc.). No alternative pattern is used elsewhere in this workspace, and replacing it would be a large unrelated refactor.


Supply chain risk

Check Result
Publisher Official preactjs/signals monorepo
License MIT
Version type Patch (2.9.2 → 2.9.3)
npm audit No advisories for @preact/signals or @preact/signals-core
Lockfile integrity SHA-512 hashes present for both packages
Maintainers Known Preact contributors (JoviDeCroock, andrewiggins, joeyTedeschi)

No supply-chain red flags identified.


Follow-up PR

None required. No open PR exists to address signals-related issues, and no code changes are warranted for this update. A separate fix PR was not drafted.


Reviewed by Cursor dependency-update automation.

Open in Web View Automation 

Sent by Cursor Automation: Review dependabot

@daxtheduck
daxtheduck added this pull request to the merge queue Jul 21, 2026
Merged via the queue into main with commit 5f56bb8 Jul 21, 2026
47 checks passed
@daxtheduck
daxtheduck deleted the dependabot/npm_and_yarn/main/preact/signals-2.9.3 branch July 21, 2026 11:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Update one or more dependencies version patch Increment the patch version when merged

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant