GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||||||
GeezerVison is showing github.com — Enhance concurrency, SSR, server runtime, and documentation updates by JosunLP · Pull Request #118 · bQuery/bQuery Conversation
|
|
Warning Review limit reached
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 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 configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (10)
📝 WalkthroughWalkthroughThis PR marks the 1.14.1 patch release for bQuery.js. It includes a targeted fix to ChangesMotion Fix and Test Coverage
Documentation Infrastructure and Guides
Version and Configuration Updates
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
Suggested labels
✨ Finishing Touches🧪 Generate unit tests (beta)
|
Sorry, something went wrong.
There was an error while loading. Please reload this page.
…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]>
…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]>
…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]>
…#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 & 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`' 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: 'onChange'`, `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: 'onChange'`, `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]>
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Copilot reviewed 89 out of 90 changed files in this pull request and generated 2 comments.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was a problem 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.
docs/contributing/repo-layout.md-7-31 (1)
7-31:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winLabel 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.mdaround 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.mdaround 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.mdaround 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 becomestext 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.mdaround 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.mdat 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.mdaround 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 becomesclosing ``` remains and no other content changes.docs/guide/media.md-880-880 (1)
880-880:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winNarrow 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 winEffectScope teardown method name is inconsistent.
This line uses
scope.dispose(), but the same page documentsEffectScope.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
beforeResolveis still navigation-blocking.The guidance “Use
beforeResolvefor non-blocking work” is misleading—beforeResolveruns in the navigation pipeline too. Recommend rewording towardafterEach(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 winUse plugin teardown API here, not store teardown API.
In this module’s testing section, recommending store
clearPlugins()is misleading. For plugin registry cleanup, point toresetPlugins()from@bquery/bquery/pluginto 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 winSanitization 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 winFix 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 winAvoid unsafe non-null casting in the cookbook snippet.
document.querySelector('.draggable') as HTMLElementcan 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 winUse 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.
docs/contributing/testing-strategy.md (1)
22-41: ⚡ Quick winAvoid demonstrating raw
innerHTMLassignment 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.
As per coding guidelines, "Security: ALL DOM HTML writes MUST use `sanitizeHtml()` from `src/security/sanitize.ts`" and "Never write `innerHTML = untrustedInput`."Suggested fix
- root.innerHTML = '<button id="b">0</button>'; + const button = document.createElement('button'); + button.id = 'b'; + button.textContent = '0'; + root.appendChild(button);🤖 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 winAlign constants with the repo camelCase rule.
SITE_URLandDESCRIPTION(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 nameskebab-case, classesPascalCase, and functions/variablescamelCase.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 winAlign the test snippet with the repo’s DOM-test setup pattern.
This example uses
document.body.innerHTMLfixture 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 winUse
.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
.valuetracks 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 winUse 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 winPrefer a named export in the edge handler example.
To keep docs aligned with your TS export conventions, avoid
export defaultin 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 winAdd
@internalJSDoc 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@internalJSDoc 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.
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.
Fix all unresolved CodeRabbit comments on this PR:
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 0e2f9bbf-36ff-434b-b925-d75fec30edd2
.clinerules.cursorrules.github/copilot-instructions.md.github/workflows/docs-link-check.yml.github/workflows/docs.yml.gitignoreAGENT.mdCHANGELOG.mdREADME.mddocs/.vitepress/config.tsdocs/concepts/architecture.mddocs/concepts/bundle-and-tree-shaking.mddocs/concepts/reactivity-model.mddocs/concepts/rendering-modes.mddocs/concepts/runtimes.mddocs/concepts/security-model.mddocs/contributing/agent-guide.mddocs/contributing/architecture.mddocs/contributing/code-of-conduct.mddocs/contributing/index.mddocs/contributing/release-process.mddocs/contributing/repo-layout.mddocs/contributing/security.mddocs/contributing/testing-strategy.mddocs/cookbook/debounced-search.mddocs/cookbook/index.mddocs/cookbook/infinite-scroll.mddocs/cookbook/login-form.mddocs/cookbook/mock-fetch-test.mddocs/cookbook/modal-dialog.mddocs/cookbook/notification-toast.mddocs/cookbook/pagination.mddocs/cookbook/persisted-store.mddocs/cookbook/pick-subpath-import.mddocs/cookbook/polling.mddocs/cookbook/reactive-counter.mddocs/cookbook/route-guards.mddocs/cookbook/rtl-locale.mddocs/cookbook/scroll-reveal.mddocs/cookbook/spring-drag.mddocs/cookbook/sse-stream.mddocs/cookbook/ssr-deploy.mddocs/cookbook/theme-switcher.mddocs/cookbook/trace-signal.mddocs/cookbook/websocket-reconnect.mddocs/glossary.mddocs/guide/a11y.mddocs/guide/api-core.mddocs/guide/components.mddocs/guide/concurrency.mddocs/guide/devtools.mddocs/guide/dnd.mddocs/guide/forms.mddocs/guide/i18n.mddocs/guide/media.mddocs/guide/motion.mddocs/guide/platform.mddocs/guide/plugin.mddocs/guide/reactive.mddocs/guide/router.mddocs/guide/security.mddocs/guide/server.mddocs/guide/ssr.mddocs/guide/store.mddocs/guide/storybook.mddocs/guide/testing.mddocs/guide/view.mddocs/index.mddocs/introduction.mddocs/public/CNAMEdocs/public/robots.txtdocs/release-notes/1.14.mddocs/release-notes/index.mddocs/workflows/backend-api.mddocs/workflows/component-library.mddocs/workflows/forms-validation.mddocs/workflows/index.mddocs/workflows/off-main-thread.mddocs/workflows/sortable-keyboard.mddocs/workflows/ssr-hydration.mddocs/workflows/streaming-ssr.mddocs/workflows/todo-spa.mdeslint.config.jsllms.txtlychee.tomlpackage.jsonscripts/check-doc-exports.mjssrc/motion/reduced-motion.tstests/motion.test.tstypedoc.json
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
Actionable comments posted: 0 |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
- 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
There was a problem 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.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.