Skip to content

chore(deps-dev): bump the npm-root group with 8 updates - #280

Open
dependabot[bot] wants to merge 14 commits into
mainfrom
dependabot/npm_and_yarn/npm-root-8a8f6609e1
Open

chore(deps-dev): bump the npm-root group with 8 updates#280
dependabot[bot] wants to merge 14 commits into
mainfrom
dependabot/npm_and_yarn/npm-root-8a8f6609e1

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 1, 2026

Copy link
Copy Markdown
Contributor

Summary

Started as the Dependabot npm-root group bump. The batch did not install as proposed, and reviewing it surfaced two real bugs plus a pile of pre-existing lint debt, so this PR now carries that work as well.

The bump itself needed a fix

oxlint@1.75.0 raised its peer requirement to oxlint-tsgolint >= 7.0.2001, but Dependabot only bumped oxlint-tsgolint to ^0.25.0, because that package switched versioning schemes (0.25.0 -> 7.0.2000 -> 7.0.2001, now tracking the TypeScript release it embeds).

Result: npm install failed with ERESOLVE. npm ci succeeded, so CI stayed green and hid it. The breakage only hit developers installing locally. Fixed by taking oxlint-tsgolint to ^7.0.2001, which is the version released alongside oxlint@1.75.0.

Worth noting for future grouped updates: Dependabot does not cross-check peer ranges between packages in a group.

Two bugs found and fixed

The bulk delete confirmation dialog did not gate the delete. $q.dialog() returns a DialogChainObject, not a Promise, so awaiting it resolved immediately without waiting for the user. The catch block handling Cancel was unreachable and the deletion ran regardless of which button was clicked. Now gated on the onOk/onCancel callbacks.

The primary evaluator warning listed weeks out of order. The default toSorted() is lexicographic, so week numbers rendered as 1, 10, 2. Now sorts numerically.

Both have regression tests that were verified to fail against the unfixed code.

Security

Patched two pre-existing HIGH advisories that this branch neither introduced nor originally fixed:

npm audit now reports 0 vulnerabilities.

Reviewer note: both fixed versions were younger than the .npmrc min-release-age=7 gate, so this used a one-off --min-release-age=0. To compensate for skipping the bake period, both packages were checked directly first: maintainers, repositories and licences all unchanged against the versions they replace, no new dependencies, no install hooks. .npmrc is untouched, so the gate still applies to everything else.

Type-aware linting

Enabled, but curated. Turning it on wholesale produced 2,333 findings; the curated set is 21, all of which are fixed here.

Rules kept are the ones that catch real defects (no-floating-promises, await-thenable, no-misused-promises, require-array-sort-compare). The week-ordering bug above was found by require-array-sort-compare.

Rules switched off, with reasons in the config:

  • prefer-readonly-parameter-types is unsatisfiable here, since it flags vue-router callback signatures we do not own
  • strict-boolean-expressions contradicts documented vue-router idioms and cannot see template expressions, so it would force verbose checks in script while v-if truthiness stays unlinted
  • no-unnecessary-type-assertion has an open upstream false-positive regression

Also note the typescript plugin brings roughly 1,550 syntactic findings unrelated to type-aware analysis (explicit-function-return-type, no-non-null-assertion and similar). The repo never opted into those style positions, so they are disabled explicitly rather than reformatting the app.

no-void is now off for VueApp because no-floating-promises prescribes void as its fix; the two rules are mutually exclusive. It was already off for scripts/**.

Lint debt cleared

VueApp went from 27 lint errors to 0. These predate the rules that flag them:

  • 84 require-mock-type-parameters across 23 test suites
  • 18 unreferenced, non-exported type declarations (services keep their own local copies, so nothing outside the files could reach them)
  • 7 describe() calls passing an identifier instead of a string
  • 3 top-level test helpers converted to const arrows
  • 1 vacuous test that always returned early on expect(true).toBeTruthy() and never reached its real assertion

api-responses.ts was deleted along the way: once its unused DTOs were gone it held only ApiError, which TypedApiResult already depended on, so it was folded into api.ts.

Verification

  • Frontend: 88 files / 1,120 tests pass
  • Backend: 2,698 tests pass
  • vue-tsc: clean
  • Lint: 0 errors with type-aware active
  • npm audit: 0 vulnerabilities
  • Browser: logged in against the local dev server and confirmed ClinicalScheduler navigation, route-change focus management (WCAG 2.4.3, #main-content receives focus), and no console errors

Not addressed

  • VueApp/package.json still declares its own eslint@^10.5.0, oxfmt@^0.56.0 and oxlint-tsgolint@^0.23.0. This PR is root-scoped, so root and VueApp now run different linter versions.
  • Stylelint fails on VueApp/src with The command line is too long on Windows. Pre-existing, unrelated to this bump, but it means stylelint is not currently linting that tree.

Original Dependabot report

Bumps the npm-root group with 8 updates:

Package From To
@double-great/stylelint-a11y 3.4.15 3.5.0
eslint 10.5.0 10.8.0
fallow 2.102.0 3.6.0
jscpd 5.0.10 5.0.12
oxfmt 0.56.0 0.60.0
oxlint 1.71.0 1.75.0
oxlint-tsgolint 0.23.0 0.25.0
stylelint 17.13.0 17.14.1

Updates @double-great/stylelint-a11y from 3.4.15 to 3.5.0

Release notes

Sourced from @​double-great/stylelint-a11y's releases.

v3.5.0

What's Changed

Full Changelog: double-great/stylelint-a11y@v3.4.15...v3.5.0

Commits

Updates eslint from 10.5.0 to 10.8.0

Release notes

Sourced from eslint's releases.

v10.8.0

Features

  • 2fee9bb feat: export ConfigObject from eslint/config (#21082) (sethamus)

Bug Fixes

  • 6b8d2f7 fix: escape reserved characters in rule id in html formatter (#21129) (Francesco Trotta)
  • 9091071 fix: prevent no-unreachable-loop crash when all loop types are ignored (#21116) (Pixel)
  • e23fafe fix: prefer-object-spread add semicolon when adding parenthesis (#21081) (synthex-byte)
  • 20b5ad0 fix: quadratic-time regex in prefer-template (#21096) (Milos Djermanovic)
  • 8b6f6c0 fix: apply ignore configs to computed methods in class-methods-use-this (#21094) (Pixel)
  • b2c608c fix: NewExpression with parenthesized callee in preserve-caught-error (#21083) (Francesco Trotta)

Documentation

  • 6ddf858 docs: fix broken Specify Parser Options anchor link (#21106) (Minsu)
  • 784dfbe docs: Clarify no-eq-null description (#21120) (Park Harin)
  • 7ec733a docs: Fix typos and grammar in glossary (#21095) (Marry (Subin Yang))
  • 92bb13f docs: replace quake link (#21108) (Jung Hyeon Jun)
  • 68eb4a5 docs: fix broken Specify Globals anchor links in rule pages (#21103) (Minsu)
  • d28f697 docs: replace Code Climate CLI links with Qlty CLI links (#21099) (Jung Hyeon Jun)
  • eccc68d docs: correct --suppressions-location option description (#21093) (Ga eun Lee)
  • c5963f7 docs: Update README (GitHub Actions Bot)

Chores

  • 4fbf46d test: pin webpack version to 5.108.4 (#21137) (Francesco Trotta)
  • 2d063e2 chore: update HTTP URLs to HTTPS in JSDoc and comments (#21101) (Bo Hyun Kim)
  • eccbe7b test: add error locations to no-class-assign (#21123) (devoil)
  • e7d1e43 ci: bump actions/setup-go from 6 to 7 (#21118) (dependabot[bot])
  • e9d66d0 ci: bump actions/setup-node from 6 to 7 (#21119) (dependabot[bot])
  • ee225b6 test: Add error location details to no-eq-null rule (#21117) (Park Harin)
  • 044a627 chore: update minimatch to ^10.2.5 (#21107) (김채영)
  • fb09aa8 chore: update ecosystem plugins (#21115) (ESLint Bot)
  • 5abd878 test: add error locations to no-proto (#21114) (Gihyeon Jeong / 정기현)
  • 9715887 test: Add error location details to no-div-regex (#21110) (Park Harin)
  • a746ec6 test: add error locations to no-new-wrappers (#21109) (Gihyeon Jeong / 정기현)
  • 8dde645 test: add error locations to no-ex-assign (#21102) (devoil)
  • 13ab0ec test: add error locations to no-label-var (#21098) (Gihyeon Jeong / 정기현)
  • a99906f test: Add error location details to no-delete-var rule (#21105) (Park Harin)
  • c47e8dc chore: add missing backticks to languages/js/index.js (#21104) (beeen)
  • 0174428 chore: add missing backticks to translate-cli-options.js (#21097) (dongkyu lee)
  • 3d36589 chore: add missing backticks to serialization.js (#21091) (이규환)
  • dcc9312 test: add error locations to eqeqeq (#21090) (Ga eun Lee)
  • 2710b18 ci: Add explicit permissions to rebuild-docs-sites workflow (#21089) (Marry (Subin Yang))
  • 5d2f866 chore: update dependency prettier to v3.9.5 (#21086) (renovate[bot])
  • d584e31 chore: fix failing ecosystem test for eslint-plugin-unicorn (#21084) (Francesco Trotta)
  • bf3eda0 chore: update ecosystem plugins (#21079) (ESLint Bot)

v10.7.0

Features

  • cf2a9bf feat: add errorClassNames option to preserve-caught-error rule (#21032) (sethamus)
  • f8b873a feat: max-nested-callbacks option for constructor callbacks (#21063) (fnx)

... (truncated)

Commits

Updates fallow from 2.102.0 to 3.6.0

Release notes

Sourced from fallow's releases.

v3.6.0: compact JSON by default, reusable audit caches, Windows diagnostics fix

fallow v3.6.0 makes --format json leaner by default, adds first-class cleanup for reusable audit caches, and fixes editor diagnostics on Windows.

Features

Compact JSON by default

fallow --format json now emits compact JSON. Machine consumers get the same schema and values with less output, and JSON success and error documents still end with exactly one line feed. Pass the global --pretty flag when you want indented JSON for manual inspection:

fallow --format json            # compact (default)
fallow --format json --pretty   # indented

Schema commands follow the same compact-by-default behavior. SARIF, Code Climate, saved baselines, snapshots, caches, and other persisted JSON keep their existing presentation. Thanks @​avidianity for the request (Closes #1861).

Root-owned reusable audit caches you can clean safely

Each requested project root now keeps a single base-worktree cache that is rebuilt in place when the resolved base SHA changes, and the reuse lock is held for the audit lifetime so a cleanup or a different-base rebuild can never remove files under a running audit. A new subcommand cleans caches explicitly:

fallow audit-cache remove --root ./my-project --dry-run   # preview
fallow audit-cache remove --root ./my-project --yes       # remove

Temporary source snapshots are private on Unix, predictable sidecars reject symlinks, and Git administration cleanup is restricted to the current repository's verified worktree entry. Thanks @​ryolambert for the contribution (#1893).

Bug fixes

  • Windows editor diagnostics render again. LSP paths no longer retain the Windows verbatim path prefix that produced a UriError and prevented diagnostics from rendering. Thanks @​Bro3Simon for the detailed report (Closes #1899).

  • Package-less TypeScript project references keep dependency ownership at the parent package. Unused-dependency attribution now credits each imported package to the deepest workspace root that actually declares a package.json, so a tsconfig project reference without its own manifest no longer captures (and then misreports) dependencies that belong to its parent package.

Full Changelog: fallow-rs/fallow@v3.5.1...v3.6.0

v3.5.1: sharper dead-code crediting, license-token hardening

This patch sharpens dead-code crediting for two common architecture patterns, hardens license-token file handling, and speeds up named re-export and workspace bucketing at scale.

Fixes

unused-class-members no longer false-flags interface-typed property dispatch (ports-and-adapters / hexagonal DI). A method reached through a property whose declared type is an interface, on a class that implements that interface, is now credited. Given Deps.greeter: GreeterPort, class GreeterAdapter implements GreeterPort, and a call site useIt(deps: Deps) { deps.greeter.greet() }, fallow now keeps GreeterAdapter.greet. Direct-parameter and variable dispatch already worked; this closes the interface-property hop that dominates hexagonal findings. Genuinely-unused methods still report. Thanks @​lukeramsden for the clean minimal reduction. (Closes #1863)

unused-class-members no longer false-flags a factory that returns an object literal. A factory returning an inferred object literal whose property values are class instances, consumed cross-module as const ui = createUi(); ui.orders.placeOrder(), now credits OrdersPage.placeOrder. Every property-value shape resolves: a direct new Class(), a local const alias, and a member read of a separately-constructed instance (a typed field or a getter). Nested object literals, the assigned-then-returned form, and same-file consumption are all covered. This is the general root cause behind the Playwright page-object-factory pattern; it is not Playwright-specific. Thanks @​committedpazz for the precise bisection. (Closes #1858)

Next.js metadata route config exports are no longer reported as unused. App Router sitemap, robots, manifest, icon, and social image route files now credit the framework-consumed dynamic, revalidate, fetchCache, runtime, preferredRegion, and maxDuration exports. dynamicParams and arbitrary helper exports remain reportable because Next.js does not re-export them from generated metadata route handlers.

Star re-exports no longer make a source module's default export appear used. ECMAScript export * excludes default, so fallow now keeps an unused source default visible unless it is explicitly re-exported.

fallow migrate suggestions use recognized suppression issue kinds. When migrating an ignoreUnresolved entry, the generated warning now suggests the singular unresolved-import token, validated against fallow's own suppression parser.

... (truncated)

Changelog

Sourced from fallow's changelog.

[3.6.0] - 2026-07-15

Changed

  • --format json now emits compact JSON by default. Machine consumers get the same schema and values with less output. Use the global --pretty flag when indented JSON is useful for manual inspection. JSON success and error documents still end with exactly one line feed. Schema commands follow the same compact-by-default behavior, while generated schema artifacts remain indented. SARIF, Code Climate, saved baselines, snapshots, caches, and other persisted JSON keep their existing presentation. (Closes #1861)

  • Reusable audit base snapshots are root-owned and safe to clean while audits run. Each requested project root now has one base-worktree cache that is rebuilt in place when the full resolved base SHA changes. The reuse lock stays held for the audit lifetime, old SHA-keyed caches remain reclaimable, and fallow audit-cache remove --root <PATH> provides explicit preview and confirmation controls. Temporary source snapshots are private on Unix, predictable sidecars reject symlinks, and Git administration cleanup is restricted to the current repository's verified worktree entry. Thanks @​ryolambert for the contribution (#1893).

Fixed

  • Windows editor diagnostics use valid file URIs. LSP paths no longer retain the Windows verbatim path prefix that prevented diagnostics from rendering. (Closes #1899)

  • Package-less TypeScript project references keep dependency ownership at the parent package. Unused-dependency attribution now credits each imported package to the deepest workspace root that actually declares a package.json, so a tsconfig project reference without its own manifest no longer captures (and then misreports) dependencies that belong to its parent package.

[3.5.1] - 2026-07-14

Fixed

  • Next.js metadata route config exports are no longer reported as unused. App Router sitemap, robots, manifest, icon, and social image route files now credit the framework-consumed dynamic, revalidate, fetchCache, runtime, preferredRegion, and maxDuration exports. dynamicParams and arbitrary helper exports remain reportable because Next.js does not re-export them from generated metadata route handlers.

  • fallow migrate suggestions use recognized suppression issue kinds. When migrating an ignoreUnresolved entry, the generated warning now suggests the singular unresolved-import token, and a regression test validates every concrete suppression token in the migration table against fallow's parser.

  • Regression baseline help explains the existing config update flow. Running --save-regression-baseline without a path updates regression.baseline in the discovered fallow config, or creates .fallowrc.json when none exists. Supplying a path still writes a standalone baseline file.

  • unused-class-members no longer false-flags a method dispatched through an interface-typed property (ports-and-adapters / hexagonal DI). A method reached through a property whose declared type is an interface, on a class that implements that interface (useIt(deps: Deps) { deps.greeter.greet() } where Deps.greeter: GreeterPort and class GreeterAdapter implements GreeterPort), now credits GreeterAdapter.greet. The interface dispatch already worked through a direct parameter or variable (useIt(g: GreeterPort) { g.greet() }); this closes the remaining gap where the receiver is reached via an interface property hop, which dominates hexagonal-architecture findings. A genuinely-unused method on the implementing class still reports. Thanks @​lukeramsden for the clean minimal reduction. (Closes #1863)

... (truncated)

Commits
  • 32b3f89 chore: release v3.6.0
  • 5795c10 fix(ci): drop flaky pnpm cache from release-validation setup-node
  • 4e46717 fix(audit): silence Windows unnecessary_wraps on ownership no-op
  • 2fb4b7d test(audit): resolve integration cache paths via production hash
  • 502e793 test(audit): mirror production hashing in reusable-cache identity test
  • bef4d7d chore(docker): pin FALLOW_VERSION 3.5.1 with refreshed checksums
  • 852cc98 chore: remove superpowers workflow artifacts
  • a6c74e7 fix: harden analysis and integration contracts
  • d261eb3 fix(lsp): normalize Windows diagnostic paths
  • 3ab6c16 fix(cli): honor JSON style for schema commands
  • Additional commits viewable in compare view

Updates jscpd from 5.0.10 to 5.0.12

Release notes

Sourced from jscpd's releases.

Release v5.0.12

Highlights

Bug Fixes

  • Rename cpd binary and npm packages to jscpd — the CLI binary was named cpd (cpd.exe on Windows), which collided with an executable name flagged by some antivirus software (McAfee, Trend Micro), causing false-positive blocking. The binary and platform npm packages are now named jscpd / jscpd-*. Closes #826 (#854)
  • Recognize ; line comments for Lisp/Clojure/Scheme/Racket — these languages fell through to C-style comment handling, so ; comments were tokenized as code and --mode weak / --skip-comments couldn't drop them. Closes #849 (#850, thanks @​laurynas-biveinis)
  • Use HTTPS for SARIF schema URI — avoids "untrusted URI" errors in SARIF-consuming tools (#844, thanks @​chrisc-onaorg)

Chores

  • Use public repository URLs for @jscpd/core, @jscpd/finder, @jscpd/tokenizer, @jscpd/html-reporter, @jscpd/badge-reporter, @jscpd/leveldb-store, and @jscpd/redis-store package metadata (#831#837, thanks @​9904099)
  • Add cargo ecosystem to Dependabot config

Dependencies

  • Bump askama to 0.16.0 in /rust
  • Bump log to 0.4.33 in /rust
  • Bump env_logger to 0.11.11 in /rust
  • Bump rustc-hash to 2.1.3 in /rust

Thanks

Big thanks to @​laurynas-biveinis, @​chrisc-onaorg, and @​9904099 for their contributions to this release! 🙌

Published Packages

  • cpd-core@0.1.6 on crates.io
  • cpd-finder@0.1.8 on crates.io
  • cpd-reporter@0.1.7 on crates.io
  • cpd-tokenizer@0.1.7 on crates.io
  • jscpd@5.0.12 on crates.io
  • cpd@5.0.12 on npm
  • jscpd@5.0.12 on npm
  • jscpd-darwin-arm64@5.0.12 on npm
  • jscpd-darwin-x64@5.0.12 on npm
  • jscpd-linux-x64-gnu@5.0.12 on npm
  • jscpd-linux-arm64-gnu@5.0.12 on npm
  • jscpd-linux-x64-musl@5.0.12 on npm
  • jscpd-windows-x64-msvc@5.0.12 on npm
Changelog

Sourced from jscpd's changelog.

Changelog

All notable changes to jscpd are documented here. Releases follow Semantic Versioning.


5.0.11

New Features

  • Razor (.razor) support — new tokenizer for Razor files in the Rust backend (thanks to @​chrisc-onaorg in #829)

Dependencies

  • cpd-core bumped to 0.1.6, cpd-tokenizer bumped to 0.1.7

Commits
  • 64258a9 release: cpd-v5.0.12
  • ff1ae36 fix(rust): rename cpd binary and npm platform packages to jscpd
  • f768035 docs(readme): fix jscpd@5 bin claim and refresh npm README
  • 115f7fb release: cpd-v5.0.11
  • See full diff in compare view

Updates oxfmt from 0.56.0 to 0.60.0

Commits
  • 83abe3b release(apps): oxlint v1.75.0 && oxfmt v0.60.0 (#24713)
  • e2e0f94 chore(docs): update sponsor section (#24588)
  • 2d4e8d2 release(apps): oxlint v1.74.0 && oxfmt v0.59.0 (#24454)
  • 415fe1e fix(oxfmt): error on ignorePatterns that cannot match files outside the confi...
  • 39677ba release(apps): oxlint v1.73.0 && oxfmt v0.58.0 (#24219)
  • 5306f24 release(apps): oxlint v1.72.0 && oxfmt v0.57.0 (#23935)
  • See full diff in compare view

Updates oxlint from 1.71.0 to 1.75.0

Release notes

Sourced from oxlint's releases.

oxlint v1.27.0 && oxfmt v0.12.0

Oxlint v1.27.0

🚀 Features

  • 222a8f0 linter/plugins: Implement SourceCode#isSpaceBetween (#15498) (overlookmotel)
  • 2f9735d linter/plugins: Implement context.languageOptions (#15486) (overlookmotel)
  • bc731ff linter/plugins: Stub out all Context APIs (#15479) (overlookmotel)
  • 5822cb4 linter/plugins: Add extend method to FILE_CONTEXT (#15477) (overlookmotel)
  • 7b1e6f3 apps: Add pure rust binaries and release to github (#15469) (Boshen)
  • 2a89b43 linter: Introduce debug assertions after fixes to assert validity (#15389) (camc314)
  • ad3c45a editor: Add oxc.path.node option (#15040) (Sysix)

🐛 Bug Fixes

  • 6f3cd77 linter/no-var: Incorrect warning for blocks (#15504) (Hamir Mahal)
  • 6957fb9 linter/plugins: Do not allow access to Context#id in createOnce (#15489) (overlookmotel)
  • 7409630 linter/plugins: Allow access to cwd in createOnce in ESLint interop mode (#15488) (overlookmotel)
  • 732205e parser: Reject using / await using in a switch case / default clause (#15225) (sapphi-red)
  • a17ca32 linter/plugins: Replace Context class (#15448) (overlookmotel)
  • ecf2f7b language_server: Fail gracefully when tsgolint executable not found (#15436) (camc314)
  • 3c8d3a7 lang-server: Improve logging in failure case for tsgolint (#15299) (camc314)
  • ef71410 linter: Use jsx if source type is JS in fix debug assertion (#15434) (camc314)
  • e32bbf6 linter/no-var: Handle TypeScript declare keyword in fixer (#15426) (camc314)
  • 6565dbe linter/switch-case-braces: Skip comments when searching for : token (#15425) (camc314)
  • 85bd19a linter/prefer-class-fields: Insert value after type annotation in fixer (#15423) (camc314)
  • fde753e linter/plugins: Block access to context.settings in createOnce (#15394) (overlookmotel)
  • ddd9f9f linter/forward-ref-uses-ref: Dont suggest removing wrapper in invalid positions (#15388) (camc314)
  • dac2a9c linter/no-template-curly-in-string: Remove fixer (#15387) (camc314)
  • 989b8e3 linter/no-var: Only fix to const if the var has an initializer (#15385) (camc314)
  • cc403f5 linter/plugins: Return empty object for unimplemented parserServices (#15364) (magic-akari)

⚡ Performance

  • 25d577e language_server: Start tools in parallel (#15500) (Sysix)
  • 3c57291 linter/plugins: Optimize loops (#15449) (overlookmotel)
  • 3166233 linter/plugins: Remove Arcs (#15431) (overlookmotel)
  • 9de1322 linter/plugins: Lazily deserialize settings JSON (#15395) (overlookmotel)
  • 3049ec2 linter/plugins: Optimize deepFreezeSettings (#15392) (overlookmotel)
  • 444ebfd linter/plugins: Use single object for parserServices (#15378) (overlookmotel)

📚 Documentation

  • 97d2104 linter: Update comment in lint.rs about default value for tsconfig path (#15530) (Connor Shea)
  • 2c6bd9e linter: Always refer as "ES2015" instead of "ES6" (#15411) (sapphi-red)
  • a0c5203 linter/import/named: Update "ES7" comment in examples (#15410) (sapphi-red)
  • 3dc24b5 linter,minifier: Always refer as "ES Modules" instead of "ES6 Modules" (#15409) (sapphi-red)
  • 2ad77fb linter/no-this-before-super: Correct "Why is this bad?" section (#15408) (sapphi-red)
  • 57f0ce1 linter: Add backquotes where appropriate (#15407) (sapphi-red)

Oxfmt v0.12.0

... (truncated)

Changelog

Sourced from oxlint's changelog.

[1.75.0] - 2026-07-20

🚀 Features

  • dd18383 linter/node: Implement no-top-level-await rule (#24634) (Connor Shea)
  • 16a65f2 linter/react: Implement function-component-definition rule (#24471) (Cole Ellison)
  • 7f1f585 linter: Reuse jest/padding-around-test-blocks for vitest/padding-around-test-blocks (#24519) (Mikhail Baev)
  • 99978a8 linter/import/consistent-type-specifier-style: Support prefer-top-level-if-only-type-imports option (#24502) (camc314)

🐛 Bug Fixes

  • 8694167 linter/eslint/prefer-destructuring: Handle typed declarations (#24616) (camc314)

[1.74.0] - 2026-07-13

🚀 Features

  • 0433a83 linter/eslint/no-inner-declarations: Add namespaces option (#24044) (Boshen)

🐛 Bug Fixes

  • 8337835 linter: Error on ignorePatterns that cannot match files aoutside the config directory (#24341) (leaysgur)
  • 2ce5a33 linter: Resolve ignorePatterns relative to the config dir (#24339) (leaysgur)

⚡ Performance

  • 7f80cac linter/vue/prop-name-casing: Precompile ignoreProps regex pattern (#24413) (connorshea)
  • 6272051 linter/typescript/no-require-imports: Compile allow patterns once (#24417) (connorshea)
  • 33805b9 linter/jsdoc/require-param: Compile checkTypesPattern regex once (#24420) (connorshea)

[1.73.0] - 2026-07-06

🚀 Features

  • a2c97f3 linter/unicorn: Implement explicit-timer-delay rule (#23612) (Mikhail Baev)
  • 85735cb linter/unicorn: Implement no-confusing-array-with rule (#23638) (Shekhu☺️)
  • cb4fbb9 linter/eslint: Implement no-unreachable-loop rule (#23975) (Todor Andonov)
  • dc32112 linter/eslint/no-constant-binary-expression: Check relational comparisons (#24088) (camc314)
  • d963967 linter/unicorn/no-array-sort: Add allowAfterSpread option (#24043) (Boshen)
  • 0a75682 linter: Add per-rule timings for type-aware linting (#22488) (camchenry)
  • 743e222 linter/react: Add disallowedValues option for forbid-dom-props rule (#23970) (Mikhail Baev)

🐛 Bug Fixes

  • bdb51c7 linter/jest/prefer-ending-with-an-expect: Validate config patterns (#24122) (camc314)
  • 45d607d linter/react/forbid-component-props: Make allow/disallow lists optional in schema (#24024) (Boshen)

[1.72.0] - 2026-06-29

🚀 Features

... (truncated)

Commits
  • 83abe3b release(apps): oxlint v1.75.0 && oxfmt v0.60.0 (#24713)
  • 6ce51d3 chore(deps): update dependency oxlint-tsgolint to v7.0.2000 (#24763)
  • dd18383 feat(linter/node): implement no-top-level-await rule (#24634)
  • 8694167 fix(linter/eslint/prefer-destructuring): handle typed declarations (#24616)
  • e2e0f94 chore(docs): update sponsor section (#24588)
  • 16a65f2 feat(linter/react): implement function-component-definition rule (#24471)
  • 7f1f585 feat(linter): reuse jest/padding-around-test-blocks for `vitest/padding-aro...
  • 99978a8 feat(linter/import/consistent-type-specifier-style): support `prefer-top-leve...
  • 2d4e8d2 release(apps): oxlint v1.74.0 && oxfmt v0.59.0 (#24454)
  • 7f80cac perf(linter/vue/prop-name-casing): precompile ignoreProps regex pattern (#2...
  • Additional commits viewable in compare view

Updates oxlint-tsgolint from 0.23.0 to 0.25.0

Release notes

Sourced from oxlint-tsgolint's releases.

v0.25.0

What's Changed

Full Changelog: oxc-project/tsgolint@v0.24.0...v0.25.0

v0.24.0

What's Changed

... (truncated)

Commits
  • 1abf9a5 docs: update sponsor section
  • 6ee7c11 fix(no-unnecessary-type-assertion): preserve generic write casts (#1089)
  • e23cc83 fix(no-unnecessary-type-assertions): generic array false positive (#1045)
  • c3269c0 fix(no-unnecessary-type-assertion): avoid recursive unknown checks (#1086)
  • c214d5c chore: update Node.js to 26.5.0 (#1087)
  • 002b818 refactor: drop dead isFunction guards built on a bitwise ast.Kind mask (#1078)
  • d6a1cb2 refactor: remove dead code from rules (#1079)
  • 7823d59 refactor: miscellaneous code cleanup (#1077)
  • fcf43ff perf(no-unnecessary-type-arguments): skip signature resolution when node has ...
  • 6875914 chore(deps): update gomod (#1081)
  • Additional commits viewable in compare view

Updates stylelint from 17.13.0 to 17.14.1

Release notes

Sourced from stylelint's releases.

17.14.1

It fixes 4 bugs.

  • Fixed: quiet option suppresses report* warning reports (#9387) (@​ychampion).
  • Fixed: reported range of unknown rules (#9385) (@​ybiquitous).
  • Fixed: declaration-block-no-redundant-longhand-properties autofix producing invalid background shorthand when background-size is present (#9364) (@​sarathfrancis90).
  • Fixed: rule-empty-line-before false positives for shared-line comment...

    Description has been truncated

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file javascript Pull requests that update Javascript code labels Aug 1, 2026
@codecov-commenter

codecov-commenter commented Aug 5, 2026

Copy link
Copy Markdown

Bundle Report

Changes will decrease total bundle size by 101 bytes (-0.0%) ⬇️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
viper-frontend-esm 2.29MB -101 bytes (-0.0%) ⬇️

Affected Assets, Files, and Routes:

view changes for bundle: viper-frontend-esm

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/GenericError-*.js 8 bytes 531.12kB 0.0%
assets/schedule-*.js 100 bytes 54.95kB 0.18%
assets/schedule-*.css -169 bytes 9.8kB -1.7%
assets/ClinicalSchedulerHome-*.css -40 bytes 344 bytes -10.42%

Files in assets/schedule-*.js:

  • ./src/ClinicalScheduler/composables/use-optimistic-schedule-updates.ts → Total Size: 6.8kB

  • ./src/ClinicalScheduler/components/ScheduleView.vue → Total Size: 243 bytes

  • ./src/ClinicalScheduler/composables/use-bulk-deletion.ts → Total Size: 2.57kB

  • ./src/ClinicalScheduler/services/error-transformer.ts → Total Size: 5.62kB

  • ./src/ClinicalScheduler/utils/confirmation-dialog.ts → Total Size: 464 bytes

@codecov-commenter

codecov-commenter commented Aug 5, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 65.00000% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 50.11%. Comparing base (2242c14) to head (44b17e9).

Files with missing lines Patch % Lines
...icalScheduler/composables/use-permission-checks.ts 0.00% 3 Missing ⚠️
VueApp/src/composables/RequireLogin.ts 0.00% 2 Missing ⚠️
VueApp/src/composables/ViperFetch.ts 0.00% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #280      +/-   ##
==========================================
+ Coverage   50.09%   50.11%   +0.02%     
==========================================
  Files         998     1000       +2     
  Lines       58370    58424      +54     
  Branches     5858     5867       +9     
==========================================
+ Hits        29239    29280      +41     
- Misses      28228    28235       +7     
- Partials      903      909       +6     
Flag Coverage Δ
backend 49.25% <ø> (ø)
frontend 58.63% <65.00%> (+0.17%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

dependabot Bot and others added 12 commits August 5, 2026 00:33
Bumps the npm-root group with 8 updates:

| Package | From | To |
| --- | --- | --- |
| [@double-great/stylelint-a11y](https://github.com/double-great/stylelint-a11y) | `3.4.15` | `3.5.0` |
| [eslint](https://github.com/eslint/eslint) | `10.5.0` | `10.8.0` |
| [fallow](https://github.com/fallow-rs/fallow) | `2.102.0` | `3.6.0` |
| [jscpd](https://github.com/kucherenko/jscpd/tree/HEAD/rust/jscpd) | `5.0.10` | `5.0.12` |
| [oxfmt](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt) | `0.56.0` | `0.60.0` |
| [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) | `1.71.0` | `1.75.0` |
| [oxlint-tsgolint](https://github.com/oxc-project/tsgolint) | `0.23.0` | `0.25.0` |
| [stylelint](https://github.com/stylelint/stylelint) | `17.13.0` | `17.14.1` |


Updates `@double-great/stylelint-a11y` from 3.4.15 to 3.5.0
- [Release notes](https://github.com/double-great/stylelint-a11y/releases)
- [Changelog](https://github.com/double-great/stylelint-a11y/blob/main/CHANGELOG.md)
- [Commits](double-great/stylelint-a11y@v3.4.15...v3.5.0)

Updates `eslint` from 10.5.0 to 10.8.0
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](eslint/eslint@v10.5.0...v10.8.0)

Updates `fallow` from 2.102.0 to 3.6.0
- [Release notes](https://github.com/fallow-rs/fallow/releases)
- [Changelog](https://github.com/fallow-rs/fallow/blob/main/CHANGELOG.md)
- [Commits](fallow-rs/fallow@v2.102.0...v3.6.0)

Updates `jscpd` from 5.0.10 to 5.0.12
- [Release notes](https://github.com/kucherenko/jscpd/releases)
- [Changelog](https://github.com/kucherenko/jscpd/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kucherenko/jscpd/commits/v5.0.12/rust/jscpd)

Updates `oxfmt` from 0.56.0 to 0.60.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxfmt/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxfmt_v0.60.0/npm/oxfmt)

Updates `oxlint` from 1.71.0 to 1.75.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.75.0/npm/oxlint)

Updates `oxlint-tsgolint` from 0.23.0 to 0.25.0
- [Release notes](https://github.com/oxc-project/tsgolint/releases)
- [Commits](oxc-project/tsgolint@v0.23.0...v0.25.0)

Updates `stylelint` from 17.13.0 to 17.14.1
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](stylelint/stylelint@17.13.0...17.14.1)

---
updated-dependencies:
- dependency-name: "@double-great/stylelint-a11y"
  dependency-version: 3.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-root
- dependency-name: eslint
  dependency-version: 10.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-root
- dependency-name: fallow
  dependency-version: 3.6.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: npm-root
- dependency-name: jscpd
  dependency-version: 5.0.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-root
- dependency-name: oxfmt
  dependency-version: 0.60.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-root
- dependency-name: oxlint
  dependency-version: 1.75.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-root
- dependency-name: oxlint-tsgolint
  dependency-version: 0.25.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-root
- dependency-name: stylelint
  dependency-version: 17.14.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-root
...

Signed-off-by: dependabot[bot] <support@github.com>
- oxlint 1.75.0 raised its peer range to oxlint-tsgolint >=7.0.2001,
  but the grouped update left it at ^0.25.0, so npm install failed
  with ERESOLVE
- npm ci resolves straight from the lockfile and stayed green, so CI
  never surfaced the break
- $q.dialog() returns a DialogChainObject, not a Promise, so awaiting
  it resolved immediately instead of waiting for the user
- the catch block handling Cancel was therefore unreachable and the
  deletion ran regardless of which button was clicked
- gate on the onOk/onCancel callbacks so Cancel aborts the delete
- mocks $q.dialog as a chainable DialogChainObject so a regression back
  to awaiting it directly fails the cancel case
- verified the cancel test fails against the pre-fix code
- .assignment-item and its .text-body2 descendant in ScheduleView are
  applied by no template in the codebase
- .opacity-60 in ClinicalSchedulerHome appears only in its own
  declaration
- verified each against markup, dynamic class bindings, and Vue's
  scoped-style-applies-to-child-root behavior
- clears all 84 errors across 23 suites; the rule is enforced at error
  level but predates these files
- bare mocks take the (...args: unknown[]) => unknown form already used
  in clinician-selector-basic
- five Effort dialog suites read mock return values, so they keep an
  `any` return to preserve the inference bare vi.fn() gave them
- the structuredClone mock casts back to its generic signature
- drop 18 unreferenced, non-exported type declarations; services keep
  their own local copies, so nothing outside the files could reach them
- api-responses.ts reduces to ApiError, the only symbol anything imports
- quote 7 describe() titles that passed an identifier instead of a string
- convert 3 top-level test helpers to const arrows for no-implicit-globals
- takes VueApp from 27 lint errors to 1
- the guard could never be false, so the test always returned early on a
  tautological expect(true) and never reached its real assertion
- verified the assertion now fails when a V3 year is selected
- api-responses.ts held only ApiError once its unused DTOs were removed,
  so the filename no longer described the contents
- TypedApiResult already depended on ApiError; co-locating them removes
  the last import edge between the two files
- brace-expansion 5.0.7 -> 5.0.9 (GHSA-mh99-v99m-4gvg, GHSA-rgw5-rvv9-x895)
- fast-uri 3.1.4 -> 3.1.5 (GHSA-7p8r-x3mc-p8w7)
- minimatch 10.2.5 -> 10.2.6 raises the brace-expansion floor
- both fixes are newer than the .npmrc min-release-age=7 gate, so this used
  a one-off --min-release-age=0; maintainers, repos and licences verified
  unchanged against the superseded versions first
- npm audit now reports 0 vulnerabilities
- the default toSorted() is lexicographic, so the primary-evaluator
  warning listed weeks as "1, 10, 2"
- covers the remaining type-aware findings: void on deliberately
  ignored promises, ! over redundant assertions, and a typed catch
  parameter
- ViperFetch passed a non-string into handleError(error: string) and
  relied on implicit stringification; String() keeps that output
- keeps the type-aware rules that catch real defects (no-floating-promises,
  await-thenable, no-misused-promises, require-array-sort-compare)
- switches off the stylistic ones: prefer-readonly-parameter-types is
  unsatisfiable against vue-router callback signatures, and
  strict-boolean-expressions contradicts documented vue-router idioms
- no-unnecessary-type-assertion stays off pending an upstream
  false-positive regression
- the typescript plugin also brings ~1,550 syntactic findings the repo
  never opted into, so those rules are disabled explicitly
- no-void is off because no-floating-promises prescribes void as its fix
@rlorenzo

rlorenzo commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

This PR enables type-aware Oxlint rules, updates code and tests to satisfy the new TypeScript checks, removes unused types and styles, relocates ApiError in Clinical Scheduler, and changes bulk deletion to wait for explicit dialog confirmation.

Changes

Type-aware lint rollout

Layer / File(s) Summary
Lint toolchain and shared promise handling
.oxlintrc.json, package.json, VueApp/src/CMS/..., VueApp/src/Effort/..., VueApp/src/composables/*
Oxlint now uses the TypeScript ESLint plugin with type-aware rules. Shared composables and CMS or Effort code add void to intentionally unawaited promises, tighten injected or caught types, and adjust one local parameter annotation.
Clinical Scheduler type and lint compliance
VueApp/src/ClinicalScheduler/types/*, VueApp/src/ClinicalScheduler/services/error-transformer.ts, VueApp/src/ClinicalScheduler/composables/*, VueApp/src/ClinicalScheduler/__tests__/*, VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue
ApiError moves into types/api.ts and is exported there. Unused scheduler types are removed, some scheduler promises are explicitly ignored, related tests use typed mocks, and one unused style rule is removed.
Cross-module test and type cleanup
VueApp/src/CTS/..., VueApp/src/Effort/..., VueApp/src/Students/..., VueApp/src/components/__tests__/rich-text-editor.test.ts
CTS, Effort, Students, and component tests switch to explicit mock types or string describe labels. Unused CTS and Effort type definitions are removed, and one test gets a targeted Oxlint suppression comment.

Clinical Scheduler bulk deletion confirmation flow

Layer / File(s) Summary
Confirmation-driven bulk deletion
VueApp/src/ClinicalScheduler/composables/use-bulk-deletion.ts, VueApp/src/ClinicalScheduler/__tests__/use-bulk-deletion.test.ts
Bulk deletion now waits for dialog confirmation through callback-driven Promise handling and exits on cancel or dismiss. Notification week numbers sort numerically, and tests cover confirmation, cancellation, ordering, and skipConfirmation behavior.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

  • ucdavis/VIPER#241: Both PRs modify Clinical Scheduler home and permission-related tests and mocks.
  • ucdavis/VIPER#253: Both PRs modify VueApp/src/CMS/__tests__/use-url-filtered-table.test.ts and the use-url-filtered-table promise-handling path.
  • ucdavis/VIPER#155: Both PRs touch VueApp/src/CTS/__tests__/assessment-bubble.test.ts.

Suggested reviewers: rlorenzo, bniedzie, bsedwards

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 50.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the primary dependency update covered by the pull request.
Description check ✅ Passed The description directly explains the dependency updates, bug fixes, linting work, security patches, and verification results.
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.
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dependabot/npm_and_yarn/npm-root-8a8f6609e1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai 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.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@VueApp/src/ClinicalScheduler/composables/use-bulk-deletion.ts`:
- Around line 105-108: Remove the duplicated second numeric-sort comment in the
bulk-deletion logic, keeping one concise comment that explains why numeric
comparison is required for week numbers.

In `@VueApp/src/ClinicalScheduler/composables/use-permission-checks.ts`:
- Around line 25-33: Update goToClinicianView and goToRotationView, along with
the nearby navigation helper, to handle rejected router.push promises instead of
discarding them with void. Attach the application’s established rejection
handling or await and catch each navigation, preserving the existing destination
paths.
- Around line 25-33: Update goToClinicianView and goToRotationView, along with
the nearby ClinicalScheduler navigation helper, to preserve the configured
VITE_VIPER_HOME base when constructing navigation targets. Prefer the named
routes ClinicalSchedulerHome, ClinicianSchedule, and RotationSchedule so router
base handling remains intact.

In `@VueApp/src/Effort/__tests__/course-add-dialog.test.ts`:
- Line 12: Replace the `any` return types on the Effort service mock
declarations with checked types so the mock boundary stays type-safe: update
`mockCreateCourse` in
VueApp/src/Effort/__tests__/course-add-dialog.test.ts#L12-L12,
`mockUpdateCourse` and `mockUpdateCourseEnrollment` in
VueApp/src/Effort/__tests__/course-edit-dialog.test.ts#L12-L13,
`mockSearchBannerCourses` and `mockImportCourse` in
VueApp/src/Effort/__tests__/course-import-dialog.test.ts#L13-L14, all four
course relationship mocks in
VueApp/src/Effort/__tests__/course-link-dialog.test.ts#L12-L15, and
`mockGetPreview` plus `mockCommitHarvest` in
VueApp/src/Effort/__tests__/harvest-dialog.test.ts#L13-L14. Use the
corresponding service-specific return types where available, and use `unknown`
only for mocks that must remain generic.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: f0a85a2c-d4b8-4276-bfaf-9a3f0c70b075

📥 Commits

Reviewing files that changed from the base of the PR and between 2242c14 and 323e14b.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json, !**/package-lock.json
📒 Files selected for processing (55)
  • .oxlintrc.json
  • VueApp/src/CMS/__tests__/use-url-filtered-table.test.ts
  • VueApp/src/CMS/composables/use-url-filtered-table.ts
  • VueApp/src/CTS/__tests__/assessment-bubble.test.ts
  • VueApp/src/CTS/types/index.ts
  • VueApp/src/ClinicalScheduler/__tests__/clinical-scheduler-home-qa.test.ts
  • VueApp/src/ClinicalScheduler/__tests__/clinical-scheduler-home.test.ts
  • VueApp/src/ClinicalScheduler/__tests__/normalize-schedule-semesters.test.ts
  • VueApp/src/ClinicalScheduler/__tests__/normalize-week.test.ts
  • VueApp/src/ClinicalScheduler/__tests__/permissions-store-computed.test.ts
  • VueApp/src/ClinicalScheduler/__tests__/permissions-store-error-handling.test.ts
  • VueApp/src/ClinicalScheduler/__tests__/permissions-store-utilities.test.ts
  • VueApp/src/ClinicalScheduler/__tests__/rotation-selector-api.test.ts
  • VueApp/src/ClinicalScheduler/__tests__/rotation-selector.test.ts
  • VueApp/src/ClinicalScheduler/__tests__/test-utils.ts
  • VueApp/src/ClinicalScheduler/__tests__/use-bulk-deletion.test.ts
  • VueApp/src/ClinicalScheduler/__tests__/use-optimistic-schedule-updates.test.ts
  • VueApp/src/ClinicalScheduler/components/ScheduleView.vue
  • VueApp/src/ClinicalScheduler/composables/use-bulk-deletion.ts
  • VueApp/src/ClinicalScheduler/composables/use-optimistic-schedule-updates.ts
  • VueApp/src/ClinicalScheduler/composables/use-permission-checks.ts
  • VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue
  • VueApp/src/ClinicalScheduler/services/error-transformer.ts
  • VueApp/src/ClinicalScheduler/types/api-responses.ts
  • VueApp/src/ClinicalScheduler/types/api.ts
  • VueApp/src/ClinicalScheduler/types/index.ts
  • VueApp/src/Effort/__tests__/course-add-dialog.test.ts
  • VueApp/src/Effort/__tests__/course-edit-dialog.test.ts
  • VueApp/src/Effort/__tests__/course-import-dialog.test.ts
  • VueApp/src/Effort/__tests__/course-link-dialog.test.ts
  • VueApp/src/Effort/__tests__/course-service.test.ts
  • VueApp/src/Effort/__tests__/dashboard-service.test.ts
  • VueApp/src/Effort/__tests__/effort-records-table.test.ts
  • VueApp/src/Effort/__tests__/harvest-dialog.test.ts
  • VueApp/src/Effort/__tests__/instructor-add-dialog.test.ts
  • VueApp/src/Effort/__tests__/instructor-edit-dialog.test.ts
  • VueApp/src/Effort/__tests__/instructor-service.test.ts
  • VueApp/src/Effort/__tests__/report-service.test.ts
  • VueApp/src/Effort/__tests__/use-report-url-params.test.ts
  • VueApp/src/Effort/composables/use-report-url-params.ts
  • VueApp/src/Effort/services/harvest-service.ts
  • VueApp/src/Effort/types/harvest-types.ts
  • VueApp/src/Students/EmergencyContact/__tests__/completeness-icon.test.ts
  • VueApp/src/Students/EmergencyContact/__tests__/emergency-contact-service.test.ts
  • VueApp/src/Students/EmergencyContact/__tests__/use-emergency-contact.test.ts
  • VueApp/src/Students/__tests__/photo-gallery-ross-checkbox.test.ts
  • VueApp/src/Students/__tests__/photo-gallery-store.test.ts
  • VueApp/src/Students/__tests__/use-photo-gallery-groups.test.ts
  • VueApp/src/Students/__tests__/use-photo-gallery-options.test.ts
  • VueApp/src/components/__tests__/rich-text-editor.test.ts
  • VueApp/src/composables/QuasarTableUtilities.ts
  • VueApp/src/composables/RequireLogin.ts
  • VueApp/src/composables/ViperFetch.ts
  • VueApp/src/composables/use-route-focus.ts
  • package.json
💤 Files with no reviewable changes (8)
  • VueApp/src/Students/tests/photo-gallery-ross-checkbox.test.ts
  • VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue
  • VueApp/src/ClinicalScheduler/types/index.ts
  • VueApp/src/CTS/types/index.ts
  • VueApp/src/Effort/services/harvest-service.ts
  • VueApp/src/Effort/types/harvest-types.ts
  • VueApp/src/ClinicalScheduler/components/ScheduleView.vue
  • VueApp/src/ClinicalScheduler/types/api-responses.ts

Comment thread VueApp/src/ClinicalScheduler/composables/use-bulk-deletion.ts Outdated
Comment thread VueApp/src/ClinicalScheduler/composables/use-permission-checks.ts
Comment thread VueApp/src/Effort/__tests__/course-add-dialog.test.ts

Copilot AI 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.

Pull request overview

This PR expands a Dependabot dev-dependency bump into a broader “developer workflow health” update: it fixes local-install breakage from peer dependency drift, enables curated type-aware oxlint checks, addresses two functional bugs (bulk delete confirmation + week sorting), and pays down accumulated lint/test debt across the VueApp.

Changes:

  • Bump root devDependencies (eslint/stylelint/oxlint/oxfmt/fallow/jscpd) and resolve oxlintoxlint-tsgolint peer mismatch; lockfile updated and audit advisories remediated.
  • Enable curated type-aware oxlint rules and fix/annotate resulting findings (primarily “no floating promises” and test typing cleanup).
  • Fix Clinical Scheduler bulk delete confirmation gating and numeric week sorting; add regression tests.

Reviewed changes

Copilot reviewed 55 out of 56 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
VueApp/src/Students/EmergencyContact/tests/use-emergency-contact.test.ts Make describe() labels strings to satisfy lint rules.
VueApp/src/Students/EmergencyContact/tests/emergency-contact-service.test.ts Type vi.fn mocks to satisfy type-aware linting.
VueApp/src/Students/EmergencyContact/tests/completeness-icon.test.ts Adjust attribute typing for stricter TS/lint expectations.
VueApp/src/Students/tests/use-photo-gallery-options.test.ts Make describe() labels strings to satisfy lint rules.
VueApp/src/Students/tests/use-photo-gallery-groups.test.ts Make describe() labels strings to satisfy lint rules.
VueApp/src/Students/tests/photo-gallery-store.test.ts Update mocks + sync test to match non-async action shape.
VueApp/src/Students/tests/photo-gallery-ross-checkbox.test.ts Remove vacuous early-return assertion so real check runs.
VueApp/src/Effort/types/harvest-types.ts Remove unused local DTO type declarations.
VueApp/src/Effort/services/harvest-service.ts Remove unused local progress-event type.
VueApp/src/Effort/composables/use-report-url-params.ts Mark navigation promise intentionally un-awaited (void).
VueApp/src/Effort/tests/use-report-url-params.test.ts Type vi.fn mocks for stricter linting.
VueApp/src/Effort/tests/report-service.test.ts Type ViperFetch mocks for stricter linting.
VueApp/src/Effort/tests/instructor-service.test.ts Type ViperFetch mocks for stricter linting.
VueApp/src/Effort/tests/instructor-edit-dialog.test.ts Type service mocks for stricter linting.
VueApp/src/Effort/tests/instructor-add-dialog.test.ts Type service mocks for stricter linting.
VueApp/src/Effort/tests/harvest-dialog.test.ts Type service mocks for stricter linting.
VueApp/src/Effort/tests/effort-records-table.test.ts Convert helper functions to const arrows (lint alignment).
VueApp/src/Effort/tests/dashboard-service.test.ts Type ViperFetch mocks for stricter linting.
VueApp/src/Effort/tests/course-service.test.ts Type ViperFetch mocks for stricter linting.
VueApp/src/Effort/tests/course-link-dialog.test.ts Type service mocks for stricter linting.
VueApp/src/Effort/tests/course-import-dialog.test.ts Type service mocks for stricter linting.
VueApp/src/Effort/tests/course-edit-dialog.test.ts Type service mocks for stricter linting.
VueApp/src/Effort/tests/course-add-dialog.test.ts Type service mocks for stricter linting.
VueApp/src/CTS/types/index.ts Remove unused exported CTS types.
VueApp/src/CTS/tests/assessment-bubble.test.ts Make describe() labels strings to satisfy lint rules.
VueApp/src/composables/ViperFetch.ts Tighten catch typing + normalize non-Validation/Auth errors to string.
VueApp/src/composables/use-route-focus.ts Mark nextTick promise intentionally un-awaited (void).
VueApp/src/composables/RequireLogin.ts Use typed inject<string> and mark navigation promise un-awaited (void).
VueApp/src/composables/QuasarTableUtilities.ts Simplify nullable type for formatter callback parameter.
VueApp/src/components/tests/rich-text-editor.test.ts Add targeted oxlint suppression for dynamic delete in restore logic.
VueApp/src/CMS/composables/use-url-filtered-table.ts Mark reload promise intentionally un-awaited (void).
VueApp/src/CMS/tests/use-url-filtered-table.test.ts Update tests to match voided reload calls.
VueApp/src/ClinicalScheduler/types/index.ts Remove unused Clinical Scheduler types from barrel.
VueApp/src/ClinicalScheduler/types/api.ts Inline ApiError type and export it from the shared API types file.
VueApp/src/ClinicalScheduler/types/api-responses.ts Delete now-redundant API response type file (ApiError moved).
VueApp/src/ClinicalScheduler/services/error-transformer.ts Update ApiError import to new location.
VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue Remove unused CSS class.
VueApp/src/ClinicalScheduler/composables/use-permission-checks.ts Mark navigation promises intentionally un-awaited (void).
VueApp/src/ClinicalScheduler/composables/use-optimistic-schedule-updates.ts Mark async queue processor intentionally un-awaited (void).
VueApp/src/ClinicalScheduler/composables/use-bulk-deletion.ts Fix confirmation gating + numeric week sorting in warning message.
VueApp/src/ClinicalScheduler/components/ScheduleView.vue Remove unused CSS styles.
VueApp/src/ClinicalScheduler/tests/use-optimistic-schedule-updates.test.ts Tighten mock typing; adjust structuredClone mock typing.
VueApp/src/ClinicalScheduler/tests/use-bulk-deletion.test.ts Add regression coverage for confirmation gating + numeric sort.
VueApp/src/ClinicalScheduler/tests/test-utils.ts Tighten mock typing for localStorage + store helpers.
VueApp/src/ClinicalScheduler/tests/rotation-selector.test.ts Tighten RotationService mock typing.
VueApp/src/ClinicalScheduler/tests/rotation-selector-api.test.ts Tighten RotationService mock typing.
VueApp/src/ClinicalScheduler/tests/permissions-store-utilities.test.ts Tighten PermissionService mock typing.
VueApp/src/ClinicalScheduler/tests/permissions-store-error-handling.test.ts Tighten PermissionService mock typing.
VueApp/src/ClinicalScheduler/tests/permissions-store-computed.test.ts Tighten PermissionService mock typing.
VueApp/src/ClinicalScheduler/tests/normalize-week.test.ts Make describe() labels strings to satisfy lint rules.
VueApp/src/ClinicalScheduler/tests/normalize-schedule-semesters.test.ts Make describe() labels strings to satisfy lint rules.
VueApp/src/ClinicalScheduler/tests/clinical-scheduler-home.test.ts Tighten mock typing in error-handling tests.
VueApp/src/ClinicalScheduler/tests/clinical-scheduler-home-qa.test.ts Tighten mock typing; adjust rejected-navigation mock typing.
package.json Dev dependency bumps; align oxlint-tsgolint with new peer requirements.
package-lock.json Lockfile updates + advisory remediations reflected in resolved tree.
.oxlintrc.json Enable curated type-aware rules and explicitly disable undesired TS style rules.

Comment thread VueApp/src/ClinicalScheduler/composables/use-bulk-deletion.ts
- a programmatic close fires neither onOk nor onCancel, leaving the
  await pending forever and wedging the bulk-delete flow
- same omission in the parallel showConfirmationDialog helper
@rlorenzo
rlorenzo requested a review from Copilot August 5, 2026 17:11

Copilot AI 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.

Pull request overview

Copilot reviewed 56 out of 57 changed files in this pull request and generated no new comments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file javascript Pull requests that update Javascript code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants