GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Enhance concurrency, SSR, server runtime, and documentation updates by JosunLP · Pull Request #118 · bQuery/bQuery

Conversation

@JosunLP

@JosunLP JosunLP commented May 28, 2026 •
edited by coderabbitai Bot
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Collaborator

This pull request updates the release baseline to version 1.14.1 and introduces significant new features, enhancements, and fixes across the bQuery.js framework. The update includes major module expansions, new batteries-included features for media, plugins, devtools, and testing, as well as infrastructure improvements for documentation and CI workflows.

Release and API Documentation Updates:

  • Update release baseline to 1.14.1 in all guidance and metadata files, including .clinerules, .cursorrules, .github/copilot-instructions.md, and AGENT.md. [1] [2] [3] [4]
  • Add detailed release notes and API highlights for versions 1.14.0 and 1.14.1, describing new batteries-included modules, expanded APIs, and important fixes (such as improved reduced-motion detection in @bquery/bquery/motion). [1] [2]

Bug Fixes:

  • Fix @bquery/bquery/motion reduced-motion detection so prefersReducedMotion() and reducedMotionSignal() always use the correct MediaQueryList when window.matchMedia changes, preventing stale reads in tests and runtime swaps. [1] [2] [3]

CI and Workflow Improvements:

  • Add .github/workflows/docs.yml to build and upload the VitePress documentation site on pushes and pull requests.
  • Add .github/workflows/docs-link-check.yml using Lychee to check for broken links in documentation on push, PR, and a weekly schedule.
  • Pin oven-sh/setup-bun GitHub Action to a specific commit hash (v2.0.2) in all workflows for improved reproducibility and security. [1] [2] [3]

These changes ensure the framework's documentation, developer guidance, and CI/CD processes are up-to-date with the latest features and best practices.

Summary by CodeRabbit

Release Notes

  • Bug Fixes

    • Fixed motion module's reduced-motion detection to refresh cached media queries when window.matchMedia changes, preventing stale values in tests and runtimes.
  • Documentation

    • Added comprehensive concept guides covering architecture, security model, rendering modes, and reactivity patterns.
    • Added 15+ cookbook recipes with practical examples (forms, SSR, animations, real-time data).
    • Added end-to-end workflow tutorials.
    • Enhanced all module guides with API coverage, testing sections, and version history.

Review Change Stack

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@JosunLP JosunLP self-assigned this May 28, 2026
Copilot AI review requested due to automatic review settings May 28, 2026 16:46
Copilot AI reviewed May 28, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@coderabbitai

coderabbitai Bot commented May 28, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

Warning

Review limit reached

@JosunLP, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 3 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: c9ebf0b5-4c21-48b0-a9eb-c1d093268bb6

📥 Commits

Reviewing files that changed from the base of the PR and between 3ee6829 and c152590.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (10)
  • .github/workflows/docs-link-check.yml
  • .github/workflows/docs.yml
  • docs/cookbook/mock-fetch-test.md
  • docs/cookbook/pick-subpath-import.md
  • docs/guide/platform.md
  • docs/guide/testing.md
  • docs/guide/view.md
  • docs/release-notes/1.14.md
  • docs/release-notes/index.md
  • package.json
📝 Walkthrough

Walkthrough

This PR marks the 1.14.1 patch release for bQuery.js. It includes a targeted fix to @bquery/bquery/motion that refreshes cached reduced-motion MediaQueryList when window.matchMedia changes, plus a comprehensive documentation site expansion. The documentation overhaul introduces concept guides, 20+ cookbook recipes, end-to-end workflow tutorials, contributor guides, expanded module documentation, and updates the homepage with clearer positioning and install instructions. Supporting infrastructure includes GitHub Actions workflows for building and link-checking docs, a tooling script for auditing guide coverage, and configuration updates for the VitePress site.

Changes

Motion Fix and Test Coverage

Layer / File(s) Summary
Motion reduced-motion cache refresh and validation
src/motion/reduced-motion.ts, tests/motion.test.ts
src/motion/reduced-motion.ts adds resolveMatchMedia() and syncMediaQuerySubscription() to refresh cached MediaQueryList when window.matchMedia changes. tests/motion.test.ts extends test coverage to verify reducedMotionSignal stays aligned with prefersReducedMotion() across dynamic matchMedia swaps and error conditions.

Documentation Infrastructure and Guides

Layer / File(s) Summary
VitePress config, GitHub Actions workflows, documentation tooling
docs/.vitepress/config.ts, .github/workflows/docs*.yml, scripts/check-doc-exports.mjs, .gitignore, lychee.toml
VitePress configuration centralizes metadata and sidebar structure; new docs workflow builds and publishes docs artifacts on main push; docs-link-check workflow validates links weekly and on docs changes; check-doc-exports.mjs audits which exported runtime identifiers are mentioned in module guides.
Core concept documentation
docs/concepts/architecture.md, docs/concepts/reactivity-model.md, docs/concepts/rendering-modes.md, docs/concepts/runtimes.md, docs/concepts/bundle-and-tree-shaking.md, docs/concepts/security-model.md
Introduces 6 new concept pages covering dependency layering, signal reactivity primitives, CSR/SSR/streaming rendering modes, supported engines and runtime compatibility, tree-shaking and bundle strategy, and security defaults with Trusted Types.
Contributor documentation
docs/contributing/index.md, docs/contributing/architecture.md, docs/contributing/testing-strategy.md, docs/contributing/repo-layout.md, docs/contributing/release-process.md, docs/contributing/code-of-conduct.md, docs/contributing/security.md, docs/contributing/agent-guide.md
Adds 8 contributing pages documenting project architecture rules, testing conventions (bun:test, happy-dom), repo layout, release/versioning process, code-of-conduct, security policy, and AI-agent conventions.
Module guide expansions
docs/guide/a11y.md, docs/guide/components.md, docs/guide/concurrency.md, docs/guide/devtools.md, docs/guide/dnd.md, docs/guide/forms.md, docs/guide/i18n.md, docs/guide/media.md, docs/guide/motion.md, docs/guide/platform.md, docs/guide/plugin.md, docs/guide/reactive.md, docs/guide/router.md, docs/guide/security.md, docs/guide/server.md, docs/guide/ssr.md, docs/guide/store.md, docs/guide/storybook.md, docs/guide/testing.md, docs/guide/view.md
All 20 module guides expanded with consistent structure: "what's new in 1.14.0" callouts, pitfalls/gotchas, performance notes, testing guidance, related modules, and version history entries.
Cookbook recipes
docs/cookbook/index.md, docs/cookbook/*.md (20+ recipes)
Adds index page and 20+ cookbook recipes demonstrating patterns: reactive counters, debounced search, infinite scroll, pagination, polling, form validation, persisted stores, modals, toasts, animations, drag-and-drop, WebSocket, theme switching, RTL/i18n, SSE, and devtools tracing.
Full-stack workflow tutorials
docs/workflows/index.md, docs/workflows/backend-api.md, docs/workflows/forms-validation.md, docs/workflows/ssr-hydration.md, docs/workflows/streaming-ssr.md, docs/workflows/off-main-thread.md, docs/workflows/sortable-keyboard.md, docs/workflows/component-library.md, docs/workflows/todo-spa.md
Adds 8 end-to-end workflow tutorials with index: chat backend (REST + WebSocket), form validation with i18n/a11y, SSR across Node/Bun/Deno, streaming SSR with caching, off-main-thread concurrency, accessible sortable lists, component library packaging, and reactive Todo SPA.
Release notes, glossary, introduction
docs/release-notes/1.14.md, docs/release-notes/index.md, docs/glossary.md, docs/introduction.md
Adds 1.14.0 release notes with module graduation announcements and feature lists, release notes index, comprehensive glossary of framework terms, and introduction page explaining bQuery's positioning and design goals.
Homepage and public metadata
docs/index.md, docs/public/CNAME, docs/public/robots.txt
Refreshes homepage hero, feature cards, install instructions with package-manager snippets, two-minute examples (client + server), module diagram, and organizational sections; populates CNAME and robots.txt for bquery.js.org.

Version and Configuration Updates

Layer / File(s) Summary
Package version, AI guidance, and tooling config
package.json, .clinerules, .cursorrules, .github/copilot-instructions.md, AGENT.md, llms.txt, CHANGELOG.md, README.md, eslint.config.js, typedoc.json
Bumps package version to 1.14.1; updates AI guidance files with 1.14.1 highlights noting motion fix; expands CHANGELOG and README with 1.14.1 entry; adds docs:dev and docs:preview scripts; expands typedoc entryPoints to cover all public modules.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

The motion fix is straightforward (sync subscription logic with clear test coverage), but the PR's review scope is large due to extensive documentation additions. However, most changes are new documentation pages following consistent patterns and templates, making review tractable. Key areas requiring closer attention: the motion refactoring logic, VitePress config changes, the doc-exports auditing script, and GitHub Actions workflows.

Possibly related PRs

  • bQuery/bQuery#97: Refactors reduced-motion implementation in src/motion/reduced-motion.ts; this PR extends that fix to refresh cached MediaQueryList on window.matchMedia changes and adds comprehensive tests for signal alignment.

Suggested labels

motion, tests, docs, github, build, ssr, server


🐰 With recipes, concepts, and guides so divine,
We document the signals that align.
Motion now refreshes when windows change,
And docs explore the framework's full range!

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev
All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@github-actions github-actions Bot added reactive Changes to the reactive module motion Changes to the motion module router Changes to the router module view Changes to the view module docs Changes to the documentation tests Chenges to the tests build Changes to the build and meta files ci/cd Changes to the action workflows github Changes to the github meta data files i18n Changes to the i18n module a11y Changes to the a11y module dnd Changes to the dnd module media Changes to the media module plugin Changes to the plugin module devtools Changes to the devtools module testing Changes to the testing module ssr Changes to the ssr module storybook Changes to the storybook module concurrency server labels May 28, 2026
Copilot AI and others added 4 commits May 28, 2026 18:49
@JosunLP
feat(1.14): Media, Plugin, Devtools & Testing graduate to batteri…
e7fe680
…es-included tier (#112)

## Summary

- Promote `media`, `plugin`, `devtools`, and `testing` to a
batteries-included tier on par with the 1.13
`forms`/`motion`/`core/utils` expansion.
- Includes follow-up review and CI fixes so the shipped runtime
behavior, public API surface, documentation, and test helpers stay
aligned with the documented 1.14 feature set.

## Motivation

- This change completes the 1.14 batteries-included graduation for four
public modules and keeps the release surface consistent after review
feedback.
- The latest follow-up also fixes failing test workflow type checks
caused by test-only TypeScript assertions introduced during
review-driven updates.

## Changes included

- Add the 1.14 `media`, `plugin`, `devtools`, and `testing` public APIs,
exports, guides, and release metadata updates.
- Apply follow-up fixes across runtime behavior and docs so the shipped
API matches the documented surface.
- Update effect inspection, plugin/runtime behavior, media teardown
handling, and testing helpers based on review feedback.
- Fix test-only TypeScript assertions so CI `bun run test:types` passes
again without changing production behavior.

## Validation

- [ ] `bun run lint`
- [ ] `bun run build`
- [x] `bun test`
- [x] Additional focused checks (if applicable): `bun run test:types`,
targeted `bun test tests/media-extensions.test.ts
tests/plugin-extensions.test.ts`

## Checklist

- [x] I followed the contributing guidelines.
- [x] I added or updated tests where behavior changed.
- [x] I updated documentation when public behavior or developer workflow
changed.
- [x] I confirmed the change does not introduce security-sensitive
regressions.

## Notes for reviewers

- Most of the final follow-up commits are review-driven alignment fixes
rather than new feature expansion.
- The latest CI fix is test-only and keeps the PR scope unchanged while
restoring the failing test workflow.

---------

Co-authored-by: Jonas Pfalzgraf <[email protected]>
Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: JosunLP <[email protected]>
@JosunLP
Finalize 1.14.0 release: changelog, AI guidance, docs homepage, READM…
7394680
…E, security policy (#113)

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: JosunLP <[email protected]>
Co-authored-by: Jonas Pfalzgraf <[email protected]>
Signed-off-by: Jonas Pfalzgraf <[email protected]>
@JosunLP
Refresh reduced-motion media query cache when matchMedia changes and …
7aba54f
…sync 1.14.1 metadata (#117)

## Summary

- Fixes a regression where reduced-motion reads could return a stale
value after `window.matchMedia` changed during the test/runtime
lifecycle.
- Keeps motion reduced-motion reads and the reactive signal aligned with
the current browser media-query implementation instead of a cached
obsolete `MediaQueryList`.
- Updates the package version to `1.14.1` and syncs the related
release/meta guidance files so the shipped patch metadata matches the
fix.
- Cleans up the new regression test so the CI type-check step passes
without changing the runtime behavior under test.

## Motivation

- The original regression was caused by cached reduced-motion state
surviving a `matchMedia` replacement, which can happen in tests and any
environment that swaps the media-query implementation.
- Follow-up review feedback uncovered additional edge cases around
`matchMedia` failures, including re-subscription fallback and throwing
getters.
- The remaining failing workflow was isolated to `bun run test:types`,
where the new test cleanup used a `delete` expression that TypeScript
rejected.
- After landing the fix, the release metadata still reported `1.14.0`,
so the package version and AI-facing guidance files needed to be brought
in line with the `1.14.1` patch release.

## Changes included

- **Reduced-motion cache refresh**
- Track the `matchMedia` function used to create the active
reduced-motion subscription.
- Recreate the cached `MediaQueryList` when `window.matchMedia` changes
so direct reads stop using stale state.
- Return `false` and keep listeners/signals aligned when `matchMedia`
calls or property access throw.

- **Regression coverage**
- Add a motion test that reproduces the stale-cache path with an active
`reducedMotionSignal()` and verifies both the helper and signal refresh
to the new value.
- Add coverage for throwing `matchMedia` implementations, including a
throwing getter.
- Replace the test cleanup `delete` expression with
`Reflect.deleteProperty(...)` so the test remains valid under `bun run
test:types`.

- **Release metadata sync**
  - Bump `package.json` from `1.14.0` to `1.14.1`.
- Sync the `1.14.1` release baseline across `AGENT.md`, `llms.txt`,
`.github/copilot-instructions.md`, `.cursorrules`, `.clinerules`, and
the README release callout.

- **Release documentation**
- Add a `1.14.1` entry to `CHANGELOG.md` and update the releases index
to include the reduced-motion cache refresh fix.

- **Behavioral sketch**
  ```ts
  const sig = reducedMotionSignal(); // initial matchMedia -> false

window.matchMedia = () => ({ matches: true, media:
'(prefers-reduced-motion: reduce)' }) as MediaQueryList;

  prefersReducedMotion(); // now reads true
  sig.value; // now also reflects true
  ```

## Validation

- [x] `bun run lint`
- [x] `bun run build`
- [x] `bun test`
- [x] Additional focused checks (if applicable):
  - `bun test tests/motion.test.ts`
  - `bun run test:types`
  - `node scripts/check-ai-guidance.mjs`
  - `parallel_validation`

## Checklist

- [x] I followed the contributing guidelines.
- [x] I added or updated tests where behavior changed.
- [x] I updated documentation when public behavior or developer workflow
changed.
- [x] I confirmed the change does not introduce security-sensitive
regressions.

## Notes for reviewers

- Review the cache-refresh and guarded `matchMedia` resolution path in
`/src/motion/reduced-motion.ts`; that remains the only production
behavior change.
- The final follow-up on `/tests/motion.test.ts` is test-only and fixes
the CI type-check failure without changing runtime coverage.
- The metadata/docs work is limited to the `1.14.1` package version and
synced release/guidance files.

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
@JosunLP
Fix documentation examples and workflow notes to match implementation (…
013bec3
…#116)

## Summary

- Correct documentation examples and workflow/tooling notes so they
match the current bQuery APIs, SSR behavior, docs audit behavior, and
latest review feedback on guide wording.
- Readers and contributors can copy/paste the examples without type
errors and won’t be misled by inaccurate examples, cleanup guidance, or
workflow comments.

## Motivation

- This change is needed because review feedback on PR #116 identified
multiple documentation snippets and workflow notes that did not match
the current implementation, including follow-up fixes for SSR streaming
semantics, guide wording, and audit-script messaging.
- These fixes keep the docs aligned with the implementation so examples
remain copy/paste-safe and tooling output is easier to interpret.

## Changes included

- `docs/guide/ssr.md` — update the streaming &amp; caching section:
`flushBoundary()` takes no arguments, `createSSRCache({ ttlMs,
maxEntries, getKey })`, `createSSRMetrics()` is an imperative collector
with `snapshot()`, `createEdgeHandler(handler, options?)` wraps a
fetch-style handler; rewrite the example to combine `createSSRContext`,
`renderToResponse`, and `cache: { store, vary }`; replace the `{ key }`
pitfall with guidance on `cache.vary` + `createSSRCache({ getKey })`;
and clarify that `flushBoundary()` splits final output into chunks
rather than providing true progressive async streaming. Also update the
performance note to point readers to Suspense streaming for earlier
TTFB.
- `docs/workflows/streaming-ssr.md` — fix `flushBoundary()` usage, cache
option names (`ttlMs`/`maxEntries`), metrics description, server
pipeline (`createSSRContext({ request, metrics })` +
`renderToStream(template, data, { context })` for streaming;
`ctx.renderResponse` with `cache: { store, vary }` for response
caching), `_metrics` endpoint now reads `metrics.snapshot()`, edge
variant now wraps a fetch-style handler, and pitfalls reference
`cache.vary` / `createSSRCache({ getKey })` instead of a non-existent `{
key }` option. Also clarify that `renderToStream()` resolves the binding
context up front, use a real HTML comment in the template example, align
the workflow goal text with the actual metrics endpoint, and document
that flush boundaries control chunk boundaries rather than
time-to-first-byte.
- `docs/workflows/off-main-thread.md` — fix
`createReactiveTaskPool(handler, { concurrency, maxQueue })` signature,
drop `withTransferables`&#39; invalid second argument and the `{ html }`
wrapping, document the reactive signal mirrors (`pending$`, `size$`,
`state$`, `paused$`, `metrics$` with `{ completed, failed, avgRuntimeMs,
p95RuntimeMs }`), correct `createSharedBuffer(byteLength)` to take a
number, remove the `shared` field from the `HighlightInput` call site,
and update the summary bullets to reference numeric
`runOptions.priority` and `{ concurrency, maxQueue }`.
- `docs/index.md` — rewrite the “Two-minute example — server” snippet to
use `ctx.renderResponse(template, data)` with an awaited
`app.listen(...)`.
- `docs/concepts/rendering-modes.md` — rewrite the SSR example to use
`ctx.renderResponse(template, data)` with `await app.listen(...)`;
rewrite the Streaming SSR example to use a template string with
`flushBoundary()` markers passed to `ctx.renderStream(template, data)`;
drop references to non-existent `serveStatic` / `noHydrate` options in
the hydration section; and clarify that `renderToStream()` chunks the
final HTML stream while `renderToStreamSuspense()` + `defer()` handle
true progressive/out-of-order streaming.
- `docs/workflows/todo-spa.md` — fix the `bq-for` example so
toggle/remove handlers use `t.id` instead of `t.value.id`.
- `docs/cookbook/trace-signal.md` — enable devtools in the recipe before
calling `trackSignal()` so the example actually emits trace and timeline
entries.
- `scripts/check-doc-exports.mjs` — keep fenced code contents in the doc
corpus, correct the header comment so it no longer claims the default
mode is used in CI, and update the final status messaging so
informational/strict output accurately distinguishes a clean run from
coverage gaps and audit errors.
- `.github/workflows/docs-link-check.yml` — clarify the workflow comment
so it matches the actual informational `fail: false` behavior instead of
implying link failures are blocking.
- `docs/guide/server.md` — fix the streaming example so `ctx.stream()`
receives a `ReadableStream` and enqueues encoded byte chunks instead of
strings.
- `docs/workflows/index.md` — correct the SSR hydration workflow summary
to reference SSR plus runtime adapters instead of the
`@bquery/bquery/server` module.
- `docs/guide/store.md` — replace a non-existent `persist({ keys: [...]
})` helper reference with accurate persisted-store/plugin guidance.
- `docs/workflows/forms-validation.md` — update the sign-up workflow to
use the current forms API (`initialValue`, validator arrays,
`validationStrategy: &#39;onChange&#39;`, `handleSubmit()`, per-field
`error` signals, and `form.errors` signal reads) and reword locale-aware
validation guidance so translations come from calling `t()` at
validation time.
- `docs/cookbook/login-form.md` — update the login form recipe to use
the current forms API (`initialValue`, validator arrays, `minLength`,
`validationStrategy: &#39;onChange&#39;`, `handleSubmit()`, and field
`error` signals).
- `docs/guide/i18n.md` — clarify that `t()` is reactive inside view
bindings/effects because it reads the locale signal, while `tc()` is
useful when a reusable computed translation signal is needed.
- `docs/guide/view.md` — correct cleanup guidance to use
`View.destroy()` for `mount()` results, and fix testing guidance so
`mount()` is imported from `@bquery/bquery/view` while `screen`,
`within()`, `fireEvent.*`, and `tick()` come from
`@bquery/bquery/testing`.

## Validation

- [x] `bun run lint`
- [x] `bun run build`
- [ ] `bun test`
- [x] Additional focused checks (if applicable): `bun run
check:doc-exports`; `bun run docs:build`; final review via parallel
validation (Code Review clean, CodeQL clean/skipped on unchanged delta)

## Checklist

- [ ] I followed the contributing guidelines.
- [ ] I added or updated tests where behavior changed.
- [x] I updated documentation when public behavior or developer workflow
changed.
- [x] I confirmed the change does not introduce security-sensitive
regressions.

## Notes for reviewers

- The PR remains documentation/tooling focused; public runtime APIs are
unchanged.
- The latest follow-up fixes also correct guide wording around i18n
reactivity, view cleanup/testing imports, and SSR performance
expectations.
- `bun test` still has a pre-existing unrelated failure in
`tests/motion.test.ts`.
- `scripts/check-doc-exports.mjs` is still a soft, informational audit
unless run with `--strict`; existing documentation coverage gaps remain
informational and are not expanded by this PR.

---------

Co-authored-by: copilot-swe-agent[bot] <[email protected]>
Co-authored-by: JosunLP <[email protected]>
Co-authored-by: Jonas Pfalzgraf <[email protected]>
@JosunLP
JosunLP force-pushed the dev branch from 4439706 to 013bec3 Compare May 28, 2026 16:51
@JosunLP JosunLP removed the reactive Changes to the reactive module label May 28, 2026
@JosunLP JosunLP removed a11y Changes to the a11y module dnd Changes to the dnd module media Changes to the media module plugin Changes to the plugin module devtools Changes to the devtools module testing Changes to the testing module ssr Changes to the ssr module storybook Changes to the storybook module concurrency server labels May 28, 2026
@JosunLP
JosunLP requested a review from Copilot May 28, 2026 16:59
Copilot started reviewing on behalf of JosunLP May 28, 2026 17:00
View session
Copilot AI reviewed May 28, 2026
View reviewed changes

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

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 89 out of 90 changed files in this pull request and generated 2 comments.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread docs/guide/server.md Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread docs/guide/server.md Resolved

Uh oh!

There was an error while loading. Please reload this page.

Copilot started work on behalf of JosunLP May 28, 2026 17:08
View session
coderabbitai[bot]
coderabbitai Bot reviewed May 28, 2026
View reviewed changes

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Actionable comments posted: 7

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

🟡 Minor comments (16)
docs/contributing/repo-layout.md-7-31 (1)

7-31: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Label all fenced blocks with a language.

Lines 7, 37, 70, and 87 use unlabeled fences, which triggers MD040 repeatedly.

Suggested fix
-```
+```text
 bQuery/
 ...

```diff
-```
+```text
 src/
 ...

```diff
-```
+```text
 docs/
 ...

```diff
-```
+```text
 examples/
 ...
</details>
As per coding guidelines, "Run bun run lint before committing; follow ESLint flat config with `@typescript-eslint/recommended` and Prettier formatting."


Also applies to: 37-62, 70-83, 87-94

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @docs/contributing/repo-layout.md around lines 7 - 31, The Markdown file
contains unlabeled fenced code blocks showing directory trees (the bQuery/ ASCII
tree blocks and the similar src/, docs/, examples/ snippets) which triggers
MD040; update each of those backtick-fenced blocks to include a language label
(e.g., ```text) so the linter recognizes them, then reformat the file with the
repo's formatter and run the lint task (bun run lint) to ensure it complies with
the ESLint flat config and Prettier rules before committing.


</details>

</blockquote></details>
<details>
<summary>docs/contributing/architecture.md-7-9 (1)</summary><blockquote>

`7-9`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_

**Add a language tag to the fenced block.**

Line 7 uses an unlabeled fenced block, which triggers MD040 and can create docs-lint noise.

 

<details>
<summary>Suggested fix</summary>

```diff
-```
+```text
 view · store · router · forms · …  →  reactive  →  core
 ```
```
</details>
As per coding guidelines, "Run bun run lint before committing; follow ESLint flat config with `@typescript-eslint/recommended` and Prettier formatting."

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @docs/contributing/architecture.md around lines 7 - 9, The fenced code block
containing "view · store · router · forms · … → reactive → core" is
unlabeled and triggers MD040; update the block by adding a language tag (e.g.,
use ```text) to the opening fence so the block becomes a labeled fenced code
block, then run the docs linter (bun run lint) / Prettier to ensure formatting
follows the repo's ESLint/Prettier rules.


</details>

</blockquote></details>
<details>
<summary>docs/contributing/release-process.md-52-57 (1)</summary><blockquote>

`52-57`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_

**Specify the language for the commit-message code fence.**

Line 52 is an unlabeled fence and triggers MD040.

 

<details>
<summary>Suggested fix</summary>

```diff
-```
+```text
 feat(reactive): add useEventSource heartbeat option
 fix(server): validate cookie attributes for header-safe characters
 docs(ssr): document flushBoundary
 test(forms): cover disabled field early-return path
 ```
```
</details>
As per coding guidelines, "Run bun run lint before committing; follow ESLint flat config with `@typescript-eslint/recommended` and Prettier formatting."

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @docs/contributing/release-process.md around lines 52 - 57, The markdown code
fence containing the commit messages is missing a language identifier (triggers
MD040); update the unlabeled triple-backtick fence around the commit list in the
release-process document to use a language tag (e.g. text) so the fence becomes text and then close normally, ensuring the block exactly matches the
suggested fix; target the commit-message/code-fence block that contains lines
like "feat(reactive): add useEventSource heartbeat option" and "fix(server):
validate cookie attributes..." and run the repo linter (bun run lint) afterward
to confirm MD040 is resolved.


</details>

</blockquote></details>
<details>
<summary>docs/index.md-79-102 (1)</summary><blockquote>

`79-102`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_

**Add a language identifier to the fenced module tree block.**

This code fence is missing a language tag, which trips markdownlint (MD040).
 

<details>
<summary>Suggested fix</summary>

```diff
-```
+```text
 `@bquery/bquery`
 ├── core ─────────── selectors, traversal, events, utilities
 ...
 └── server ───────── dependency-free routing + WebSockets
 ```
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @docs/index.md around lines 79 - 102, The fenced module tree block starting
with "@bquery/bquery" in docs/index.md is missing a language identifier and
triggers markdownlint MD040; update the opening triple-backtick for that block
to include a language tag (e.g., ```text) so the tree block is treated as plain
text and linting passes, leaving the content (the lines listing core, reactive,
concurrency, etc.) unchanged.


</details>

</blockquote></details>
<details>
<summary>README.md-19-20 (1)</summary><blockquote>

`19-20`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_

**Fix blockquote spacing to satisfy markdownlint (MD028).**

There is a blank blockquote line here, which triggers `no-blanks-blockquote`. Keep the “New in 1.14.1” note as a single uninterrupted blockquote line.

<details>
<summary>Suggested fix</summary>

```diff
 > **New in 1.14.1:** `@bquery/bquery/motion` refreshes its cached reduced-motion media query whenever `window.matchMedia` changes, so `prefersReducedMotion()` and `reducedMotionSignal()` stay aligned with the active runtime implementation instead of returning stale values.
- 
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@README.md` around lines 19 - 20, The blockquote that begins with "**New in
1.14.1:** `@bquery/bquery/motion` ..." contains an empty blank line which
triggers markdownlint MD028; remove the blank line so the note is one
uninterrupted blockquote line (i.e., collapse the separate ">" and the content
into a single "> **New in 1.14.1:** `@bquery/bquery/motion` refreshes..." block)
to satisfy the no-blanks-blockquote rule.
```

</details>

</blockquote></details>
<details>
<summary>docs/concepts/architecture.md-9-9 (1)</summary><blockquote>

`9-9`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_

**Add explicit language identifiers to fenced blocks.**

Line 9 and Line 68 use unlabeled fences, which triggers MD040 (`fenced-code-language`) and can cause docs-lint noise.

<details>
<summary>✅ Minimal fix</summary>

```diff
-```
+```text
             view · store · router · forms · …  (high-level)
                             │
                             ▼
                         reactive                (mid-level)
                             │
                             ▼
                           core                  (low-level)
 ```

```diff
-```
+```text
  ┌────────┐  user event  ┌─────────────┐  signal write  ┌──────────┐
  │  DOM   │ ───────────▶ │  handler/   │ ─────────────▶ │  signal  │
  │ event  │              │  store      │                │ / store  │
  └────────┘              └─────────────┘                └────┬─────┘
                                                              │ notify
                                                              ▼
                                                        ┌──────────┐
                                                        │ effects, │
                                                        │ computeds│
                                                        └────┬─────┘
                                                             │ update
                                                             ▼
                                                        ┌──────────┐
                                                        │   DOM    │
                                                        │ bindings │
                                                        └──────────┘
 ```
</details>





Also applies to: 68-68

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @docs/concepts/architecture.md at line 9, The two unlabeled fenced code
blocks that contain the ASCII diagrams should include an explicit language
identifier (e.g., ```text) to satisfy MD040; update the unlabeled
triple-backtick fences surrounding the ASCII diagrams (the fenced blocks that
show the "view · store · router · forms · …" diagram and the user-event →
handler/store → signal/store workflow diagram) by changing the opening backticks
to use a language tag like "text".


</details>

</blockquote></details>
<details>
<summary>docs/guide/api-core.md-407-407 (1)</summary><blockquote>

`407-407`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_

**Fix API name mismatch in pitfalls list.**

`cloneDeep` is referenced here, but this guide’s utility list documents `clone`. Please align the name to avoid confusion.

<details>
<summary>🤖 Prompt for AI Agents</summary>

```
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/guide/api-core.md` at line 407, The pitfalls line currently mentions the
wrong utility name: replace the reference to cloneDeep with the documented
utility name clone so the sentence reads that utilities like deepEqual, clone,
and freeze operate by structure (symbols and non-enumerable props skipped);
update the text that references cloneDeep to clone wherever the guide’s utility
list uses clone to keep names consistent with the API (check occurrences around
the pitfalls list and any matching references to cloneDeep).
```

</details>

</blockquote></details>
<details>
<summary>docs/concepts/bundle-and-tree-shaking.md-29-33 (1)</summary><blockquote>

`29-33`: _⚠️ Potential issue_ | _🟡 Minor_ | _⚡ Quick win_

**Add a language tag to the fenced code block.**

This fence should be annotated (e.g., `text`) to satisfy markdown linting and keep formatting consistent.

<details>
<summary>Suggested fix</summary>

```diff
-```
+```text
 core · reactive · concurrency · component · motion · security · platform ·
 router · store · view · storybook · forms · i18n · a11y · dnd · media ·
 plugin · devtools · testing · ssr · server
 ```
```
</details>

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @docs/concepts/bundle-and-tree-shaking.md around lines 29 - 33, Update the
fenced code block that currently contains the list starting with "core ·
reactive · concurrency · component · motion · security · platform ·" to include
a language tag (e.g., text) after the opening ``` so the block becomes

closing ``` remains and no other content changes.
docs/guide/media.md-880-880 (1)

880-880: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Narrow this claim to avoid over-promising API support.

This line says all composables accept { signal: AbortSignal }, but the page earlier scopes that guarantee to the newly added composables in 1.14.0. Tightening wording here avoids misleading users on legacy APIs.

Suggested doc tweak
-- All composables accept `{ signal: AbortSignal }` (1.14.0) for auto-teardown — prefer it over manual `destroy()`.
+- New 1.14.0 composables accept `{ signal: AbortSignal }` for auto-teardown — prefer it where supported over manual `destroy()`.
🤖 Prompt for 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.

In `@docs/guide/media.md` at line 880, The statement over-generalizes support for
`{ signal: AbortSignal }`; update the sentence to scope the guarantee to the new
composables introduced in 1.14.0 (e.g., "The newly added composables in 1.14.0
accept `{ signal: AbortSignal }` for auto-teardown — prefer it over manual
`destroy()`.") so readers don't assume legacy composables accept the option.
docs/guide/reactive.md-1164-1164 (1)

1164-1164: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

EffectScope teardown method name is inconsistent.

This line uses scope.dispose(), but the same page documents EffectScope.stop() as the teardown API. Please align this to avoid copy/paste test failures.

🤖 Prompt for 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.

In `@docs/guide/reactive.md` at line 1164, The doc uses scope.dispose() but the
API is EffectScope.stop(); update the guidance to use EffectScope.stop() (e.g.,
wrap setup in effectScope() and assert subscribers drop after scope.stop()) so
the symbols effectScope(), scope.stop(), and EffectScope.stop are consistent
with the documented API.
docs/guide/router.md-497-497 (1)

497-497: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

beforeResolve is still navigation-blocking.

The guidance “Use beforeResolve for non-blocking work” is misleading—beforeResolve runs in the navigation pipeline too. Recommend rewording toward afterEach (or out-of-band side effects) for truly non-blocking work.

🤖 Prompt for 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.

In `@docs/guide/router.md` at line 497, Update the sentence about navigation
guards to clarify that beforeResolve still runs in the navigation pipeline and
can block navigation; replace the phrase "Use `beforeResolve` for non-blocking
work" with guidance to use `afterEach` or perform out-of-band side effects for
truly non-blocking tasks, and ensure you mention `guards`, `beforeResolve`, and
`afterEach` so readers know the correct alternatives.
docs/guide/plugin.md-419-421 (1)

419-421: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use plugin teardown API here, not store teardown API.

In this module’s testing section, recommending store clearPlugins() is misleading. For plugin registry cleanup, point to resetPlugins() from @bquery/bquery/plugin to keep teardown guidance consistent.

🤖 Prompt for 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.

In `@docs/guide/plugin.md` around lines 419 - 421, The docs incorrectly recommend
using the store API clearPlugins() for plugin test teardown; update the guidance
to use the plugin registry teardown API resetPlugins() from
`@bquery/bquery/plugin` instead. Replace the mention of clearPlugins() with
resetPlugins() in the testing section and note that getInstalledPlugins({
withMetadata: true }) and getPluginInfo(name) should be paired with
resetPlugins() in afterEach to ensure proper plugin registry cleanup. Ensure the
text references the resetPlugins() symbol explicitly and removes or clarifies
any implication that clearPlugins() is the correct teardown for plugins.
docs/guide/server.md-422-422 (1)

422-422: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Sanitization bypass option is inconsistent in this page.

This line references { sanitize: false }, but earlier the guide instructs { trusted: true }. Please unify to the actual API option to avoid unsafe/copy-paste mistakes.

🤖 Prompt for 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.

In `@docs/guide/server.md` at line 422, The docs mention two different options for
disabling HTML sanitization on ctx.html(): change the inconsistent `{ sanitize:
false }` usage to the actual API option `{ trusted: true }` (or vice‑versa to
match the library's real API) so the page consistently uses the same flag;
update every occurrence referencing ctx.html(...) options to the single correct
option name and ensure the explanatory note warns to only use it with fully
trusted content.
docs/cookbook/ssr-deploy.md-14-14 (1)

14-14: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Fix runtime count mismatch in the deployment note.

The table includes four targets (Node, Bun, Deno, Edge), but this line says “all three runtimes.” Please align wording to avoid confusion.

🤖 Prompt for 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.

In `@docs/cookbook/ssr-deploy.md` at line 14, Update the sentence that reads "The
cross-runtime CI matrix (`.github/workflows/ssr-cross-runtime.yml`) guards the
public surface across all three runtimes." to correctly reflect the table's four
targets by changing "all three runtimes" to "all four runtimes" (or "all listed
runtimes"); locate the exact string in docs/cookbook/ssr-deploy.md and replace
it so the wording matches the Node, Bun, Deno, Edge targets.
docs/cookbook/spring-drag.md-11-11 (1)

11-11: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Avoid unsafe non-null casting in the cookbook snippet.

document.querySelector('.draggable') as HTMLElement can throw later if the element is absent. Prefer an explicit null guard so the example is safe to copy-paste.

Suggested doc-snippet fix
-const box = document.querySelector('.draggable') as HTMLElement;
+const box = document.querySelector<HTMLElement>('.draggable');
+if (!box) throw new Error('Missing .draggable element');
🤖 Prompt for 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.

In `@docs/cookbook/spring-drag.md` at line 11, The snippet unsafely casts
document.querySelector('.draggable') as HTMLElement (variable "box"); change it
to use a typed query and an explicit null guard—query with
document.querySelector<HTMLElement>('.draggable') (or keep untyped), then check
if box is null and handle (early return or throw) before using it so the example
is safe to copy-paste.
docs/cookbook/theme-switcher.md-20-20 (1)

20-20: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Use a safe element lookup in the toggle handler snippet.

document.querySelector('#toggle')! can crash if the element is missing. Please show a guarded lookup pattern in this recipe.

Suggested doc-snippet fix
-document.querySelector('`#toggle`')!.addEventListener('click', () => {
-  stored.value = theme() === 'dark' ? 'light' : 'dark';
-});
+const toggle = document.querySelector<HTMLButtonElement>('`#toggle`');
+if (toggle) {
+  toggle.addEventListener('click', () => {
+    stored.value = theme() === 'dark' ? 'light' : 'dark';
+  });
+}
🤖 Prompt for 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.

In `@docs/cookbook/theme-switcher.md` at line 20, The snippet uses
document.querySelector('`#toggle`')! which can throw if the element is missing;
change it to perform a safe lookup by assigning the result of
document.querySelector('`#toggle`') to a const (e.g., const toggle =
document.querySelector('`#toggle`')), check for null (if (!toggle) return or
handle accordingly), then call toggle.addEventListener('click', ...) — or use
optional chaining toggle?.addEventListener — and, if needed, narrow the type to
the appropriate HTMLElement before using element-specific properties.
🧹 Nitpick comments (7)
docs/contributing/testing-strategy.md (1)

22-41: ⚡ Quick win

Avoid demonstrating raw innerHTML assignment in contributor examples.

Line 29 currently models a direct HTML write. Even in test snippets, this can conflict with the project’s security-by-default messaging; prefer DOM construction APIs in docs examples.

Suggested fix
-    root.innerHTML = '<button id="b">0</button>';
+    const button = document.createElement('button');
+    button.id = 'b';
+    button.textContent = '0';
+    root.appendChild(button);
As per coding guidelines, "Security: ALL DOM HTML writes MUST use `sanitizeHtml()` from `src/security/sanitize.ts`" and "Never write `innerHTML = untrustedInput`."
🤖 Prompt for 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.

In `@docs/contributing/testing-strategy.md` around lines 22 - 41, The example
should avoid direct innerHTML assignment; replace root.innerHTML = '<button
id="b">0</button>' with safe DOM construction or a sanitized write: either
create a button via document.createElement('button'), set id and textContent
(e.g., const btn = document.createElement('button'); btn.id='b';
btn.textContent='0'; root.appendChild(btn)), or call sanitizeHtml(...) on the
string and use the sanitized result before assigning to root (import
sanitizeHtml from 'src/security/sanitize.ts'); update the test to reference the
constructed element (document.getElementById('b') or $('`#b`')) so signal, effect,
and $('`#b`') usage remains unchanged.
docs/.vitepress/config.ts (1)

3-5: ⚡ Quick win

Align constants with the repo camelCase rule.

SITE_URL and DESCRIPTION (Line 3 and Line 4) conflict with the TypeScript naming convention used in this repository for variables.

♻️ Suggested rename
-const SITE_URL = 'https://bquery.js.org';
-const DESCRIPTION =
+const siteUrl = 'https://bquery.js.org';
+const description =
   'Batteries-included TypeScript framework for the modern web — signals, SSR, Web Components, routing, and more — with a jQuery-inspired API and zero mandatory build step.';
...
-  description: DESCRIPTION,
+  description,
...
-    ['meta', { property: 'og:description', content: DESCRIPTION }],
-    ['meta', { property: 'og:url', content: SITE_URL }],
-    ['meta', { property: 'og:image', content: `${SITE_URL}/assets/bquerry-logo.svg` }],
+    ['meta', { property: 'og:description', content: description }],
+    ['meta', { property: 'og:url', content: siteUrl }],
+    ['meta', { property: 'og:image', content: `${siteUrl}/assets/bquerry-logo.svg` }],
...
-    ['meta', { name: 'twitter:description', content: DESCRIPTION }],
-    ['meta', { name: 'twitter:image', content: `${SITE_URL}/assets/bquerry-logo.svg` }],
+    ['meta', { name: 'twitter:description', content: description }],
+    ['meta', { name: 'twitter:image', content: `${siteUrl}/assets/bquerry-logo.svg` }],
...
-    hostname: SITE_URL,
+    hostname: siteUrl,

As per coding guidelines: **/*.ts: Keep file names kebab-case, classes PascalCase, and functions/variables camelCase.

Also applies to: 167-197

🤖 Prompt for 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.

In `@docs/.vitepress/config.ts` around lines 3 - 5, The file declares top-level
constants SITE_URL and DESCRIPTION in SCREAMING_SNAKE_CASE which violates the
repo's camelCase rule; rename them to siteUrl and description (and any similar
constants in the file around lines 167-197) and update every usage within this
config (e.g., where SITE_URL and DESCRIPTION are referenced) to the new
camelCase identifiers (preserve values and exports) so the names follow the
project's camelCase variable convention.
docs/guide/a11y.md (1)

676-695: ⚡ Quick win

Align the test snippet with the repo’s DOM-test setup pattern.

This example uses document.body.innerHTML fixture injection; your test guidelines prefer creating elements inline and removing them after assertions. Updating the snippet would keep docs consistent with project practice.

As per coding guidelines: “Create elements inline, test functionality, then call .remove() to clean up; use happy-dom via tests/setup.ts for DOM simulation”.

🤖 Prompt for 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.

In `@docs/guide/a11y.md` around lines 676 - 695, The test uses
document.body.innerHTML to inject a fixture; change it to create DOM elements
inline (e.g., createElement for main, h1, img, label, input), append the
container to document.body, call auditA11y() and assert on auditA11y().passed
and auditA11y().errors, then call .remove() on the container to clean up; locate
the snippet referencing auditA11y and document.body.innerHTML and replace with
element creation/append/remove flow so it matches the repo DOM-test setup
pattern.
docs/cookbook/notification-toast.md (1)

23-25: ⚡ Quick win

Use .peek() for one-time reduced-motion checks.

This snippet does a one-off signal read, so .peek() is the safer pattern for non-tracking access.

Suggested doc-snippet fix
-    if (!reducedMotion.value) {
+    if (!reducedMotion.peek()) {
       animate(this, { transform: ['translateY(20px)', 'translateY(0)'] }, { duration: 180 });
     }

As per coding guidelines: “Signal .value tracks dependencies → use .peek() to avoid tracking.”

🤖 Prompt for 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.

In `@docs/cookbook/notification-toast.md` around lines 23 - 25, The one-time
reduced-motion check uses reducedMotion.value which creates tracking; change the
non-tracking read to use reducedMotion.peek() instead (i.e., call
prefersReducedMotion() to get reducedMotion and use reducedMotion.peek() in the
if condition) so the animate(...) call remains untracked; refer to the
prefersReducedMotion() call, the reducedMotion signal, and the animate(this,
...) usage when making this small change.
docs/workflows/forms-validation.md (1)

117-132: ⚡ Quick win

Use named export in the locale example to match repo TS conventions.

This snippet currently uses a default export, which conflicts with your TypeScript convention and can cause copy-paste lint friction.

Suggested doc snippet update
- export default {
+ export const en = {
   email: { label: 'Email' },
   password: { label: 'Password' },
   plan: { label: 'Plan' },
   submit: 'Create account',
   submitting: 'Working…',
   errors: {
     required: 'This field is required.',
     email: 'Enter a valid email address.',
     password: { short: 'Use at least 8 characters.' },
     plan: 'Choose a plan.',
   },
 };

As per coding guidelines, "**/*.ts: Use named exports only; no default exports".

🤖 Prompt for 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.

In `@docs/workflows/forms-validation.md` around lines 117 - 132, The locale object
is exported as a default export but the repo requires named exports; change the
export to a named export (e.g., export const en = { email: {...}, password:
{...}, plan: {...}, submit: 'Create account', submitting: 'Working…', errors:
{...} }) and update any imports to use the named symbol (en) instead of the
default; update usages that import the locale to use the new named export to
avoid lint errors.
docs/workflows/streaming-ssr.md (1)

105-117: ⚡ Quick win

Prefer a named export in the edge handler example.

To keep docs aligned with your TS export conventions, avoid export default in this snippet.

Suggested doc snippet update
 import { createEdgeHandler, createSSRContext, renderToResponse } from '`@bquery/bquery/ssr`';
 
-export default createEdgeHandler(async (request) => {
+export const handleRequest = createEdgeHandler(async (request) => {
   const context = createSSRContext({ request, metrics });
   const data = {
     /* …resolve data from the request… */
   };
   return renderToResponse(compiled, data, {
     context,
     cache: { store: cache, vary: ['accept-language'] },
   });
 });

As per coding guidelines, "**/*.ts: Use named exports only; no default exports".

🤖 Prompt for 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.

In `@docs/workflows/streaming-ssr.md` around lines 105 - 117, Replace the default
export with a named export in the edge handler example: instead of using "export
default createEdgeHandler(...)" declare a named export (e.g., "export const
handler = createEdgeHandler(...)") so the snippet follows the project's TS
convention; keep the existing use of createEdgeHandler, createSSRContext,
renderToResponse, compiled, cache and context variables intact and only change
the export form to a named export.
src/motion/reduced-motion.ts (1)

32-129: ⚡ Quick win

Add @internal JSDoc to the newly introduced internal helpers.

The new non-exported helpers should be annotated as internal to keep API intent explicit and guideline-compliant.

♻️ Suggested doc annotation pattern
+/**
+ * Safely resolves `window.matchMedia` and a bound callable.
+ * `@internal`
+ */
 const resolveMatchMedia = (): {
   readonly source: (query: string) => MediaQueryList;
   readonly call: (query: string) => MediaQueryList;
 } | null => {

+/**
+ * Re-syncs media-query subscription when the `matchMedia` source changes.
+ * `@internal`
+ */
 const syncMediaQuerySubscription = (

+/**
+ * Ensures the active reduced-motion media-query subscription exists.
+ * `@internal`
+ */
 const ensureMediaQuerySubscription = (

+/**
+ * Tears down the active reduced-motion media-query subscription.
+ * `@internal`
+ */
 const teardownMediaQuerySubscription = (): void => {

As per coding guidelines, src/**/*.ts: Mark non-public helpers with @internal JSDoc comment.

🤖 Prompt for 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.

In `@src/motion/reduced-motion.ts` around lines 32 - 129, The new non-exported
helper functions (resolveMatchMedia, syncMediaQuerySubscription,
evaluateCurrent, dispatchIfChanged, ensureMediaQuerySubscription,
teardownMediaQuerySubscription) are missing `@internal` JSDoc annotations; add a
brief /** `@internal` */ JSDoc comment above each of these function declarations
to mark them as internal per the src/**/*.ts guidelines so the API intent is
explicit.
🤖 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 @.github/workflows/docs-link-check.yml:
- Around line 36-48: Update the "Checkout repository" step to set
persist-credentials: false and replace uses: actions/checkout@v6 with the
repository commit SHA; likewise replace uses: lycheeverse/lychee-action@v2 in
the "Run lychee" step (id: lychee) with its commit SHA; finally, tighten the
workflow permissions by removing or narrowing
jobs.link-check.permissions.issues: write to only what the lychee step actually
needs (e.g., read-only or omit write if unused). Ensure the commit SHAs are the
exact full SHAs for each action and keep step ids/names (Checkout repository,
id: lychee) unchanged so the workflow logic remains intact.

In @.github/workflows/docs.yml:
- Around line 38-55: Update the GitHub Actions steps to pin the action
references to full commit SHAs and disable credential persistence for checkout:
replace the short refs "uses: actions/checkout@v6" and "uses:
actions/upload-artifact@v4" with their corresponding full commit SHA pins, and
add a "with: persist-credentials: false" block under the checkout step (i.e.,
next to the existing "uses: actions/checkout..." line) so the checkout action
becomes pinned and does not persist credentials.

In `@docs/cookbook/mock-fetch-test.md`:
- Line 18: The example calls renderComponent with an HTML string
('<user-list></user-list>') but renderComponent expects a tag name and
internally calls document.createElement(tagName); change the argument to the
custom element tag name 'user-list' so renderComponent('user-list') is used
instead (locate the example line using renderComponent and replace the HTML
string with the tag name).

In `@docs/cookbook/pick-subpath-import.md`:
- Around line 9-13: The file imports the same symbol `signal` twice (from
'`@bquery/bquery/reactive`' and '`@bquery/bquery/full`'), causing a duplicate local
binding; fix by removing the conflicting import or renaming/aliasing the `/full`
import (e.g., import the `/full` export under a different name such as
`signalFull`), or split the examples so each snippet only imports one `signal`;
update the import lines referencing `signal` and the modules
'`@bquery/bquery/reactive`' and '`@bquery/bquery/full`' accordingly so there is no
duplicate local binding.

In `@docs/guide/platform.md`:
- Line 766: The docs incorrectly reference buckets.set(); update the guidance to
use the correct Bucket API method bucket.put() (the Bucket surface exposes put,
get, remove, keys), and adjust any surrounding text/examples to use the singular
"bucket.put()" call (and correct variable name if needed) so the documentation
matches the actual API.

In `@docs/guide/testing.md`:
- Line 659: Update the docs example to call the correct method on the mock
socket: change the instruction that says to call socket.acceptConnection() to
socket.open() (or align with the earlier ws.open() example); note that
MockWebSocket in src/testing/extensions.ts exposes open(), not
acceptConnection(), so update the docs' mockWebSocket() usage to call open() to
match the implementation.

In `@docs/guide/view.md`:
- Line 654: The sentence is inconsistent with earlier guidance; update the
wording to a single clear rule: state that all .html() calls and bq-html
component renders are sanitized by default via sanitizeHtml() (unless explicitly
opted out with sanitize: false), and only use an alternative component/flag when
you intentionally opt out or use a documented raw-HTML escape; reference
bq-html, bq-html-safe and sanitizeHtml() in the text so readers know which
symbols follow the rule and how to opt out safely.

---

Minor comments:
In `@docs/concepts/architecture.md`:
- Line 9: The two unlabeled fenced code blocks that contain the ASCII diagrams
should include an explicit language identifier (e.g., ```text) to satisfy MD040;
update the unlabeled triple-backtick fences surrounding the ASCII diagrams (the
fenced blocks that show the "view · store · router · forms · …" diagram and the
user-event → handler/store → signal/store workflow diagram) by changing the
opening backticks to use a language tag like "text".

In `@docs/concepts/bundle-and-tree-shaking.md`:
- Around line 29-33: Update the fenced code block that currently contains the
list starting with "core · reactive · concurrency · component · motion ·
security · platform ·" to include a language tag (e.g., `text`) after the
opening ``` so the block becomes ```text, which satisfies markdown linting and
preserves formatting; ensure the closing ``` remains and no other content
changes.

In `@docs/contributing/architecture.md`:
- Around line 7-9: The fenced code block containing "view · store · router ·
forms · …  →  reactive  →  core" is unlabeled and triggers MD040; update the
block by adding a language tag (e.g., use ```text) to the opening fence so the
block becomes a labeled fenced code block, then run the docs linter (bun run
lint) / Prettier to ensure formatting follows the repo's ESLint/Prettier rules.

In `@docs/contributing/release-process.md`:
- Around line 52-57: The markdown code fence containing the commit messages is
missing a language identifier (triggers MD040); update the unlabeled
triple-backtick fence around the commit list in the release-process document to
use a language tag (e.g. ```text) so the fence becomes ```text and then close
normally, ensuring the block exactly matches the suggested fix; target the
commit-message/code-fence block that contains lines like "feat(reactive): add
useEventSource heartbeat option" and "fix(server): validate cookie
attributes..." and run the repo linter (bun run lint) afterward to confirm MD040
is resolved.

In `@docs/contributing/repo-layout.md`:
- Around line 7-31: The Markdown file contains unlabeled fenced code blocks
showing directory trees (the bQuery/ ASCII tree blocks and the similar src/,
docs/, examples/ snippets) which triggers MD040; update each of those
backtick-fenced blocks to include a language label (e.g., ```text) so the linter
recognizes them, then reformat the file with the repo's formatter and run the
lint task (bun run lint) to ensure it complies with the ESLint flat config and
Prettier rules before committing.

In `@docs/cookbook/spring-drag.md`:
- Line 11: The snippet unsafely casts document.querySelector('.draggable') as
HTMLElement (variable "box"); change it to use a typed query and an explicit
null guard—query with document.querySelector<HTMLElement>('.draggable') (or keep
untyped), then check if box is null and handle (early return or throw) before
using it so the example is safe to copy-paste.

In `@docs/cookbook/ssr-deploy.md`:
- Line 14: Update the sentence that reads "The cross-runtime CI matrix
(`.github/workflows/ssr-cross-runtime.yml`) guards the public surface across all
three runtimes." to correctly reflect the table's four targets by changing "all
three runtimes" to "all four runtimes" (or "all listed runtimes"); locate the
exact string in docs/cookbook/ssr-deploy.md and replace it so the wording
matches the Node, Bun, Deno, Edge targets.

In `@docs/cookbook/theme-switcher.md`:
- Line 20: The snippet uses document.querySelector('`#toggle`')! which can throw
if the element is missing; change it to perform a safe lookup by assigning the
result of document.querySelector('`#toggle`') to a const (e.g., const toggle =
document.querySelector('`#toggle`')), check for null (if (!toggle) return or
handle accordingly), then call toggle.addEventListener('click', ...) — or use
optional chaining toggle?.addEventListener — and, if needed, narrow the type to
the appropriate HTMLElement before using element-specific properties.

In `@docs/guide/api-core.md`:
- Line 407: The pitfalls line currently mentions the wrong utility name: replace
the reference to cloneDeep with the documented utility name clone so the
sentence reads that utilities like deepEqual, clone, and freeze operate by
structure (symbols and non-enumerable props skipped); update the text that
references cloneDeep to clone wherever the guide’s utility list uses clone to
keep names consistent with the API (check occurrences around the pitfalls list
and any matching references to cloneDeep).

In `@docs/guide/media.md`:
- Line 880: The statement over-generalizes support for `{ signal: AbortSignal
}`; update the sentence to scope the guarantee to the new composables introduced
in 1.14.0 (e.g., "The newly added composables in 1.14.0 accept `{ signal:
AbortSignal }` for auto-teardown — prefer it over manual `destroy()`.") so
readers don't assume legacy composables accept the option.

In `@docs/guide/plugin.md`:
- Around line 419-421: The docs incorrectly recommend using the store API
clearPlugins() for plugin test teardown; update the guidance to use the plugin
registry teardown API resetPlugins() from `@bquery/bquery/plugin` instead. Replace
the mention of clearPlugins() with resetPlugins() in the testing section and
note that getInstalledPlugins({ withMetadata: true }) and getPluginInfo(name)
should be paired with resetPlugins() in afterEach to ensure proper plugin
registry cleanup. Ensure the text references the resetPlugins() symbol
explicitly and removes or clarifies any implication that clearPlugins() is the
correct teardown for plugins.

In `@docs/guide/reactive.md`:
- Line 1164: The doc uses scope.dispose() but the API is EffectScope.stop();
update the guidance to use EffectScope.stop() (e.g., wrap setup in effectScope()
and assert subscribers drop after scope.stop()) so the symbols effectScope(),
scope.stop(), and EffectScope.stop are consistent with the documented API.

In `@docs/guide/router.md`:
- Line 497: Update the sentence about navigation guards to clarify that
beforeResolve still runs in the navigation pipeline and can block navigation;
replace the phrase "Use `beforeResolve` for non-blocking work" with guidance to
use `afterEach` or perform out-of-band side effects for truly non-blocking
tasks, and ensure you mention `guards`, `beforeResolve`, and `afterEach` so
readers know the correct alternatives.

In `@docs/guide/server.md`:
- Line 422: The docs mention two different options for disabling HTML
sanitization on ctx.html(): change the inconsistent `{ sanitize: false }` usage
to the actual API option `{ trusted: true }` (or vice‑versa to match the
library's real API) so the page consistently uses the same flag; update every
occurrence referencing ctx.html(...) options to the single correct option name
and ensure the explanatory note warns to only use it with fully trusted content.

In `@docs/index.md`:
- Around line 79-102: The fenced module tree block starting with
"`@bquery/bquery`" in docs/index.md is missing a language identifier and triggers
markdownlint MD040; update the opening triple-backtick for that block to include
a language tag (e.g., ```text) so the tree block is treated as plain text and
linting passes, leaving the content (the lines listing core, reactive,
concurrency, etc.) unchanged.

In `@README.md`:
- Around line 19-20: The blockquote that begins with "**New in 1.14.1:**
`@bquery/bquery/motion` ..." contains an empty blank line which triggers
markdownlint MD028; remove the blank line so the note is one uninterrupted
blockquote line (i.e., collapse the separate ">" and the content into a single
"> **New in 1.14.1:** `@bquery/bquery/motion` refreshes..." block) to satisfy
the no-blanks-blockquote rule.

---

Nitpick comments:
In `@docs/.vitepress/config.ts`:
- Around line 3-5: The file declares top-level constants SITE_URL and
DESCRIPTION in SCREAMING_SNAKE_CASE which violates the repo's camelCase rule;
rename them to siteUrl and description (and any similar constants in the file
around lines 167-197) and update every usage within this config (e.g., where
SITE_URL and DESCRIPTION are referenced) to the new camelCase identifiers
(preserve values and exports) so the names follow the project's camelCase
variable convention.

In `@docs/contributing/testing-strategy.md`:
- Around line 22-41: The example should avoid direct innerHTML assignment;
replace root.innerHTML = '<button id="b">0</button>' with safe DOM construction
or a sanitized write: either create a button via
document.createElement('button'), set id and textContent (e.g., const btn =
document.createElement('button'); btn.id='b'; btn.textContent='0';
root.appendChild(btn)), or call sanitizeHtml(...) on the string and use the
sanitized result before assigning to root (import sanitizeHtml from
'src/security/sanitize.ts'); update the test to reference the constructed
element (document.getElementById('b') or $('`#b`')) so signal, effect, and $('`#b`')
usage remains unchanged.

In `@docs/cookbook/notification-toast.md`:
- Around line 23-25: The one-time reduced-motion check uses reducedMotion.value
which creates tracking; change the non-tracking read to use reducedMotion.peek()
instead (i.e., call prefersReducedMotion() to get reducedMotion and use
reducedMotion.peek() in the if condition) so the animate(...) call remains
untracked; refer to the prefersReducedMotion() call, the reducedMotion signal,
and the animate(this, ...) usage when making this small change.

In `@docs/guide/a11y.md`:
- Around line 676-695: The test uses document.body.innerHTML to inject a
fixture; change it to create DOM elements inline (e.g., createElement for main,
h1, img, label, input), append the container to document.body, call auditA11y()
and assert on auditA11y().passed and auditA11y().errors, then call .remove() on
the container to clean up; locate the snippet referencing auditA11y and
document.body.innerHTML and replace with element creation/append/remove flow so
it matches the repo DOM-test setup pattern.

In `@docs/workflows/forms-validation.md`:
- Around line 117-132: The locale object is exported as a default export but the
repo requires named exports; change the export to a named export (e.g., export
const en = { email: {...}, password: {...}, plan: {...}, submit: 'Create
account', submitting: 'Working…', errors: {...} }) and update any imports to use
the named symbol (en) instead of the default; update usages that import the
locale to use the new named export to avoid lint errors.

In `@docs/workflows/streaming-ssr.md`:
- Around line 105-117: Replace the default export with a named export in the
edge handler example: instead of using "export default createEdgeHandler(...)"
declare a named export (e.g., "export const handler = createEdgeHandler(...)")
so the snippet follows the project's TS convention; keep the existing use of
createEdgeHandler, createSSRContext, renderToResponse, compiled, cache and
context variables intact and only change the export form to a named export.

In `@src/motion/reduced-motion.ts`:
- Around line 32-129: The new non-exported helper functions (resolveMatchMedia,
syncMediaQuerySubscription, evaluateCurrent, dispatchIfChanged,
ensureMediaQuerySubscription, teardownMediaQuerySubscription) are missing
`@internal` JSDoc annotations; add a brief /** `@internal` */ JSDoc comment above
each of these function declarations to mark them as internal per the src/**/*.ts
guidelines so the API intent is explicit.
🪄 Autofix (Beta)

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: defaults

Review profile: CHILL

Plan: Pro

Run ID: 0e2f9bbf-36ff-434b-b925-d75fec30edd2

📥 Commits

Reviewing files that changed from the base of the PR and between 829dc2f and 013bec3.

📒 Files selected for processing (90)
  • .clinerules
  • .cursorrules
  • .github/copilot-instructions.md
  • .github/workflows/docs-link-check.yml
  • .github/workflows/docs.yml
  • .gitignore
  • AGENT.md
  • CHANGELOG.md
  • README.md
  • docs/.vitepress/config.ts
  • docs/concepts/architecture.md
  • docs/concepts/bundle-and-tree-shaking.md
  • docs/concepts/reactivity-model.md
  • docs/concepts/rendering-modes.md
  • docs/concepts/runtimes.md
  • docs/concepts/security-model.md
  • docs/contributing/agent-guide.md
  • docs/contributing/architecture.md
  • docs/contributing/code-of-conduct.md
  • docs/contributing/index.md
  • docs/contributing/release-process.md
  • docs/contributing/repo-layout.md
  • docs/contributing/security.md
  • docs/contributing/testing-strategy.md
  • docs/cookbook/debounced-search.md
  • docs/cookbook/index.md
  • docs/cookbook/infinite-scroll.md
  • docs/cookbook/login-form.md
  • docs/cookbook/mock-fetch-test.md
  • docs/cookbook/modal-dialog.md
  • docs/cookbook/notification-toast.md
  • docs/cookbook/pagination.md
  • docs/cookbook/persisted-store.md
  • docs/cookbook/pick-subpath-import.md
  • docs/cookbook/polling.md
  • docs/cookbook/reactive-counter.md
  • docs/cookbook/route-guards.md
  • docs/cookbook/rtl-locale.md
  • docs/cookbook/scroll-reveal.md
  • docs/cookbook/spring-drag.md
  • docs/cookbook/sse-stream.md
  • docs/cookbook/ssr-deploy.md
  • docs/cookbook/theme-switcher.md
  • docs/cookbook/trace-signal.md
  • docs/cookbook/websocket-reconnect.md
  • docs/glossary.md
  • docs/guide/a11y.md
  • docs/guide/api-core.md
  • docs/guide/components.md
  • docs/guide/concurrency.md
  • docs/guide/devtools.md
  • docs/guide/dnd.md
  • docs/guide/forms.md
  • docs/guide/i18n.md
  • docs/guide/media.md
  • docs/guide/motion.md
  • docs/guide/platform.md
  • docs/guide/plugin.md
  • docs/guide/reactive.md
  • docs/guide/router.md
  • docs/guide/security.md
  • docs/guide/server.md
  • docs/guide/ssr.md
  • docs/guide/store.md
  • docs/guide/storybook.md
  • docs/guide/testing.md
  • docs/guide/view.md
  • docs/index.md
  • docs/introduction.md
  • docs/public/CNAME
  • docs/public/robots.txt
  • docs/release-notes/1.14.md
  • docs/release-notes/index.md
  • docs/workflows/backend-api.md
  • docs/workflows/component-library.md
  • docs/workflows/forms-validation.md
  • docs/workflows/index.md
  • docs/workflows/off-main-thread.md
  • docs/workflows/sortable-keyboard.md
  • docs/workflows/ssr-hydration.md
  • docs/workflows/streaming-ssr.md
  • docs/workflows/todo-spa.md
  • eslint.config.js
  • llms.txt
  • lychee.toml
  • package.json
  • scripts/check-doc-exports.mjs
  • src/motion/reduced-motion.ts
  • tests/motion.test.ts
  • typedoc.json

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread .github/workflows/docs-link-check.yml Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread .github/workflows/docs.yml Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread docs/cookbook/mock-fetch-test.md Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread docs/cookbook/pick-subpath-import.md Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread docs/guide/platform.md Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread docs/guide/testing.md Resolved

Uh oh!

There was an error while loading. Please reload this page.

Comment thread docs/guide/view.md Resolved

Uh oh!

There was an error while loading. Please reload this page.

docs: fix server body limit examples
3ee6829
Copilot finished work on behalf of JosunLP May 28, 2026 17:13
@coderabbitai

coderabbitai Bot commented May 28, 2026

Copy link
Copy Markdown

Actionable comments posted: 0

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@JosunLP
chore: update documentation and dependencies
1ca5848
- Fixed user-list component rendering in mock fetch test.
- Updated import statement for signal in pick-subpath-import documentation.
- Corrected bucket method reference in platform guide.
- Updated mockWebSocket usage in testing guide.
- Clarified sanitization behavior of bq-html in view guide.
- Bump devDependencies:
  - @storybook/addon-docs to 10.4.1
  - @storybook/web-components-vite to 10.4.1
  - @typescript-eslint/eslint-plugin to 8.60.0
  - @typescript-eslint/parser to 8.60.0
  - storybook to 10.4.1
  - vite to 8.0.14
Copilot AI review requested due to automatic review settings May 28, 2026 17:17
@github-actions github-actions Bot added motion Changes to the motion module docs Changes to the documentation tests Chenges to the tests build Changes to the build and meta files ci/cd Changes to the action workflows github Changes to the github meta data files labels May 28, 2026
Copilot started reviewing on behalf of JosunLP May 28, 2026 17:18
View session
Copilot AI reviewed May 28, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@JosunLP
docs: update release notes for version 1.14.1 with motion fix details
c152590
@JosunLP
JosunLP merged commit 15d301d into main May 28, 2026
22 checks passed

Uh oh!

There was an error while loading. Please reload this page.

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

Reviewers

@coderabbitai coderabbitai[bot] coderabbitai[bot] left review comments
Copilot code review Copilot
Copilot review effort
Applies to this pull request for everyone.Learn more about Copilot code review.
Copilot left review comments

Uh oh!

There was an error while loading. Please reload this page.

Assignees

@JosunLP JosunLP

Labels

build Changes to the build and meta files ci/cd Changes to the action workflows docs Changes to the documentation github Changes to the github meta data files motion Changes to the motion module tests Chenges to the tests

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

3 participants

@JosunLP
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.