# Risk map — reduxjs/redux

> Canonical page: https://codevetter.com/unpack/redux/risk-map

# Risk map — reduxjs/redux

Scanned commit 56abca4749921d68f40cda20afd2043af9751f72 (2026-09-29). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

These are source observations and explicitly marked hypotheses, not confirmed vulnerabilities. The inspected core executes caller-provided reducers and middleware in process and validates only a limited action shape. Operational boundaries appear in documentation acquisition, mutable build output, browser embeds, and publishing automation. Compatibility and validation gaps require attention because the library has several distributed formats and the site consumes independently changing repositories.
- Base dispatch validates action shape and type but performs no payload authorization, sanitization, or deep serializability validation in the inspected implementation; payload and reducer trust remain application responsibilities. — [src/createStore.ts#L270-L301](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/createStore.ts#L270-L301) [src/types/actions.ts#L7-L13](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/types/actions.ts#L7-L13)
- getState returns the stored reference, and combination detects changes using slice references rather than deep comparisons; a mutating reducer can violate the documented pure-reducer contract without this mechanism detecting the mutation. (inferred) — [src/createStore.ts#L166-L175](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/createStore.ts#L166-L175) [src/combineReducers.ts#L182-L199](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/combineReducers.ts#L182-L199) [src/types/reducers.ts#L15-L24](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/types/reducers.ts#L15-L24)
- Subscriber callbacks run after currentState is assigned and have no individual exception handling; a throwing callback stops ordinary Map.forEach iteration and does not roll back the already assigned state. — [src/createStore.ts#L297-L308](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/src/createStore.ts#L297-L308)
- The main CI path filter lists src, test, .github, tsdown.config.mts, and pnpm-lock.yaml, but omits package.json, scripts, tsconfig files, and vitest.config.mts; an isolated change to an omitted file does not satisfy the build job's src condition. — [.github/workflows/test.yaml#L17-L31](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/.github/workflows/test.yaml#L17-L31)
- External docs default to master refs, honor caller-provided repository/ref/local-source settings, and copy or symlink files from outside the checkout; --force and local refresh remove existing generated targets before reacquisition. — [website/scripts/fetch-external-docs.mts#L50-L77](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/website/scripts/fetch-external-docs.mts#L50-L77) [website/scripts/fetch-external-docs.mts#L101-L120](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/website/scripts/fetch-external-docs.mts#L101-L120) [website/scripts/fetch-external-docs.mts#L197-L214](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/website/scripts/fetch-external-docs.mts#L197-L214)
- Netlify sets DOCS_TYPECHECK=warn, and the code-block plugin then emits warnings rather than failing on diagnostics; this configuration permits publication with reported snippet type errors. — [netlify.toml#L17-L20](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/netlify.toml#L17-L20) [website/plugins/remark-typescript-tools/transpileCodeblocks/plugin.ts#L174-L183](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/website/plugins/remark-typescript-tools/transpileCodeblocks/plugin.ts#L174-L183)
- Build is a mutating operation: clean removes dist and coverage, the Babel plugin may rewrite tracked errors.json, and transform failures are logged before returning null rather than explicitly rethrown by the tsdown hook. — [package.json#L51-L53](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/package.json#L51-L53) [scripts/clean.mts#L1-L9](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/scripts/clean.mts#L1-L9) [scripts/mangleErrors.mts#L178-L182](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/scripts/mangleErrors.mts#L178-L182) [tsdown.config.mts#L39-L42](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/tsdown.config.mts#L39-L42)
- The vanilla example loads an unpinned redux@latest browser module from unpkg, while legacy examples declare Redux 4 and React 17; these examples therefore do not uniformly exercise the pinned Redux 5 source. — [examples/counter-vanilla/index.html#L16-L17](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/examples/counter-vanilla/index.html#L16-L17) [examples/shopping-cart/package.json#L10-L17](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/examples/shopping-cart/package.json#L10-L17) [examples/todos/package.json#L8-L13](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/examples/todos/package.json#L8-L13) [examples/tree-view/package.json#L11-L15](https://github.com/reduxjs/redux/blob/56abca4749921d68f40cda20afd2043af9751f72/examples/tree-view/package.json#L11-L15)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
