Skip to content

build(deps): bump actions/setup-node to v6.5.0, fix composite-action sibling gap - #594

Merged
qnbs merged 1 commit into
mainfrom
build/setup-node-6.5.0
Sep 3, 2026
Merged

build(deps): bump actions/setup-node to v6.5.0, fix composite-action sibling gap#594
qnbs merged 1 commit into
mainfrom
build/setup-node-6.5.0

Conversation

@qnbs

@qnbs qnbs commented Sep 3, 2026

Copy link
Copy Markdown
Owner

User description

Summary

Supersedes #563. Dependabot proposed a major bump to actions/setup-node v7.0.0, but its github-actions ecosystem scanner only covers .github/workflows/*.yml β€” it cannot see uses: references inside composite action definitions under .github/actions/. As a result, PR #563 only updated ci.yml's one direct reference (the small workflow-policy job's bootstrap step), leaving two more references at v6.4.0:

  • .github/actions/setup/action.yml β€” the shared composite action actually used by the security and quality jobs (the substantive CI work: lint, typecheck, tests, coverage).
  • .github/workflows/deploy-cloudflare-pages.yml.disabled β€” kept consistent for whenever it's re-enabled.

Merging #563 as-is would have left the bootstrap job on v7 while every job that matters stayed on v6.4.0 β€” the same sibling-reference-drift failure mode docs/DEPENDABOT-TRIAGE.md already documents an incident for with codeql-action, just caused by a different root cause (a Dependabot scanner blind spot rather than a missing groups: entry).

Why v6.5.0, not v7.0.0

Compared both (published five minutes apart, per the GitHub Releases API) before choosing:

v7.0.0 v6.5.0
Payload ESM migration, new unused cache-key outputs, mirrorToken fix (unused input here), dummy NODE_AUTH_TOKEN removal (unused var here) @actions/cache β†’ 5.1.0 + security overrides for undici and fast-xml-parser β€” the same fix, backported
Benefit to this repo None of the above changes anything this repo actually uses The real security-relevant payload
Risk Major version β€” full manual review per DEPENDABOT-TRIAGE.md's triage matrix Same v6.x major, no behavior change beyond the dependency bump

v6.5.0 delivers the one change that matters with none of the major-bump review burden.

Test plan

  • pnpm run lint β€” clean
  • pnpm exec vitest run tests/unit/tooling/workflowPolicyCheck.test.ts β€” 71/71 pass (action-pin structural validation)
  • pnpm run ci:prepush β€” full local admission PASS
  • Verified 249970729cb0ef3589644e2896645e5dc5ba9c38 against the GitHub API resolves to the v6.5.0 / v6 tags in actions/setup-node
  • CI green on this PR, then main green post-merge

Summary by Sourcery

Standardize actions/setup-node on v6.5.0 across active and disabled CI configuration.

Bug Fixes:

  • Update all repository references to actions/setup-node from v6.4.0 to v6.5.0, including the shared composite action and disabled deployment workflow, preventing version drift across CI jobs.

CI:

  • Align CI bootstrap and shared setup steps on the v6.5.0 action revision, including its security-related dependency updates.

Summary by cubic

Updates all actions/setup-node references from v6.4.0 to v6.5.0 instead of taking the proposed v7 major bump. This provides the relevant dependency security fixes without the v7 migration or behavior changes, while keeping every invocation on the same release.

Dependencies

  • v6.5.0 updates @actions/cache to 5.1.0 and adds security overrides for undici and fast-xml-parser.
  • The shared composite action is updated explicitly because Dependabot does not scan references under .github/actions/.

Written for commit ec2dc5f. Summary will update on new commits.

Review in cubic


CodeAnt-AI Description

Align all CI workflows on actions/setup-node v6.5.0

What Changed

  • Updated every active and disabled workflow reference to the same pinned setup-node v6.5.0 release
  • Keeps the workflow policy, security, quality, and future Cloudflare deployment jobs consistent
  • Includes the v6.5.0 security updates without introducing the unrelated major-version changes from v7

Impact

βœ… Consistent Node.js setup across CI jobs
βœ… Security fixes for dependency caching and parsing
βœ… Fewer workflow failures from mismatched action versions

πŸ’‘ Usage Guide

Checking Your Pull Request

Every time you make a pull request, our system automatically looks through it. We check for security issues, mistakes in how you're setting up your infrastructure, and common code problems. We do this to make sure your changes are solid and won't cause any trouble later.

Talking to CodeAnt AI

Got a question or need a hand with something in your pull request? You can easily get in touch with CodeAnt AI right here. Just type the following in a comment on your pull request, and replace "Your question here" with whatever you want to ask:

@codeant-ai ask: Your question here

This lets you have a chat with CodeAnt AI about your pull request, making it easier to understand and improve your code.

Example

@codeant-ai ask: Can you suggest a safer alternative to storing this secret?

Preserve Org Learnings with CodeAnt

You can record team preferences so CodeAnt AI applies them in future reviews. Reply directly to the specific CodeAnt AI suggestion (in the same thread) and replace "Your feedback here" with your input:

@codeant-ai: Your feedback here

This helps CodeAnt AI learn and adapt to your team's coding style and standards.

Example

@codeant-ai: Do not flag unused imports.

Retrigger review

Ask CodeAnt AI to review the PR again, by typing:

@codeant-ai: review

Check Your Repository Health

To analyze the health of your code repository, visit our dashboard at https://app.codeant.ai. This tool helps you identify potential issues and areas for improvement in your codebase, ensuring your repository maintains high standards of code health.

Summary by CodeRabbit

  • Chores
    • Updated the Node.js setup used by automated build, validation, and deployment workflows to version 6.5.0.
    • Refreshed pinned action references to maintain consistent workflow execution.

…osite-action sibling gap

Dependabot opened PR #563 proposing a major bump to actions/setup-node
v7.0.0, but only updated ci.yml's one direct `uses:` reference. The repo
has two more references Dependabot's github-actions ecosystem scanner
structurally cannot see (it only scans .github/workflows/*.yml, not
composite action definitions under .github/actions/): the shared
.github/actions/setup/action.yml composite (used by the security and
quality jobs -- the substantive CI work) and the disabled Cloudflare
Pages deploy workflow. Merging #563 as-is would have left the small
workflow-policy job's bootstrap on v7 while every other job's actual
setup-node execution stayed on v6.4.0 -- exactly the sibling-reference
drift class this repo's own DEPENDABOT-TRIAGE.md already documents an
incident for with codeql-action, just via a different root cause (a
Dependabot scanner blind spot rather than a missing group config).

Compared v7.0.0 against the parallel v6.5.0 release (published five
minutes apart, confirmed via the GitHub Releases API) before choosing
either: v7.0.0's changelog is an ESM migration (invisible to a plain
`uses:` consumer), new unused cache-key outputs, a mirrorToken fix for
an input this repo never sets, and removal of a dummy NODE_AUTH_TOKEN
export this repo never reads -- zero functional benefit here, for the
review burden of a major bump. v6.5.0 backports the one change that
does matter, @actions/cache 5.1.0 plus security overrides for undici
and fast-xml-parser, onto the existing v6.x line with no other change.

Bumped all three references (ci.yml, the composite action, and the
disabled Cloudflare workflow, kept consistent for whenever it's
re-enabled) to the verified v6.5.0 commit SHA. PR #563 closed in favor
of this PR, with the full comparison recorded there.
@codeant-ai

codeant-ai Bot commented Sep 3, 2026

Copy link
Copy Markdown

πŸ€– CodeAnt AI β€” Review Status

Status Commit Started (UTC) Finished (UTC)
βœ… Reviewed your PR ec2dc5f Sep 03, 2026 Β· 12:58 13:00

@codeant-ai

codeant-ai Bot commented Sep 3, 2026

Copy link
Copy Markdown

Thanks for using CodeAnt! πŸŽ‰

We're free for open-source projects. if you're enjoying it, help us grow by sharing.

Share on X Β·
Reddit Β·
LinkedIn

@vercel

vercel Bot commented Sep 3, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated
worldscript-studio Ready Ready Preview Sep 3, 2026 12:58pm UTC

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Sorry @qnbs, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 16 hours and 51 minutes by commenting @sourcery-ai review. Upgrade to get a review now.

@what-the-diff

what-the-diff Bot commented Sep 3, 2026

Copy link
Copy Markdown

PR Summary

  • Update of Node.js Setup Action
    The setup action for Node.js has been upgraded to version 6.5.0 from 6.4.0. This has been carried out in several workflow files, improving overall system efficiency. With this update, there are likely to be some new features and bug fixes that will enhance the performance of tasks associated with Node.js.

@sourcery-ai

sourcery-ai Bot commented Sep 3, 2026

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Updates all tracked actions/setup-node referencesβ€”including the composite action missed by Dependabot and a disabled deployment workflowβ€”from v6.4.0 to the verified v6.5.0 commit, keeping CI references aligned while taking the release’s security fixes without the v7 major-version migration.

File-Level Changes

Change Details Files
Align every repository reference to actions/setup-node v6.5.0 using the verified commit pin.
  • Update the shared composite setup action used by substantive CI jobs.
  • Update the workflow bootstrap reference.
  • Update the disabled Cloudflare deployment workflow for consistency.
  • Refresh Node 24 compatibility comments to v6.5.0.
.github/actions/setup/action.yml
.github/workflows/ci.yml
.github/workflows/deploy-cloudflare-pages.yml.disabled
Select the v6.5.0 minor release to receive its dependency and security fixes without taking the unrelated v7 major-version migration.
  • Use the v6.5.0 commit SHA across sibling references.
  • Preserve the existing action inputs and behavior while incorporating the backported cache and security updates.
.github/actions/setup/action.yml
.github/workflows/ci.yml
.github/workflows/deploy-cloudflare-pages.yml.disabled

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@codeant-ai codeant-ai Bot added the size:XS This PR changes 0-9 lines, ignoring generated files label Sep 3, 2026
@codeant-ai

codeant-ai Bot commented Sep 3, 2026

Copy link
Copy Markdown

🏁 CodeAnt Quality Gate Results

Commit: ec2dc5f3
Scan Time: 2026-09-03 13:00:55 UTC

βœ… Overall Status: PASSED

Quality Gate Details

Quality Gate Status Details
Secrets βœ… PASSED 0 secrets found
Duplicate Code βœ… PASSED 0.0% duplicated
SAST βœ… PASSED No security issues
Bugs βœ… PASSED Rating S: No bugs
IAC βœ… PASSED Rating S: No issues

View Full Results

@amazon-q-developer amazon-q-developer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This PR correctly updates actions/setup-node from v6.4.0 to v6.5.0 across all workflow files. The changes are consistent, properly SHA-pinned, and well-tested according to the PR description. No blocking issues identified.


You can now have the agent implement changes and create commits directly on your pull request's source branch. Simply comment with /q followed by your request in natural language to ask the agent to make changes.

@codescene-access codescene-access Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No application code in the PR β€” skipped Code Health checks.

See analysis details in CodeScene

Quality Gate Profile: The Bare Minimum
Install CodeScene MCP: safeguard and uplift AI-generated code. Catch issues early with our IDE extension and CLI tool.

@coderabbitai

coderabbitai Bot commented Sep 3, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. πŸŽ‰

ℹ️ Recent review info
βš™οΈ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Essentials

Run ID: 39c6e94c-4938-4ed4-8d55-2ff2961ef121

πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between db1d1bd and ec2dc5f.

πŸ“’ Files selected for processing (3)
  • .github/actions/setup/action.yml
  • .github/workflows/ci.yml
  • .github/workflows/deploy-cloudflare-pages.yml.disabled

Included review availability: 0 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 1 review per hour.


πŸ“ Walkthrough

Walkthrough

The pull request updates all listed actions/setup-node references from v6.4.0 to v6.5.0. It updates the composite setup action, the CI policy gate, and the disabled Cloudflare Pages workflow.

Changes

Node action update

Layer / File(s) Summary
Update setup-node pins
.github/actions/setup/action.yml, .github/workflows/ci.yml, .github/workflows/deploy-cloudflare-pages.yml.disabled
The composite action and workflow configurations now reference the pinned actions/setup-node v6.5.0 revision. The Node 24 compatibility comment is also updated.

Estimated code review effort: 1 (Trivial) | ~2 minutes

Merge Risk: βšͺ Minimal Β· up to ec2dc

The automation dependency pin update consistently moves all listed setup-node references to v6.5.0 while retaining immutable SHA pins. No current merge-blocking risk is identified.

πŸš₯ Pre-merge checks | βœ… 5
βœ… Passed checks (5 passed)
Check name Status Explanation
Description Check βœ… Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check βœ… Passed The title clearly identifies the dependency update to actions/setup-node v6.5.0 and the composite-action reference gap addressed by the pull request.
Docstring Coverage βœ… Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check βœ… Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check βœ… Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (3 skipped: 3 unsupported.)

✨ Finishing Touches
πŸ§ͺ Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch build/setup-node-6.5.0

Comment @coderabbitai help to get the list of available commands.

@deepsource-io

deepsource-io Bot commented Sep 3, 2026

Copy link
Copy Markdown

DeepSource Code Review

We reviewed changes in db1d1bd...ec2dc5f on this pull request. Below is the summary for the review, and you can see the individual issues we found as inline review comments.

See full review on DeepSourceΒ β†—

PR Report Card

Overall GradeΒ Β  SecurityΒ Β 

ReliabilityΒ Β 

ComplexityΒ Β 

HygieneΒ Β 

Code Review Summary

Analyzer Status Updated (UTC) Details
Docker Sep 3, 2026 12:59p.m. ReviewΒ β†—
Python Sep 3, 2026 12:59p.m. ReviewΒ β†—
Rust Sep 3, 2026 12:59p.m. ReviewΒ β†—
Shell Sep 3, 2026 12:59p.m. ReviewΒ β†—

Important

AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

No issues found across 3 files

Re-trigger cubic

@codecov

codecov Bot commented Sep 3, 2026

Copy link
Copy Markdown

Codecov Report

βœ… All modified and coverable lines are covered by tests.

πŸ“’ Thoughts on this report? Let us know!

@qnbs
qnbs merged commit 041f20e into main Sep 3, 2026
41 checks passed
@qnbs
qnbs deleted the build/setup-node-6.5.0 branch September 3, 2026 13:23
qnbs added a commit that referenced this pull request Sep 3, 2026
… check-pr-size.mjs exception-ceiling bug

Recomputed entirely from a genuine rebase of #583 onto current main
(which now carries #562, #592, and #594) rather than trusting the
historical 70 files / 1753 lines / 21 commits figures the earlier
commits on this branch carried forward.

The rebase itself revealed two things the prior estimate could not
have known:

1. #583 and #592 (the independent factory-reset persistence-admission
   fix, issues #591/#593) touch overlapping files -- app/listenerMiddleware.ts,
   services/factoryResetService.ts, services/crossProjectIndexService.ts,
   and their tests. Reconciled by layering both mechanisms inside
   wipeAllAppData(): #592's isFactoryResetInProgress()/coordinator-draining
   gate runs first (blocks new Redux-listener writes, drains in-flight
   ones), then #583's beginIdbReset() force-closes every other long-lived
   IDB connection the coordinators do not track.
2. PR #590 (merged earlier, unrelated) had already independently shipped
   the same locale-independent Settings/mobile-"More"-button navigation
   fix #583 originally introduced across five files (components/SettingsView.tsx,
   components/settings/SettingsModals.tsx, components/settings/DataSection.tsx,
   components/Sidebar.tsx, tests/e2e/helpers.ts). Parallel convergent
   evolution left #583's own changes to those files fully superseded --
   zero net diff against current main -- so they are correctly absent
   from allowedPaths.

Final measured diff: 65 governed files (84 incl. generated locale
bundles), 1611 meaningful lines, 14 commits -- exact ceilings, no
speculative headroom, computed directly via check-pr-size.mjs itself
against the real rebased branch.

That direct measurement also surfaced a latent bug in check-pr-size.mjs:
when an exception's own ceiling legitimately exceeds TIERS.absolute
(30 files/3000 lines/15 commits) -- the entire point of granting one --
evaluatePrSize() fell through to selectSeverity() against that fixed
tier instead of treating the exception's own ceiling as authoritative,
so a fully-satisfied wide exception still reported blocking:true.
Neither #539 (maxFiles:30, at the absolute tier's own boundary) nor
#564 (maxFiles:3, well under it) had ever exercised this path -- #583
is the first exception whose own scope is wide enough to expose it.
Fixed to short-circuit on exception.entry directly, verified against
a synthetic base commit carrying this fix plus the recomputed entry,
diffed against the actual rebased #583 branch (exit 0, PR_SIZE_EXCEPTION=APPLIED).
Added a regression test covering a wide exception ceiling that exceeds
the fixed absolute tier.

Squashes the prior five commits on this branch (four incremental
"recompute" attempts plus a stray temp commit), none of which had been
verified against a real rebase or the actual gate behavior.
qnbs added a commit that referenced this pull request Sep 3, 2026
… check-pr-size.mjs exception-ceiling bug

Recomputed entirely from a genuine rebase of #583 onto current main
(which now carries #562, #592, and #594) rather than trusting the
historical 70 files / 1753 lines / 21 commits figures the earlier
commits on this branch carried forward.

The rebase itself revealed two things the prior estimate could not
have known:

1. #583 and #592 (the independent factory-reset persistence-admission
   fix, issues #591/#593) touch overlapping files -- app/listenerMiddleware.ts,
   services/factoryResetService.ts, services/crossProjectIndexService.ts,
   and their tests. Reconciled by layering both mechanisms inside
   wipeAllAppData(): #592's isFactoryResetInProgress()/coordinator-draining
   gate runs first (blocks new Redux-listener writes, drains in-flight
   ones), then #583's beginIdbReset() force-closes every other long-lived
   IDB connection the coordinators do not track.
2. PR #590 (merged earlier, unrelated) had already independently shipped
   the same locale-independent Settings/mobile-"More"-button navigation
   fix #583 originally introduced across five files (components/SettingsView.tsx,
   components/settings/SettingsModals.tsx, components/settings/DataSection.tsx,
   components/Sidebar.tsx, tests/e2e/helpers.ts). Parallel convergent
   evolution left #583's own changes to those files fully superseded --
   zero net diff against current main -- so they are correctly absent
   from allowedPaths.

Final measured diff: 65 governed files (84 incl. generated locale
bundles), 1611 meaningful lines, 14 commits -- exact ceilings, no
speculative headroom, computed directly via check-pr-size.mjs itself
against the real rebased branch.

That direct measurement also surfaced a latent bug in check-pr-size.mjs:
when an exception's own ceiling legitimately exceeds TIERS.absolute
(30 files/3000 lines/15 commits) -- the entire point of granting one --
evaluatePrSize() fell through to selectSeverity() against that fixed
tier instead of treating the exception's own ceiling as authoritative,
so a fully-satisfied wide exception still reported blocking:true.
Neither #539 (maxFiles:30, at the absolute tier's own boundary) nor
#564 (maxFiles:3, well under it) had ever exercised this path -- #583
is the first exception whose own scope is wide enough to expose it.
Fixed to short-circuit on exception.entry directly, verified against
a synthetic base commit carrying this fix plus the recomputed entry,
diffed against the actual rebased #583 branch (exit 0, PR_SIZE_EXCEPTION=APPLIED).
Added a regression test covering a wide exception ceiling that exceeds
the fixed absolute tier.

Squashes the prior five commits on this branch (four incremental
"recompute" attempts plus a stray temp commit), none of which had been
verified against a real rebase or the actual gate behavior.
qnbs added a commit that referenced this pull request Sep 3, 2026
… check-pr-size.mjs exception-ceiling bug (#586)

Recomputed entirely from a genuine rebase of #583 onto current main
(which now carries #562, #592, and #594) rather than trusting the
historical 70 files / 1753 lines / 21 commits figures the earlier
commits on this branch carried forward.

The rebase itself revealed two things the prior estimate could not
have known:

1. #583 and #592 (the independent factory-reset persistence-admission
   fix, issues #591/#593) touch overlapping files -- app/listenerMiddleware.ts,
   services/factoryResetService.ts, services/crossProjectIndexService.ts,
   and their tests. Reconciled by layering both mechanisms inside
   wipeAllAppData(): #592's isFactoryResetInProgress()/coordinator-draining
   gate runs first (blocks new Redux-listener writes, drains in-flight
   ones), then #583's beginIdbReset() force-closes every other long-lived
   IDB connection the coordinators do not track.
2. PR #590 (merged earlier, unrelated) had already independently shipped
   the same locale-independent Settings/mobile-"More"-button navigation
   fix #583 originally introduced across five files (components/SettingsView.tsx,
   components/settings/SettingsModals.tsx, components/settings/DataSection.tsx,
   components/Sidebar.tsx, tests/e2e/helpers.ts). Parallel convergent
   evolution left #583's own changes to those files fully superseded --
   zero net diff against current main -- so they are correctly absent
   from allowedPaths.

Final measured diff: 65 governed files (84 incl. generated locale
bundles), 1611 meaningful lines, 14 commits -- exact ceilings, no
speculative headroom, computed directly via check-pr-size.mjs itself
against the real rebased branch.

That direct measurement also surfaced a latent bug in check-pr-size.mjs:
when an exception's own ceiling legitimately exceeds TIERS.absolute
(30 files/3000 lines/15 commits) -- the entire point of granting one --
evaluatePrSize() fell through to selectSeverity() against that fixed
tier instead of treating the exception's own ceiling as authoritative,
so a fully-satisfied wide exception still reported blocking:true.
Neither #539 (maxFiles:30, at the absolute tier's own boundary) nor
#564 (maxFiles:3, well under it) had ever exercised this path -- #583
is the first exception whose own scope is wide enough to expose it.
Fixed to short-circuit on exception.entry directly, verified against
a synthetic base commit carrying this fix plus the recomputed entry,
diffed against the actual rebased #583 branch (exit 0, PR_SIZE_EXCEPTION=APPLIED).
Added a regression test covering a wide exception ceiling that exceeds
the fixed absolute tier.

Squashes the prior five commits on this branch (four incremental
"recompute" attempts plus a stray temp commit), none of which had been
verified against a real rebase or the actual gate behavior.
qnbs added a commit that referenced this pull request Sep 5, 2026
* chore(release): bump version to v1.28.4

Patch release reconciling release-truth documentation with everything
merged to main since v1.28.3 (62 commits / ~40 PRs, audited against
live GitHub state, not assumed from commit subjects):

- fix: PWA first-install unprompted reload (#585, PR #613)
- fix: shared-origin service-worker cache-read isolation (#514, PR #612)
- fix: Factory Reset could reboot into Settings instead of Welcome
  Portal (PR #592)
- fix: preserve-first desktop corruption recovery (PR #542) and a
  distinct filesystem-I/O recovery action (PR #545)
- fix: intentionally cleared project metadata no longer reappears
  (PR #546)
- a11y: Welcome/Home dashboard WCAG AA contrast + reduced-motion
  cascade fix + default appearance preset change (#565, PR #609);
  ManuscriptEditor contrast (PR #560)
- security: fflate ZIP64-parsing DoS override (PR #595); routine
  dependency floor bumps (PR #587, #561, #562, #594)
- docs: R-15 secure desktop storage design contract admitted (PRs
  #564, #580, #581, #582, #584) β€” design only, no implementation yet
- tests: visual regression testing repaired β€” baselines were directory
  listings, not the application (PR #610); IDB reset-quiescence
  hardening (PR #596); WelcomePortal E2E navigation made
  locale-independent (PR #590)

Everything classified as pure internal/CI-governance churn (PR-size
exception plumbing, dual-graph tooling, toolchain pins) is omitted from
CHANGELOG.md as non-user-facing.

Version bumped via the existing sync scripts (sync-tauri-version.mjs,
sync-sw-version.mjs) across package.json, src-tauri/Cargo.toml,
src-tauri/tauri.conf.json, src-tauri/Cargo.lock, AGENTS.md, and
public/sw.js's APP_VERSION.

CHANGELOG.md and README.md use the established release-candidate
marker convention (<!-- release-candidate: v1.28.4 -->) so the dated
entry and version badge are truthful before the v1.28.4 tag exists;
both markers are removed in a follow-up post-release truth-sync once
the tag and GitHub Release are published, matching the v1.28.2/v1.28.3
precedent.

TODO.md's Current Sprint section was archived (its final "release cut
remains open" bullet is now resolved β€” v1.28.2 and v1.28.3 both
shipped) and replaced with the actual current sprint: this release cut
followed by the R-15 desktop at-rest encryption priority program.

AUDIT.md is intentionally not touched here β€” its release-gate entry
requires real post-merge CI/CodeQL run evidence that doesn't exist
until after this PR merges and the tag is cut, matching how every
prior release's AUDIT.md entry was written (a follow-up commit, not
part of the release-prep PR itself).

* docs(release): correct premature done-marker on the v1.28.4 TODO item

TODO.md's Current Sprint marked the release cut as done (checked
'v1.28.4' release cut, reconciling ... AUDIT.md truth ...) while this
same PR's own Non-goals section correctly states AUDIT.md is not
touched here, and while no tag, GitHub Release, or release artifacts
exist yet. Corrected to in-progress language naming PR #615 directly
and listing what actually remains pending (tag, release, artifacts,
post-release AUDIT.md evidence).

* docs(release): correct R-15 gate language and credit PR #596's real fix

Two corrections from review, verified against live evidence before
fixing:

1. TODO.md's Current Sprint claimed R-15 desktop at-rest encryption
   implementation was being prioritized now. docs/native/DESKTOP-
   MIGRATION-ROADMAP-REV3.md explicitly forbids pulling Wave 3/4 R-15
   implementation ahead of unresolved Wave 2 authority prerequisites,
   and CORE-MIGRATION-LEDGER.md row 10 records
   S5_IMPLEMENTATION_READY=NO. Corrected to state R-15 design is
   complete but implementation stays gated behind the still-open Wave
   2 prerequisite (ledger row 9: the project state-shape compatibility
   adapter), which is what this sprint's desktop-storage work actually
   is.

2. CHANGELOG.md listed PR #596 only as generic IDB test hardening
   under Tests. Verified against its actual diff: deleteDatabase()
   previously resolved on a genuine onerror or an onblocked event as
   if deletion succeeded, so wipeAllAppData() could report Factory
   Reset complete while a database was never actually deleted. onerror
   now rejects; onblocked waits for the connection to close before
   giving up. This is a real production data-integrity fix, not test
   hardening, and now has its own Fixed entry.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS This PR changes 0-9 lines, ignoring generated files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant