{"owner":"QwikDev","repo":"qwik","hasSkills":true,"totalSkillsCount":211,"totalTokensCount":84650,"categories":["anthropic-skill","root-instruction","claude-rule","plugin-manifest","cursor-rule"],"hasMcp":false,"mcpConfig":null,"found":[".ruler/skills/qwik-router-development/SKILL.md",".ruler/skills/qwik-docs-development/SKILL.md",".ruler/skills/qwik-e2e-verification/SKILL.md",".ruler/skills/qwik-guidance-maintenance/SKILL.md",".ruler/skills/qwik-core-development/SKILL.md","AGENTS.md",".ruler/skills/qwik-optimizer-development/SKILL.md","CLAUDE.md","packages/supabase-auth-helpers-qwik/package.json","packages/supabase-auth-helpers-qwik/README.md","packages/supabase-auth-helpers-qwik/CHANGELOG.md",".ruler/AGENTS.md","packages/qwik-vite/api-extractor.json","packages/qwik-vite/package.json","packages/qwik-vite/tsconfig.json","packages/qwik-router/ARCHITECTURE.md","packages/qwik-router/CHANGELOG.md","packages/qwik-router/package.json","packages/qwik-router/README.md","packages/qwik-router/tsconfig.json","packages/qwik-react/api-extractor.json","packages/qwik-react/CHANGELOG.md","packages/qwik-react/package.json","packages/qwik-react/README.md","packages/qwik-react/tsconfig.json","packages/qwik-dom/CHANGELOG.md","packages/qwik-dom/package.json","packages/qwik-auth/CHANGELOG.md","packages/qwik/CHANGELOG.md","packages/qwik/package.json","packages/qwik/tsconfig.json","packages/qwik/tsdoc.json","packages/optimizer/CHANGELOG.md","packages/optimizer/package.json","packages/optimizer/README.md","packages/optimizer/tsconfig.json","packages/insights/package.json","packages/insights/README.md","packages/insights/tsconfig.json","packages/eslint-plugin-qwik/CHANGELOG.md","packages/eslint-plugin-qwik/package.json","packages/eslint-plugin-qwik/README.md","packages/docs/algolia.json","packages/docs/package.json","packages/docs/README.md","packages/docs/tsconfig.json","packages/devtools/CHANGELOG.md","packages/devtools/package.json","packages/devtools/README.md","packages/devtools/tsconfig.json","packages/create-qwik/CHANGELOG.md","packages/create-qwik/package.json","packages/create-qwik/README.md","packages/browser-extension/CHANGELOG.md","packages/browser-extension/package.json","packages/browser-extension/tsconfig.json","packages/qwik-vite/src/qwik.optimizer.api.md","packages/qwik-router/src/api-extractor.json","packages/qwik-react/src/api-extractor.json","packages/qwik/src/api-extractor.json","packages/optimizer/core/README.md","packages/optimizer/napi/napi.config.json","packages/insights/.vscode/extensions.json","packages/insights/.vscode/launch.json","packages/insights/public/manifest.json","packages/eslint-plugin-qwik/tests/tsconfig.json","packages/docs/public/_routes.json","packages/docs/scripts/pages.json","packages/devtools/plugin/tsconfig.json","packages/devtools/ui/README.md","packages/devtools/ui/tsconfig.json","packages/browser-extension/.wxt/tsconfig.json",".ruler/skills/qwik-core-development/references/core-notes.md","packages/qwik-vite/src/plugins/fixture-output-bundles.json","packages/qwik-router/src/ssg/api-extractor.json","packages/qwik-router/src/ssg/qwik-router.ssg.api.md","packages/qwik/src/build/api-extractor.json","packages/qwik/src/build/qwik.build.api.md","packages/qwik/src/core/api-extractor.json","packages/qwik/src/core/GLOSSARY.md","packages/qwik/src/core/qwik.core.api.md","packages/qwik/src/core/readme.md","packages/qwik/src/insights/api-extractor.json","packages/qwik/src/insights/qwik.insights.api.md","packages/qwik/src/server/api-extractor.json","packages/qwik/src/server/preloading.md","packages/qwik/src/server/qwik.server.api.md","packages/qwik/src/server/README.md","packages/qwik/src/testing/api-extractor.json","packages/qwik/src/testing/qwik.testing.api.md","packages/qwik/src/testing/README.md","packages/qwik/src/web-worker/api-extractor.json","packages/qwik/src/web-worker/qwik.worker.api.md","packages/insights/drizzle/meta/_journal.json","packages/insights/drizzle/meta/0000_snapshot.json","packages/insights/drizzle/meta/0001_snapshot.json","packages/insights/drizzle/meta/0002_snapshot.json","packages/insights/drizzle/meta/0003_snapshot.json","packages/insights/drizzle/meta/0004_snapshot.json","packages/insights/drizzle/meta/0005_snapshot.json","packages/insights/drizzle/meta/0006_snapshot.json","packages/insights/drizzle/meta/0007_snapshot.json","packages/insights/drizzle/meta/0008_snapshot.json","packages/insights/drizzle/meta/0009_snapshot.json","packages/insights/drizzle/meta/0010_snapshot.json","packages/insights/drizzle/meta/0011_snapshot.json","packages/insights/drizzle/meta/0012_snapshot.json","packages/insights/drizzle/meta/0013_snapshot.json","packages/insights/drizzle/meta/0014_snapshot.json","packages/insights/drizzle/meta/0015_snapshot.json","packages/insights/drizzle/meta/0016_snapshot.json","packages/insights/drizzle/meta/0017_snapshot.json","packages/insights/drizzle/meta/0018_snapshot.json","packages/insights/drizzle/meta/0019_snapshot.json","packages/insights/src/db/README.md","packages/docs/src/repl/README.md","packages/create-qwik/src/helpers/jokes.json","packages/qwik-router/src/adapters/vercel-edge/adapter.vercel-edge.api.md","packages/qwik-router/src/adapters/ssg/adapter.ssg.api.md","packages/qwik-router/src/adapters/shared/adapter.shared.api.md","packages/qwik-router/src/adapters/node-server/adapter.node-server.api.md","packages/qwik-router/src/adapters/netlify-edge/adapter.netlify-edge.api.md","packages/qwik-router/src/adapters/deno-server/adapter.deno-server.api.md","packages/qwik-router/src/adapters/cloudflare-pages/adapter.cloudflare-pages.api.md","packages/qwik-router/src/adapters/cloud-run/adapter.cloud-run.api.md","packages/qwik-router/src/adapters/bun-server/adapter.bun-server.api.md","packages/qwik-router/src/adapters/azure-swa/adapter.azure-swa.api.md","packages/qwik-router/src/buildtime/vite/api-extractor.json","packages/qwik-router/src/buildtime/vite/qwik-router.buildtime.api.md","packages/qwik-router/src/middleware/vercel-edge/api-extractor.json","packages/qwik-router/src/middleware/vercel-edge/middleware.vercel-edge.api.md","packages/qwik-router/src/middleware/request-handler/api-extractor.json","packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md","packages/qwik-router/src/middleware/node/api-extractor.json","packages/qwik-router/src/middleware/node/middleware.node.api.md","packages/qwik-router/src/middleware/netlify-edge/api-extractor.json","packages/qwik-router/src/middleware/netlify-edge/middleware.netlify-edge.api.md","packages/qwik-router/src/middleware/firebase/api-extractor.json","packages/qwik-router/src/middleware/firebase/middleware.firebase.api.md","packages/qwik-router/src/middleware/deno/api-extractor.json","packages/qwik-router/src/middleware/deno/middleware.deno.api.md","packages/qwik-router/src/middleware/cloudflare-pages/api-extractor.json","packages/qwik-router/src/middleware/cloudflare-pages/middleware.cloudflare-pages.api.md","packages/qwik-router/src/middleware/bun/api-extractor.json","packages/qwik-router/src/middleware/bun/middleware.bun.api.md","packages/qwik-router/src/middleware/azure-swa/api-extractor.json","packages/qwik-router/src/middleware/azure-swa/middleware.azure-swa.api.md","packages/qwik-router/src/middleware/aws-lambda/api-extractor.json","packages/qwik-router/src/middleware/aws-lambda/middleware.aws-lambda.api.md","packages/qwik-router/src/runtime/src/api-extractor.json","packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md","packages/qwik/src/core/bench/bench-memory-results.json","packages/qwik/src/core/bench/bench-results.json","packages/qwik/src/core/shared/README.md","packages/qwik/src/core/tests/README.md","packages/qwik/src/insights/vite/api-extractor.json","packages/qwik/src/insights/vite/qwik.insights.vite.api.md","packages/docs/src/components/theme-toggle/README.md","packages/docs/src/routes/(ecosystem)/ecosystem.json","packages/docs/src/routes/community/menu.md","packages/docs/src/routes/demo/.prettierrc.json","packages/docs/src/routes/demo/tsconfig.json","packages/docs/src/routes/docs/menu.md","packages/docs/src/routes/tutorial/tutorial-menu.json","packages/qwik-router/src/adapters/vercel-edge/vite/api-extractor.json","packages/qwik-router/src/adapters/ssg/vite/api-extractor.json","packages/qwik-router/src/adapters/shared/vite/api-extractor.json","packages/qwik-router/src/adapters/node-server/vite/api-extractor.json","packages/qwik-router/src/adapters/netlify-edge/vite/api-extractor.json","packages/qwik-router/src/adapters/deno-server/vite/api-extractor.json","packages/qwik-router/src/adapters/cloudflare-pages/vite/api-extractor.json","packages/qwik-router/src/adapters/cloud-run/vite/api-extractor.json","packages/qwik-router/src/adapters/bun-server/vite/api-extractor.json","packages/qwik-router/src/adapters/azure-swa/vite/api-extractor.json","packages/qwik-router/src/runtime/src/service-worker/api-extractor.json","packages/qwik-router/src/runtime/src/service-worker/qwik-router.service-worker.api.md","packages/qwik/src/core/reactive-primitives/impl/README.md","packages/qwik/src/core/shared/jsx/README.md","packages/qwik/src/core/shared/platform/readme.md","packages/qwik/src/core/shared/serdes/serialization.md","packages/qwik/src/core/shared/utils/README.md","packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json","packages/docs/src/routes/api/qwik/api.json","packages/docs/src/routes/api/qwik-insights/api.json","packages/docs/src/routes/api/qwik-optimizer/api.json","packages/docs/src/routes/api/qwik-router/api.json","packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json","packages/docs/src/routes/api/qwik-router-middleware-azure-swa/api.json","packages/docs/src/routes/api/qwik-router-middleware-cloudflare-pages/api.json","packages/docs/src/routes/api/qwik-router-middleware-firebase/api.json","packages/docs/src/routes/api/qwik-router-middleware-netlify-edge/api.json","packages/docs/src/routes/api/qwik-router-middleware-node/api.json","packages/docs/src/routes/api/qwik-router-middleware-request-handler/api.json","packages/docs/src/routes/api/qwik-router-middleware-vercel-edge/api.json","packages/docs/src/routes/api/qwik-router-ssg/api.json","packages/docs/src/routes/api/qwik-router-vite-azure-swa/api.json","packages/docs/src/routes/api/qwik-router-vite-bun-server/api.json","packages/docs/src/routes/api/qwik-router-vite-cloud-run/api.json","packages/docs/src/routes/api/qwik-router-vite-cloudflare-pages/api.json","packages/docs/src/routes/api/qwik-router-vite-netlify-edge/api.json","packages/docs/src/routes/api/qwik-router-vite-node-server/api.json","packages/docs/src/routes/api/qwik-router-vite-ssg/api.json","packages/docs/src/routes/api/qwik-router-vite-vercel/api.json","packages/docs/src/routes/api/qwik-server/api.json","packages/docs/src/routes/api/qwik-testing/api.json","packages/docs/src/routes/api/qwik-worker/api.json","packages/docs/src/routes/examples/apps/examples-menu.json","packages/docs/src/routes/examples/apps/README.md","packages/docs/src/routes/demo/state/counter-signal/.prettierrc.json","packages/docs/src/routes/tutorial/welcome/overview/index.md",".cursorrules (qwik-basic-cursorrules-prompt-file.mdc)"],"skills":{".ruler/skills/qwik-router-development/SKILL.md":"---\nname: qwik-router-development\ndescription: Use when modifying or reviewing Qwik Router code under packages/qwik-router, including runtime routing, buildtime route generation, middleware, adapters, SSG, markdown/MDX handling, or router tests.\n---\n\n# Qwik Router Development\n\nUse this skill for `packages/qwik-router/**` work. Keep the repo-wide rules from `.ruler/AGENTS.md`\nin force.\n\n## Fast Path\n\n1. Classify the touched router surface before editing: runtime, buildtime, middleware, adapter, SSG,\n   markdown/MDX, or Vite integration.\n2. Read the smallest source file plus the closest `*.unit.ts` or `*.spec.ts` file before changing\n   behavior.\n3. For middleware, loader, action, or navigation changes, trace handler ordering and shared state\n   from request creation through response/client consumption before editing.\n4. For unit/spec coverage, run `pnpm vitest run <path>`.\n5. For browser/router behavior, rebuild first with `pnpm build.core.dev`, then use the focused\n   Qwik Router e2e command.\n6. If public router API markdown changes are expected, run `pnpm api.update` after tests pass.\n\n## Source Map\n\n- Runtime: `packages/qwik-router/src/runtime/src/`\n- Buildtime route generation: `packages/qwik-router/src/buildtime/`\n- Vite integration: `packages/qwik-router/src/buildtime/vite/`\n- Middleware: `packages/qwik-router/src/middleware/`\n- Adapters: `packages/qwik-router/src/adapters/`\n- SSG: `packages/qwik-router/src/ssg/`\n- Router e2e tests: `e2e/qwik-e2e/tests/qwikrouter/`\n\n## Verification\n\nUse the closest command that covers the changed surface:\n\n```bash\npnpm vitest run packages/qwik-router/src/buildtime/routing/parse-pathname.unit.ts\npnpm vitest run packages/qwik-router/src/runtime/src/client-navigate.unit.ts\npnpm build.core.dev\npnpm playwright test e2e/qwik-e2e/tests/qwikrouter/nav.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\nDo not use `--project chromium` with `e2e/qwik-e2e/playwright.config.ts`; this config expects the\n`--browser=chromium` flag.\n\n## Quality Bar\n\n- Keep middleware, loader, and action ordering explicit. Do not add broad fallbacks that hide which\n  module owns a request.\n- Add regression tests for the exact route shape or request mode that failed, such as index route,\n  layout loader, page loader, redirect, action, or SPA navigation.\n- When changing serialized route state or loader data, update both server output and client\n  consumption in the same change.\n- Preserve deprecated Qwik City compatibility only when current source still supports it, and keep\n  compatibility warnings/tests intentional.\n- If router work exposes stale guidance here or in `.ruler/AGENTS.md`, update the guidance before\n  finishing or record why guidance edits were out of scope.\n\n## Stop Conditions\n\n- Stop and inspect the generated API workflow before hand-editing any `*.api.md` file.\n- Stop and switch to `qwik-e2e-verification` when most of the work is Playwright setup/debugging.\n- Stop and run `pnpm api.update` if exported router API changed.\n",".ruler/skills/qwik-docs-development/SKILL.md":"---\nname: qwik-docs-development\ndescription: Use when writing, modifying, or reviewing Qwik docs content or docs-site code under packages/docs, including docs routes, MDX content, generated LLM outputs, docs build behavior, or docs-specific e2e tests.\n---\n\n# Qwik Docs Development\n\nUse this skill for `packages/docs/**` work. Keep the repo-wide rules from `.ruler/AGENTS.md` in\nforce.\n\n## Fast Path\n\n1. Identify whether the change is docs content, route/layout code, API docs surfacing, generated LLM\n   output, search/indexing, or deployment behavior.\n2. For docs content, follow the writing style below before changing site mechanics.\n3. For existing docs pages already in the LLM manifest, edit source content and regenerate only when\n   verification requires generated output.\n4. Documentation and API pages enter LLM outputs automatically through `createLlmsManifest()` in\n   `packages/docs/scripts/generate-llms.ts`; use curated entries for ordering and richer descriptions.\n5. When editing docs scripts, keep generation deterministic and add focused unit coverage for parser,\n   path, URL, or output-shape behavior.\n6. Prefer docs-specific commands from `packages/docs/package.json`.\n\n## Writing Style\n\nWrite Qwik docs for readers who are learning the concept while solving a concrete task.\n\n- Start with the user need and the Qwik concept in one or two plain paragraphs.\n- Split the page into short sections named after the concept or API, such as `useSignal()`,\n  `Passing signals to child components`, or `Nested objects and arrays`.\n- Explain the default case first, then reveal deeper, less common, or higher-cost cases later, this is done in a note block. There is short and long form notes in MDX.\n- Use complete, minimal examples with current v2 imports from `@qwik.dev/core`.\n- After each example, state what the example created or changed and what Qwik tracks, updates, or\n  serializes.\n- Prefer direct sentences over marketing claims or framework jargon. Define Qwik-specific terms\n  before relying on them.\n- Use notes sparingly for important mental models, tradeoffs, or pitfalls, such as avoiding store\n  destructuring or using `function` when a store method needs `this`.\n- Keep examples small enough to scan, but complete enough to paste into a demo or fixture.\n- Link demos after the core explanation; do not make the link carry the explanation.\n\n## Content Pattern\n\nFor concept docs, use this shape unless the page has a better existing local pattern:\n\n1. State the problem and divide the concept into the two or three choices users need to understand.\n2. Show the simplest API with a complete code example.\n3. Explain the important variable or object in the example in one short paragraph.\n4. Add a sharing, nesting, async, or advanced section only after the default case is clear.\n5. Include a short note for automatic tracking, serialization, or performance tradeoffs when that\n   knowledge prevents common mistakes.\n\n## Source Map\n\n- Docs routes and MDX: `packages/docs/src/routes/`\n- Docs components: `packages/docs/src/components/`\n- LLM generator: `packages/docs/scripts/generate-llms.ts`\n- Docs e2e: `e2e/docs-e2e/tests/`\n- Generated docs build output: `packages/docs/dist/`\n- Web fonts: `packages/docs/src/font-faces.ts` inlines the `*-subset-*` fonts from\n  `packages/docs/src/media/fonts/` and links the `*-latin-*` files for the remaining characters.\n  Regenerate a subset with fontTools:\n  `pyftsubset <latin file> --unicodes=\"<subsetUnicodeRange>\" --layout-features='*' --flavor=woff2 --output-file=<subset file>`,\n  then keep `restOfLatinUnicodeRange` equal to the rest of the Latin file's characters.\n\n## LLM Output Rules\n\nThe docs build can generate:\n\n- `dist/llms.txt`\n- `dist/llms-ctx.txt`\n- `dist/llms-ctx-full.txt`\n- curated markdown mirrors under `dist/docs/`\n\nDo not hand-edit generated files in `packages/docs/dist/`. Edit docs source or\n`packages/docs/scripts/generate-llms.ts`, then regenerate.\n\nKeep `llms.txt` and MCP on the same complete manifest. Documentation and API pages are discovered\nautomatically; curated entries provide ordering, descriptions, and additional landing pages.\n\n## Verification\n\nUse the narrowest relevant command:\n\n```bash\npnpm -C packages/docs generate.llms\npnpm -C packages/docs build\npnpm playwright test e2e/docs-e2e/tests/docs-smoke.spec.ts --config e2e/docs-e2e/playwright.config.ts --project chromium\n```\n\nSet `QWIK_LLMS_BASE_URL` only when intentionally testing alternate generated links.\n\n## Stop Conditions\n\n- Keep additional landing pages in the curated entries of the shared manifest.\n- Stop and run or request the relevant docs build when route generation or static output behavior is\n  changed.\n- If docs source or scripts contradict this skill, update the skill before finishing or record why\n  guidance edits were out of scope.\n\n## No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n",".ruler/skills/qwik-e2e-verification/SKILL.md":"---\nname: qwik-e2e-verification\ndescription: Use when creating, modifying, debugging, or running Qwik Playwright e2e tests under e2e/, including router, adapters, docs, CLI, and React integration suites.\n---\n\n# Qwik E2E Verification\n\nUse this skill for Playwright e2e work in `e2e/**`. Keep the repo-wide rules from\n`.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify the suite: Qwik core app, Qwik Router, adapters, docs, CLI, or Qwik React.\n2. Run the dev rebuild first when testing Qwik runtime/router behavior.\n3. Use the suite's Playwright config and the browser-selection style that config expects.\n4. Prefer one focused e2e file before broad suite commands.\n5. When debugging app fixtures, inspect the matching `e2e/*/apps/` source before changing tests.\n6. Turn a failing behavior into the smallest deterministic regression. Avoid sleeps and broad\n   assertions when a route, marker, event, or serialized state check can prove the behavior.\n\n## Suites\n\n- Main Qwik e2e: `e2e/qwik-e2e/tests/`\n- Router e2e: `e2e/qwik-e2e/tests/qwikrouter/`\n- Adapter e2e: `e2e/adapters-e2e/tests/`\n- Docs e2e: `e2e/docs-e2e/tests/`\n- CLI e2e: `e2e/qwik-cli-e2e/tests/`\n- React integration e2e: `e2e/qwik-react-e2e/tests/`\n\nApps whose directory names contain `.prod` run in production mode under the shared Qwik dev server.\nKeep exact production-only assertions in those fixtures; regular fixtures must pass after either\n`build.core.dev` or `build.core`.\n\n## Commands\n\nMain Qwik e2e config uses `--browser`, not Playwright projects:\n\n```bash\npnpm build.core.dev\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\npnpm playwright test e2e/qwik-e2e/tests/qwikrouter/nav.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\nFor timing-sensitive regressions, prefix the command with `GITHUB_ACTIONS=true` and use\n`--retries=0` to disable local `slowMo: 100` and expose races. Wait for a fresh completion marker\nafter lazy handlers; a completed click or previously populated output does not prove completion.\n\nSSR content can appear before the dynamically imported qwikloader registers listeners. Before\ntesting client handlers, wait for `window._qwikEv?.roots`; neither `commit` nor `load` guarantees\nthat the dynamic import has finished.\n\nThe brotli budget tests in `ssg-snapshot.e2e.ts` measure the built core chunk, so they need a\nproduction `pnpm build.core` — `build.core.dev` leaves core unminified and blows the budget by ~4%.\nBefore believing a budget failure, rebuild with `build.core` and re-run `pnpm test.e2e.router.ssg`.\n\nPlaywright's `reuseExistingServer: !CI` means a dev server left over from an earlier run serves\nstale bundles, so a local pass can hide a build break that CI catches. Kill port 3301 before\ntrusting a green local sweep after optimizer or bundler changes.\n\nThe CLI e2e scaffolds starters with `create-qwik` and runs their own `npm run dev`/`build` scripts,\nso it is the only suite that exercises a real starter's Vite dev server and production builds; the\nshared Qwik dev server above passes its own resolve conditions. Run it locally with `CI=1` so the\nscaffolds land inside the workspace, where pnpm's `allowBuilds` lets `sharp` build (a `/tmp`\nscaffold fails with `ERR_PNPM_IGNORED_BUILDS`), and after `pnpm build.platform.copy` if\n`packages/optimizer/bindings` is missing. It scaffolds from `packages/create-qwik/dist`, so run\n`pnpm build.cli` after editing `starters/`, or the suite silently tests the previous starters:\n\n```bash\nCI=1 pnpm --filter qwik-cli-e2e exec vitest run --config=vite.config.ts tests/external-library.spec.ts\n```\n\nCommands the CLI e2e spawns inherit Vitest's `NODE_ENV=test`, which Vite treats as a development\nbuild; pass `NODE_ENV` explicitly through `runCommandUntil` when a test depends on the build mode.\n\nFor HTTP cache assertions, use a fresh `launchPersistentContext()` profile per test and remove\nit after closing the context. WebKit's default ephemeral context has no network disk cache, so\n`fetch()` may hit the server despite a fresh `Cache-Control` response. Keep request routing off\nfor cache tests: Playwright interception disables HTTP caching.\n\nOther suites may use named Playwright projects. Check their config before choosing flags:\n\n```bash\npnpm playwright test e2e/docs-e2e/tests/docs-smoke.spec.ts --config e2e/docs-e2e/playwright.config.ts --project chromium\npnpm playwright test e2e/adapters-e2e/tests/adapters.spec.ts --project=chromium --config e2e/adapters-e2e/playwright.config.ts\npnpm playwright test e2e/qwik-react-e2e/tests/reactify.spec.ts --project=chromium --config e2e/qwik-react-e2e/playwright.config.ts\n```\n\n## SSG snapshot suite\n\n`e2e/qwik-e2e/tests/qwikrouter/ssg-snapshot.e2e.ts` asserts two independent things against the built\n`qwikrouter-ssg-snapshot` app:\n\n- **Serialized output goldens** — `expected.state.txt` and `expected.ssg.html`. Regenerate after an\n  intentional serialization or SSR output change with `pnpm test.e2e.router.ssg.update`.\n- **Brotli size budgets** — `CORE_BROTLI_BUDGET` / `PRELOADER_BROTLI_BUDGET` /\n  `QWIKLOADER_BROTLI_BUDGET` constants in that spec. A core change that grows a bundle fails with the\n  exact over-budget byte count; bump the matching constant when the growth is intentional.\n\nTraps:\n\n- The core budget also runs after dev builds; measure it only after `pnpm build.core`.\n- `test.e2e.router.ssg.update` regenerates the goldens only; it never touches the budgets, so a\n  budget breach survives the update.\n- The update run can exit non-zero because a sibling budget assertion failed, not the golden. \"N\n  passed\" with exit 1 usually means a budget breach — read the failing assertion instead of assuming\n  the golden is stale.\n- After rebasing onto a moved base the golden conflicts; regenerate it rather than hand-merging, then\n  re-run `pnpm test.e2e.router.ssg` (no update flag) to confirm it passes deterministically.\n\n## Stop Conditions\n\n- Stop and inspect the suite config when `--browser` versus `--project` is unclear.\n- Stop and report if browser binaries, build artifacts, or dependencies are missing.\n- Do not broaden to all e2e suites unless the user asks or the changed surface requires it.\n- If a test failure shows this skill has stale suite or command guidance, update the skill before\n  finishing or record why guidance edits were out of scope.\n",".ruler/skills/qwik-guidance-maintenance/SKILL.md":"---\nname: qwik-guidance-maintenance\ndescription: Use when editing Qwik's .ruler guidance, adding or changing rules or skills, keeping AI guidance from going stale, updating assistant setup docs, or answering how Ruler should generate assistant-native guidance, skills, config, or policy for this repo.\n---\n\n# Qwik Guidance Maintenance\n\nUse this skill for `.ruler/**`, README AI assistant setup, dedicated rules, generated\nassistant-output boundaries, rule-vs-skill taxonomy work, and assistant-native config questions.\nAlso use it at the end of a code task when source inspection proves a loaded skill or reference is\nstale.\n\n## Fast Path\n\n1. Follow the Guidance Source Of Truth rule (in `.ruler/AGENTS.md`) for source layout, rule-vs-skill\n   taxonomy, generated assistant outputs, AI config builder behavior, skill naming, and stale-guidance policy.\n2. Follow the Generated Output Boundaries rule (in `.ruler/AGENTS.md`) before editing, regenerating,\n   or relying on generated output.\n3. Edit committed source files in `.ruler/`, not generated assistant outputs.\n4. Keep new durable policy in the narrowest source: `.ruler/AGENTS.md` for repo-wide context and\n   always-on rules, and `.ruler/skills/**` for task-specific workflows.\n5. For a target assistant, research the current native guidance, skill, config, and policy formats\n   when the mapping is ambiguous.\n6. Verify Ruler behavior with a dry run when the CLI is available.\n7. Verify generated guidance by checking source markers in the target assistant's native guidance\n   file and generated skills in the target assistant's native skills directory when supported.\n\n## Freshness Workflow\n\nWhen an agent uses a skill and current source contradicts it:\n\n1. Finish the user's product-code task first unless the guidance defect blocks the task.\n2. Update the narrowest `.ruler` source that was wrong.\n3. Prefer replacing stale details over appending another long lesson.\n4. Keep history-derived guidance behavioral and durable.\n5. Mention the guidance update in the final response so reviewers know why `.ruler` changed.\n\n## Source Map\n\n- Repo-wide guidance + always-on rules: `.ruler/AGENTS.md`\n- Human setup guide: `.ruler/README.md`\n- Ruler config: `.ruler/ruler.toml`\n- Source skills: `.ruler/skills/**/SKILL.md`\n- Generated outputs (committed): root `AGENTS.md` and `CLAUDE.md`; generated skill copies and\n  other `.claude/`/`.codex/`/`.cursor/` files stay local and gitignored\n\n## Rule And Skill Workflow\n\n- For a new always-on policy, add or update a rule section in `.ruler/AGENTS.md` and its summary in\n  the Source Rules index there.\n- For package-specific details, update the package skill or a directly linked reference.\n- For long notes, add a `references/` file only when progressive disclosure keeps the skill body\n  smaller and clearer.\n- For assistant setup changes, keep human setup steps in `.ruler/README.md` and behavioral agent\n  rules in `.ruler/AGENTS.md`.\n- For assistant output questions, use the `guidance-source-of-truth` rule unless current Ruler or\n  target-tool docs have changed.\n- Treat command execution policy as a separate native format from prose guidance. Do not translate\n  `.ruler/AGENTS.md` guidance into command-policy files just because the target tool calls them \"rules\".\n\n## Verification\n\nUse the target assistant for the change. For a Codex example:\n\n```bash\nnpx @intellectronica/ruler apply --agents codex --dry-run --no-mcp --no-gitignore\nruler apply --agents codex\nrg -n 'Source: .ruler/AGENTS.md' AGENTS.md\nfind .codex/skills -name SKILL.md\npnpm prettier --check .ruler README.md .gitignore\ngit diff --check\n```\n\nIf `npx` cannot reach the registry, retry only when network approval is appropriate; otherwise\nrecord the blocker and still run local formatting/diff checks.\n\n## Stop Conditions\n\n- Stop before editing generated assistant outputs directly.\n- Stop if a proposed rule duplicates detailed skill content instead of summarizing durable policy.\n- Stop if current Ruler or target-tool docs contradict the Guidance Source Of Truth rule in\n  `.ruler/AGENTS.md`.\n",".ruler/skills/qwik-core-development/SKILL.md":"---\nname: qwik-core-development\ndescription: Use when modifying or reviewing Qwik core package code under packages/qwik, especially reactive primitives, signals, VNodes, cursor behavior, QRLs, optimizer-facing runtime behavior, or Qwik core tests.\n---\n\n# Qwik Core Development\n\nUse this skill for `packages/qwik/**` work. Keep the normal repo-wide instructions from `.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify the touched subsystem before editing: reactive primitives, VNode/client diffing, cursor, QRL/serialization, SSR, hooks, or tests.\n2. Read the smallest relevant source and tests before making changes.\n3. Find the invariant that must stay true across SSR, resume, client render, and serialization when\n   the touched code crosses those boundaries.\n4. After implementation changes, immediately run the closest focused Vitest file with `pnpm vitest run <path>`. Do not use `pnpm test.unit`.\n5. If touching Rust optimizer code, load `qwik-optimizer-development` instead of treating the change as TypeScript-only.\n\n## When to Load Detailed Notes\n\nRead `references/core-notes.md` only when the task involves:\n\n- async signals, computed signals, polling, or signal invalidation;\n- QRL creation, `$` transform behavior, or serialization issues;\n- VNode, cursor, or DOM diff behavior;\n- Qwik core tests that use `$()`, `retryOnPromise`, or private runtime state;\n- an unfamiliar pattern in `packages/qwik/src/core`.\n\nDo not load the reference for simple docs, package metadata, formatting, or unrelated monorepo work.\n\n## Core Reminders\n\n- Prefer existing Qwik runtime patterns over new abstractions.\n- Keep state ownership explicit. For serialized or streamed data, update emit and consume paths\n  together and add a round-trip or regression test.\n- Preserve compatibility deliberately. If deprecated input remains accepted, test both deprecated and\n  current behavior.\n- Use `$`-suffixed functions and `$()` in tests when a QRL boundary is expected.\n- Avoid manual QRL construction unless nearby code already does it for the same reason.\n- Keep tests focused and close to the behavior that changed; add e2e coverage only when browser,\n  streaming, navigation, or integration timing is the behavior under test.\n- If the change affects public API, run `pnpm api.update` after the focused tests pass.\n- If this skill or `references/core-notes.md` is stale after your source inspection, update it before\n  finishing or record why guidance edits were out of scope.\n","AGENTS.md":"<!-- Generated by Ruler -->\n\n\n<!-- Source: .ruler/AGENTS.md -->\n\n# Qwik v2 agents reference, instructions and rules\n\n> [!IMPORTANT]\n> **ALWAYS RUN `ruler apply` AT THE START OF A SESSION.** The agent skills are gitignored, not\n> committed, so a fresh clone/worktree has none until you generate them (once per worktree):\n>\n> ```bash\n> pnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n> ```\n\n> Canonical source for repo-wide AI coding agent rules. For contributor setup, see\n> [CONTRIBUTING.md](./CONTRIBUTING.md). For package-specific workflows, load the relevant\n> `.ruler/skills/*/SKILL.md` file.\n\n## Source Of Truth\n\n- Shared AI guidance lives in `.ruler/`.\n- Only the root `AGENTS.md` and `CLAUDE.md` are committed generated outputs; the `.claude/`/`.codex/`\n  skill copies are gitignored and regenerated locally with `ruler apply` (see Setup below).\n- Never hand-edit a generated output — edit `.ruler/` and regenerate with `ruler apply`. A CI check\n  re-runs it and fails if the committed root files drift.\n- To change assistant behavior, edit `.ruler/AGENTS.md`, `.ruler/README.md`, or `.ruler/skills/**`,\n  then regenerate with Ruler when needed.\n\n## Project Snapshot\n\nQwik is a resumable web framework. SSR serializes application and framework state into HTML, and\nthe client resumes without re-running component code. Qwik v2 is a rewrite with VNode-based\nruntime work, rewritten reactive primitives, a new serialization mechanism, and package names under\n`@qwik.dev/*`.\n\nKey concepts: resumability, QRLs, `$`-suffixed optimizer boundaries, fine-grained signals, VNodes,\nthe cursor system, and the Rust optimizer.\n\n## Monorepo Map\n\n- Base branch and release branch for v2 PRs: `main`. V1 lives on the `v1` branch.\n\n| Package | Path | Notes |\n| --- | --- | --- |\n| `@qwik.dev/core` | `packages/qwik` | Core runtime, SSR, optimizer-facing code |\n| `@qwik.dev/router` | `packages/qwik-router` | Routing, middleware, adapters, SSG |\n| `@qwik.dev/react` | `packages/qwik-react` | React integration |\n| `@qwik.dev/utils` | `packages/qwik-utils` | Less-common helpers (`usePoll`, `zod$`), may use qwik internals |\n| `@qwik.dev/dom` | `packages/qwik-dom` | Server-side DOM implementation |\n| `@qwik.dev/qwik-vite` | `packages/qwik-vite` | `vite-plugin-qwik`, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/ts-optimizer` | `packages/ts-optimizer` | TypeScript optimizer, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/optimizer` | `packages/optimizer` | Rust optimizer, WASM, NAPI bindings; kept for parity comparison |\n| `eslint-plugin-qwik` | `packages/eslint-plugin-qwik` | ESLint rules |\n| `create-qwik` | `packages/create-qwik` | Project scaffolding CLI |\n| `qwik-docs` | `packages/docs` | Docs site, private package |\n| `insights` | `packages/insights` | Analytics dashboard, private package |\n\nUse v2 package names (`@qwik.dev/core`, `@qwik.dev/router`, etc.). Do not introduce v1\n`@builder.io/qwik` or `@builder.io/qwik-city` imports except when working on explicit\ncompatibility override code.\n\n## Setup And Iteration Loop\n\nThis is the canonical loop for nearly all framework work. Default to it; do not substitute broader\ncommands:\n\n### getting started\n\n```bash\npnpm i\n```\n\n```bash\n# Materialize the agent skills into .claude/.codex (gitignored) — run once per fresh clone/worktree.\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\n```bash\npnpm build.core # for a fresh start\npnpm build.full # for a fresh start and you are working on the docs or the other packages\npnpm build.rust # only when working on the Rust optimizer; the only step that needs the Rust toolchain\n```\n\nThe local scripts and tests use the TypeScript optimizer (`tsOptimizer: true` in the repo's own\nvite configs and test harnesses), so no Rust toolchain or prebuilt bindings are needed for them.\nKeep that flag on any new repo-owned `qwikVite()` call site; the plugin still defaults to the Rust\noptimizer for published apps. `QWIK_OPTIMIZER=rust` (or `ts`) overrides the flag for a whole run, which\nis how CI runs the e2e suites on both optimizers; it needs `pnpm build.rust` or\n`pnpm build.platform.copy` first.\n### Iterating\n\nPrefer focused commands and builds over repo-wide commands and builds.\n\n```bash\n# Fast dev build — required once before any tests can run, and again after framework\n# source changes when the verification consumes build output (all e2e suites do)\npnpm build.core.dev\n\n# Closest focused unit/spec test\npnpm vitest run packages/qwik/src/core/tests/use-task.spec.tsx\n\n# Focused e2e test\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\n`build.core.dev` also re-emits fresh Qwik and Router `.d.ts` incrementally (via `tscDevDts` + re-export shims), so editing a public signature no longer leaves stale types — `build.watch` skips the type pass to stay instant.\n\nFor Qwik e2e tests, use `--browser=chromium` with `e2e/qwik-e2e/playwright.config.ts`.\n\nRe-run `pnpm build.rust` (or `pnpm build.rust.dev`) when you are touching the optimizer rust code.\n\n### When making a PR\n\n```bash\n# for type-level verification when no focused test covers the change\npnpm tsc.check\n\n# update the API\npnpm api.update\n\n# Verify the build passes\npnpm build.core\n\n# Verify unit tests pass\npnpm test.unit\n\n# Verify the E2Es pass\npnpm test.e2e.chromium\n\n# In case of html output change, update the ssg snapshot\npnpm test.e2e.router.ssg.update\n\n# In case of a new feature, run the test.bench\npnpm test.bench\n\n# In case of qwikloader changes\npnpm vitest packages/qwik/src/qwikloader.unit.ts -u\n```\n\nIf any of those fail, fix and push your changes.\n\n## Rules\n\nRecent Qwik v2 work by core maintainers favors small, behavior-shaped changes with regression proof.\nFollow that bias:\n\n### Guidance Freshness\n\n- If a skill or reference you used is stale, incomplete, or contradicted by current source, update\n  the `.ruler` source guidance before finishing the task unless the user explicitly restricted the\n  scope.\n- Keep new durable lessons in the most specific skill or reference that future agents are likely to\n  load. Do not add package-specific details to these always-on rules unless they affect most tasks.\n- Only add a lesson to a skill when it generalizes to future tasks. Keep single-PR specifics (one\n  module's protocol, one fix's mechanics) in the code and its tests, not in a skill.\n- Write those notes **prescriptively** — the invariants to keep, the traps that cause false passes,\n  where things live, and how to verify — rather than describing how the code currently works. Omit \"don't do X\" prohibitions for anything a test already enforces; the\n  suite is the guardrail, so reserve notes for what it can't self-enforce.\n- When updating guidance, load the `qwik-guidance-maintenance` skill.\n\n### Skill Selection\n\nLoad the relevant skill before non-trivial work in that area:\n\n| Skill | Use when |\n| --- | --- |\n| `qwik-core-development` | Editing/reviewing `packages/qwik/**` core runtime code |\n| `qwik-router-development` | Editing/reviewing router runtime, buildtime, middleware, adapters, or SSG |\n| `qwik-optimizer-development` | Editing/reviewing Rust optimizer, WASM, NAPI, or optimizer-facing behavior |\n| `qwik-e2e-verification` | Creating, debugging, or running Playwright e2e suites |\n| `qwik-docs-development` | Writing/editing docs content, docs site routes, or docs LLM outputs |\n| `qwik-guidance-maintenance` | Editing `.ruler/**`, generated-output guidance, or stale skill/reference content |\n\nIf no skill fits, stay with these repo-wide rules and inspect local source before changing code.\n\nIf a skill above is not loadable, its copy has not been generated in this worktree yet — run the\n`ruler apply` step from Setup, or read the source directly at `.ruler/skills/<name>/SKILL.md`.\n\nKeep the `qwik-` prefix on committed source skill names. Ruler copies these skills into\nagent-native skill directories where they may coexist with user or plugin skills, so the prefix keeps\nthe skill list unambiguous outside the repo-local `.ruler` tree.\n\n### Changesets\n\nWhen a change affects published packages, add a changeset under `.changeset/`.\n\n- Use `patch` for bug fixes: focus on the issue rather than the solution.\n- `minor` for new features: explain the new feature.\n- `major` for API removal: may also include a new feature, but it must remove or break a public API.\n- Enforce 1 changeset per change.\n- Write the changeset summary in lowercase (e.g. `fix:`)\n- 1 short sentence (10-ish words) focused on the bug fix or feature. Don't include implementation details.\n\n### Commits\n\n- One coherent set of changes per commit. Do not fold an unrelated fix into a commit for another\n  change.\n- Fixes that are independent of the branch's main change get their own commits, placed before it,\n  so they can be reviewed and cherry-picked on their own.\n- Write the subject as a short imperative summary. The body explains the \"why\" tersely when it is\n  not obvious from the subject. The \"what\" and \"how\" live in the code; summarize them only when the\n  commit is large.\n- When a branch has grown out of that shape, rewrite it into that order before review instead of\n  stacking fix-up commits.\n\n### Code Quality\n\n\n#### Sanity\n\n- Remember to keep your code DRY.\n- Do not leave debug logging or temporary names in the final diff.\n- Only add comments for crucial information that is not self-explanatory. Keep your comments constrained to 1 short sentence (10-ish words) maximum. Focus on explaning the why/issue rather than implementation details.  \n- Write one changeset per patch/minor/major change. Keep the changeset message constrained to 1 short sentence or 2 maximum, focused on the bug fix, feature or breaking changes. Don't explain the internals or implementation details.\n\n#### Naming\n\n- Use names that explain the domain idea, not the implementation trick.\n- Prefer specific names over short names when the value crosses more than a few lines.\n- Name booleans as questions or states, such as `isReady`, `hasSubscribers`, or `shouldFlush`.\n- Name functions by the action they perform, such as `resolveLoaderData()` or\n  `markContainerReady()`.\n- Avoid vague names like `data`, `item`, `temp`, `handle`, `process`, or `doWork` unless the local\n  scope makes the meaning obvious.\n- Keep existing public API names unless the task is intentionally changing the API.\n\n#### Control Flow\n\n- Prefer early returns for invalid, empty, unsupported, or already-handled cases.\n- Avoid deep nesting when a guard clause can make the main path easier to read.\n- Keep the success path visible at the outer indentation level when possible.\n- Do not use clever boolean expressions when a named condition or small helper would be clearer.\n- Keep error and compatibility branches explicit so reviewers can see why they exist.\n\n#### Modularity\n\n- Keep functions focused on one responsibility.\n- Extract a helper when a block has a clear name, is reused, or hides the main path.\n- Do not extract helpers only to move complexity around; the caller should become easier to read.\n- Keep helpers close to their first use unless they are shared across files.\n- Prefer local semantic helpers over broad abstractions.\n- Keep consumer- or framework-specific carve-outs (magic values, special cases) at the boundary that\n  owns that knowledge; do not push them into a generic lower-level utility that should stay agnostic.\n\n#### Review Standard\n\nBefore finishing, read the changed code as if you are new to the package:\n\n1. Can a junior developer explain what each name represents?\n2. Can an AI agent identify the main path without following deeply nested branches?\n3. Are edge cases handled by clear guard clauses or named helpers?\n4. Is the change modular without hiding important state or protocol boundaries?\n\nIf the answer is no, simplify the code before calling the task complete.\n\n### Code Style\n\nPrettier and ESLint define style. Keep semicolons, single quotes, two-space indentation, trailing\ncommas where configured, and always use braces for control flow.\n\nNaming conventions:\n\n| Pattern | Usage |\n| --- | --- |\n| `use*` | Hooks called in component/task scope |\n| `*$` | QRL boundary extracted by the optimizer |\n| `create*` | Factory functions |\n| `*.unit.ts(x)` | Vitest unit files |\n| `*.spec.ts(x)` | Vitest spec files |\n| `*.e2e.ts` | Playwright e2e files |\n\n### Security And Supply Chain\n\nTreat security-sensitive changes as behavior changes even when they look like config, dependency,\nor CI maintenance.\n\n#### Security Review Trigger\n\nPause for a focused security pass when a change touches:\n\n- authentication, authorization, sessions, cookies, redirects, URL parsing, filesystem paths, SSR,\n  serialization, HTML/script output, request handling, or server adapters\n- dependency versions, lockfiles, package manager settings, release scripts, publishing scripts, or\n  build tooling\n- GitHub Actions, reusable workflows, workflow permissions, tokens, secrets, cache keys, artifact\n  upload/download, or deployment credentials\n\nUse the changed diff as the starting point. Check directly supporting files when needed, but do not\nturn a small change into a repository-wide security scan unless the user asks.\n\n#### What To Check\n\n- Identify the trust boundary: attacker-controlled input, untrusted dependency code, untrusted CI\n  event data, secrets, tokens, publish credentials, or generated output.\n- Find the closest existing guard and the sink it protects. Do not claim safety from a broad\n  intuition; point to the concrete validation, escaping, permission, or isolation boundary.\n- Prefer fail-closed behavior for malformed input, unknown modes, unsupported hosts, and missing\n  config.\n- Keep secrets out of logs, snapshots, artifacts, caches, generated files, browser output, and error\n  messages.\n- When changing dependencies or build tools, check for new install scripts, binary downloads,\n  network fetches, transitive tool execution, license or provenance surprises, and lockfile drift.\n\n#### GitHub Actions\n\nWhen editing `.github/workflows/**` or action-related scripts:\n\n- Keep `permissions:` least-privilege at the workflow or job level.\n- Do not introduce `pull_request_target` for code checkout/build/test of untrusted PR content unless\n  the workflow is explicitly designed to avoid running attacker-controlled code with secrets.\n- Avoid passing secrets to forked PRs, third-party actions, shell commands that print env, or\n  generated artifacts.\n- Prefer trusted first-party actions. For new third-party actions, pin to a full commit SHA or\n  document why a moving tag is acceptable.\n- Treat cache restore keys and artifact paths as untrusted input surfaces. Avoid broad paths that can\n  poison future jobs or expose credentials.\n- Quote shell variables and avoid `eval`, curl-piped shells, and unchecked interpolation of GitHub\n  context values into shell commands.\n\n#### Verification\n\nFor security-sensitive changes, record the focused security reasoning in the final response:\n\n1. What boundary changed?\n2. What guard or invariant prevents abuse?\n3. What focused test, lint, config check, or manual inspection covered it?\n\nIf you cannot verify the security property locally, say exactly what remains unverified.\n\n### Test Driven Development\n\nUse test-driven development for behavior changes and bug fixes.\n\n#### Required Workflow\n\n1. Identify the observable behavior or invariant before editing implementation code.\n2. Add or update the closest focused test that proves the behavior.\n3. Run that test before the implementation change when feasible and confirm it fails for the\n   expected reason.\n4. Make the smallest implementation change that satisfies the test.\n5. Rerun the focused test and keep iterating until it passes.\n6. Run any broader verification required by the touched surface, such as API docs, optimizer\n   snapshots, build output, or e2e coverage.\n\n#### Test Selection\n\n- Prefer unit/spec tests next to the changed code.\n- Use optimizer fixtures and snapshots for Rust transform behavior.\n- Use e2e tests only when the behavior depends on a real browser, navigation, streaming, SSR/CSR\n  integration, adapter behavior, or fixture app wiring.\n- For serialization, hydration, streaming, or loader protocol changes, test both the writer and the\n  reader path.\n- For compatibility behavior, test both the current API path and the supported deprecated path.\n\n#### Exceptions\n\nDocs-only, rules-only, formatting-only, dependency metadata, and generated-output maintenance\nchanges do not need a failing product test first. They still need the narrowest relevant\nverification, such as formatting, Ruler dry-run, generated-output checks, or docs build checks.\n\nIf dependencies, missing generated artifacts, or local environment constraints prevent a pre-fix\ntest run, write the focused test first, record the blocker, and run the test as soon as the blocker\nis resolved.\n\n### Boundaries\n\n- Preserve user work and unrelated changes. Do not reset or revert unrelated files.\n- Keep edits scoped to the package, generated-file boundary, and verification surface implied by the\n  task.\n- Do not commit `.only` tests.\n- Do not skip tests for behavior changes; use the closest focused test first.\n\n### No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n#### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n\n\n\n<!-- Source: .ruler/README.md -->\n\n# Ruler Setup\n\nThis project uses [Ruler](https://github.com/intellectronica/ruler) to keep AI assistant instructions in one committed source of truth.\n\n## Source Of Truth\n\n```\n.ruler/\n├── AGENTS.md      # Repo-wide guidance + always-on rules (appended at the end)\n├── skills/        # Shared source skills propagated by Ruler\n└── ruler.toml     # Ruler agent configuration\n```\n\nUse `.ruler/AGENTS.md` for always-on repository context and rules (the rules live as sections at the\nend of that file). Use `.ruler/skills/` for task-specific workflows that should be loaded only when\nrelevant.\n\nAlways-on rules currently in `.ruler/AGENTS.md`:\n\n- `changeset-conventions`\n- `commit-conventions`\n- `code-quality`\n- `generated-output-boundaries`\n- `guidance-source-of-truth`\n- `no-hydration-terminology`\n- `security-and-supply-chain`\n- `test-driven-development`\n\nCurrent source skills:\n\n- `qwik-core-development`\n- `qwik-router-development`\n- `qwik-optimizer-development`\n- `qwik-e2e-verification`\n- `qwik-docs-development`\n- `qwik-guidance-maintenance`\n\nThe `qwik-` prefix is intentional. Ruler copies skills into assistant-native directories where they\ncan appear beside personal and plugin skills, so the prefix keeps these repo skills recognizable\noutside the `.ruler/` tree.\n\nRoot `AGENTS.md` and `CLAUDE.md` are generated by Ruler but committed (so fresh clones and worktrees\nhave the always-on guidance immediately). The generated skill directories (`.claude/skills/`,\n`.codex/skills/`) and the rest of `.claude/`/`.codex/`/`.cursor/` stay local and gitignored — run\n`ruler apply` to materialize the skills. Never edit a generated file directly — update `.ruler/`,\nrun `ruler apply`, and commit the regenerated root files.\n\n## AI Config Builder\n\nTreat Ruler as the source layer and the selected assistant as the output layer.\n\nWhen you are setting up or debugging an assistant-specific config:\n\n1. Identify the target assistant and Ruler agent id.\n2. Read this file and `.ruler/ruler.toml`.\n3. Research the target assistant's current native instruction, rule, skill, config, and policy\n   formats when the mapping is ambiguous.\n4. Map `.ruler` files by semantic role, not by filename.\n5. Run `ruler apply --agents <agent>`.\n6. Verify that the generated files contain the expected source guidance and skills.\n\n| Ruler source | Semantic role | Builder action |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Repo-wide AI guidance + always-on rules | Generate into the target assistant's primary native guidance file. |\n| `.ruler/skills/*/SKILL.md` | Task-triggered workflows | Copy to the target assistant's native skills directory when supported. |\n| `.ruler/ruler.toml` and Ruler MCP config | Agent selection, output paths, MCP/config | Generate or merge native config only where Ruler and the target assistant support it. |\n\nDifferent tools use words like \"rules\" for different things. A native rules file may mean\nnatural-language guidance, directory-scoped steering, MCP config, hooks, or command execution\npolicy. Check current docs or the installed Ruler adapter before creating or copying a tool-specific\nfile.\n\n## Markdown Guidance Bundle\n\nThe AI-agnostic Markdown guidance bundle is `.ruler/AGENTS.md` (repo-wide context plus the always-on\nrules appended at its end) together with this `.ruler/README.md`.\n\nRuler concatenates that bundle and writes it to each selected assistant's native AI guidance file.\nUse source markers in the generated file to verify inclusion. Do not bypass Ruler by copying these\nMarkdown files into a tool-specific directory whose format has not been verified.\n\nIf you are an AI assistant building local config for a target tool, research that tool's current\nnative guidance, skill, config, and policy formats before adding any tool-specific output. Map\n`.ruler` files by what they mean, not by filename: Markdown guidance belongs in the assistant's\nnative AI guidance surface, skills belong in native skills if supported, and command-permission\npolicy belongs only in a separately researched policy format. For Codex, Ruler includes all\n`.ruler` Markdown guidance in generated `AGENTS.md`; `.codex/rules/*.rules` is command policy, not\nMarkdown guidance.\n\n### Worked Example: Codex\n\nCurrent Ruler and OpenAI Codex behavior maps this repo's sources as follows:\n\n| Ruler source | Codex-native output | Verify after `ruler apply --agents codex` |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Generated root `AGENTS.md` | `rg -n 'Source: .ruler/AGENTS.md' AGENTS.md` |\n| `.ruler/skills/*/SKILL.md` | `.codex/skills/*/SKILL.md` | `find .codex/skills -name SKILL.md` |\n| Ruler MCP config | `.codex/config.toml` when MCP config is generated | `test -f .codex/config.toml` when MCP/config is expected |\n\nCodex `.rules` files are command execution policy files that use `prefix_rule(...)`. They are not a\ntarget for `.ruler/AGENTS.md` prose guidance. If Codex command policy is needed, maintain it as a\nseparate local or team policy using OpenAI Codex's `.rules` format; do not treat it as Ruler\nMarkdown guidance.\n\nExpected Codex check:\n\n```bash\nruler apply --agents codex\nrg -n 'Source: .ruler/AGENTS.md' AGENTS.md\nfind .codex/skills -name SKILL.md\n```\n\n## What Is Committed vs Regenerated\n\nOnly the root `AGENTS.md` and `CLAUDE.md` are **committed** generated outputs, so a fresh clone or\nworktree has the always-on guidance immediately (`.ruler/ruler.toml` keeps `[gitignore] enabled = false`\nso Ruler leaves those two files tracked). The generated skill copies (`.claude/skills/`,\n`.codex/skills/`) are **gitignored** — regenerate them locally with `ruler apply`. This keeps skill\nand note edits from appearing three times (source plus two copies) in every PR.\n\nTo change guidance, edit `.ruler/`, run `ruler apply`, and commit the regenerated root files\nalongside your `.ruler/` change. Never hand-edit the generated files. A CI check\n(`.github/workflows/ruler-check.yml`) re-runs `ruler apply` and fails if the committed root files\ndrift from `.ruler/`.\n\n## Generate Local Assistant Files\n\nInstall Ruler if you do not already have it:\n\n```bash\nnpm install -g @intellectronica/ruler\n```\n\nOr run it without installing (the form used by fresh worktrees and CI):\n\n```bash\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\nGenerate files for the default configured agents:\n\n```bash\nruler apply\n```\n\nGenerate files for a specific assistant:\n\n```bash\nruler apply --agents claude\nruler apply --agents codex\n```\n\nGenerate files for multiple assistants:\n\n```bash\nruler apply --agents claude,codex\n```\n\n## Project And Personal Configuration\n\nUse `.ruler/` for team-shared instructions and project conventions that should travel with the repo.\n\nUse `~/.config/ruler/` for personal preferences, local workflow shortcuts, API keys, and personal MCP servers:\n\n```bash\nruler init --global\n```\n\nIf it helps everyone working in this repo, add it to `.ruler/`. If it only helps your local setup,\nkeep it in your global Ruler config.\n\n## Updating Instructions\n\nEdit `.ruler/AGENTS.md` for repository-wide guidance and always-on rules (the rules are sections at\nthe end of that file). Edit the relevant `.ruler/skills/<skill-name>/SKILL.md` file for\npackage-specific or workflow-specific guidance.\n\nIf a code task proves a skill or reference stale, update that guidance as part of the same task when\nthe scope allows it.\n\nThen regenerate the local assistant files:\n\n```bash\nruler apply --agents <your-tool>\n```\n\nDo not update generated files like `CLAUDE.md` or `AGENTS.md` by hand. They will be overwritten the\nnext time Ruler runs.\n\n## Skills\n\nAuthor shared skills under `.ruler/skills/` (the committed source). Ruler copies them into each\nenabled agent's skill directory (`.claude/skills/` for Claude, `.codex/skills/` for Codex); those\ncopies are gitignored, so run `ruler apply` once per fresh clone or worktree to materialize them.\nNever hand-edit the copies — edit `.ruler/skills/` and regenerate.\n\nKeep each skill focused:\n\n- Use frontmatter with `name` and a trigger-oriented `description`.\n- Put the fast path in `SKILL.md`.\n- Move long notes into `references/` only when progressive disclosure helps.\n- Keep always-on policy in `.ruler/AGENTS.md`, not duplicated in every skill.\n- Keep durable maintainer lessons current. Prefer updating the specific skill/reference that was\n  wrong over adding broad prose here.\n",".ruler/skills/qwik-optimizer-development/SKILL.md":"---\nname: qwik-optimizer-development\ndescription: Use when modifying or reviewing the Qwik optimizer under packages/optimizer, Rust transform code, WASM/NAPI bindings, optimizer snapshots, or optimizer-facing runtime behavior.\n---\n\n# Qwik Optimizer Development\n\nUse this skill for `packages/optimizer/**` and Rust optimizer work. Keep the repo-wide rules from\n`.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify whether the change is Rust transform logic, snapshots, WASM bindings, NAPI bindings, or\n   TypeScript optimizer-facing integration.\n2. Read the closest Rust source, fixture, snapshot, and runtime helper that consumes the emitted\n   shape before editing.\n3. Keep transform behavior deterministic: prefer explicit parser/AST cases and stable ordering over\n   source-text heuristics.\n4. Use Rust-focused verification first; use `pnpm build.rust` only when a full binding/WASM rebuild\n   is required. It is the only build step that needs the Rust toolchain and `wasm-pack`.\n5. If a runtime/core change is also involved, load `qwik-core-development` for that slice.\n\n## Source Map\n\n- Rust optimizer core: `packages/optimizer/core/src/`\n- Rust fixtures: `packages/optimizer/core/src/fixtures/`\n- Rust snapshots: `packages/optimizer/core/src/snapshots/`\n- WASM bindings: `packages/optimizer/wasm/`\n- NAPI bindings: `packages/optimizer/napi/`\n- Optimizer package entry points: `packages/optimizer/src/`\n- Vite/Rollup integration: `packages/qwik-vite/src/`\n\n## Verification\n\nUse the smallest command that covers the change:\n\n```bash\npnpm lint.rust\npnpm test.rust\npnpm test.rust.update\npnpm build.rust\npnpm vitest run packages/qwik-vite/src/plugins/plugin.unit.ts\n```\n\n`pnpm test.rust` maps to `make test`, which runs Cargo tests for\n`packages/optimizer/core/Cargo.toml`. Use `pnpm test.rust.update` only when snapshot updates are\nintentional. The repo's own scripts and tests run on the TypeScript optimizer, and CI runs core\nspecs only there. To run a focused spec on the Rust optimizer, rebuild the native binding\n(`pnpm build.rust.dev`; `scripts/index.ts --optimizer --platform-binding --dev` skips WASM) and\nrerun the spec with `QWIK_OPTIMIZER=rust`.\n\n## Baselining a TypeScript optimizer failure\n\nThe repo's unit and e2e suites run on the TypeScript optimizer, so a parity bug shows up as a\nfailing core test rather than a snapshot diff. To tell a TS-only bug from a pre-existing failure:\n\n1. `pnpm build.platform.copy` downloads the published Rust bindings (no toolchain needed).\n2. Rerun the failing file with `QWIK_OPTIMIZER=rust`, which overrides `tsOptimizer` for the run.\n3. Transform the failing source with both `createOptimizer`s (`packages/optimizer/dist/index.mjs`\n   and `packages/qwik/dist/ts-optimizer.mjs`) using the plugin's options (server: `hoist`,\n   `minify: 'simplify'`, plus the client `stripCtxName`/`stripExports` and server\n   `stripEventHandlers` lists from `packages/qwik-vite/src/plugins/plugin.ts`) and diff the\n   outputs; without the strip options a diff can look identical while the real build differs.\n   Call sites (`.w([captures])`, `q:p`, stripped `q_qrl_*` sentinels) diverge more often than\n   segment bodies.\n   When an e2e app misbehaves, baseline the app build too, not only the router library: the dev\n   server compiles the fixture apps with whichever optimizer its `qwikVite()` call selects.\n   Compare `segment.entry` per display name as well, in `mode: 'prod'`: a grouping gap shows up\n   only as a different bundle count in the app's `q-manifest.json`, never as a failing test.\n   The router SSG snapshot e2e runs on both optimizers in CI, so any output difference between\n   them fails there; keep it that way instead of skipping one leg.\n4. Rebuild the bundle with `pnpm build --optimizer --dev` before rerunning core tests; vitest loads\n   `packages/qwik/dist/ts-optimizer.mjs`, not the optimizer source.\n\n## TypeScript-only syntax\n\nEvery pass after `stripTypeScript` parses its input as `.js`, and oxc drops syntax that only parses\nas TypeScript (parameter decorators) from those ASTs, so what it references looks unused and gets\nDCE'd. Lower such syntax inside `stripTypeScript` itself, threading the option to every call site\n(see `decorator`); lowering later in the Vite plugin is too late. Segments are served as `.js`, so\nVite's own `vite:oxc` pass never touches them.\n\n## JSX tag names\n\nRust transpiles JSX before its Qwik transform, so SWC's rule decides what a tag is: only a tag\nstarting with `[a-z]` is an intrinsic element, while `<Foo>`, `<_Foo>` and the object of\n`<ui.Home>` read bindings. In the TypeScript optimizer, ask oxc-walker's `isReferenceIdentifier`\n(or `isNonReferenceIdentifier`) whether a `JSXIdentifier` reads a binding, and `isHtmlElement`\nwhether a tag is intrinsic.\n\n## Const prop bag\n\nThe runtime trusts a const prop to stay the same for the component's lifetime: reads never\nsubscribe, `_wrapProp` returns const values unwrapped, and SSR skips serializing all-const props.\nIf one changes anyway, the child only re-renders and its `useComputed$`/`useTask$` readers go stale.\nSo either optimizer may put a prop, including a `_fnSignal`/`_wrapProp` wrapper, in the const bag\nonly when every local it reads survives re-renders: imports, `const` bindings with a static\ninitializer (`use*`, `*$`, `*Qrl` calls), or params. Render-computed locals and `_restProps` copies\nare recreated per render and belong in the var bag. Unit specs pass on the TS optimizer alone, so\npin classification with a `test_input!` snapshot and check the runtime with `QWIK_OPTIMIZER=rust`.\n\n## Worker pool changes\n\nThe transform worker pool (`packages/ts-optimizer/src/worker-pool.ts`) never starts real workers\nunder vitest: the worker entry cannot resolve the `.js`-suffixed imports of the TypeScript sources,\nso pool tests silently fall back to in-process transforms. Verify worker behaviour against the\nbuilt bundle instead: `pnpm build --optimizer`, then a Node script that imports\n`packages/qwik/dist/ts-optimizer.mjs`, runs a few transforms, and reads `VmData` from\n`/proc/self/status` before spawning a child process. fork() fails with ENOMEM when one mapping\nexceeds RAM plus swap, and the raw-transfer buffers of several threads in one process coalesce into\none mapping (three workers made an 18 GB mapping on a 16 GB host), so keep raw-transfer parsing\nand other multi-gigabyte reservations out of the workers. `QWIK_TS_OPTIMIZER_RAW_TRANSFER=0` turns\nraw transfer off in the host as well when a spawn still fails with ENOMEM.\n\n## Generated Binding Names\n\nBoth optimizers invent bindings (`_rawProps`, `_defaultValue`, the `use*` destructure flattening).\nNeither gets a scope-correct rename for free, so name uniqueness is the transform's job:\n\n- Rust: `private_ident!` plus swc hygiene is not enough once a binding is captured by an extracted\n  segment. Hygiene commits one name per `SyntaxContext` in source order, and segments lifted to\n  module scope are sibling scopes that each keep the base name — the enclosing component scope then\n  carries a duplicate declaration hygiene never revisits. Number generated names at creation.\n- TypeScript: there is no hygiene pass at all, and the rewrite matches identifiers by name. Number\n  every generated binding, skip names inside destructuring patterns, and resolve references through\n  oxc-walker's `ScopeTracker` so names re-bound in a nested scope keep their declaration. Do not\n  bail out of the rewrite on shadowing — Rust still consolidates, and the snapshot diverges.\n- Props objects (`_rawProps`) follow Rust hygiene: each takes the lowest `_rawProps{n}` not held by\n  a props object bound beside it, in emission order. A segment file is its own module; inline `.s()`\n  bodies share one, so never hardcode a suffix — go through `rawPropsBindingNames`.\n\nPin cross-optimizer behavior with a Rust `test_input!` snapshot registered in\n`packages/ts-optimizer/tests/optimizer/snapshot-options.ts`, not with string asserts in a TS test:\nonly the convergence suite catches parity drift. Its mismatches fail in the final\n`convergence summary` test, so a `-t` filter that skips it reports a false pass.\n\n## Hard Rules\n\n- Do not hand-edit generated optimizer build output in `dist/`, `lib/`, or `target/`.\n- Do not update snapshots without understanding the transform behavior change.\n- Add or update a transform fixture/snapshot for every optimizer behavior change, including negative\n  cases where the transform must not run.\n- Keep optimizer output and runtime JSX/QRL/loader semantics in sync. If a transform changes an\n  emitted attribute, import, segment, or capture shape, inspect the runtime consumer too.\n- After touching `packages/optimizer/core/`, do not claim verification without Rust test/build\n  evidence or a recorded blocker.\n- If this skill becomes stale after source inspection, update it before finishing or record why\n  guidance edits were out of scope.\n","CLAUDE.md":"\n\n<!-- Source: .ruler/AGENTS.md -->\n\n# Qwik v2 agents reference, instructions and rules\n\n> [!IMPORTANT]\n> **ALWAYS RUN `ruler apply` AT THE START OF A SESSION.** The agent skills are gitignored, not\n> committed, so a fresh clone/worktree has none until you generate them (once per worktree):\n>\n> ```bash\n> pnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n> ```\n\n> Canonical source for repo-wide AI coding agent rules. For contributor setup, see\n> [CONTRIBUTING.md](./CONTRIBUTING.md). For package-specific workflows, load the relevant\n> `.ruler/skills/*/SKILL.md` file.\n\n## Source Of Truth\n\n- Shared AI guidance lives in `.ruler/`.\n- Only the root `AGENTS.md` and `CLAUDE.md` are committed generated outputs; the `.claude/`/`.codex/`\n  skill copies are gitignored and regenerated locally with `ruler apply` (see Setup below).\n- Never hand-edit a generated output — edit `.ruler/` and regenerate with `ruler apply`. A CI check\n  re-runs it and fails if the committed root files drift.\n- To change assistant behavior, edit `.ruler/AGENTS.md`, `.ruler/README.md`, or `.ruler/skills/**`,\n  then regenerate with Ruler when needed.\n\n## Project Snapshot\n\nQwik is a resumable web framework. SSR serializes application and framework state into HTML, and\nthe client resumes without re-running component code. Qwik v2 is a rewrite with VNode-based\nruntime work, rewritten reactive primitives, a new serialization mechanism, and package names under\n`@qwik.dev/*`.\n\nKey concepts: resumability, QRLs, `$`-suffixed optimizer boundaries, fine-grained signals, VNodes,\nthe cursor system, and the Rust optimizer.\n\n## Monorepo Map\n\n- Base branch and release branch for v2 PRs: `main`. V1 lives on the `v1` branch.\n\n| Package | Path | Notes |\n| --- | --- | --- |\n| `@qwik.dev/core` | `packages/qwik` | Core runtime, SSR, optimizer-facing code |\n| `@qwik.dev/router` | `packages/qwik-router` | Routing, middleware, adapters, SSG |\n| `@qwik.dev/react` | `packages/qwik-react` | React integration |\n| `@qwik.dev/utils` | `packages/qwik-utils` | Less-common helpers (`usePoll`, `zod$`), may use qwik internals |\n| `@qwik.dev/dom` | `packages/qwik-dom` | Server-side DOM implementation |\n| `@qwik.dev/qwik-vite` | `packages/qwik-vite` | `vite-plugin-qwik`, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/ts-optimizer` | `packages/ts-optimizer` | TypeScript optimizer, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/optimizer` | `packages/optimizer` | Rust optimizer, WASM, NAPI bindings; kept for parity comparison |\n| `eslint-plugin-qwik` | `packages/eslint-plugin-qwik` | ESLint rules |\n| `create-qwik` | `packages/create-qwik` | Project scaffolding CLI |\n| `qwik-docs` | `packages/docs` | Docs site, private package |\n| `insights` | `packages/insights` | Analytics dashboard, private package |\n\nUse v2 package names (`@qwik.dev/core`, `@qwik.dev/router`, etc.). Do not introduce v1\n`@builder.io/qwik` or `@builder.io/qwik-city` imports except when working on explicit\ncompatibility override code.\n\n## Setup And Iteration Loop\n\nThis is the canonical loop for nearly all framework work. Default to it; do not substitute broader\ncommands:\n\n### getting started\n\n```bash\npnpm i\n```\n\n```bash\n# Materialize the agent skills into .claude/.codex (gitignored) — run once per fresh clone/worktree.\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\n```bash\npnpm build.core # for a fresh start\npnpm build.full # for a fresh start and you are working on the docs or the other packages\npnpm build.rust # only when working on the Rust optimizer; the only step that needs the Rust toolchain\n```\n\nThe local scripts and tests use the TypeScript optimizer (`tsOptimizer: true` in the repo's own\nvite configs and test harnesses), so no Rust toolchain or prebuilt bindings are needed for them.\nKeep that flag on any new repo-owned `qwikVite()` call site; the plugin still defaults to the Rust\noptimizer for published apps. `QWIK_OPTIMIZER=rust` (or `ts`) overrides the flag for a whole run, which\nis how CI runs the e2e suites on both optimizers; it needs `pnpm build.rust` or\n`pnpm build.platform.copy` first.\n### Iterating\n\nPrefer focused commands and builds over repo-wide commands and builds.\n\n```bash\n# Fast dev build — required once before any tests can run, and again after framework\n# source changes when the verification consumes build output (all e2e suites do)\npnpm build.core.dev\n\n# Closest focused unit/spec test\npnpm vitest run packages/qwik/src/core/tests/use-task.spec.tsx\n\n# Focused e2e test\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\n`build.core.dev` also re-emits fresh Qwik and Router `.d.ts` incrementally (via `tscDevDts` + re-export shims), so editing a public signature no longer leaves stale types — `build.watch` skips the type pass to stay instant.\n\nFor Qwik e2e tests, use `--browser=chromium` with `e2e/qwik-e2e/playwright.config.ts`.\n\nRe-run `pnpm build.rust` (or `pnpm build.rust.dev`) when you are touching the optimizer rust code.\n\n### When making a PR\n\n```bash\n# for type-level verification when no focused test covers the change\npnpm tsc.check\n\n# update the API\npnpm api.update\n\n# Verify the build passes\npnpm build.core\n\n# Verify unit tests pass\npnpm test.unit\n\n# Verify the E2Es pass\npnpm test.e2e.chromium\n\n# In case of html output change, update the ssg snapshot\npnpm test.e2e.router.ssg.update\n\n# In case of a new feature, run the test.bench\npnpm test.bench\n\n# In case of qwikloader changes\npnpm vitest packages/qwik/src/qwikloader.unit.ts -u\n```\n\nIf any of those fail, fix and push your changes.\n\n## Rules\n\nRecent Qwik v2 work by core maintainers favors small, behavior-shaped changes with regression proof.\nFollow that bias:\n\n### Guidance Freshness\n\n- If a skill or reference you used is stale, incomplete, or contradicted by current source, update\n  the `.ruler` source guidance before finishing the task unless the user explicitly restricted the\n  scope.\n- Keep new durable lessons in the most specific skill or reference that future agents are likely to\n  load. Do not add package-specific details to these always-on rules unless they affect most tasks.\n- Only add a lesson to a skill when it generalizes to future tasks. Keep single-PR specifics (one\n  module's protocol, one fix's mechanics) in the code and its tests, not in a skill.\n- Write those notes **prescriptively** — the invariants to keep, the traps that cause false passes,\n  where things live, and how to verify — rather than describing how the code currently works. Omit \"don't do X\" prohibitions for anything a test already enforces; the\n  suite is the guardrail, so reserve notes for what it can't self-enforce.\n- When updating guidance, load the `qwik-guidance-maintenance` skill.\n\n### Skill Selection\n\nLoad the relevant skill before non-trivial work in that area:\n\n| Skill | Use when |\n| --- | --- |\n| `qwik-core-development` | Editing/reviewing `packages/qwik/**` core runtime code |\n| `qwik-router-development` | Editing/reviewing router runtime, buildtime, middleware, adapters, or SSG |\n| `qwik-optimizer-development` | Editing/reviewing Rust optimizer, WASM, NAPI, or optimizer-facing behavior |\n| `qwik-e2e-verification` | Creating, debugging, or running Playwright e2e suites |\n| `qwik-docs-development` | Writing/editing docs content, docs site routes, or docs LLM outputs |\n| `qwik-guidance-maintenance` | Editing `.ruler/**`, generated-output guidance, or stale skill/reference content |\n\nIf no skill fits, stay with these repo-wide rules and inspect local source before changing code.\n\nIf a skill above is not loadable, its copy has not been generated in this worktree yet — run the\n`ruler apply` step from Setup, or read the source directly at `.ruler/skills/<name>/SKILL.md`.\n\nKeep the `qwik-` prefix on committed source skill names. Ruler copies these skills into\nagent-native skill directories where they may coexist with user or plugin skills, so the prefix keeps\nthe skill list unambiguous outside the repo-local `.ruler` tree.\n\n### Changesets\n\nWhen a change affects published packages, add a changeset under `.changeset/`.\n\n- Use `patch` for bug fixes: focus on the issue rather than the solution.\n- `minor` for new features: explain the new feature.\n- `major` for API removal: may also include a new feature, but it must remove or break a public API.\n- Enforce 1 changeset per change.\n- Write the changeset summary in lowercase (e.g. `fix:`)\n- 1 short sentence (10-ish words) focused on the bug fix or feature. Don't include implementation details.\n\n### Commits\n\n- One coherent set of changes per commit. Do not fold an unrelated fix into a commit for another\n  change.\n- Fixes that are independent of the branch's main change get their own commits, placed before it,\n  so they can be reviewed and cherry-picked on their own.\n- Write the subject as a short imperative summary. The body explains the \"why\" tersely when it is\n  not obvious from the subject. The \"what\" and \"how\" live in the code; summarize them only when the\n  commit is large.\n- When a branch has grown out of that shape, rewrite it into that order before review instead of\n  stacking fix-up commits.\n\n### Code Quality\n\n\n#### Sanity\n\n- Remember to keep your code DRY.\n- Do not leave debug logging or temporary names in the final diff.\n- Only add comments for crucial information that is not self-explanatory. Keep your comments constrained to 1 short sentence (10-ish words) maximum. Focus on explaning the why/issue rather than implementation details.  \n- Write one changeset per patch/minor/major change. Keep the changeset message constrained to 1 short sentence or 2 maximum, focused on the bug fix, feature or breaking changes. Don't explain the internals or implementation details.\n\n#### Naming\n\n- Use names that explain the domain idea, not the implementation trick.\n- Prefer specific names over short names when the value crosses more than a few lines.\n- Name booleans as questions or states, such as `isReady`, `hasSubscribers`, or `shouldFlush`.\n- Name functions by the action they perform, such as `resolveLoaderData()` or\n  `markContainerReady()`.\n- Avoid vague names like `data`, `item`, `temp`, `handle`, `process`, or `doWork` unless the local\n  scope makes the meaning obvious.\n- Keep existing public API names unless the task is intentionally changing the API.\n\n#### Control Flow\n\n- Prefer early returns for invalid, empty, unsupported, or already-handled cases.\n- Avoid deep nesting when a guard clause can make the main path easier to read.\n- Keep the success path visible at the outer indentation level when possible.\n- Do not use clever boolean expressions when a named condition or small helper would be clearer.\n- Keep error and compatibility branches explicit so reviewers can see why they exist.\n\n#### Modularity\n\n- Keep functions focused on one responsibility.\n- Extract a helper when a block has a clear name, is reused, or hides the main path.\n- Do not extract helpers only to move complexity around; the caller should become easier to read.\n- Keep helpers close to their first use unless they are shared across files.\n- Prefer local semantic helpers over broad abstractions.\n- Keep consumer- or framework-specific carve-outs (magic values, special cases) at the boundary that\n  owns that knowledge; do not push them into a generic lower-level utility that should stay agnostic.\n\n#### Review Standard\n\nBefore finishing, read the changed code as if you are new to the package:\n\n1. Can a junior developer explain what each name represents?\n2. Can an AI agent identify the main path without following deeply nested branches?\n3. Are edge cases handled by clear guard clauses or named helpers?\n4. Is the change modular without hiding important state or protocol boundaries?\n\nIf the answer is no, simplify the code before calling the task complete.\n\n### Code Style\n\nPrettier and ESLint define style. Keep semicolons, single quotes, two-space indentation, trailing\ncommas where configured, and always use braces for control flow.\n\nNaming conventions:\n\n| Pattern | Usage |\n| --- | --- |\n| `use*` | Hooks called in component/task scope |\n| `*$` | QRL boundary extracted by the optimizer |\n| `create*` | Factory functions |\n| `*.unit.ts(x)` | Vitest unit files |\n| `*.spec.ts(x)` | Vitest spec files |\n| `*.e2e.ts` | Playwright e2e files |\n\n### Security And Supply Chain\n\nTreat security-sensitive changes as behavior changes even when they look like config, dependency,\nor CI maintenance.\n\n#### Security Review Trigger\n\nPause for a focused security pass when a change touches:\n\n- authentication, authorization, sessions, cookies, redirects, URL parsing, filesystem paths, SSR,\n  serialization, HTML/script output, request handling, or server adapters\n- dependency versions, lockfiles, package manager settings, release scripts, publishing scripts, or\n  build tooling\n- GitHub Actions, reusable workflows, workflow permissions, tokens, secrets, cache keys, artifact\n  upload/download, or deployment credentials\n\nUse the changed diff as the starting point. Check directly supporting files when needed, but do not\nturn a small change into a repository-wide security scan unless the user asks.\n\n#### What To Check\n\n- Identify the trust boundary: attacker-controlled input, untrusted dependency code, untrusted CI\n  event data, secrets, tokens, publish credentials, or generated output.\n- Find the closest existing guard and the sink it protects. Do not claim safety from a broad\n  intuition; point to the concrete validation, escaping, permission, or isolation boundary.\n- Prefer fail-closed behavior for malformed input, unknown modes, unsupported hosts, and missing\n  config.\n- Keep secrets out of logs, snapshots, artifacts, caches, generated files, browser output, and error\n  messages.\n- When changing dependencies or build tools, check for new install scripts, binary downloads,\n  network fetches, transitive tool execution, license or provenance surprises, and lockfile drift.\n\n#### GitHub Actions\n\nWhen editing `.github/workflows/**` or action-related scripts:\n\n- Keep `permissions:` least-privilege at the workflow or job level.\n- Do not introduce `pull_request_target` for code checkout/build/test of untrusted PR content unless\n  the workflow is explicitly designed to avoid running attacker-controlled code with secrets.\n- Avoid passing secrets to forked PRs, third-party actions, shell commands that print env, or\n  generated artifacts.\n- Prefer trusted first-party actions. For new third-party actions, pin to a full commit SHA or\n  document why a moving tag is acceptable.\n- Treat cache restore keys and artifact paths as untrusted input surfaces. Avoid broad paths that can\n  poison future jobs or expose credentials.\n- Quote shell variables and avoid `eval`, curl-piped shells, and unchecked interpolation of GitHub\n  context values into shell commands.\n\n#### Verification\n\nFor security-sensitive changes, record the focused security reasoning in the final response:\n\n1. What boundary changed?\n2. What guard or invariant prevents abuse?\n3. What focused test, lint, config check, or manual inspection covered it?\n\nIf you cannot verify the security property locally, say exactly what remains unverified.\n\n### Test Driven Development\n\nUse test-driven development for behavior changes and bug fixes.\n\n#### Required Workflow\n\n1. Identify the observable behavior or invariant before editing implementation code.\n2. Add or update the closest focused test that proves the behavior.\n3. Run that test before the implementation change when feasible and confirm it fails for the\n   expected reason.\n4. Make the smallest implementation change that satisfies the test.\n5. Rerun the focused test and keep iterating until it passes.\n6. Run any broader verification required by the touched surface, such as API docs, optimizer\n   snapshots, build output, or e2e coverage.\n\n#### Test Selection\n\n- Prefer unit/spec tests next to the changed code.\n- Use optimizer fixtures and snapshots for Rust transform behavior.\n- Use e2e tests only when the behavior depends on a real browser, navigation, streaming, SSR/CSR\n  integration, adapter behavior, or fixture app wiring.\n- For serialization, hydration, streaming, or loader protocol changes, test both the writer and the\n  reader path.\n- For compatibility behavior, test both the current API path and the supported deprecated path.\n\n#### Exceptions\n\nDocs-only, rules-only, formatting-only, dependency metadata, and generated-output maintenance\nchanges do not need a failing product test first. They still need the narrowest relevant\nverification, such as formatting, Ruler dry-run, generated-output checks, or docs build checks.\n\nIf dependencies, missing generated artifacts, or local environment constraints prevent a pre-fix\ntest run, write the focused test first, record the blocker, and run the test as soon as the blocker\nis resolved.\n\n### Boundaries\n\n- Preserve user work and unrelated changes. Do not reset or revert unrelated files.\n- Keep edits scoped to the package, generated-file boundary, and verification surface implied by the\n  task.\n- Do not commit `.only` tests.\n- Do not skip tests for behavior changes; use the closest focused test first.\n\n### No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n#### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n\n\n\n<!-- Source: .ruler/README.md -->\n\n# Ruler Setup\n\nThis project uses [Ruler](https://github.com/intellectronica/ruler) to keep AI assistant instructions in one committed source of truth.\n\n## Source Of Truth\n\n```\n.ruler/\n├── AGENTS.md      # Repo-wide guidance + always-on rules (appended at the end)\n├── skills/        # Shared source skills propagated by Ruler\n└── ruler.toml     # Ruler agent configuration\n```\n\nUse `.ruler/AGENTS.md` for always-on repository context and rules (the rules live as sections at the\nend of that file). Use `.ruler/skills/` for task-specific workflows that should be loaded only when\nrelevant.\n\nAlways-on rules currently in `.ruler/AGENTS.md`:\n\n- `changeset-conventions`\n- `commit-conventions`\n- `code-quality`\n- `generated-output-boundaries`\n- `guidance-source-of-truth`\n- `no-hydration-terminology`\n- `security-and-supply-chain`\n- `test-driven-development`\n\nCurrent source skills:\n\n- `qwik-core-development`\n- `qwik-router-development`\n- `qwik-optimizer-development`\n- `qwik-e2e-verification`\n- `qwik-docs-development`\n- `qwik-guidance-maintenance`\n\nThe `qwik-` prefix is intentional. Ruler copies skills into assistant-native directories where they\ncan appear beside personal and plugin skills, so the prefix keeps these repo skills recognizable\noutside the `.ruler/` tree.\n\nRoot `AGENTS.md` and `CLAUDE.md` are generated by Ruler but committed (so fresh clones and worktrees\nhave the always-on guidance immediately). The generated skill directories (`.claude/skills/`,\n`.codex/skills/`) and the rest of `.claude/`/`.codex/`/`.cursor/` stay local and gitignored — run\n`ruler apply` to materialize the skills. Never edit a generated file directly — update `.ruler/`,\nrun `ruler apply`, and commit the regenerated root files.\n\n## AI Config Builder\n\nTreat Ruler as the source layer and the selected assistant as the output layer.\n\nWhen you are setting up or debugging an assistant-specific config:\n\n1. Identify the target assistant and Ruler agent id.\n2. Read this file and `.ruler/ruler.toml`.\n3. Research the target assistant's current native instruction, rule, skill, config, and policy\n   formats when the mapping is ambiguous.\n4. Map `.ruler` files by semantic role, not by filename.\n5. Run `ruler apply --agents <agent>`.\n6. Verify that the generated files contain the expected source guidance and skills.\n\n| Ruler source | Semantic role | Builder action |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Repo-wide AI guidance + always-on rules | Generate into the target assistant's primary native guidance file. |\n| `.ruler/skills/*/SKILL.md` | Task-triggered workflows | Copy to the target assistant's native skills directory when supported. |\n| `.ruler/ruler.toml` and Ruler MCP config | Agent selection, output paths, MCP/config | Generate or merge native config only where Ruler and the target assistant support it. |\n\nDifferent tools use words like \"rules\" for different things. A native rules file may mean\nnatural-language guidance, directory-scoped steering, MCP config, hooks, or command execution\npolicy. Check current docs or the installed Ruler adapter before creating or copying a tool-specific\nfile.\n\n## Markdown Guidance Bundle\n\nThe AI-agnostic Markdown guidance bundle is `.ruler/AGENTS.md` (repo-wide context plus the always-on\nrules appended at its end) together with this `.ruler/README.md`.\n\nRuler concatenates that bundle and writes it to each selected assistant's native AI guidance file.\nUse source markers in the generated file to verify inclusion. Do not bypass Ruler by copying these\nMarkdown files into a tool-specific directory whose format has not been verified.\n\nIf you are an AI assistant building local config for a target tool, research that tool's current\nnative guidance, skill, config, and policy formats before adding any tool-specific output. Map\n`.ruler` files by what they mean, not by filename: Markdown guidance belongs in the assistant's\nnative AI guidance surface, skills belong in native skills if supported, and command-permission\npolicy belongs only in a separately researched policy format. For Codex, Ruler includes all\n`.ruler` Markdown guidance in generated `AGENTS.md`; `.codex/rules/*.rules` is command policy, not\nMarkdown guidance.\n\n### Worked Example: Codex\n\nCurrent Ruler and OpenAI Codex behavior maps this repo's sources as follows:\n\n| Ruler source | Codex-native output | Verify after `ruler apply --agents codex` |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Generated root `AGENTS.md` | `rg -n 'Source: .ruler/AGENTS.md' AGENTS.md` |\n| `.ruler/skills/*/SKILL.md` | `.codex/skills/*/SKILL.md` | `find .codex/skills -name SKILL.md` |\n| Ruler MCP config | `.codex/config.toml` when MCP config is generated | `test -f .codex/config.toml` when MCP/config is expected |\n\nCodex `.rules` files are command execution policy files that use `prefix_rule(...)`. They are not a\ntarget for `.ruler/AGENTS.md` prose guidance. If Codex command policy is needed, maintain it as a\nseparate local or team policy using OpenAI Codex's `.rules` format; do not treat it as Ruler\nMarkdown guidance.\n\nExpected Codex check:\n\n```bash\nruler apply --agents codex\nrg -n 'Source: .ruler/AGENTS.md' AGENTS.md\nfind .codex/skills -name SKILL.md\n```\n\n## What Is Committed vs Regenerated\n\nOnly the root `AGENTS.md` and `CLAUDE.md` are **committed** generated outputs, so a fresh clone or\nworktree has the always-on guidance immediately (`.ruler/ruler.toml` keeps `[gitignore] enabled = false`\nso Ruler leaves those two files tracked). The generated skill copies (`.claude/skills/`,\n`.codex/skills/`) are **gitignored** — regenerate them locally with `ruler apply`. This keeps skill\nand note edits from appearing three times (source plus two copies) in every PR.\n\nTo change guidance, edit `.ruler/`, run `ruler apply`, and commit the regenerated root files\nalongside your `.ruler/` change. Never hand-edit the generated files. A CI check\n(`.github/workflows/ruler-check.yml`) re-runs `ruler apply` and fails if the committed root files\ndrift from `.ruler/`.\n\n## Generate Local Assistant Files\n\nInstall Ruler if you do not already have it:\n\n```bash\nnpm install -g @intellectronica/ruler\n```\n\nOr run it without installing (the form used by fresh worktrees and CI):\n\n```bash\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\nGenerate files for the default configured agents:\n\n```bash\nruler apply\n```\n\nGenerate files for a specific assistant:\n\n```bash\nruler apply --agents claude\nruler apply --agents codex\n```\n\nGenerate files for multiple assistants:\n\n```bash\nruler apply --agents claude,codex\n```\n\n## Project And Personal Configuration\n\nUse `.ruler/` for team-shared instructions and project conventions that should travel with the repo.\n\nUse `~/.config/ruler/` for personal preferences, local workflow shortcuts, API keys, and personal MCP servers:\n\n```bash\nruler init --global\n```\n\nIf it helps everyone working in this repo, add it to `.ruler/`. If it only helps your local setup,\nkeep it in your global Ruler config.\n\n## Updating Instructions\n\nEdit `.ruler/AGENTS.md` for repository-wide guidance and always-on rules (the rules are sections at\nthe end of that file). Edit the relevant `.ruler/skills/<skill-name>/SKILL.md` file for\npackage-specific or workflow-specific guidance.\n\nIf a code task proves a skill or reference stale, update that guidance as part of the same task when\nthe scope allows it.\n\nThen regenerate the local assistant files:\n\n```bash\nruler apply --agents <your-tool>\n```\n\nDo not update generated files like `CLAUDE.md` or `AGENTS.md` by hand. They will be overwritten the\nnext time Ruler runs.\n\n## Skills\n\nAuthor shared skills under `.ruler/skills/` (the committed source). Ruler copies them into each\nenabled agent's skill directory (`.claude/skills/` for Claude, `.codex/skills/` for Codex); those\ncopies are gitignored, so run `ruler apply` once per fresh clone or worktree to materialize them.\nNever hand-edit the copies — edit `.ruler/skills/` and regenerate.\n\nKeep each skill focused:\n\n- Use frontmatter with `name` and a trigger-oriented `description`.\n- Put the fast path in `SKILL.md`.\n- Move long notes into `references/` only when progressive disclosure helps.\n- Keep always-on policy in `.ruler/AGENTS.md`, not duplicated in every skill.\n- Keep durable maintainer lessons current. Prefer updating the specific skill/reference that was\n  wrong over adding broad prose here.\n","packages/supabase-auth-helpers-qwik/package.json":"{\n  \"name\": \"supabase-auth-helpers-qwik\",\n  \"description\": \"A collection of Qwik framework specific Auth utilities for working with Supabase.\",\n  \"version\": \"0.0.4-beta.0\",\n  \"author\": \"Qwik Team\",\n  \"bugs\": \"https://github.com/QwikDev/qwik/issues\",\n  \"devDependencies\": {\n    \"@qwik.dev/core\": \"workspace:*\",\n    \"@qwik.dev/router\": \"workspace:*\",\n    \"@supabase/ssr\": \"0.6.1\",\n    \"@supabase/supabase-js\": \"2.53.0\"\n  },\n  \"exports\": {\n    \".\": {\n      \"types\": \"./lib/types/index.d.ts\",\n      \"import\": \"./lib/index.qwik.mjs\"\n    }\n  },\n  \"files\": [\n    \"lib\"\n  ],\n  \"homepage\": \"https://qwik.dev/\",\n  \"keywords\": [\n    \"Auth\",\n    \"Qwik\",\n    \"Supabase\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"./lib/index.qwik.mjs\",\n  \"peerDependencies\": {\n    \"@supabase/supabase-js\": \"^2.49.4\"\n  },\n  \"private\": true,\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"qwik\": \"./lib/index.qwik.mjs\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/QwikDev/qwik.git\",\n    \"directory\": \"packages/supabase-auth-helpers-qwik\"\n  },\n  \"scripts\": {\n    \"build\": \"vite build --mode lib\"\n  },\n  \"type\": \"module\",\n  \"types\": \"./lib/types/index.d.ts\"\n}\n","packages/supabase-auth-helpers-qwik/README.md":"# @supabase/auth-helpers-qwik (BETA)\n\nThis submodule provides convenience helpers for implementing user authentication in Qwik applications.\n","packages/supabase-auth-helpers-qwik/CHANGELOG.md":"# supabase-auth-helpers-qwik\n\n## 0.0.4-beta.0\n\n### Patch Changes\n\n- 🛠 build the library packages with the TypeScript optimizer (by [@wmertens](https://github.com/wmertens) in [#9017](https://github.com/QwikDev/qwik/pull/9017))\n\n## 1.0.0-beta.0\n\n### Major Changes\n\n- BREAKING: the CJS/UMD builds have been removed; ESM is well-supported everywhere and allows better optimizations. (by [@JerryWu1234](https://github.com/JerryWu1234) in [#8103](https://github.com/QwikDev/qwik/pull/8103))\n",".ruler/AGENTS.md":"# Qwik v2 agents reference, instructions and rules\n\n> [!IMPORTANT]\n> **ALWAYS RUN `ruler apply` AT THE START OF A SESSION.** The agent skills are gitignored, not\n> committed, so a fresh clone/worktree has none until you generate them (once per worktree):\n>\n> ```bash\n> pnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n> ```\n\n> Canonical source for repo-wide AI coding agent rules. For contributor setup, see\n> [CONTRIBUTING.md](./CONTRIBUTING.md). For package-specific workflows, load the relevant\n> `.ruler/skills/*/SKILL.md` file.\n\n## Source Of Truth\n\n- Shared AI guidance lives in `.ruler/`.\n- Only the root `AGENTS.md` and `CLAUDE.md` are committed generated outputs; the `.claude/`/`.codex/`\n  skill copies are gitignored and regenerated locally with `ruler apply` (see Setup below).\n- Never hand-edit a generated output — edit `.ruler/` and regenerate with `ruler apply`. A CI check\n  re-runs it and fails if the committed root files drift.\n- To change assistant behavior, edit `.ruler/AGENTS.md`, `.ruler/README.md`, or `.ruler/skills/**`,\n  then regenerate with Ruler when needed.\n\n## Project Snapshot\n\nQwik is a resumable web framework. SSR serializes application and framework state into HTML, and\nthe client resumes without re-running component code. Qwik v2 is a rewrite with VNode-based\nruntime work, rewritten reactive primitives, a new serialization mechanism, and package names under\n`@qwik.dev/*`.\n\nKey concepts: resumability, QRLs, `$`-suffixed optimizer boundaries, fine-grained signals, VNodes,\nthe cursor system, and the Rust optimizer.\n\n## Monorepo Map\n\n- Base branch and release branch for v2 PRs: `main`. V1 lives on the `v1` branch.\n\n| Package | Path | Notes |\n| --- | --- | --- |\n| `@qwik.dev/core` | `packages/qwik` | Core runtime, SSR, optimizer-facing code |\n| `@qwik.dev/router` | `packages/qwik-router` | Routing, middleware, adapters, SSG |\n| `@qwik.dev/react` | `packages/qwik-react` | React integration |\n| `@qwik.dev/utils` | `packages/qwik-utils` | Less-common helpers (`usePoll`, `zod$`), may use qwik internals |\n| `@qwik.dev/dom` | `packages/qwik-dom` | Server-side DOM implementation |\n| `@qwik.dev/qwik-vite` | `packages/qwik-vite` | `vite-plugin-qwik`, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/ts-optimizer` | `packages/ts-optimizer` | TypeScript optimizer, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/optimizer` | `packages/optimizer` | Rust optimizer, WASM, NAPI bindings; kept for parity comparison |\n| `eslint-plugin-qwik` | `packages/eslint-plugin-qwik` | ESLint rules |\n| `create-qwik` | `packages/create-qwik` | Project scaffolding CLI |\n| `qwik-docs` | `packages/docs` | Docs site, private package |\n| `insights` | `packages/insights` | Analytics dashboard, private package |\n\nUse v2 package names (`@qwik.dev/core`, `@qwik.dev/router`, etc.). Do not introduce v1\n`@builder.io/qwik` or `@builder.io/qwik-city` imports except when working on explicit\ncompatibility override code.\n\n## Setup And Iteration Loop\n\nThis is the canonical loop for nearly all framework work. Default to it; do not substitute broader\ncommands:\n\n### getting started\n\n```bash\npnpm i\n```\n\n```bash\n# Materialize the agent skills into .claude/.codex (gitignored) — run once per fresh clone/worktree.\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\n```bash\npnpm build.core # for a fresh start\npnpm build.full # for a fresh start and you are working on the docs or the other packages\npnpm build.rust # only when working on the Rust optimizer; the only step that needs the Rust toolchain\n```\n\nThe local scripts and tests use the TypeScript optimizer (`tsOptimizer: true` in the repo's own\nvite configs and test harnesses), so no Rust toolchain or prebuilt bindings are needed for them.\nKeep that flag on any new repo-owned `qwikVite()` call site; the plugin still defaults to the Rust\noptimizer for published apps. `QWIK_OPTIMIZER=rust` (or `ts`) overrides the flag for a whole run, which\nis how CI runs the e2e suites on both optimizers; it needs `pnpm build.rust` or\n`pnpm build.platform.copy` first.\n### Iterating\n\nPrefer focused commands and builds over repo-wide commands and builds.\n\n```bash\n# Fast dev build — required once before any tests can run, and again after framework\n# source changes when the verification consumes build output (all e2e suites do)\npnpm build.core.dev\n\n# Closest focused unit/spec test\npnpm vitest run packages/qwik/src/core/tests/use-task.spec.tsx\n\n# Focused e2e test\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\n`build.core.dev` also re-emits fresh Qwik and Router `.d.ts` incrementally (via `tscDevDts` + re-export shims), so editing a public signature no longer leaves stale types — `build.watch` skips the type pass to stay instant.\n\nFor Qwik e2e tests, use `--browser=chromium` with `e2e/qwik-e2e/playwright.config.ts`.\n\nRe-run `pnpm build.rust` (or `pnpm build.rust.dev`) when you are touching the optimizer rust code.\n\n### When making a PR\n\n```bash\n# for type-level verification when no focused test covers the change\npnpm tsc.check\n\n# update the API\npnpm api.update\n\n# Verify the build passes\npnpm build.core\n\n# Verify unit tests pass\npnpm test.unit\n\n# Verify the E2Es pass\npnpm test.e2e.chromium\n\n# In case of html output change, update the ssg snapshot\npnpm test.e2e.router.ssg.update\n\n# In case of a new feature, run the test.bench\npnpm test.bench\n\n# In case of qwikloader changes\npnpm vitest packages/qwik/src/qwikloader.unit.ts -u\n```\n\nIf any of those fail, fix and push your changes.\n\n## Rules\n\nRecent Qwik v2 work by core maintainers favors small, behavior-shaped changes with regression proof.\nFollow that bias:\n\n### Guidance Freshness\n\n- If a skill or reference you used is stale, incomplete, or contradicted by current source, update\n  the `.ruler` source guidance before finishing the task unless the user explicitly restricted the\n  scope.\n- Keep new durable lessons in the most specific skill or reference that future agents are likely to\n  load. Do not add package-specific details to these always-on rules unless they affect most tasks.\n- Only add a lesson to a skill when it generalizes to future tasks. Keep single-PR specifics (one\n  module's protocol, one fix's mechanics) in the code and its tests, not in a skill.\n- Write those notes **prescriptively** — the invariants to keep, the traps that cause false passes,\n  where things live, and how to verify — rather than describing how the code currently works. Omit \"don't do X\" prohibitions for anything a test already enforces; the\n  suite is the guardrail, so reserve notes for what it can't self-enforce.\n- When updating guidance, load the `qwik-guidance-maintenance` skill.\n\n### Skill Selection\n\nLoad the relevant skill before non-trivial work in that area:\n\n| Skill | Use when |\n| --- | --- |\n| `qwik-core-development` | Editing/reviewing `packages/qwik/**` core runtime code |\n| `qwik-router-development` | Editing/reviewing router runtime, buildtime, middleware, adapters, or SSG |\n| `qwik-optimizer-development` | Editing/reviewing Rust optimizer, WASM, NAPI, or optimizer-facing behavior |\n| `qwik-e2e-verification` | Creating, debugging, or running Playwright e2e suites |\n| `qwik-docs-development` | Writing/editing docs content, docs site routes, or docs LLM outputs |\n| `qwik-guidance-maintenance` | Editing `.ruler/**`, generated-output guidance, or stale skill/reference content |\n\nIf no skill fits, stay with these repo-wide rules and inspect local source before changing code.\n\nIf a skill above is not loadable, its copy has not been generated in this worktree yet — run the\n`ruler apply` step from Setup, or read the source directly at `.ruler/skills/<name>/SKILL.md`.\n\nKeep the `qwik-` prefix on committed source skill names. Ruler copies these skills into\nagent-native skill directories where they may coexist with user or plugin skills, so the prefix keeps\nthe skill list unambiguous outside the repo-local `.ruler` tree.\n\n### Changesets\n\nWhen a change affects published packages, add a changeset under `.changeset/`.\n\n- Use `patch` for bug fixes: focus on the issue rather than the solution.\n- `minor` for new features: explain the new feature.\n- `major` for API removal: may also include a new feature, but it must remove or break a public API.\n- Enforce 1 changeset per change.\n- Write the changeset summary in lowercase (e.g. `fix:`)\n- 1 short sentence (10-ish words) focused on the bug fix or feature. Don't include implementation details.\n\n### Commits\n\n- One coherent set of changes per commit. Do not fold an unrelated fix into a commit for another\n  change.\n- Fixes that are independent of the branch's main change get their own commits, placed before it,\n  so they can be reviewed and cherry-picked on their own.\n- Write the subject as a short imperative summary. The body explains the \"why\" tersely when it is\n  not obvious from the subject. The \"what\" and \"how\" live in the code; summarize them only when the\n  commit is large.\n- When a branch has grown out of that shape, rewrite it into that order before review instead of\n  stacking fix-up commits.\n\n### Code Quality\n\n\n#### Sanity\n\n- Remember to keep your code DRY.\n- Do not leave debug logging or temporary names in the final diff.\n- Only add comments for crucial information that is not self-explanatory. Keep your comments constrained to 1 short sentence (10-ish words) maximum. Focus on explaning the why/issue rather than implementation details.  \n- Write one changeset per patch/minor/major change. Keep the changeset message constrained to 1 short sentence or 2 maximum, focused on the bug fix, feature or breaking changes. Don't explain the internals or implementation details.\n\n#### Naming\n\n- Use names that explain the domain idea, not the implementation trick.\n- Prefer specific names over short names when the value crosses more than a few lines.\n- Name booleans as questions or states, such as `isReady`, `hasSubscribers`, or `shouldFlush`.\n- Name functions by the action they perform, such as `resolveLoaderData()` or\n  `markContainerReady()`.\n- Avoid vague names like `data`, `item`, `temp`, `handle`, `process`, or `doWork` unless the local\n  scope makes the meaning obvious.\n- Keep existing public API names unless the task is intentionally changing the API.\n\n#### Control Flow\n\n- Prefer early returns for invalid, empty, unsupported, or already-handled cases.\n- Avoid deep nesting when a guard clause can make the main path easier to read.\n- Keep the success path visible at the outer indentation level when possible.\n- Do not use clever boolean expressions when a named condition or small helper would be clearer.\n- Keep error and compatibility branches explicit so reviewers can see why they exist.\n\n#### Modularity\n\n- Keep functions focused on one responsibility.\n- Extract a helper when a block has a clear name, is reused, or hides the main path.\n- Do not extract helpers only to move complexity around; the caller should become easier to read.\n- Keep helpers close to their first use unless they are shared across files.\n- Prefer local semantic helpers over broad abstractions.\n- Keep consumer- or framework-specific carve-outs (magic values, special cases) at the boundary that\n  owns that knowledge; do not push them into a generic lower-level utility that should stay agnostic.\n\n#### Review Standard\n\nBefore finishing, read the changed code as if you are new to the package:\n\n1. Can a junior developer explain what each name represents?\n2. Can an AI agent identify the main path without following deeply nested branches?\n3. Are edge cases handled by clear guard clauses or named helpers?\n4. Is the change modular without hiding important state or protocol boundaries?\n\nIf the answer is no, simplify the code before calling the task complete.\n\n### Code Style\n\nPrettier and ESLint define style. Keep semicolons, single quotes, two-space indentation, trailing\ncommas where configured, and always use braces for control flow.\n\nNaming conventions:\n\n| Pattern | Usage |\n| --- | --- |\n| `use*` | Hooks called in component/task scope |\n| `*$` | QRL boundary extracted by the optimizer |\n| `create*` | Factory functions |\n| `*.unit.ts(x)` | Vitest unit files |\n| `*.spec.ts(x)` | Vitest spec files |\n| `*.e2e.ts` | Playwright e2e files |\n\n### Security And Supply Chain\n\nTreat security-sensitive changes as behavior changes even when they look like config, dependency,\nor CI maintenance.\n\n#### Security Review Trigger\n\nPause for a focused security pass when a change touches:\n\n- authentication, authorization, sessions, cookies, redirects, URL parsing, filesystem paths, SSR,\n  serialization, HTML/script output, request handling, or server adapters\n- dependency versions, lockfiles, package manager settings, release scripts, publishing scripts, or\n  build tooling\n- GitHub Actions, reusable workflows, workflow permissions, tokens, secrets, cache keys, artifact\n  upload/download, or deployment credentials\n\nUse the changed diff as the starting point. Check directly supporting files when needed, but do not\nturn a small change into a repository-wide security scan unless the user asks.\n\n#### What To Check\n\n- Identify the trust boundary: attacker-controlled input, untrusted dependency code, untrusted CI\n  event data, secrets, tokens, publish credentials, or generated output.\n- Find the closest existing guard and the sink it protects. Do not claim safety from a broad\n  intuition; point to the concrete validation, escaping, permission, or isolation boundary.\n- Prefer fail-closed behavior for malformed input, unknown modes, unsupported hosts, and missing\n  config.\n- Keep secrets out of logs, snapshots, artifacts, caches, generated files, browser output, and error\n  messages.\n- When changing dependencies or build tools, check for new install scripts, binary downloads,\n  network fetches, transitive tool execution, license or provenance surprises, and lockfile drift.\n\n#### GitHub Actions\n\nWhen editing `.github/workflows/**` or action-related scripts:\n\n- Keep `permissions:` least-privilege at the workflow or job level.\n- Do not introduce `pull_request_target` for code checkout/build/test of untrusted PR content unless\n  the workflow is explicitly designed to avoid running attacker-controlled code with secrets.\n- Avoid passing secrets to forked PRs, third-party actions, shell commands that print env, or\n  generated artifacts.\n- Prefer trusted first-party actions. For new third-party actions, pin to a full commit SHA or\n  document why a moving tag is acceptable.\n- Treat cache restore keys and artifact paths as untrusted input surfaces. Avoid broad paths that can\n  poison future jobs or expose credentials.\n- Quote shell variables and avoid `eval`, curl-piped shells, and unchecked interpolation of GitHub\n  context values into shell commands.\n\n#### Verification\n\nFor security-sensitive changes, record the focused security reasoning in the final response:\n\n1. What boundary changed?\n2. What guard or invariant prevents abuse?\n3. What focused test, lint, config check, or manual inspection covered it?\n\nIf you cannot verify the security property locally, say exactly what remains unverified.\n\n### Test Driven Development\n\nUse test-driven development for behavior changes and bug fixes.\n\n#### Required Workflow\n\n1. Identify the observable behavior or invariant before editing implementation code.\n2. Add or update the closest focused test that proves the behavior.\n3. Run that test before the implementation change when feasible and confirm it fails for the\n   expected reason.\n4. Make the smallest implementation change that satisfies the test.\n5. Rerun the focused test and keep iterating until it passes.\n6. Run any broader verification required by the touched surface, such as API docs, optimizer\n   snapshots, build output, or e2e coverage.\n\n#### Test Selection\n\n- Prefer unit/spec tests next to the changed code.\n- Use optimizer fixtures and snapshots for Rust transform behavior.\n- Use e2e tests only when the behavior depends on a real browser, navigation, streaming, SSR/CSR\n  integration, adapter behavior, or fixture app wiring.\n- For serialization, hydration, streaming, or loader protocol changes, test both the writer and the\n  reader path.\n- For compatibility behavior, test both the current API path and the supported deprecated path.\n\n#### Exceptions\n\nDocs-only, rules-only, formatting-only, dependency metadata, and generated-output maintenance\nchanges do not need a failing product test first. They still need the narrowest relevant\nverification, such as formatting, Ruler dry-run, generated-output checks, or docs build checks.\n\nIf dependencies, missing generated artifacts, or local environment constraints prevent a pre-fix\ntest run, write the focused test first, record the blocker, and run the test as soon as the blocker\nis resolved.\n\n### Boundaries\n\n- Preserve user work and unrelated changes. Do not reset or revert unrelated files.\n- Keep edits scoped to the package, generated-file boundary, and verification surface implied by the\n  task.\n- Do not commit `.only` tests.\n- Do not skip tests for behavior changes; use the closest focused test first.\n\n### No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n#### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.","packages/qwik-vite/api-extractor.json":"# Qwik-vite Skill\n\nPath: `packages/qwik-vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/api-extractor.json)","packages/qwik-vite/package.json":"# Qwik-vite Skill\n\nPath: `packages/qwik-vite/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/package.json)","packages/qwik-vite/tsconfig.json":"# Qwik-vite Skill\n\nPath: `packages/qwik-vite/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/tsconfig.json)","packages/qwik-router/ARCHITECTURE.md":"# Qwik-router Skill\n\nPath: `packages/qwik-router/ARCHITECTURE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/ARCHITECTURE.md)","packages/qwik-router/CHANGELOG.md":"# Qwik-router Skill\n\nPath: `packages/qwik-router/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/CHANGELOG.md)","packages/qwik-router/package.json":"# Qwik-router Skill\n\nPath: `packages/qwik-router/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/package.json)","packages/qwik-router/README.md":"# qwik-router Documentation\n\nPath: `packages/qwik-router/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/README.md)","packages/qwik-router/tsconfig.json":"# Qwik-router Skill\n\nPath: `packages/qwik-router/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/tsconfig.json)","packages/qwik-react/api-extractor.json":"# Qwik-react Skill\n\nPath: `packages/qwik-react/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/api-extractor.json)","packages/qwik-react/CHANGELOG.md":"# Qwik-react Skill\n\nPath: `packages/qwik-react/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/CHANGELOG.md)","packages/qwik-react/package.json":"# Qwik-react Skill\n\nPath: `packages/qwik-react/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/package.json)","packages/qwik-react/README.md":"# qwik-react Documentation\n\nPath: `packages/qwik-react/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/README.md)","packages/qwik-react/tsconfig.json":"# Qwik-react Skill\n\nPath: `packages/qwik-react/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/tsconfig.json)","packages/qwik-dom/CHANGELOG.md":"# Qwik-dom Skill\n\nPath: `packages/qwik-dom/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-dom/CHANGELOG.md)","packages/qwik-dom/package.json":"# Qwik-dom Skill\n\nPath: `packages/qwik-dom/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-dom/package.json)","packages/qwik-auth/CHANGELOG.md":"# Qwik-auth Skill\n\nPath: `packages/qwik-auth/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-auth/CHANGELOG.md)","packages/qwik/CHANGELOG.md":"# Qwik Skill\n\nPath: `packages/qwik/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/CHANGELOG.md)","packages/qwik/package.json":"# Qwik Skill\n\nPath: `packages/qwik/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/package.json)","packages/qwik/tsconfig.json":"# Qwik Skill\n\nPath: `packages/qwik/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/tsconfig.json)","packages/qwik/tsdoc.json":"# Qwik Skill\n\nPath: `packages/qwik/tsdoc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/tsdoc.json)","packages/optimizer/CHANGELOG.md":"# Optimizer Skill\n\nPath: `packages/optimizer/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/CHANGELOG.md)","packages/optimizer/package.json":"# Optimizer Skill\n\nPath: `packages/optimizer/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/package.json)","packages/optimizer/README.md":"# optimizer Documentation\n\nPath: `packages/optimizer/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/README.md)","packages/optimizer/tsconfig.json":"# Optimizer Skill\n\nPath: `packages/optimizer/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/tsconfig.json)","packages/insights/package.json":"# Insights Skill\n\nPath: `packages/insights/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/package.json)","packages/insights/README.md":"# insights Documentation\n\nPath: `packages/insights/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/README.md)","packages/insights/tsconfig.json":"# Insights Skill\n\nPath: `packages/insights/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/tsconfig.json)","packages/eslint-plugin-qwik/CHANGELOG.md":"# Eslint-plugin-qwik Skill\n\nPath: `packages/eslint-plugin-qwik/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/CHANGELOG.md)","packages/eslint-plugin-qwik/package.json":"# Eslint-plugin-qwik Skill\n\nPath: `packages/eslint-plugin-qwik/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/package.json)","packages/eslint-plugin-qwik/README.md":"# eslint-plugin-qwik Documentation\n\nPath: `packages/eslint-plugin-qwik/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/README.md)","packages/docs/algolia.json":"# Docs Skill\n\nPath: `packages/docs/algolia.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/algolia.json)","packages/docs/package.json":"# Docs Skill\n\nPath: `packages/docs/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/package.json)","packages/docs/README.md":"# docs Documentation\n\nPath: `packages/docs/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/README.md)","packages/docs/tsconfig.json":"# Docs Skill\n\nPath: `packages/docs/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/tsconfig.json)","packages/devtools/CHANGELOG.md":"# Devtools Skill\n\nPath: `packages/devtools/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/CHANGELOG.md)","packages/devtools/package.json":"# Devtools Skill\n\nPath: `packages/devtools/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/package.json)","packages/devtools/README.md":"# devtools Documentation\n\nPath: `packages/devtools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/README.md)","packages/devtools/tsconfig.json":"# Devtools Skill\n\nPath: `packages/devtools/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/tsconfig.json)","packages/create-qwik/CHANGELOG.md":"# Create-qwik Skill\n\nPath: `packages/create-qwik/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/CHANGELOG.md)","packages/create-qwik/package.json":"# Create-qwik Skill\n\nPath: `packages/create-qwik/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/package.json)","packages/create-qwik/README.md":"# create-qwik Documentation\n\nPath: `packages/create-qwik/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/README.md)","packages/browser-extension/CHANGELOG.md":"# Browser-extension Skill\n\nPath: `packages/browser-extension/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/CHANGELOG.md)","packages/browser-extension/package.json":"# Browser-extension Skill\n\nPath: `packages/browser-extension/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/package.json)","packages/browser-extension/tsconfig.json":"# Browser-extension Skill\n\nPath: `packages/browser-extension/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/tsconfig.json)","packages/qwik-vite/src/qwik.optimizer.api.md":"# Src Skill\n\nPath: `packages/qwik-vite/src/qwik.optimizer.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/src/qwik.optimizer.api.md)","packages/qwik-router/src/api-extractor.json":"# Src Skill\n\nPath: `packages/qwik-router/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/api-extractor.json)","packages/qwik-react/src/api-extractor.json":"# Src Skill\n\nPath: `packages/qwik-react/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/src/api-extractor.json)","packages/qwik/src/api-extractor.json":"# Src Skill\n\nPath: `packages/qwik/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/api-extractor.json)","packages/optimizer/core/README.md":"# core Documentation\n\nPath: `packages/optimizer/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/core/README.md)","packages/optimizer/napi/napi.config.json":"# Napi Skill\n\nPath: `packages/optimizer/napi/napi.config.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/napi/napi.config.json)","packages/insights/.vscode/extensions.json":"# .vscode Skill\n\nPath: `packages/insights/.vscode/extensions.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/.vscode/extensions.json)","packages/insights/.vscode/launch.json":"# .vscode Skill\n\nPath: `packages/insights/.vscode/launch.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/.vscode/launch.json)","packages/insights/public/manifest.json":"# Public Skill\n\nPath: `packages/insights/public/manifest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/public/manifest.json)","packages/eslint-plugin-qwik/tests/tsconfig.json":"# Tests Skill\n\nPath: `packages/eslint-plugin-qwik/tests/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/tests/tsconfig.json)","packages/docs/public/_routes.json":"# Public Skill\n\nPath: `packages/docs/public/_routes.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/public/_routes.json)","packages/docs/scripts/pages.json":"# Scripts Skill\n\nPath: `packages/docs/scripts/pages.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/scripts/pages.json)","packages/devtools/plugin/tsconfig.json":"# Plugin Skill\n\nPath: `packages/devtools/plugin/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/plugin/tsconfig.json)","packages/devtools/ui/README.md":"# ui Documentation\n\nPath: `packages/devtools/ui/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/ui/README.md)","packages/devtools/ui/tsconfig.json":"# Ui Skill\n\nPath: `packages/devtools/ui/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/ui/tsconfig.json)","packages/browser-extension/.wxt/tsconfig.json":"# .wxt Skill\n\nPath: `packages/browser-extension/.wxt/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/.wxt/tsconfig.json)",".ruler/skills/qwik-core-development/references/core-notes.md":"# References Skill\n\nPath: `.ruler/skills/qwik-core-development/references/core-notes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/skills/qwik-core-development/references/core-notes.md)","packages/qwik-vite/src/plugins/fixture-output-bundles.json":"# Plugins Skill\n\nPath: `packages/qwik-vite/src/plugins/fixture-output-bundles.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/src/plugins/fixture-output-bundles.json)","packages/qwik-router/src/ssg/api-extractor.json":"# Ssg Skill\n\nPath: `packages/qwik-router/src/ssg/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/ssg/api-extractor.json)","packages/qwik-router/src/ssg/qwik-router.ssg.api.md":"# Ssg Skill\n\nPath: `packages/qwik-router/src/ssg/qwik-router.ssg.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/ssg/qwik-router.ssg.api.md)","packages/qwik/src/build/api-extractor.json":"# Build Skill\n\nPath: `packages/qwik/src/build/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/build/api-extractor.json)","packages/qwik/src/build/qwik.build.api.md":"# Build Skill\n\nPath: `packages/qwik/src/build/qwik.build.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/build/qwik.build.api.md)","packages/qwik/src/core/api-extractor.json":"# Core Skill\n\nPath: `packages/qwik/src/core/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/api-extractor.json)","packages/qwik/src/core/GLOSSARY.md":"# Core Skill\n\nPath: `packages/qwik/src/core/GLOSSARY.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/GLOSSARY.md)","packages/qwik/src/core/qwik.core.api.md":"# Core Skill\n\nPath: `packages/qwik/src/core/qwik.core.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/qwik.core.api.md)","packages/qwik/src/core/readme.md":"# core Documentation\n\nPath: `packages/qwik/src/core/readme.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/readme.md)","packages/qwik/src/insights/api-extractor.json":"# Insights Skill\n\nPath: `packages/qwik/src/insights/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/api-extractor.json)","packages/qwik/src/insights/qwik.insights.api.md":"# Insights Skill\n\nPath: `packages/qwik/src/insights/qwik.insights.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/qwik.insights.api.md)","packages/qwik/src/server/api-extractor.json":"# Server Skill\n\nPath: `packages/qwik/src/server/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/api-extractor.json)","packages/qwik/src/server/preloading.md":"# Server Skill\n\nPath: `packages/qwik/src/server/preloading.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/preloading.md)","packages/qwik/src/server/qwik.server.api.md":"# Server Skill\n\nPath: `packages/qwik/src/server/qwik.server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/qwik.server.api.md)","packages/qwik/src/server/README.md":"# server Documentation\n\nPath: `packages/qwik/src/server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/README.md)","packages/qwik/src/testing/api-extractor.json":"# Testing Skill\n\nPath: `packages/qwik/src/testing/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/api-extractor.json)","packages/qwik/src/testing/qwik.testing.api.md":"# Testing Skill\n\nPath: `packages/qwik/src/testing/qwik.testing.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/qwik.testing.api.md)","packages/qwik/src/testing/README.md":"# testing Documentation\n\nPath: `packages/qwik/src/testing/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/README.md)","packages/qwik/src/web-worker/api-extractor.json":"# Web-worker Skill\n\nPath: `packages/qwik/src/web-worker/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/web-worker/api-extractor.json)","packages/qwik/src/web-worker/qwik.worker.api.md":"# Web-worker Skill\n\nPath: `packages/qwik/src/web-worker/qwik.worker.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/web-worker/qwik.worker.api.md)","packages/insights/drizzle/meta/_journal.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/_journal.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/_journal.json)","packages/insights/drizzle/meta/0000_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0000_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0000_snapshot.json)","packages/insights/drizzle/meta/0001_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0001_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0001_snapshot.json)","packages/insights/drizzle/meta/0002_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0002_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0002_snapshot.json)","packages/insights/drizzle/meta/0003_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0003_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0003_snapshot.json)","packages/insights/drizzle/meta/0004_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0004_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0004_snapshot.json)","packages/insights/drizzle/meta/0005_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0005_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0005_snapshot.json)","packages/insights/drizzle/meta/0006_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0006_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0006_snapshot.json)","packages/insights/drizzle/meta/0007_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0007_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0007_snapshot.json)","packages/insights/drizzle/meta/0008_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0008_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0008_snapshot.json)","packages/insights/drizzle/meta/0009_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0009_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0009_snapshot.json)","packages/insights/drizzle/meta/0010_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0010_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0010_snapshot.json)","packages/insights/drizzle/meta/0011_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0011_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0011_snapshot.json)","packages/insights/drizzle/meta/0012_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0012_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0012_snapshot.json)","packages/insights/drizzle/meta/0013_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0013_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0013_snapshot.json)","packages/insights/drizzle/meta/0014_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0014_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0014_snapshot.json)","packages/insights/drizzle/meta/0015_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0015_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0015_snapshot.json)","packages/insights/drizzle/meta/0016_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0016_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0016_snapshot.json)","packages/insights/drizzle/meta/0017_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0017_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0017_snapshot.json)","packages/insights/drizzle/meta/0018_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0018_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0018_snapshot.json)","packages/insights/drizzle/meta/0019_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0019_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0019_snapshot.json)","packages/insights/src/db/README.md":"# db Documentation\n\nPath: `packages/insights/src/db/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/src/db/README.md)","packages/docs/src/repl/README.md":"# repl Documentation\n\nPath: `packages/docs/src/repl/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/repl/README.md)","packages/create-qwik/src/helpers/jokes.json":"# Helpers Skill\n\nPath: `packages/create-qwik/src/helpers/jokes.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/src/helpers/jokes.json)","packages/qwik-router/src/adapters/vercel-edge/adapter.vercel-edge.api.md":"# Vercel-edge Skill\n\nPath: `packages/qwik-router/src/adapters/vercel-edge/adapter.vercel-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/vercel-edge/adapter.vercel-edge.api.md)","packages/qwik-router/src/adapters/ssg/adapter.ssg.api.md":"# Ssg Skill\n\nPath: `packages/qwik-router/src/adapters/ssg/adapter.ssg.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/ssg/adapter.ssg.api.md)","packages/qwik-router/src/adapters/shared/adapter.shared.api.md":"# Shared Skill\n\nPath: `packages/qwik-router/src/adapters/shared/adapter.shared.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/shared/adapter.shared.api.md)","packages/qwik-router/src/adapters/node-server/adapter.node-server.api.md":"# Node-server Skill\n\nPath: `packages/qwik-router/src/adapters/node-server/adapter.node-server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/node-server/adapter.node-server.api.md)","packages/qwik-router/src/adapters/netlify-edge/adapter.netlify-edge.api.md":"# Netlify-edge Skill\n\nPath: `packages/qwik-router/src/adapters/netlify-edge/adapter.netlify-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/netlify-edge/adapter.netlify-edge.api.md)","packages/qwik-router/src/adapters/deno-server/adapter.deno-server.api.md":"# Deno-server Skill\n\nPath: `packages/qwik-router/src/adapters/deno-server/adapter.deno-server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/deno-server/adapter.deno-server.api.md)","packages/qwik-router/src/adapters/cloudflare-pages/adapter.cloudflare-pages.api.md":"# Cloudflare-pages Skill\n\nPath: `packages/qwik-router/src/adapters/cloudflare-pages/adapter.cloudflare-pages.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloudflare-pages/adapter.cloudflare-pages.api.md)","packages/qwik-router/src/adapters/cloud-run/adapter.cloud-run.api.md":"# Cloud-run Skill\n\nPath: `packages/qwik-router/src/adapters/cloud-run/adapter.cloud-run.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloud-run/adapter.cloud-run.api.md)","packages/qwik-router/src/adapters/bun-server/adapter.bun-server.api.md":"# Bun-server Skill\n\nPath: `packages/qwik-router/src/adapters/bun-server/adapter.bun-server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/bun-server/adapter.bun-server.api.md)","packages/qwik-router/src/adapters/azure-swa/adapter.azure-swa.api.md":"# Azure-swa Skill\n\nPath: `packages/qwik-router/src/adapters/azure-swa/adapter.azure-swa.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/azure-swa/adapter.azure-swa.api.md)","packages/qwik-router/src/buildtime/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/buildtime/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/buildtime/vite/api-extractor.json)","packages/qwik-router/src/buildtime/vite/qwik-router.buildtime.api.md":"# Vite Skill\n\nPath: `packages/qwik-router/src/buildtime/vite/qwik-router.buildtime.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/buildtime/vite/qwik-router.buildtime.api.md)","packages/qwik-router/src/middleware/vercel-edge/api-extractor.json":"# Vercel-edge Skill\n\nPath: `packages/qwik-router/src/middleware/vercel-edge/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/vercel-edge/api-extractor.json)","packages/qwik-router/src/middleware/vercel-edge/middleware.vercel-edge.api.md":"# Vercel-edge Skill\n\nPath: `packages/qwik-router/src/middleware/vercel-edge/middleware.vercel-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/vercel-edge/middleware.vercel-edge.api.md)","packages/qwik-router/src/middleware/request-handler/api-extractor.json":"# Request-handler Skill\n\nPath: `packages/qwik-router/src/middleware/request-handler/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/request-handler/api-extractor.json)","packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md":"# Request-handler Skill\n\nPath: `packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md)","packages/qwik-router/src/middleware/node/api-extractor.json":"# Node Skill\n\nPath: `packages/qwik-router/src/middleware/node/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/node/api-extractor.json)","packages/qwik-router/src/middleware/node/middleware.node.api.md":"# Node Skill\n\nPath: `packages/qwik-router/src/middleware/node/middleware.node.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/node/middleware.node.api.md)","packages/qwik-router/src/middleware/netlify-edge/api-extractor.json":"# Netlify-edge Skill\n\nPath: `packages/qwik-router/src/middleware/netlify-edge/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/netlify-edge/api-extractor.json)","packages/qwik-router/src/middleware/netlify-edge/middleware.netlify-edge.api.md":"# Netlify-edge Skill\n\nPath: `packages/qwik-router/src/middleware/netlify-edge/middleware.netlify-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/netlify-edge/middleware.netlify-edge.api.md)","packages/qwik-router/src/middleware/firebase/api-extractor.json":"# Firebase Skill\n\nPath: `packages/qwik-router/src/middleware/firebase/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/firebase/api-extractor.json)","packages/qwik-router/src/middleware/firebase/middleware.firebase.api.md":"# Firebase Skill\n\nPath: `packages/qwik-router/src/middleware/firebase/middleware.firebase.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/firebase/middleware.firebase.api.md)","packages/qwik-router/src/middleware/deno/api-extractor.json":"# Deno Skill\n\nPath: `packages/qwik-router/src/middleware/deno/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/deno/api-extractor.json)","packages/qwik-router/src/middleware/deno/middleware.deno.api.md":"# Deno Skill\n\nPath: `packages/qwik-router/src/middleware/deno/middleware.deno.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/deno/middleware.deno.api.md)","packages/qwik-router/src/middleware/cloudflare-pages/api-extractor.json":"# Cloudflare-pages Skill\n\nPath: `packages/qwik-router/src/middleware/cloudflare-pages/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/cloudflare-pages/api-extractor.json)","packages/qwik-router/src/middleware/cloudflare-pages/middleware.cloudflare-pages.api.md":"# Cloudflare-pages Skill\n\nPath: `packages/qwik-router/src/middleware/cloudflare-pages/middleware.cloudflare-pages.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/cloudflare-pages/middleware.cloudflare-pages.api.md)","packages/qwik-router/src/middleware/bun/api-extractor.json":"# Bun Skill\n\nPath: `packages/qwik-router/src/middleware/bun/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/bun/api-extractor.json)","packages/qwik-router/src/middleware/bun/middleware.bun.api.md":"# Bun Skill\n\nPath: `packages/qwik-router/src/middleware/bun/middleware.bun.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/bun/middleware.bun.api.md)","packages/qwik-router/src/middleware/azure-swa/api-extractor.json":"# Azure-swa Skill\n\nPath: `packages/qwik-router/src/middleware/azure-swa/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/azure-swa/api-extractor.json)","packages/qwik-router/src/middleware/azure-swa/middleware.azure-swa.api.md":"# Azure-swa Skill\n\nPath: `packages/qwik-router/src/middleware/azure-swa/middleware.azure-swa.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/azure-swa/middleware.azure-swa.api.md)","packages/qwik-router/src/middleware/aws-lambda/api-extractor.json":"# Aws-lambda Skill\n\nPath: `packages/qwik-router/src/middleware/aws-lambda/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/aws-lambda/api-extractor.json)","packages/qwik-router/src/middleware/aws-lambda/middleware.aws-lambda.api.md":"# Aws-lambda Skill\n\nPath: `packages/qwik-router/src/middleware/aws-lambda/middleware.aws-lambda.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/aws-lambda/middleware.aws-lambda.api.md)","packages/qwik-router/src/runtime/src/api-extractor.json":"# Src Skill\n\nPath: `packages/qwik-router/src/runtime/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/api-extractor.json)","packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md":"# Src Skill\n\nPath: `packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md)","packages/qwik/src/core/bench/bench-memory-results.json":"# Bench Skill\n\nPath: `packages/qwik/src/core/bench/bench-memory-results.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/bench/bench-memory-results.json)","packages/qwik/src/core/bench/bench-results.json":"# Bench Skill\n\nPath: `packages/qwik/src/core/bench/bench-results.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/bench/bench-results.json)","packages/qwik/src/core/shared/README.md":"# shared Documentation\n\nPath: `packages/qwik/src/core/shared/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/README.md)","packages/qwik/src/core/tests/README.md":"# tests Documentation\n\nPath: `packages/qwik/src/core/tests/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/tests/README.md)","packages/qwik/src/insights/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik/src/insights/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/vite/api-extractor.json)","packages/qwik/src/insights/vite/qwik.insights.vite.api.md":"# Vite Skill\n\nPath: `packages/qwik/src/insights/vite/qwik.insights.vite.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/vite/qwik.insights.vite.api.md)","packages/docs/src/components/theme-toggle/README.md":"# theme-toggle Documentation\n\nPath: `packages/docs/src/components/theme-toggle/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/components/theme-toggle/README.md)","packages/docs/src/routes/(ecosystem)/ecosystem.json":"# (ecosystem) Skill\n\nPath: `packages/docs/src/routes/(ecosystem)/ecosystem.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/(ecosystem)/ecosystem.json)","packages/docs/src/routes/community/menu.md":"# Community Skill\n\nPath: `packages/docs/src/routes/community/menu.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/community/menu.md)","packages/docs/src/routes/demo/.prettierrc.json":"# Demo Skill\n\nPath: `packages/docs/src/routes/demo/.prettierrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/.prettierrc.json)","packages/docs/src/routes/demo/tsconfig.json":"# Demo Skill\n\nPath: `packages/docs/src/routes/demo/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/tsconfig.json)","packages/docs/src/routes/docs/menu.md":"# Docs Skill\n\nPath: `packages/docs/src/routes/docs/menu.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/docs/menu.md)","packages/docs/src/routes/tutorial/tutorial-menu.json":"# Tutorial Skill\n\nPath: `packages/docs/src/routes/tutorial/tutorial-menu.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/tutorial/tutorial-menu.json)","packages/qwik-router/src/adapters/vercel-edge/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/vercel-edge/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/vercel-edge/vite/api-extractor.json)","packages/qwik-router/src/adapters/ssg/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/ssg/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/ssg/vite/api-extractor.json)","packages/qwik-router/src/adapters/shared/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/shared/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/shared/vite/api-extractor.json)","packages/qwik-router/src/adapters/node-server/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/node-server/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/node-server/vite/api-extractor.json)","packages/qwik-router/src/adapters/netlify-edge/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/netlify-edge/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/netlify-edge/vite/api-extractor.json)","packages/qwik-router/src/adapters/deno-server/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/deno-server/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/deno-server/vite/api-extractor.json)","packages/qwik-router/src/adapters/cloudflare-pages/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/cloudflare-pages/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloudflare-pages/vite/api-extractor.json)","packages/qwik-router/src/adapters/cloud-run/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/cloud-run/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloud-run/vite/api-extractor.json)","packages/qwik-router/src/adapters/bun-server/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/bun-server/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/bun-server/vite/api-extractor.json)","packages/qwik-router/src/adapters/azure-swa/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/azure-swa/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/azure-swa/vite/api-extractor.json)","packages/qwik-router/src/runtime/src/service-worker/api-extractor.json":"# Service-worker Skill\n\nPath: `packages/qwik-router/src/runtime/src/service-worker/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/service-worker/api-extractor.json)","packages/qwik-router/src/runtime/src/service-worker/qwik-router.service-worker.api.md":"# Service-worker Skill\n\nPath: `packages/qwik-router/src/runtime/src/service-worker/qwik-router.service-worker.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/service-worker/qwik-router.service-worker.api.md)","packages/qwik/src/core/reactive-primitives/impl/README.md":"# impl Documentation\n\nPath: `packages/qwik/src/core/reactive-primitives/impl/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/reactive-primitives/impl/README.md)","packages/qwik/src/core/shared/jsx/README.md":"# jsx Documentation\n\nPath: `packages/qwik/src/core/shared/jsx/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/jsx/README.md)","packages/qwik/src/core/shared/platform/readme.md":"# platform Documentation\n\nPath: `packages/qwik/src/core/shared/platform/readme.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/platform/readme.md)","packages/qwik/src/core/shared/serdes/serialization.md":"# Serdes Skill\n\nPath: `packages/qwik/src/core/shared/serdes/serialization.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/serdes/serialization.md)","packages/qwik/src/core/shared/utils/README.md":"# utils Documentation\n\nPath: `packages/qwik/src/core/shared/utils/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/utils/README.md)","packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json":"# Showcase Skill\n\nPath: `packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json)","packages/docs/src/routes/api/qwik/api.json":"# Qwik Skill\n\nPath: `packages/docs/src/routes/api/qwik/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik/api.json)","packages/docs/src/routes/api/qwik-insights/api.json":"# Qwik-insights Skill\n\nPath: `packages/docs/src/routes/api/qwik-insights/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-insights/api.json)","packages/docs/src/routes/api/qwik-optimizer/api.json":"# Qwik-optimizer Skill\n\nPath: `packages/docs/src/routes/api/qwik-optimizer/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-optimizer/api.json)","packages/docs/src/routes/api/qwik-router/api.json":"# Qwik-router Skill\n\nPath: `packages/docs/src/routes/api/qwik-router/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router/api.json)","packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json":"# Qwik-router-middleware-aws-lambda Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json)","packages/docs/src/routes/api/qwik-router-middleware-azure-swa/api.json":"# Qwik-router-middleware-azure-swa Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-azure-swa/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-azure-swa/api.json)","packages/docs/src/routes/api/qwik-router-middleware-cloudflare-pages/api.json":"# Qwik-router-middleware-cloudflare-pages Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-cloudflare-pages/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-cloudflare-pages/api.json)","packages/docs/src/routes/api/qwik-router-middleware-firebase/api.json":"# Qwik-router-middleware-firebase Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-firebase/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-firebase/api.json)","packages/docs/src/routes/api/qwik-router-middleware-netlify-edge/api.json":"# Qwik-router-middleware-netlify-edge Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-netlify-edge/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-netlify-edge/api.json)","packages/docs/src/routes/api/qwik-router-middleware-node/api.json":"# Qwik-router-middleware-node Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-node/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-node/api.json)","packages/docs/src/routes/api/qwik-router-middleware-request-handler/api.json":"# Qwik-router-middleware-request-handler Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-request-handler/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-request-handler/api.json)","packages/docs/src/routes/api/qwik-router-middleware-vercel-edge/api.json":"# Qwik-router-middleware-vercel-edge Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-vercel-edge/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-vercel-edge/api.json)","packages/docs/src/routes/api/qwik-router-ssg/api.json":"# Qwik-router-ssg Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-ssg/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-ssg/api.json)","packages/docs/src/routes/api/qwik-router-vite-azure-swa/api.json":"# Qwik-router-vite-azure-swa Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-azure-swa/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-azure-swa/api.json)","packages/docs/src/routes/api/qwik-router-vite-bun-server/api.json":"# Qwik-router-vite-bun-server Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-bun-server/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-bun-server/api.json)","packages/docs/src/routes/api/qwik-router-vite-cloud-run/api.json":"# Qwik-router-vite-cloud-run Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-cloud-run/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-cloud-run/api.json)","packages/docs/src/routes/api/qwik-router-vite-cloudflare-pages/api.json":"# Qwik-router-vite-cloudflare-pages Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-cloudflare-pages/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-cloudflare-pages/api.json)","packages/docs/src/routes/api/qwik-router-vite-netlify-edge/api.json":"# Qwik-router-vite-netlify-edge Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-netlify-edge/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-netlify-edge/api.json)","packages/docs/src/routes/api/qwik-router-vite-node-server/api.json":"# Qwik-router-vite-node-server Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-node-server/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-node-server/api.json)","packages/docs/src/routes/api/qwik-router-vite-ssg/api.json":"# Qwik-router-vite-ssg Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-ssg/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-ssg/api.json)","packages/docs/src/routes/api/qwik-router-vite-vercel/api.json":"# Qwik-router-vite-vercel Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-vercel/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-vercel/api.json)","packages/docs/src/routes/api/qwik-server/api.json":"# Qwik-server Skill\n\nPath: `packages/docs/src/routes/api/qwik-server/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-server/api.json)","packages/docs/src/routes/api/qwik-testing/api.json":"# Qwik-testing Skill\n\nPath: `packages/docs/src/routes/api/qwik-testing/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-testing/api.json)","packages/docs/src/routes/api/qwik-worker/api.json":"# Qwik-worker Skill\n\nPath: `packages/docs/src/routes/api/qwik-worker/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-worker/api.json)","packages/docs/src/routes/examples/apps/examples-menu.json":"# Apps Skill\n\nPath: `packages/docs/src/routes/examples/apps/examples-menu.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/examples/apps/examples-menu.json)","packages/docs/src/routes/examples/apps/README.md":"# apps Documentation\n\nPath: `packages/docs/src/routes/examples/apps/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/examples/apps/README.md)","packages/docs/src/routes/demo/state/counter-signal/.prettierrc.json":"# Counter-signal Skill\n\nPath: `packages/docs/src/routes/demo/state/counter-signal/.prettierrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/state/counter-signal/.prettierrc.json)","packages/docs/src/routes/tutorial/welcome/overview/index.md":"# Overview Skill\n\nPath: `packages/docs/src/routes/tutorial/welcome/overview/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/tutorial/welcome/overview/index.md)",".cursorrules (qwik-basic-cursorrules-prompt-file.mdc)":"---\ndescription: \"Cursor rules for Qwik development with TypeScript and Vite integration.\"\nglobs: **/*\nalwaysApply: false\n---\n// Qwik.js Basic Setup (with TypeScript and Vite) .cursorrules\n\n// Prefer functional components\n\nconst preferFunctionalComponents = true;\n\n// Qwik.js best practices\n\nconst qwikBestPractices = [\n  \"Use $ suffix for lazy-loaded functions\",\n  \"Utilize useSignal() for reactive state\",\n  \"Implement useStore() for complex state objects\",\n  \"Use useResource$() for data fetching\",\n  \"Implement useTask$() for side effects\",\n  \"Utilize useVisibleTask$() for browser-only code\",\n  \"Leverage TypeScript for type safety\",\n  \"Use Vite's fast HMR for development\",\n];\n\n// Folder structure\n\nconst folderStructure = `\nsrc/\n  components/\n  routes/\n  global.css\n  root.tsx\n  entry.ssr.tsx\npublic/\nvite.config.ts\ntsconfig.json\n`;\n\n// Additional instructions\n\nconst additionalInstructions = `\n1. Use TypeScript for all .ts and .tsx files\n2. Implement proper error boundaries\n3. Utilize Qwik City for routing when applicable\n4. Use Qwik's built-in optimization features\n5. Implement lazy-loading for improved performance\n6. Follow Qwik's naming conventions and best practices\n7. Use server$ for server-side code execution\n8. Leverage Vite plugins for optimized builds\n`;\n"},"files":{".ruler/skills/qwik-router-development/SKILL.md":"---\nname: qwik-router-development\ndescription: Use when modifying or reviewing Qwik Router code under packages/qwik-router, including runtime routing, buildtime route generation, middleware, adapters, SSG, markdown/MDX handling, or router tests.\n---\n\n# Qwik Router Development\n\nUse this skill for `packages/qwik-router/**` work. Keep the repo-wide rules from `.ruler/AGENTS.md`\nin force.\n\n## Fast Path\n\n1. Classify the touched router surface before editing: runtime, buildtime, middleware, adapter, SSG,\n   markdown/MDX, or Vite integration.\n2. Read the smallest source file plus the closest `*.unit.ts` or `*.spec.ts` file before changing\n   behavior.\n3. For middleware, loader, action, or navigation changes, trace handler ordering and shared state\n   from request creation through response/client consumption before editing.\n4. For unit/spec coverage, run `pnpm vitest run <path>`.\n5. For browser/router behavior, rebuild first with `pnpm build.core.dev`, then use the focused\n   Qwik Router e2e command.\n6. If public router API markdown changes are expected, run `pnpm api.update` after tests pass.\n\n## Source Map\n\n- Runtime: `packages/qwik-router/src/runtime/src/`\n- Buildtime route generation: `packages/qwik-router/src/buildtime/`\n- Vite integration: `packages/qwik-router/src/buildtime/vite/`\n- Middleware: `packages/qwik-router/src/middleware/`\n- Adapters: `packages/qwik-router/src/adapters/`\n- SSG: `packages/qwik-router/src/ssg/`\n- Router e2e tests: `e2e/qwik-e2e/tests/qwikrouter/`\n\n## Verification\n\nUse the closest command that covers the changed surface:\n\n```bash\npnpm vitest run packages/qwik-router/src/buildtime/routing/parse-pathname.unit.ts\npnpm vitest run packages/qwik-router/src/runtime/src/client-navigate.unit.ts\npnpm build.core.dev\npnpm playwright test e2e/qwik-e2e/tests/qwikrouter/nav.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\nDo not use `--project chromium` with `e2e/qwik-e2e/playwright.config.ts`; this config expects the\n`--browser=chromium` flag.\n\n## Quality Bar\n\n- Keep middleware, loader, and action ordering explicit. Do not add broad fallbacks that hide which\n  module owns a request.\n- Add regression tests for the exact route shape or request mode that failed, such as index route,\n  layout loader, page loader, redirect, action, or SPA navigation.\n- When changing serialized route state or loader data, update both server output and client\n  consumption in the same change.\n- Preserve deprecated Qwik City compatibility only when current source still supports it, and keep\n  compatibility warnings/tests intentional.\n- If router work exposes stale guidance here or in `.ruler/AGENTS.md`, update the guidance before\n  finishing or record why guidance edits were out of scope.\n\n## Stop Conditions\n\n- Stop and inspect the generated API workflow before hand-editing any `*.api.md` file.\n- Stop and switch to `qwik-e2e-verification` when most of the work is Playwright setup/debugging.\n- Stop and run `pnpm api.update` if exported router API changed.\n",".ruler/skills/qwik-docs-development/SKILL.md":"---\nname: qwik-docs-development\ndescription: Use when writing, modifying, or reviewing Qwik docs content or docs-site code under packages/docs, including docs routes, MDX content, generated LLM outputs, docs build behavior, or docs-specific e2e tests.\n---\n\n# Qwik Docs Development\n\nUse this skill for `packages/docs/**` work. Keep the repo-wide rules from `.ruler/AGENTS.md` in\nforce.\n\n## Fast Path\n\n1. Identify whether the change is docs content, route/layout code, API docs surfacing, generated LLM\n   output, search/indexing, or deployment behavior.\n2. For docs content, follow the writing style below before changing site mechanics.\n3. For existing docs pages already in the LLM manifest, edit source content and regenerate only when\n   verification requires generated output.\n4. Documentation and API pages enter LLM outputs automatically through `createLlmsManifest()` in\n   `packages/docs/scripts/generate-llms.ts`; use curated entries for ordering and richer descriptions.\n5. When editing docs scripts, keep generation deterministic and add focused unit coverage for parser,\n   path, URL, or output-shape behavior.\n6. Prefer docs-specific commands from `packages/docs/package.json`.\n\n## Writing Style\n\nWrite Qwik docs for readers who are learning the concept while solving a concrete task.\n\n- Start with the user need and the Qwik concept in one or two plain paragraphs.\n- Split the page into short sections named after the concept or API, such as `useSignal()`,\n  `Passing signals to child components`, or `Nested objects and arrays`.\n- Explain the default case first, then reveal deeper, less common, or higher-cost cases later, this is done in a note block. There is short and long form notes in MDX.\n- Use complete, minimal examples with current v2 imports from `@qwik.dev/core`.\n- After each example, state what the example created or changed and what Qwik tracks, updates, or\n  serializes.\n- Prefer direct sentences over marketing claims or framework jargon. Define Qwik-specific terms\n  before relying on them.\n- Use notes sparingly for important mental models, tradeoffs, or pitfalls, such as avoiding store\n  destructuring or using `function` when a store method needs `this`.\n- Keep examples small enough to scan, but complete enough to paste into a demo or fixture.\n- Link demos after the core explanation; do not make the link carry the explanation.\n\n## Content Pattern\n\nFor concept docs, use this shape unless the page has a better existing local pattern:\n\n1. State the problem and divide the concept into the two or three choices users need to understand.\n2. Show the simplest API with a complete code example.\n3. Explain the important variable or object in the example in one short paragraph.\n4. Add a sharing, nesting, async, or advanced section only after the default case is clear.\n5. Include a short note for automatic tracking, serialization, or performance tradeoffs when that\n   knowledge prevents common mistakes.\n\n## Source Map\n\n- Docs routes and MDX: `packages/docs/src/routes/`\n- Docs components: `packages/docs/src/components/`\n- LLM generator: `packages/docs/scripts/generate-llms.ts`\n- Docs e2e: `e2e/docs-e2e/tests/`\n- Generated docs build output: `packages/docs/dist/`\n- Web fonts: `packages/docs/src/font-faces.ts` inlines the `*-subset-*` fonts from\n  `packages/docs/src/media/fonts/` and links the `*-latin-*` files for the remaining characters.\n  Regenerate a subset with fontTools:\n  `pyftsubset <latin file> --unicodes=\"<subsetUnicodeRange>\" --layout-features='*' --flavor=woff2 --output-file=<subset file>`,\n  then keep `restOfLatinUnicodeRange` equal to the rest of the Latin file's characters.\n\n## LLM Output Rules\n\nThe docs build can generate:\n\n- `dist/llms.txt`\n- `dist/llms-ctx.txt`\n- `dist/llms-ctx-full.txt`\n- curated markdown mirrors under `dist/docs/`\n\nDo not hand-edit generated files in `packages/docs/dist/`. Edit docs source or\n`packages/docs/scripts/generate-llms.ts`, then regenerate.\n\nKeep `llms.txt` and MCP on the same complete manifest. Documentation and API pages are discovered\nautomatically; curated entries provide ordering, descriptions, and additional landing pages.\n\n## Verification\n\nUse the narrowest relevant command:\n\n```bash\npnpm -C packages/docs generate.llms\npnpm -C packages/docs build\npnpm playwright test e2e/docs-e2e/tests/docs-smoke.spec.ts --config e2e/docs-e2e/playwright.config.ts --project chromium\n```\n\nSet `QWIK_LLMS_BASE_URL` only when intentionally testing alternate generated links.\n\n## Stop Conditions\n\n- Keep additional landing pages in the curated entries of the shared manifest.\n- Stop and run or request the relevant docs build when route generation or static output behavior is\n  changed.\n- If docs source or scripts contradict this skill, update the skill before finishing or record why\n  guidance edits were out of scope.\n\n## No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n",".ruler/skills/qwik-e2e-verification/SKILL.md":"---\nname: qwik-e2e-verification\ndescription: Use when creating, modifying, debugging, or running Qwik Playwright e2e tests under e2e/, including router, adapters, docs, CLI, and React integration suites.\n---\n\n# Qwik E2E Verification\n\nUse this skill for Playwright e2e work in `e2e/**`. Keep the repo-wide rules from\n`.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify the suite: Qwik core app, Qwik Router, adapters, docs, CLI, or Qwik React.\n2. Run the dev rebuild first when testing Qwik runtime/router behavior.\n3. Use the suite's Playwright config and the browser-selection style that config expects.\n4. Prefer one focused e2e file before broad suite commands.\n5. When debugging app fixtures, inspect the matching `e2e/*/apps/` source before changing tests.\n6. Turn a failing behavior into the smallest deterministic regression. Avoid sleeps and broad\n   assertions when a route, marker, event, or serialized state check can prove the behavior.\n\n## Suites\n\n- Main Qwik e2e: `e2e/qwik-e2e/tests/`\n- Router e2e: `e2e/qwik-e2e/tests/qwikrouter/`\n- Adapter e2e: `e2e/adapters-e2e/tests/`\n- Docs e2e: `e2e/docs-e2e/tests/`\n- CLI e2e: `e2e/qwik-cli-e2e/tests/`\n- React integration e2e: `e2e/qwik-react-e2e/tests/`\n\nApps whose directory names contain `.prod` run in production mode under the shared Qwik dev server.\nKeep exact production-only assertions in those fixtures; regular fixtures must pass after either\n`build.core.dev` or `build.core`.\n\n## Commands\n\nMain Qwik e2e config uses `--browser`, not Playwright projects:\n\n```bash\npnpm build.core.dev\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\npnpm playwright test e2e/qwik-e2e/tests/qwikrouter/nav.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\nFor timing-sensitive regressions, prefix the command with `GITHUB_ACTIONS=true` and use\n`--retries=0` to disable local `slowMo: 100` and expose races. Wait for a fresh completion marker\nafter lazy handlers; a completed click or previously populated output does not prove completion.\n\nSSR content can appear before the dynamically imported qwikloader registers listeners. Before\ntesting client handlers, wait for `window._qwikEv?.roots`; neither `commit` nor `load` guarantees\nthat the dynamic import has finished.\n\nThe brotli budget tests in `ssg-snapshot.e2e.ts` measure the built core chunk, so they need a\nproduction `pnpm build.core` — `build.core.dev` leaves core unminified and blows the budget by ~4%.\nBefore believing a budget failure, rebuild with `build.core` and re-run `pnpm test.e2e.router.ssg`.\n\nPlaywright's `reuseExistingServer: !CI` means a dev server left over from an earlier run serves\nstale bundles, so a local pass can hide a build break that CI catches. Kill port 3301 before\ntrusting a green local sweep after optimizer or bundler changes.\n\nThe CLI e2e scaffolds starters with `create-qwik` and runs their own `npm run dev`/`build` scripts,\nso it is the only suite that exercises a real starter's Vite dev server and production builds; the\nshared Qwik dev server above passes its own resolve conditions. Run it locally with `CI=1` so the\nscaffolds land inside the workspace, where pnpm's `allowBuilds` lets `sharp` build (a `/tmp`\nscaffold fails with `ERR_PNPM_IGNORED_BUILDS`), and after `pnpm build.platform.copy` if\n`packages/optimizer/bindings` is missing. It scaffolds from `packages/create-qwik/dist`, so run\n`pnpm build.cli` after editing `starters/`, or the suite silently tests the previous starters:\n\n```bash\nCI=1 pnpm --filter qwik-cli-e2e exec vitest run --config=vite.config.ts tests/external-library.spec.ts\n```\n\nCommands the CLI e2e spawns inherit Vitest's `NODE_ENV=test`, which Vite treats as a development\nbuild; pass `NODE_ENV` explicitly through `runCommandUntil` when a test depends on the build mode.\n\nFor HTTP cache assertions, use a fresh `launchPersistentContext()` profile per test and remove\nit after closing the context. WebKit's default ephemeral context has no network disk cache, so\n`fetch()` may hit the server despite a fresh `Cache-Control` response. Keep request routing off\nfor cache tests: Playwright interception disables HTTP caching.\n\nOther suites may use named Playwright projects. Check their config before choosing flags:\n\n```bash\npnpm playwright test e2e/docs-e2e/tests/docs-smoke.spec.ts --config e2e/docs-e2e/playwright.config.ts --project chromium\npnpm playwright test e2e/adapters-e2e/tests/adapters.spec.ts --project=chromium --config e2e/adapters-e2e/playwright.config.ts\npnpm playwright test e2e/qwik-react-e2e/tests/reactify.spec.ts --project=chromium --config e2e/qwik-react-e2e/playwright.config.ts\n```\n\n## SSG snapshot suite\n\n`e2e/qwik-e2e/tests/qwikrouter/ssg-snapshot.e2e.ts` asserts two independent things against the built\n`qwikrouter-ssg-snapshot` app:\n\n- **Serialized output goldens** — `expected.state.txt` and `expected.ssg.html`. Regenerate after an\n  intentional serialization or SSR output change with `pnpm test.e2e.router.ssg.update`.\n- **Brotli size budgets** — `CORE_BROTLI_BUDGET` / `PRELOADER_BROTLI_BUDGET` /\n  `QWIKLOADER_BROTLI_BUDGET` constants in that spec. A core change that grows a bundle fails with the\n  exact over-budget byte count; bump the matching constant when the growth is intentional.\n\nTraps:\n\n- The core budget also runs after dev builds; measure it only after `pnpm build.core`.\n- `test.e2e.router.ssg.update` regenerates the goldens only; it never touches the budgets, so a\n  budget breach survives the update.\n- The update run can exit non-zero because a sibling budget assertion failed, not the golden. \"N\n  passed\" with exit 1 usually means a budget breach — read the failing assertion instead of assuming\n  the golden is stale.\n- After rebasing onto a moved base the golden conflicts; regenerate it rather than hand-merging, then\n  re-run `pnpm test.e2e.router.ssg` (no update flag) to confirm it passes deterministically.\n\n## Stop Conditions\n\n- Stop and inspect the suite config when `--browser` versus `--project` is unclear.\n- Stop and report if browser binaries, build artifacts, or dependencies are missing.\n- Do not broaden to all e2e suites unless the user asks or the changed surface requires it.\n- If a test failure shows this skill has stale suite or command guidance, update the skill before\n  finishing or record why guidance edits were out of scope.\n",".ruler/skills/qwik-guidance-maintenance/SKILL.md":"---\nname: qwik-guidance-maintenance\ndescription: Use when editing Qwik's .ruler guidance, adding or changing rules or skills, keeping AI guidance from going stale, updating assistant setup docs, or answering how Ruler should generate assistant-native guidance, skills, config, or policy for this repo.\n---\n\n# Qwik Guidance Maintenance\n\nUse this skill for `.ruler/**`, README AI assistant setup, dedicated rules, generated\nassistant-output boundaries, rule-vs-skill taxonomy work, and assistant-native config questions.\nAlso use it at the end of a code task when source inspection proves a loaded skill or reference is\nstale.\n\n## Fast Path\n\n1. Follow the Guidance Source Of Truth rule (in `.ruler/AGENTS.md`) for source layout, rule-vs-skill\n   taxonomy, generated assistant outputs, AI config builder behavior, skill naming, and stale-guidance policy.\n2. Follow the Generated Output Boundaries rule (in `.ruler/AGENTS.md`) before editing, regenerating,\n   or relying on generated output.\n3. Edit committed source files in `.ruler/`, not generated assistant outputs.\n4. Keep new durable policy in the narrowest source: `.ruler/AGENTS.md` for repo-wide context and\n   always-on rules, and `.ruler/skills/**` for task-specific workflows.\n5. For a target assistant, research the current native guidance, skill, config, and policy formats\n   when the mapping is ambiguous.\n6. Verify Ruler behavior with a dry run when the CLI is available.\n7. Verify generated guidance by checking source markers in the target assistant's native guidance\n   file and generated skills in the target assistant's native skills directory when supported.\n\n## Freshness Workflow\n\nWhen an agent uses a skill and current source contradicts it:\n\n1. Finish the user's product-code task first unless the guidance defect blocks the task.\n2. Update the narrowest `.ruler` source that was wrong.\n3. Prefer replacing stale details over appending another long lesson.\n4. Keep history-derived guidance behavioral and durable.\n5. Mention the guidance update in the final response so reviewers know why `.ruler` changed.\n\n## Source Map\n\n- Repo-wide guidance + always-on rules: `.ruler/AGENTS.md`\n- Human setup guide: `.ruler/README.md`\n- Ruler config: `.ruler/ruler.toml`\n- Source skills: `.ruler/skills/**/SKILL.md`\n- Generated outputs (committed): root `AGENTS.md` and `CLAUDE.md`; generated skill copies and\n  other `.claude/`/`.codex/`/`.cursor/` files stay local and gitignored\n\n## Rule And Skill Workflow\n\n- For a new always-on policy, add or update a rule section in `.ruler/AGENTS.md` and its summary in\n  the Source Rules index there.\n- For package-specific details, update the package skill or a directly linked reference.\n- For long notes, add a `references/` file only when progressive disclosure keeps the skill body\n  smaller and clearer.\n- For assistant setup changes, keep human setup steps in `.ruler/README.md` and behavioral agent\n  rules in `.ruler/AGENTS.md`.\n- For assistant output questions, use the `guidance-source-of-truth` rule unless current Ruler or\n  target-tool docs have changed.\n- Treat command execution policy as a separate native format from prose guidance. Do not translate\n  `.ruler/AGENTS.md` guidance into command-policy files just because the target tool calls them \"rules\".\n\n## Verification\n\nUse the target assistant for the change. For a Codex example:\n\n```bash\nnpx @intellectronica/ruler apply --agents codex --dry-run --no-mcp --no-gitignore\nruler apply --agents codex\nrg -n 'Source: .ruler/AGENTS.md' AGENTS.md\nfind .codex/skills -name SKILL.md\npnpm prettier --check .ruler README.md .gitignore\ngit diff --check\n```\n\nIf `npx` cannot reach the registry, retry only when network approval is appropriate; otherwise\nrecord the blocker and still run local formatting/diff checks.\n\n## Stop Conditions\n\n- Stop before editing generated assistant outputs directly.\n- Stop if a proposed rule duplicates detailed skill content instead of summarizing durable policy.\n- Stop if current Ruler or target-tool docs contradict the Guidance Source Of Truth rule in\n  `.ruler/AGENTS.md`.\n",".ruler/skills/qwik-core-development/SKILL.md":"---\nname: qwik-core-development\ndescription: Use when modifying or reviewing Qwik core package code under packages/qwik, especially reactive primitives, signals, VNodes, cursor behavior, QRLs, optimizer-facing runtime behavior, or Qwik core tests.\n---\n\n# Qwik Core Development\n\nUse this skill for `packages/qwik/**` work. Keep the normal repo-wide instructions from `.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify the touched subsystem before editing: reactive primitives, VNode/client diffing, cursor, QRL/serialization, SSR, hooks, or tests.\n2. Read the smallest relevant source and tests before making changes.\n3. Find the invariant that must stay true across SSR, resume, client render, and serialization when\n   the touched code crosses those boundaries.\n4. After implementation changes, immediately run the closest focused Vitest file with `pnpm vitest run <path>`. Do not use `pnpm test.unit`.\n5. If touching Rust optimizer code, load `qwik-optimizer-development` instead of treating the change as TypeScript-only.\n\n## When to Load Detailed Notes\n\nRead `references/core-notes.md` only when the task involves:\n\n- async signals, computed signals, polling, or signal invalidation;\n- QRL creation, `$` transform behavior, or serialization issues;\n- VNode, cursor, or DOM diff behavior;\n- Qwik core tests that use `$()`, `retryOnPromise`, or private runtime state;\n- an unfamiliar pattern in `packages/qwik/src/core`.\n\nDo not load the reference for simple docs, package metadata, formatting, or unrelated monorepo work.\n\n## Core Reminders\n\n- Prefer existing Qwik runtime patterns over new abstractions.\n- Keep state ownership explicit. For serialized or streamed data, update emit and consume paths\n  together and add a round-trip or regression test.\n- Preserve compatibility deliberately. If deprecated input remains accepted, test both deprecated and\n  current behavior.\n- Use `$`-suffixed functions and `$()` in tests when a QRL boundary is expected.\n- Avoid manual QRL construction unless nearby code already does it for the same reason.\n- Keep tests focused and close to the behavior that changed; add e2e coverage only when browser,\n  streaming, navigation, or integration timing is the behavior under test.\n- If the change affects public API, run `pnpm api.update` after the focused tests pass.\n- If this skill or `references/core-notes.md` is stale after your source inspection, update it before\n  finishing or record why guidance edits were out of scope.\n","AGENTS.md":"<!-- Generated by Ruler -->\n\n\n<!-- Source: .ruler/AGENTS.md -->\n\n# Qwik v2 agents reference, instructions and rules\n\n> [!IMPORTANT]\n> **ALWAYS RUN `ruler apply` AT THE START OF A SESSION.** The agent skills are gitignored, not\n> committed, so a fresh clone/worktree has none until you generate them (once per worktree):\n>\n> ```bash\n> pnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n> ```\n\n> Canonical source for repo-wide AI coding agent rules. For contributor setup, see\n> [CONTRIBUTING.md](./CONTRIBUTING.md). For package-specific workflows, load the relevant\n> `.ruler/skills/*/SKILL.md` file.\n\n## Source Of Truth\n\n- Shared AI guidance lives in `.ruler/`.\n- Only the root `AGENTS.md` and `CLAUDE.md` are committed generated outputs; the `.claude/`/`.codex/`\n  skill copies are gitignored and regenerated locally with `ruler apply` (see Setup below).\n- Never hand-edit a generated output — edit `.ruler/` and regenerate with `ruler apply`. A CI check\n  re-runs it and fails if the committed root files drift.\n- To change assistant behavior, edit `.ruler/AGENTS.md`, `.ruler/README.md`, or `.ruler/skills/**`,\n  then regenerate with Ruler when needed.\n\n## Project Snapshot\n\nQwik is a resumable web framework. SSR serializes application and framework state into HTML, and\nthe client resumes without re-running component code. Qwik v2 is a rewrite with VNode-based\nruntime work, rewritten reactive primitives, a new serialization mechanism, and package names under\n`@qwik.dev/*`.\n\nKey concepts: resumability, QRLs, `$`-suffixed optimizer boundaries, fine-grained signals, VNodes,\nthe cursor system, and the Rust optimizer.\n\n## Monorepo Map\n\n- Base branch and release branch for v2 PRs: `main`. V1 lives on the `v1` branch.\n\n| Package | Path | Notes |\n| --- | --- | --- |\n| `@qwik.dev/core` | `packages/qwik` | Core runtime, SSR, optimizer-facing code |\n| `@qwik.dev/router` | `packages/qwik-router` | Routing, middleware, adapters, SSG |\n| `@qwik.dev/react` | `packages/qwik-react` | React integration |\n| `@qwik.dev/utils` | `packages/qwik-utils` | Less-common helpers (`usePoll`, `zod$`), may use qwik internals |\n| `@qwik.dev/dom` | `packages/qwik-dom` | Server-side DOM implementation |\n| `@qwik.dev/qwik-vite` | `packages/qwik-vite` | `vite-plugin-qwik`, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/ts-optimizer` | `packages/ts-optimizer` | TypeScript optimizer, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/optimizer` | `packages/optimizer` | Rust optimizer, WASM, NAPI bindings; kept for parity comparison |\n| `eslint-plugin-qwik` | `packages/eslint-plugin-qwik` | ESLint rules |\n| `create-qwik` | `packages/create-qwik` | Project scaffolding CLI |\n| `qwik-docs` | `packages/docs` | Docs site, private package |\n| `insights` | `packages/insights` | Analytics dashboard, private package |\n\nUse v2 package names (`@qwik.dev/core`, `@qwik.dev/router`, etc.). Do not introduce v1\n`@builder.io/qwik` or `@builder.io/qwik-city` imports except when working on explicit\ncompatibility override code.\n\n## Setup And Iteration Loop\n\nThis is the canonical loop for nearly all framework work. Default to it; do not substitute broader\ncommands:\n\n### getting started\n\n```bash\npnpm i\n```\n\n```bash\n# Materialize the agent skills into .claude/.codex (gitignored) — run once per fresh clone/worktree.\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\n```bash\npnpm build.core # for a fresh start\npnpm build.full # for a fresh start and you are working on the docs or the other packages\npnpm build.rust # only when working on the Rust optimizer; the only step that needs the Rust toolchain\n```\n\nThe local scripts and tests use the TypeScript optimizer (`tsOptimizer: true` in the repo's own\nvite configs and test harnesses), so no Rust toolchain or prebuilt bindings are needed for them.\nKeep that flag on any new repo-owned `qwikVite()` call site; the plugin still defaults to the Rust\noptimizer for published apps. `QWIK_OPTIMIZER=rust` (or `ts`) overrides the flag for a whole run, which\nis how CI runs the e2e suites on both optimizers; it needs `pnpm build.rust` or\n`pnpm build.platform.copy` first.\n### Iterating\n\nPrefer focused commands and builds over repo-wide commands and builds.\n\n```bash\n# Fast dev build — required once before any tests can run, and again after framework\n# source changes when the verification consumes build output (all e2e suites do)\npnpm build.core.dev\n\n# Closest focused unit/spec test\npnpm vitest run packages/qwik/src/core/tests/use-task.spec.tsx\n\n# Focused e2e test\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\n`build.core.dev` also re-emits fresh Qwik and Router `.d.ts` incrementally (via `tscDevDts` + re-export shims), so editing a public signature no longer leaves stale types — `build.watch` skips the type pass to stay instant.\n\nFor Qwik e2e tests, use `--browser=chromium` with `e2e/qwik-e2e/playwright.config.ts`.\n\nRe-run `pnpm build.rust` (or `pnpm build.rust.dev`) when you are touching the optimizer rust code.\n\n### When making a PR\n\n```bash\n# for type-level verification when no focused test covers the change\npnpm tsc.check\n\n# update the API\npnpm api.update\n\n# Verify the build passes\npnpm build.core\n\n# Verify unit tests pass\npnpm test.unit\n\n# Verify the E2Es pass\npnpm test.e2e.chromium\n\n# In case of html output change, update the ssg snapshot\npnpm test.e2e.router.ssg.update\n\n# In case of a new feature, run the test.bench\npnpm test.bench\n\n# In case of qwikloader changes\npnpm vitest packages/qwik/src/qwikloader.unit.ts -u\n```\n\nIf any of those fail, fix and push your changes.\n\n## Rules\n\nRecent Qwik v2 work by core maintainers favors small, behavior-shaped changes with regression proof.\nFollow that bias:\n\n### Guidance Freshness\n\n- If a skill or reference you used is stale, incomplete, or contradicted by current source, update\n  the `.ruler` source guidance before finishing the task unless the user explicitly restricted the\n  scope.\n- Keep new durable lessons in the most specific skill or reference that future agents are likely to\n  load. Do not add package-specific details to these always-on rules unless they affect most tasks.\n- Only add a lesson to a skill when it generalizes to future tasks. Keep single-PR specifics (one\n  module's protocol, one fix's mechanics) in the code and its tests, not in a skill.\n- Write those notes **prescriptively** — the invariants to keep, the traps that cause false passes,\n  where things live, and how to verify — rather than describing how the code currently works. Omit \"don't do X\" prohibitions for anything a test already enforces; the\n  suite is the guardrail, so reserve notes for what it can't self-enforce.\n- When updating guidance, load the `qwik-guidance-maintenance` skill.\n\n### Skill Selection\n\nLoad the relevant skill before non-trivial work in that area:\n\n| Skill | Use when |\n| --- | --- |\n| `qwik-core-development` | Editing/reviewing `packages/qwik/**` core runtime code |\n| `qwik-router-development` | Editing/reviewing router runtime, buildtime, middleware, adapters, or SSG |\n| `qwik-optimizer-development` | Editing/reviewing Rust optimizer, WASM, NAPI, or optimizer-facing behavior |\n| `qwik-e2e-verification` | Creating, debugging, or running Playwright e2e suites |\n| `qwik-docs-development` | Writing/editing docs content, docs site routes, or docs LLM outputs |\n| `qwik-guidance-maintenance` | Editing `.ruler/**`, generated-output guidance, or stale skill/reference content |\n\nIf no skill fits, stay with these repo-wide rules and inspect local source before changing code.\n\nIf a skill above is not loadable, its copy has not been generated in this worktree yet — run the\n`ruler apply` step from Setup, or read the source directly at `.ruler/skills/<name>/SKILL.md`.\n\nKeep the `qwik-` prefix on committed source skill names. Ruler copies these skills into\nagent-native skill directories where they may coexist with user or plugin skills, so the prefix keeps\nthe skill list unambiguous outside the repo-local `.ruler` tree.\n\n### Changesets\n\nWhen a change affects published packages, add a changeset under `.changeset/`.\n\n- Use `patch` for bug fixes: focus on the issue rather than the solution.\n- `minor` for new features: explain the new feature.\n- `major` for API removal: may also include a new feature, but it must remove or break a public API.\n- Enforce 1 changeset per change.\n- Write the changeset summary in lowercase (e.g. `fix:`)\n- 1 short sentence (10-ish words) focused on the bug fix or feature. Don't include implementation details.\n\n### Commits\n\n- One coherent set of changes per commit. Do not fold an unrelated fix into a commit for another\n  change.\n- Fixes that are independent of the branch's main change get their own commits, placed before it,\n  so they can be reviewed and cherry-picked on their own.\n- Write the subject as a short imperative summary. The body explains the \"why\" tersely when it is\n  not obvious from the subject. The \"what\" and \"how\" live in the code; summarize them only when the\n  commit is large.\n- When a branch has grown out of that shape, rewrite it into that order before review instead of\n  stacking fix-up commits.\n\n### Code Quality\n\n\n#### Sanity\n\n- Remember to keep your code DRY.\n- Do not leave debug logging or temporary names in the final diff.\n- Only add comments for crucial information that is not self-explanatory. Keep your comments constrained to 1 short sentence (10-ish words) maximum. Focus on explaning the why/issue rather than implementation details.  \n- Write one changeset per patch/minor/major change. Keep the changeset message constrained to 1 short sentence or 2 maximum, focused on the bug fix, feature or breaking changes. Don't explain the internals or implementation details.\n\n#### Naming\n\n- Use names that explain the domain idea, not the implementation trick.\n- Prefer specific names over short names when the value crosses more than a few lines.\n- Name booleans as questions or states, such as `isReady`, `hasSubscribers`, or `shouldFlush`.\n- Name functions by the action they perform, such as `resolveLoaderData()` or\n  `markContainerReady()`.\n- Avoid vague names like `data`, `item`, `temp`, `handle`, `process`, or `doWork` unless the local\n  scope makes the meaning obvious.\n- Keep existing public API names unless the task is intentionally changing the API.\n\n#### Control Flow\n\n- Prefer early returns for invalid, empty, unsupported, or already-handled cases.\n- Avoid deep nesting when a guard clause can make the main path easier to read.\n- Keep the success path visible at the outer indentation level when possible.\n- Do not use clever boolean expressions when a named condition or small helper would be clearer.\n- Keep error and compatibility branches explicit so reviewers can see why they exist.\n\n#### Modularity\n\n- Keep functions focused on one responsibility.\n- Extract a helper when a block has a clear name, is reused, or hides the main path.\n- Do not extract helpers only to move complexity around; the caller should become easier to read.\n- Keep helpers close to their first use unless they are shared across files.\n- Prefer local semantic helpers over broad abstractions.\n- Keep consumer- or framework-specific carve-outs (magic values, special cases) at the boundary that\n  owns that knowledge; do not push them into a generic lower-level utility that should stay agnostic.\n\n#### Review Standard\n\nBefore finishing, read the changed code as if you are new to the package:\n\n1. Can a junior developer explain what each name represents?\n2. Can an AI agent identify the main path without following deeply nested branches?\n3. Are edge cases handled by clear guard clauses or named helpers?\n4. Is the change modular without hiding important state or protocol boundaries?\n\nIf the answer is no, simplify the code before calling the task complete.\n\n### Code Style\n\nPrettier and ESLint define style. Keep semicolons, single quotes, two-space indentation, trailing\ncommas where configured, and always use braces for control flow.\n\nNaming conventions:\n\n| Pattern | Usage |\n| --- | --- |\n| `use*` | Hooks called in component/task scope |\n| `*$` | QRL boundary extracted by the optimizer |\n| `create*` | Factory functions |\n| `*.unit.ts(x)` | Vitest unit files |\n| `*.spec.ts(x)` | Vitest spec files |\n| `*.e2e.ts` | Playwright e2e files |\n\n### Security And Supply Chain\n\nTreat security-sensitive changes as behavior changes even when they look like config, dependency,\nor CI maintenance.\n\n#### Security Review Trigger\n\nPause for a focused security pass when a change touches:\n\n- authentication, authorization, sessions, cookies, redirects, URL parsing, filesystem paths, SSR,\n  serialization, HTML/script output, request handling, or server adapters\n- dependency versions, lockfiles, package manager settings, release scripts, publishing scripts, or\n  build tooling\n- GitHub Actions, reusable workflows, workflow permissions, tokens, secrets, cache keys, artifact\n  upload/download, or deployment credentials\n\nUse the changed diff as the starting point. Check directly supporting files when needed, but do not\nturn a small change into a repository-wide security scan unless the user asks.\n\n#### What To Check\n\n- Identify the trust boundary: attacker-controlled input, untrusted dependency code, untrusted CI\n  event data, secrets, tokens, publish credentials, or generated output.\n- Find the closest existing guard and the sink it protects. Do not claim safety from a broad\n  intuition; point to the concrete validation, escaping, permission, or isolation boundary.\n- Prefer fail-closed behavior for malformed input, unknown modes, unsupported hosts, and missing\n  config.\n- Keep secrets out of logs, snapshots, artifacts, caches, generated files, browser output, and error\n  messages.\n- When changing dependencies or build tools, check for new install scripts, binary downloads,\n  network fetches, transitive tool execution, license or provenance surprises, and lockfile drift.\n\n#### GitHub Actions\n\nWhen editing `.github/workflows/**` or action-related scripts:\n\n- Keep `permissions:` least-privilege at the workflow or job level.\n- Do not introduce `pull_request_target` for code checkout/build/test of untrusted PR content unless\n  the workflow is explicitly designed to avoid running attacker-controlled code with secrets.\n- Avoid passing secrets to forked PRs, third-party actions, shell commands that print env, or\n  generated artifacts.\n- Prefer trusted first-party actions. For new third-party actions, pin to a full commit SHA or\n  document why a moving tag is acceptable.\n- Treat cache restore keys and artifact paths as untrusted input surfaces. Avoid broad paths that can\n  poison future jobs or expose credentials.\n- Quote shell variables and avoid `eval`, curl-piped shells, and unchecked interpolation of GitHub\n  context values into shell commands.\n\n#### Verification\n\nFor security-sensitive changes, record the focused security reasoning in the final response:\n\n1. What boundary changed?\n2. What guard or invariant prevents abuse?\n3. What focused test, lint, config check, or manual inspection covered it?\n\nIf you cannot verify the security property locally, say exactly what remains unverified.\n\n### Test Driven Development\n\nUse test-driven development for behavior changes and bug fixes.\n\n#### Required Workflow\n\n1. Identify the observable behavior or invariant before editing implementation code.\n2. Add or update the closest focused test that proves the behavior.\n3. Run that test before the implementation change when feasible and confirm it fails for the\n   expected reason.\n4. Make the smallest implementation change that satisfies the test.\n5. Rerun the focused test and keep iterating until it passes.\n6. Run any broader verification required by the touched surface, such as API docs, optimizer\n   snapshots, build output, or e2e coverage.\n\n#### Test Selection\n\n- Prefer unit/spec tests next to the changed code.\n- Use optimizer fixtures and snapshots for Rust transform behavior.\n- Use e2e tests only when the behavior depends on a real browser, navigation, streaming, SSR/CSR\n  integration, adapter behavior, or fixture app wiring.\n- For serialization, hydration, streaming, or loader protocol changes, test both the writer and the\n  reader path.\n- For compatibility behavior, test both the current API path and the supported deprecated path.\n\n#### Exceptions\n\nDocs-only, rules-only, formatting-only, dependency metadata, and generated-output maintenance\nchanges do not need a failing product test first. They still need the narrowest relevant\nverification, such as formatting, Ruler dry-run, generated-output checks, or docs build checks.\n\nIf dependencies, missing generated artifacts, or local environment constraints prevent a pre-fix\ntest run, write the focused test first, record the blocker, and run the test as soon as the blocker\nis resolved.\n\n### Boundaries\n\n- Preserve user work and unrelated changes. Do not reset or revert unrelated files.\n- Keep edits scoped to the package, generated-file boundary, and verification surface implied by the\n  task.\n- Do not commit `.only` tests.\n- Do not skip tests for behavior changes; use the closest focused test first.\n\n### No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n#### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n\n\n\n<!-- Source: .ruler/README.md -->\n\n# Ruler Setup\n\nThis project uses [Ruler](https://github.com/intellectronica/ruler) to keep AI assistant instructions in one committed source of truth.\n\n## Source Of Truth\n\n```\n.ruler/\n├── AGENTS.md      # Repo-wide guidance + always-on rules (appended at the end)\n├── skills/        # Shared source skills propagated by Ruler\n└── ruler.toml     # Ruler agent configuration\n```\n\nUse `.ruler/AGENTS.md` for always-on repository context and rules (the rules live as sections at the\nend of that file). Use `.ruler/skills/` for task-specific workflows that should be loaded only when\nrelevant.\n\nAlways-on rules currently in `.ruler/AGENTS.md`:\n\n- `changeset-conventions`\n- `commit-conventions`\n- `code-quality`\n- `generated-output-boundaries`\n- `guidance-source-of-truth`\n- `no-hydration-terminology`\n- `security-and-supply-chain`\n- `test-driven-development`\n\nCurrent source skills:\n\n- `qwik-core-development`\n- `qwik-router-development`\n- `qwik-optimizer-development`\n- `qwik-e2e-verification`\n- `qwik-docs-development`\n- `qwik-guidance-maintenance`\n\nThe `qwik-` prefix is intentional. Ruler copies skills into assistant-native directories where they\ncan appear beside personal and plugin skills, so the prefix keeps these repo skills recognizable\noutside the `.ruler/` tree.\n\nRoot `AGENTS.md` and `CLAUDE.md` are generated by Ruler but committed (so fresh clones and worktrees\nhave the always-on guidance immediately). The generated skill directories (`.claude/skills/`,\n`.codex/skills/`) and the rest of `.claude/`/`.codex/`/`.cursor/` stay local and gitignored — run\n`ruler apply` to materialize the skills. Never edit a generated file directly — update `.ruler/`,\nrun `ruler apply`, and commit the regenerated root files.\n\n## AI Config Builder\n\nTreat Ruler as the source layer and the selected assistant as the output layer.\n\nWhen you are setting up or debugging an assistant-specific config:\n\n1. Identify the target assistant and Ruler agent id.\n2. Read this file and `.ruler/ruler.toml`.\n3. Research the target assistant's current native instruction, rule, skill, config, and policy\n   formats when the mapping is ambiguous.\n4. Map `.ruler` files by semantic role, not by filename.\n5. Run `ruler apply --agents <agent>`.\n6. Verify that the generated files contain the expected source guidance and skills.\n\n| Ruler source | Semantic role | Builder action |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Repo-wide AI guidance + always-on rules | Generate into the target assistant's primary native guidance file. |\n| `.ruler/skills/*/SKILL.md` | Task-triggered workflows | Copy to the target assistant's native skills directory when supported. |\n| `.ruler/ruler.toml` and Ruler MCP config | Agent selection, output paths, MCP/config | Generate or merge native config only where Ruler and the target assistant support it. |\n\nDifferent tools use words like \"rules\" for different things. A native rules file may mean\nnatural-language guidance, directory-scoped steering, MCP config, hooks, or command execution\npolicy. Check current docs or the installed Ruler adapter before creating or copying a tool-specific\nfile.\n\n## Markdown Guidance Bundle\n\nThe AI-agnostic Markdown guidance bundle is `.ruler/AGENTS.md` (repo-wide context plus the always-on\nrules appended at its end) together with this `.ruler/README.md`.\n\nRuler concatenates that bundle and writes it to each selected assistant's native AI guidance file.\nUse source markers in the generated file to verify inclusion. Do not bypass Ruler by copying these\nMarkdown files into a tool-specific directory whose format has not been verified.\n\nIf you are an AI assistant building local config for a target tool, research that tool's current\nnative guidance, skill, config, and policy formats before adding any tool-specific output. Map\n`.ruler` files by what they mean, not by filename: Markdown guidance belongs in the assistant's\nnative AI guidance surface, skills belong in native skills if supported, and command-permission\npolicy belongs only in a separately researched policy format. For Codex, Ruler includes all\n`.ruler` Markdown guidance in generated `AGENTS.md`; `.codex/rules/*.rules` is command policy, not\nMarkdown guidance.\n\n### Worked Example: Codex\n\nCurrent Ruler and OpenAI Codex behavior maps this repo's sources as follows:\n\n| Ruler source | Codex-native output | Verify after `ruler apply --agents codex` |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Generated root `AGENTS.md` | `rg -n 'Source: .ruler/AGENTS.md' AGENTS.md` |\n| `.ruler/skills/*/SKILL.md` | `.codex/skills/*/SKILL.md` | `find .codex/skills -name SKILL.md` |\n| Ruler MCP config | `.codex/config.toml` when MCP config is generated | `test -f .codex/config.toml` when MCP/config is expected |\n\nCodex `.rules` files are command execution policy files that use `prefix_rule(...)`. They are not a\ntarget for `.ruler/AGENTS.md` prose guidance. If Codex command policy is needed, maintain it as a\nseparate local or team policy using OpenAI Codex's `.rules` format; do not treat it as Ruler\nMarkdown guidance.\n\nExpected Codex check:\n\n```bash\nruler apply --agents codex\nrg -n 'Source: .ruler/AGENTS.md' AGENTS.md\nfind .codex/skills -name SKILL.md\n```\n\n## What Is Committed vs Regenerated\n\nOnly the root `AGENTS.md` and `CLAUDE.md` are **committed** generated outputs, so a fresh clone or\nworktree has the always-on guidance immediately (`.ruler/ruler.toml` keeps `[gitignore] enabled = false`\nso Ruler leaves those two files tracked). The generated skill copies (`.claude/skills/`,\n`.codex/skills/`) are **gitignored** — regenerate them locally with `ruler apply`. This keeps skill\nand note edits from appearing three times (source plus two copies) in every PR.\n\nTo change guidance, edit `.ruler/`, run `ruler apply`, and commit the regenerated root files\nalongside your `.ruler/` change. Never hand-edit the generated files. A CI check\n(`.github/workflows/ruler-check.yml`) re-runs `ruler apply` and fails if the committed root files\ndrift from `.ruler/`.\n\n## Generate Local Assistant Files\n\nInstall Ruler if you do not already have it:\n\n```bash\nnpm install -g @intellectronica/ruler\n```\n\nOr run it without installing (the form used by fresh worktrees and CI):\n\n```bash\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\nGenerate files for the default configured agents:\n\n```bash\nruler apply\n```\n\nGenerate files for a specific assistant:\n\n```bash\nruler apply --agents claude\nruler apply --agents codex\n```\n\nGenerate files for multiple assistants:\n\n```bash\nruler apply --agents claude,codex\n```\n\n## Project And Personal Configuration\n\nUse `.ruler/` for team-shared instructions and project conventions that should travel with the repo.\n\nUse `~/.config/ruler/` for personal preferences, local workflow shortcuts, API keys, and personal MCP servers:\n\n```bash\nruler init --global\n```\n\nIf it helps everyone working in this repo, add it to `.ruler/`. If it only helps your local setup,\nkeep it in your global Ruler config.\n\n## Updating Instructions\n\nEdit `.ruler/AGENTS.md` for repository-wide guidance and always-on rules (the rules are sections at\nthe end of that file). Edit the relevant `.ruler/skills/<skill-name>/SKILL.md` file for\npackage-specific or workflow-specific guidance.\n\nIf a code task proves a skill or reference stale, update that guidance as part of the same task when\nthe scope allows it.\n\nThen regenerate the local assistant files:\n\n```bash\nruler apply --agents <your-tool>\n```\n\nDo not update generated files like `CLAUDE.md` or `AGENTS.md` by hand. They will be overwritten the\nnext time Ruler runs.\n\n## Skills\n\nAuthor shared skills under `.ruler/skills/` (the committed source). Ruler copies them into each\nenabled agent's skill directory (`.claude/skills/` for Claude, `.codex/skills/` for Codex); those\ncopies are gitignored, so run `ruler apply` once per fresh clone or worktree to materialize them.\nNever hand-edit the copies — edit `.ruler/skills/` and regenerate.\n\nKeep each skill focused:\n\n- Use frontmatter with `name` and a trigger-oriented `description`.\n- Put the fast path in `SKILL.md`.\n- Move long notes into `references/` only when progressive disclosure helps.\n- Keep always-on policy in `.ruler/AGENTS.md`, not duplicated in every skill.\n- Keep durable maintainer lessons current. Prefer updating the specific skill/reference that was\n  wrong over adding broad prose here.\n",".ruler/skills/qwik-optimizer-development/SKILL.md":"---\nname: qwik-optimizer-development\ndescription: Use when modifying or reviewing the Qwik optimizer under packages/optimizer, Rust transform code, WASM/NAPI bindings, optimizer snapshots, or optimizer-facing runtime behavior.\n---\n\n# Qwik Optimizer Development\n\nUse this skill for `packages/optimizer/**` and Rust optimizer work. Keep the repo-wide rules from\n`.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify whether the change is Rust transform logic, snapshots, WASM bindings, NAPI bindings, or\n   TypeScript optimizer-facing integration.\n2. Read the closest Rust source, fixture, snapshot, and runtime helper that consumes the emitted\n   shape before editing.\n3. Keep transform behavior deterministic: prefer explicit parser/AST cases and stable ordering over\n   source-text heuristics.\n4. Use Rust-focused verification first; use `pnpm build.rust` only when a full binding/WASM rebuild\n   is required. It is the only build step that needs the Rust toolchain and `wasm-pack`.\n5. If a runtime/core change is also involved, load `qwik-core-development` for that slice.\n\n## Source Map\n\n- Rust optimizer core: `packages/optimizer/core/src/`\n- Rust fixtures: `packages/optimizer/core/src/fixtures/`\n- Rust snapshots: `packages/optimizer/core/src/snapshots/`\n- WASM bindings: `packages/optimizer/wasm/`\n- NAPI bindings: `packages/optimizer/napi/`\n- Optimizer package entry points: `packages/optimizer/src/`\n- Vite/Rollup integration: `packages/qwik-vite/src/`\n\n## Verification\n\nUse the smallest command that covers the change:\n\n```bash\npnpm lint.rust\npnpm test.rust\npnpm test.rust.update\npnpm build.rust\npnpm vitest run packages/qwik-vite/src/plugins/plugin.unit.ts\n```\n\n`pnpm test.rust` maps to `make test`, which runs Cargo tests for\n`packages/optimizer/core/Cargo.toml`. Use `pnpm test.rust.update` only when snapshot updates are\nintentional. The repo's own scripts and tests run on the TypeScript optimizer, and CI runs core\nspecs only there. To run a focused spec on the Rust optimizer, rebuild the native binding\n(`pnpm build.rust.dev`; `scripts/index.ts --optimizer --platform-binding --dev` skips WASM) and\nrerun the spec with `QWIK_OPTIMIZER=rust`.\n\n## Baselining a TypeScript optimizer failure\n\nThe repo's unit and e2e suites run on the TypeScript optimizer, so a parity bug shows up as a\nfailing core test rather than a snapshot diff. To tell a TS-only bug from a pre-existing failure:\n\n1. `pnpm build.platform.copy` downloads the published Rust bindings (no toolchain needed).\n2. Rerun the failing file with `QWIK_OPTIMIZER=rust`, which overrides `tsOptimizer` for the run.\n3. Transform the failing source with both `createOptimizer`s (`packages/optimizer/dist/index.mjs`\n   and `packages/qwik/dist/ts-optimizer.mjs`) using the plugin's options (server: `hoist`,\n   `minify: 'simplify'`, plus the client `stripCtxName`/`stripExports` and server\n   `stripEventHandlers` lists from `packages/qwik-vite/src/plugins/plugin.ts`) and diff the\n   outputs; without the strip options a diff can look identical while the real build differs.\n   Call sites (`.w([captures])`, `q:p`, stripped `q_qrl_*` sentinels) diverge more often than\n   segment bodies.\n   When an e2e app misbehaves, baseline the app build too, not only the router library: the dev\n   server compiles the fixture apps with whichever optimizer its `qwikVite()` call selects.\n   Compare `segment.entry` per display name as well, in `mode: 'prod'`: a grouping gap shows up\n   only as a different bundle count in the app's `q-manifest.json`, never as a failing test.\n   The router SSG snapshot e2e runs on both optimizers in CI, so any output difference between\n   them fails there; keep it that way instead of skipping one leg.\n4. Rebuild the bundle with `pnpm build --optimizer --dev` before rerunning core tests; vitest loads\n   `packages/qwik/dist/ts-optimizer.mjs`, not the optimizer source.\n\n## TypeScript-only syntax\n\nEvery pass after `stripTypeScript` parses its input as `.js`, and oxc drops syntax that only parses\nas TypeScript (parameter decorators) from those ASTs, so what it references looks unused and gets\nDCE'd. Lower such syntax inside `stripTypeScript` itself, threading the option to every call site\n(see `decorator`); lowering later in the Vite plugin is too late. Segments are served as `.js`, so\nVite's own `vite:oxc` pass never touches them.\n\n## JSX tag names\n\nRust transpiles JSX before its Qwik transform, so SWC's rule decides what a tag is: only a tag\nstarting with `[a-z]` is an intrinsic element, while `<Foo>`, `<_Foo>` and the object of\n`<ui.Home>` read bindings. In the TypeScript optimizer, ask oxc-walker's `isReferenceIdentifier`\n(or `isNonReferenceIdentifier`) whether a `JSXIdentifier` reads a binding, and `isHtmlElement`\nwhether a tag is intrinsic.\n\n## Const prop bag\n\nThe runtime trusts a const prop to stay the same for the component's lifetime: reads never\nsubscribe, `_wrapProp` returns const values unwrapped, and SSR skips serializing all-const props.\nIf one changes anyway, the child only re-renders and its `useComputed$`/`useTask$` readers go stale.\nSo either optimizer may put a prop, including a `_fnSignal`/`_wrapProp` wrapper, in the const bag\nonly when every local it reads survives re-renders: imports, `const` bindings with a static\ninitializer (`use*`, `*$`, `*Qrl` calls), or params. Render-computed locals and `_restProps` copies\nare recreated per render and belong in the var bag. Unit specs pass on the TS optimizer alone, so\npin classification with a `test_input!` snapshot and check the runtime with `QWIK_OPTIMIZER=rust`.\n\n## Worker pool changes\n\nThe transform worker pool (`packages/ts-optimizer/src/worker-pool.ts`) never starts real workers\nunder vitest: the worker entry cannot resolve the `.js`-suffixed imports of the TypeScript sources,\nso pool tests silently fall back to in-process transforms. Verify worker behaviour against the\nbuilt bundle instead: `pnpm build --optimizer`, then a Node script that imports\n`packages/qwik/dist/ts-optimizer.mjs`, runs a few transforms, and reads `VmData` from\n`/proc/self/status` before spawning a child process. fork() fails with ENOMEM when one mapping\nexceeds RAM plus swap, and the raw-transfer buffers of several threads in one process coalesce into\none mapping (three workers made an 18 GB mapping on a 16 GB host), so keep raw-transfer parsing\nand other multi-gigabyte reservations out of the workers. `QWIK_TS_OPTIMIZER_RAW_TRANSFER=0` turns\nraw transfer off in the host as well when a spawn still fails with ENOMEM.\n\n## Generated Binding Names\n\nBoth optimizers invent bindings (`_rawProps`, `_defaultValue`, the `use*` destructure flattening).\nNeither gets a scope-correct rename for free, so name uniqueness is the transform's job:\n\n- Rust: `private_ident!` plus swc hygiene is not enough once a binding is captured by an extracted\n  segment. Hygiene commits one name per `SyntaxContext` in source order, and segments lifted to\n  module scope are sibling scopes that each keep the base name — the enclosing component scope then\n  carries a duplicate declaration hygiene never revisits. Number generated names at creation.\n- TypeScript: there is no hygiene pass at all, and the rewrite matches identifiers by name. Number\n  every generated binding, skip names inside destructuring patterns, and resolve references through\n  oxc-walker's `ScopeTracker` so names re-bound in a nested scope keep their declaration. Do not\n  bail out of the rewrite on shadowing — Rust still consolidates, and the snapshot diverges.\n- Props objects (`_rawProps`) follow Rust hygiene: each takes the lowest `_rawProps{n}` not held by\n  a props object bound beside it, in emission order. A segment file is its own module; inline `.s()`\n  bodies share one, so never hardcode a suffix — go through `rawPropsBindingNames`.\n\nPin cross-optimizer behavior with a Rust `test_input!` snapshot registered in\n`packages/ts-optimizer/tests/optimizer/snapshot-options.ts`, not with string asserts in a TS test:\nonly the convergence suite catches parity drift. Its mismatches fail in the final\n`convergence summary` test, so a `-t` filter that skips it reports a false pass.\n\n## Hard Rules\n\n- Do not hand-edit generated optimizer build output in `dist/`, `lib/`, or `target/`.\n- Do not update snapshots without understanding the transform behavior change.\n- Add or update a transform fixture/snapshot for every optimizer behavior change, including negative\n  cases where the transform must not run.\n- Keep optimizer output and runtime JSX/QRL/loader semantics in sync. If a transform changes an\n  emitted attribute, import, segment, or capture shape, inspect the runtime consumer too.\n- After touching `packages/optimizer/core/`, do not claim verification without Rust test/build\n  evidence or a recorded blocker.\n- If this skill becomes stale after source inspection, update it before finishing or record why\n  guidance edits were out of scope.\n","CLAUDE.md":"\n\n<!-- Source: .ruler/AGENTS.md -->\n\n# Qwik v2 agents reference, instructions and rules\n\n> [!IMPORTANT]\n> **ALWAYS RUN `ruler apply` AT THE START OF A SESSION.** The agent skills are gitignored, not\n> committed, so a fresh clone/worktree has none until you generate them (once per worktree):\n>\n> ```bash\n> pnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n> ```\n\n> Canonical source for repo-wide AI coding agent rules. For contributor setup, see\n> [CONTRIBUTING.md](./CONTRIBUTING.md). For package-specific workflows, load the relevant\n> `.ruler/skills/*/SKILL.md` file.\n\n## Source Of Truth\n\n- Shared AI guidance lives in `.ruler/`.\n- Only the root `AGENTS.md` and `CLAUDE.md` are committed generated outputs; the `.claude/`/`.codex/`\n  skill copies are gitignored and regenerated locally with `ruler apply` (see Setup below).\n- Never hand-edit a generated output — edit `.ruler/` and regenerate with `ruler apply`. A CI check\n  re-runs it and fails if the committed root files drift.\n- To change assistant behavior, edit `.ruler/AGENTS.md`, `.ruler/README.md`, or `.ruler/skills/**`,\n  then regenerate with Ruler when needed.\n\n## Project Snapshot\n\nQwik is a resumable web framework. SSR serializes application and framework state into HTML, and\nthe client resumes without re-running component code. Qwik v2 is a rewrite with VNode-based\nruntime work, rewritten reactive primitives, a new serialization mechanism, and package names under\n`@qwik.dev/*`.\n\nKey concepts: resumability, QRLs, `$`-suffixed optimizer boundaries, fine-grained signals, VNodes,\nthe cursor system, and the Rust optimizer.\n\n## Monorepo Map\n\n- Base branch and release branch for v2 PRs: `main`. V1 lives on the `v1` branch.\n\n| Package | Path | Notes |\n| --- | --- | --- |\n| `@qwik.dev/core` | `packages/qwik` | Core runtime, SSR, optimizer-facing code |\n| `@qwik.dev/router` | `packages/qwik-router` | Routing, middleware, adapters, SSG |\n| `@qwik.dev/react` | `packages/qwik-react` | React integration |\n| `@qwik.dev/utils` | `packages/qwik-utils` | Less-common helpers (`usePoll`, `zod$`), may use qwik internals |\n| `@qwik.dev/dom` | `packages/qwik-dom` | Server-side DOM implementation |\n| `@qwik.dev/qwik-vite` | `packages/qwik-vite` | `vite-plugin-qwik`, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/ts-optimizer` | `packages/ts-optimizer` | TypeScript optimizer, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/optimizer` | `packages/optimizer` | Rust optimizer, WASM, NAPI bindings; kept for parity comparison |\n| `eslint-plugin-qwik` | `packages/eslint-plugin-qwik` | ESLint rules |\n| `create-qwik` | `packages/create-qwik` | Project scaffolding CLI |\n| `qwik-docs` | `packages/docs` | Docs site, private package |\n| `insights` | `packages/insights` | Analytics dashboard, private package |\n\nUse v2 package names (`@qwik.dev/core`, `@qwik.dev/router`, etc.). Do not introduce v1\n`@builder.io/qwik` or `@builder.io/qwik-city` imports except when working on explicit\ncompatibility override code.\n\n## Setup And Iteration Loop\n\nThis is the canonical loop for nearly all framework work. Default to it; do not substitute broader\ncommands:\n\n### getting started\n\n```bash\npnpm i\n```\n\n```bash\n# Materialize the agent skills into .claude/.codex (gitignored) — run once per fresh clone/worktree.\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\n```bash\npnpm build.core # for a fresh start\npnpm build.full # for a fresh start and you are working on the docs or the other packages\npnpm build.rust # only when working on the Rust optimizer; the only step that needs the Rust toolchain\n```\n\nThe local scripts and tests use the TypeScript optimizer (`tsOptimizer: true` in the repo's own\nvite configs and test harnesses), so no Rust toolchain or prebuilt bindings are needed for them.\nKeep that flag on any new repo-owned `qwikVite()` call site; the plugin still defaults to the Rust\noptimizer for published apps. `QWIK_OPTIMIZER=rust` (or `ts`) overrides the flag for a whole run, which\nis how CI runs the e2e suites on both optimizers; it needs `pnpm build.rust` or\n`pnpm build.platform.copy` first.\n### Iterating\n\nPrefer focused commands and builds over repo-wide commands and builds.\n\n```bash\n# Fast dev build — required once before any tests can run, and again after framework\n# source changes when the verification consumes build output (all e2e suites do)\npnpm build.core.dev\n\n# Closest focused unit/spec test\npnpm vitest run packages/qwik/src/core/tests/use-task.spec.tsx\n\n# Focused e2e test\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\n`build.core.dev` also re-emits fresh Qwik and Router `.d.ts` incrementally (via `tscDevDts` + re-export shims), so editing a public signature no longer leaves stale types — `build.watch` skips the type pass to stay instant.\n\nFor Qwik e2e tests, use `--browser=chromium` with `e2e/qwik-e2e/playwright.config.ts`.\n\nRe-run `pnpm build.rust` (or `pnpm build.rust.dev`) when you are touching the optimizer rust code.\n\n### When making a PR\n\n```bash\n# for type-level verification when no focused test covers the change\npnpm tsc.check\n\n# update the API\npnpm api.update\n\n# Verify the build passes\npnpm build.core\n\n# Verify unit tests pass\npnpm test.unit\n\n# Verify the E2Es pass\npnpm test.e2e.chromium\n\n# In case of html output change, update the ssg snapshot\npnpm test.e2e.router.ssg.update\n\n# In case of a new feature, run the test.bench\npnpm test.bench\n\n# In case of qwikloader changes\npnpm vitest packages/qwik/src/qwikloader.unit.ts -u\n```\n\nIf any of those fail, fix and push your changes.\n\n## Rules\n\nRecent Qwik v2 work by core maintainers favors small, behavior-shaped changes with regression proof.\nFollow that bias:\n\n### Guidance Freshness\n\n- If a skill or reference you used is stale, incomplete, or contradicted by current source, update\n  the `.ruler` source guidance before finishing the task unless the user explicitly restricted the\n  scope.\n- Keep new durable lessons in the most specific skill or reference that future agents are likely to\n  load. Do not add package-specific details to these always-on rules unless they affect most tasks.\n- Only add a lesson to a skill when it generalizes to future tasks. Keep single-PR specifics (one\n  module's protocol, one fix's mechanics) in the code and its tests, not in a skill.\n- Write those notes **prescriptively** — the invariants to keep, the traps that cause false passes,\n  where things live, and how to verify — rather than describing how the code currently works. Omit \"don't do X\" prohibitions for anything a test already enforces; the\n  suite is the guardrail, so reserve notes for what it can't self-enforce.\n- When updating guidance, load the `qwik-guidance-maintenance` skill.\n\n### Skill Selection\n\nLoad the relevant skill before non-trivial work in that area:\n\n| Skill | Use when |\n| --- | --- |\n| `qwik-core-development` | Editing/reviewing `packages/qwik/**` core runtime code |\n| `qwik-router-development` | Editing/reviewing router runtime, buildtime, middleware, adapters, or SSG |\n| `qwik-optimizer-development` | Editing/reviewing Rust optimizer, WASM, NAPI, or optimizer-facing behavior |\n| `qwik-e2e-verification` | Creating, debugging, or running Playwright e2e suites |\n| `qwik-docs-development` | Writing/editing docs content, docs site routes, or docs LLM outputs |\n| `qwik-guidance-maintenance` | Editing `.ruler/**`, generated-output guidance, or stale skill/reference content |\n\nIf no skill fits, stay with these repo-wide rules and inspect local source before changing code.\n\nIf a skill above is not loadable, its copy has not been generated in this worktree yet — run the\n`ruler apply` step from Setup, or read the source directly at `.ruler/skills/<name>/SKILL.md`.\n\nKeep the `qwik-` prefix on committed source skill names. Ruler copies these skills into\nagent-native skill directories where they may coexist with user or plugin skills, so the prefix keeps\nthe skill list unambiguous outside the repo-local `.ruler` tree.\n\n### Changesets\n\nWhen a change affects published packages, add a changeset under `.changeset/`.\n\n- Use `patch` for bug fixes: focus on the issue rather than the solution.\n- `minor` for new features: explain the new feature.\n- `major` for API removal: may also include a new feature, but it must remove or break a public API.\n- Enforce 1 changeset per change.\n- Write the changeset summary in lowercase (e.g. `fix:`)\n- 1 short sentence (10-ish words) focused on the bug fix or feature. Don't include implementation details.\n\n### Commits\n\n- One coherent set of changes per commit. Do not fold an unrelated fix into a commit for another\n  change.\n- Fixes that are independent of the branch's main change get their own commits, placed before it,\n  so they can be reviewed and cherry-picked on their own.\n- Write the subject as a short imperative summary. The body explains the \"why\" tersely when it is\n  not obvious from the subject. The \"what\" and \"how\" live in the code; summarize them only when the\n  commit is large.\n- When a branch has grown out of that shape, rewrite it into that order before review instead of\n  stacking fix-up commits.\n\n### Code Quality\n\n\n#### Sanity\n\n- Remember to keep your code DRY.\n- Do not leave debug logging or temporary names in the final diff.\n- Only add comments for crucial information that is not self-explanatory. Keep your comments constrained to 1 short sentence (10-ish words) maximum. Focus on explaning the why/issue rather than implementation details.  \n- Write one changeset per patch/minor/major change. Keep the changeset message constrained to 1 short sentence or 2 maximum, focused on the bug fix, feature or breaking changes. Don't explain the internals or implementation details.\n\n#### Naming\n\n- Use names that explain the domain idea, not the implementation trick.\n- Prefer specific names over short names when the value crosses more than a few lines.\n- Name booleans as questions or states, such as `isReady`, `hasSubscribers`, or `shouldFlush`.\n- Name functions by the action they perform, such as `resolveLoaderData()` or\n  `markContainerReady()`.\n- Avoid vague names like `data`, `item`, `temp`, `handle`, `process`, or `doWork` unless the local\n  scope makes the meaning obvious.\n- Keep existing public API names unless the task is intentionally changing the API.\n\n#### Control Flow\n\n- Prefer early returns for invalid, empty, unsupported, or already-handled cases.\n- Avoid deep nesting when a guard clause can make the main path easier to read.\n- Keep the success path visible at the outer indentation level when possible.\n- Do not use clever boolean expressions when a named condition or small helper would be clearer.\n- Keep error and compatibility branches explicit so reviewers can see why they exist.\n\n#### Modularity\n\n- Keep functions focused on one responsibility.\n- Extract a helper when a block has a clear name, is reused, or hides the main path.\n- Do not extract helpers only to move complexity around; the caller should become easier to read.\n- Keep helpers close to their first use unless they are shared across files.\n- Prefer local semantic helpers over broad abstractions.\n- Keep consumer- or framework-specific carve-outs (magic values, special cases) at the boundary that\n  owns that knowledge; do not push them into a generic lower-level utility that should stay agnostic.\n\n#### Review Standard\n\nBefore finishing, read the changed code as if you are new to the package:\n\n1. Can a junior developer explain what each name represents?\n2. Can an AI agent identify the main path without following deeply nested branches?\n3. Are edge cases handled by clear guard clauses or named helpers?\n4. Is the change modular without hiding important state or protocol boundaries?\n\nIf the answer is no, simplify the code before calling the task complete.\n\n### Code Style\n\nPrettier and ESLint define style. Keep semicolons, single quotes, two-space indentation, trailing\ncommas where configured, and always use braces for control flow.\n\nNaming conventions:\n\n| Pattern | Usage |\n| --- | --- |\n| `use*` | Hooks called in component/task scope |\n| `*$` | QRL boundary extracted by the optimizer |\n| `create*` | Factory functions |\n| `*.unit.ts(x)` | Vitest unit files |\n| `*.spec.ts(x)` | Vitest spec files |\n| `*.e2e.ts` | Playwright e2e files |\n\n### Security And Supply Chain\n\nTreat security-sensitive changes as behavior changes even when they look like config, dependency,\nor CI maintenance.\n\n#### Security Review Trigger\n\nPause for a focused security pass when a change touches:\n\n- authentication, authorization, sessions, cookies, redirects, URL parsing, filesystem paths, SSR,\n  serialization, HTML/script output, request handling, or server adapters\n- dependency versions, lockfiles, package manager settings, release scripts, publishing scripts, or\n  build tooling\n- GitHub Actions, reusable workflows, workflow permissions, tokens, secrets, cache keys, artifact\n  upload/download, or deployment credentials\n\nUse the changed diff as the starting point. Check directly supporting files when needed, but do not\nturn a small change into a repository-wide security scan unless the user asks.\n\n#### What To Check\n\n- Identify the trust boundary: attacker-controlled input, untrusted dependency code, untrusted CI\n  event data, secrets, tokens, publish credentials, or generated output.\n- Find the closest existing guard and the sink it protects. Do not claim safety from a broad\n  intuition; point to the concrete validation, escaping, permission, or isolation boundary.\n- Prefer fail-closed behavior for malformed input, unknown modes, unsupported hosts, and missing\n  config.\n- Keep secrets out of logs, snapshots, artifacts, caches, generated files, browser output, and error\n  messages.\n- When changing dependencies or build tools, check for new install scripts, binary downloads,\n  network fetches, transitive tool execution, license or provenance surprises, and lockfile drift.\n\n#### GitHub Actions\n\nWhen editing `.github/workflows/**` or action-related scripts:\n\n- Keep `permissions:` least-privilege at the workflow or job level.\n- Do not introduce `pull_request_target` for code checkout/build/test of untrusted PR content unless\n  the workflow is explicitly designed to avoid running attacker-controlled code with secrets.\n- Avoid passing secrets to forked PRs, third-party actions, shell commands that print env, or\n  generated artifacts.\n- Prefer trusted first-party actions. For new third-party actions, pin to a full commit SHA or\n  document why a moving tag is acceptable.\n- Treat cache restore keys and artifact paths as untrusted input surfaces. Avoid broad paths that can\n  poison future jobs or expose credentials.\n- Quote shell variables and avoid `eval`, curl-piped shells, and unchecked interpolation of GitHub\n  context values into shell commands.\n\n#### Verification\n\nFor security-sensitive changes, record the focused security reasoning in the final response:\n\n1. What boundary changed?\n2. What guard or invariant prevents abuse?\n3. What focused test, lint, config check, or manual inspection covered it?\n\nIf you cannot verify the security property locally, say exactly what remains unverified.\n\n### Test Driven Development\n\nUse test-driven development for behavior changes and bug fixes.\n\n#### Required Workflow\n\n1. Identify the observable behavior or invariant before editing implementation code.\n2. Add or update the closest focused test that proves the behavior.\n3. Run that test before the implementation change when feasible and confirm it fails for the\n   expected reason.\n4. Make the smallest implementation change that satisfies the test.\n5. Rerun the focused test and keep iterating until it passes.\n6. Run any broader verification required by the touched surface, such as API docs, optimizer\n   snapshots, build output, or e2e coverage.\n\n#### Test Selection\n\n- Prefer unit/spec tests next to the changed code.\n- Use optimizer fixtures and snapshots for Rust transform behavior.\n- Use e2e tests only when the behavior depends on a real browser, navigation, streaming, SSR/CSR\n  integration, adapter behavior, or fixture app wiring.\n- For serialization, hydration, streaming, or loader protocol changes, test both the writer and the\n  reader path.\n- For compatibility behavior, test both the current API path and the supported deprecated path.\n\n#### Exceptions\n\nDocs-only, rules-only, formatting-only, dependency metadata, and generated-output maintenance\nchanges do not need a failing product test first. They still need the narrowest relevant\nverification, such as formatting, Ruler dry-run, generated-output checks, or docs build checks.\n\nIf dependencies, missing generated artifacts, or local environment constraints prevent a pre-fix\ntest run, write the focused test first, record the blocker, and run the test as soon as the blocker\nis resolved.\n\n### Boundaries\n\n- Preserve user work and unrelated changes. Do not reset or revert unrelated files.\n- Keep edits scoped to the package, generated-file boundary, and verification surface implied by the\n  task.\n- Do not commit `.only` tests.\n- Do not skip tests for behavior changes; use the closest focused test first.\n\n### No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n#### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n\n\n\n<!-- Source: .ruler/README.md -->\n\n# Ruler Setup\n\nThis project uses [Ruler](https://github.com/intellectronica/ruler) to keep AI assistant instructions in one committed source of truth.\n\n## Source Of Truth\n\n```\n.ruler/\n├── AGENTS.md      # Repo-wide guidance + always-on rules (appended at the end)\n├── skills/        # Shared source skills propagated by Ruler\n└── ruler.toml     # Ruler agent configuration\n```\n\nUse `.ruler/AGENTS.md` for always-on repository context and rules (the rules live as sections at the\nend of that file). Use `.ruler/skills/` for task-specific workflows that should be loaded only when\nrelevant.\n\nAlways-on rules currently in `.ruler/AGENTS.md`:\n\n- `changeset-conventions`\n- `commit-conventions`\n- `code-quality`\n- `generated-output-boundaries`\n- `guidance-source-of-truth`\n- `no-hydration-terminology`\n- `security-and-supply-chain`\n- `test-driven-development`\n\nCurrent source skills:\n\n- `qwik-core-development`\n- `qwik-router-development`\n- `qwik-optimizer-development`\n- `qwik-e2e-verification`\n- `qwik-docs-development`\n- `qwik-guidance-maintenance`\n\nThe `qwik-` prefix is intentional. Ruler copies skills into assistant-native directories where they\ncan appear beside personal and plugin skills, so the prefix keeps these repo skills recognizable\noutside the `.ruler/` tree.\n\nRoot `AGENTS.md` and `CLAUDE.md` are generated by Ruler but committed (so fresh clones and worktrees\nhave the always-on guidance immediately). The generated skill directories (`.claude/skills/`,\n`.codex/skills/`) and the rest of `.claude/`/`.codex/`/`.cursor/` stay local and gitignored — run\n`ruler apply` to materialize the skills. Never edit a generated file directly — update `.ruler/`,\nrun `ruler apply`, and commit the regenerated root files.\n\n## AI Config Builder\n\nTreat Ruler as the source layer and the selected assistant as the output layer.\n\nWhen you are setting up or debugging an assistant-specific config:\n\n1. Identify the target assistant and Ruler agent id.\n2. Read this file and `.ruler/ruler.toml`.\n3. Research the target assistant's current native instruction, rule, skill, config, and policy\n   formats when the mapping is ambiguous.\n4. Map `.ruler` files by semantic role, not by filename.\n5. Run `ruler apply --agents <agent>`.\n6. Verify that the generated files contain the expected source guidance and skills.\n\n| Ruler source | Semantic role | Builder action |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Repo-wide AI guidance + always-on rules | Generate into the target assistant's primary native guidance file. |\n| `.ruler/skills/*/SKILL.md` | Task-triggered workflows | Copy to the target assistant's native skills directory when supported. |\n| `.ruler/ruler.toml` and Ruler MCP config | Agent selection, output paths, MCP/config | Generate or merge native config only where Ruler and the target assistant support it. |\n\nDifferent tools use words like \"rules\" for different things. A native rules file may mean\nnatural-language guidance, directory-scoped steering, MCP config, hooks, or command execution\npolicy. Check current docs or the installed Ruler adapter before creating or copying a tool-specific\nfile.\n\n## Markdown Guidance Bundle\n\nThe AI-agnostic Markdown guidance bundle is `.ruler/AGENTS.md` (repo-wide context plus the always-on\nrules appended at its end) together with this `.ruler/README.md`.\n\nRuler concatenates that bundle and writes it to each selected assistant's native AI guidance file.\nUse source markers in the generated file to verify inclusion. Do not bypass Ruler by copying these\nMarkdown files into a tool-specific directory whose format has not been verified.\n\nIf you are an AI assistant building local config for a target tool, research that tool's current\nnative guidance, skill, config, and policy formats before adding any tool-specific output. Map\n`.ruler` files by what they mean, not by filename: Markdown guidance belongs in the assistant's\nnative AI guidance surface, skills belong in native skills if supported, and command-permission\npolicy belongs only in a separately researched policy format. For Codex, Ruler includes all\n`.ruler` Markdown guidance in generated `AGENTS.md`; `.codex/rules/*.rules` is command policy, not\nMarkdown guidance.\n\n### Worked Example: Codex\n\nCurrent Ruler and OpenAI Codex behavior maps this repo's sources as follows:\n\n| Ruler source | Codex-native output | Verify after `ruler apply --agents codex` |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Generated root `AGENTS.md` | `rg -n 'Source: .ruler/AGENTS.md' AGENTS.md` |\n| `.ruler/skills/*/SKILL.md` | `.codex/skills/*/SKILL.md` | `find .codex/skills -name SKILL.md` |\n| Ruler MCP config | `.codex/config.toml` when MCP config is generated | `test -f .codex/config.toml` when MCP/config is expected |\n\nCodex `.rules` files are command execution policy files that use `prefix_rule(...)`. They are not a\ntarget for `.ruler/AGENTS.md` prose guidance. If Codex command policy is needed, maintain it as a\nseparate local or team policy using OpenAI Codex's `.rules` format; do not treat it as Ruler\nMarkdown guidance.\n\nExpected Codex check:\n\n```bash\nruler apply --agents codex\nrg -n 'Source: .ruler/AGENTS.md' AGENTS.md\nfind .codex/skills -name SKILL.md\n```\n\n## What Is Committed vs Regenerated\n\nOnly the root `AGENTS.md` and `CLAUDE.md` are **committed** generated outputs, so a fresh clone or\nworktree has the always-on guidance immediately (`.ruler/ruler.toml` keeps `[gitignore] enabled = false`\nso Ruler leaves those two files tracked). The generated skill copies (`.claude/skills/`,\n`.codex/skills/`) are **gitignored** — regenerate them locally with `ruler apply`. This keeps skill\nand note edits from appearing three times (source plus two copies) in every PR.\n\nTo change guidance, edit `.ruler/`, run `ruler apply`, and commit the regenerated root files\nalongside your `.ruler/` change. Never hand-edit the generated files. A CI check\n(`.github/workflows/ruler-check.yml`) re-runs `ruler apply` and fails if the committed root files\ndrift from `.ruler/`.\n\n## Generate Local Assistant Files\n\nInstall Ruler if you do not already have it:\n\n```bash\nnpm install -g @intellectronica/ruler\n```\n\nOr run it without installing (the form used by fresh worktrees and CI):\n\n```bash\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\nGenerate files for the default configured agents:\n\n```bash\nruler apply\n```\n\nGenerate files for a specific assistant:\n\n```bash\nruler apply --agents claude\nruler apply --agents codex\n```\n\nGenerate files for multiple assistants:\n\n```bash\nruler apply --agents claude,codex\n```\n\n## Project And Personal Configuration\n\nUse `.ruler/` for team-shared instructions and project conventions that should travel with the repo.\n\nUse `~/.config/ruler/` for personal preferences, local workflow shortcuts, API keys, and personal MCP servers:\n\n```bash\nruler init --global\n```\n\nIf it helps everyone working in this repo, add it to `.ruler/`. If it only helps your local setup,\nkeep it in your global Ruler config.\n\n## Updating Instructions\n\nEdit `.ruler/AGENTS.md` for repository-wide guidance and always-on rules (the rules are sections at\nthe end of that file). Edit the relevant `.ruler/skills/<skill-name>/SKILL.md` file for\npackage-specific or workflow-specific guidance.\n\nIf a code task proves a skill or reference stale, update that guidance as part of the same task when\nthe scope allows it.\n\nThen regenerate the local assistant files:\n\n```bash\nruler apply --agents <your-tool>\n```\n\nDo not update generated files like `CLAUDE.md` or `AGENTS.md` by hand. They will be overwritten the\nnext time Ruler runs.\n\n## Skills\n\nAuthor shared skills under `.ruler/skills/` (the committed source). Ruler copies them into each\nenabled agent's skill directory (`.claude/skills/` for Claude, `.codex/skills/` for Codex); those\ncopies are gitignored, so run `ruler apply` once per fresh clone or worktree to materialize them.\nNever hand-edit the copies — edit `.ruler/skills/` and regenerate.\n\nKeep each skill focused:\n\n- Use frontmatter with `name` and a trigger-oriented `description`.\n- Put the fast path in `SKILL.md`.\n- Move long notes into `references/` only when progressive disclosure helps.\n- Keep always-on policy in `.ruler/AGENTS.md`, not duplicated in every skill.\n- Keep durable maintainer lessons current. Prefer updating the specific skill/reference that was\n  wrong over adding broad prose here.\n","packages/supabase-auth-helpers-qwik/package.json":"{\n  \"name\": \"supabase-auth-helpers-qwik\",\n  \"description\": \"A collection of Qwik framework specific Auth utilities for working with Supabase.\",\n  \"version\": \"0.0.4-beta.0\",\n  \"author\": \"Qwik Team\",\n  \"bugs\": \"https://github.com/QwikDev/qwik/issues\",\n  \"devDependencies\": {\n    \"@qwik.dev/core\": \"workspace:*\",\n    \"@qwik.dev/router\": \"workspace:*\",\n    \"@supabase/ssr\": \"0.6.1\",\n    \"@supabase/supabase-js\": \"2.53.0\"\n  },\n  \"exports\": {\n    \".\": {\n      \"types\": \"./lib/types/index.d.ts\",\n      \"import\": \"./lib/index.qwik.mjs\"\n    }\n  },\n  \"files\": [\n    \"lib\"\n  ],\n  \"homepage\": \"https://qwik.dev/\",\n  \"keywords\": [\n    \"Auth\",\n    \"Qwik\",\n    \"Supabase\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"./lib/index.qwik.mjs\",\n  \"peerDependencies\": {\n    \"@supabase/supabase-js\": \"^2.49.4\"\n  },\n  \"private\": true,\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"qwik\": \"./lib/index.qwik.mjs\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/QwikDev/qwik.git\",\n    \"directory\": \"packages/supabase-auth-helpers-qwik\"\n  },\n  \"scripts\": {\n    \"build\": \"vite build --mode lib\"\n  },\n  \"type\": \"module\",\n  \"types\": \"./lib/types/index.d.ts\"\n}\n","packages/supabase-auth-helpers-qwik/README.md":"# @supabase/auth-helpers-qwik (BETA)\n\nThis submodule provides convenience helpers for implementing user authentication in Qwik applications.\n","packages/supabase-auth-helpers-qwik/CHANGELOG.md":"# supabase-auth-helpers-qwik\n\n## 0.0.4-beta.0\n\n### Patch Changes\n\n- 🛠 build the library packages with the TypeScript optimizer (by [@wmertens](https://github.com/wmertens) in [#9017](https://github.com/QwikDev/qwik/pull/9017))\n\n## 1.0.0-beta.0\n\n### Major Changes\n\n- BREAKING: the CJS/UMD builds have been removed; ESM is well-supported everywhere and allows better optimizations. (by [@JerryWu1234](https://github.com/JerryWu1234) in [#8103](https://github.com/QwikDev/qwik/pull/8103))\n",".ruler/AGENTS.md":"# Qwik v2 agents reference, instructions and rules\n\n> [!IMPORTANT]\n> **ALWAYS RUN `ruler apply` AT THE START OF A SESSION.** The agent skills are gitignored, not\n> committed, so a fresh clone/worktree has none until you generate them (once per worktree):\n>\n> ```bash\n> pnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n> ```\n\n> Canonical source for repo-wide AI coding agent rules. For contributor setup, see\n> [CONTRIBUTING.md](./CONTRIBUTING.md). For package-specific workflows, load the relevant\n> `.ruler/skills/*/SKILL.md` file.\n\n## Source Of Truth\n\n- Shared AI guidance lives in `.ruler/`.\n- Only the root `AGENTS.md` and `CLAUDE.md` are committed generated outputs; the `.claude/`/`.codex/`\n  skill copies are gitignored and regenerated locally with `ruler apply` (see Setup below).\n- Never hand-edit a generated output — edit `.ruler/` and regenerate with `ruler apply`. A CI check\n  re-runs it and fails if the committed root files drift.\n- To change assistant behavior, edit `.ruler/AGENTS.md`, `.ruler/README.md`, or `.ruler/skills/**`,\n  then regenerate with Ruler when needed.\n\n## Project Snapshot\n\nQwik is a resumable web framework. SSR serializes application and framework state into HTML, and\nthe client resumes without re-running component code. Qwik v2 is a rewrite with VNode-based\nruntime work, rewritten reactive primitives, a new serialization mechanism, and package names under\n`@qwik.dev/*`.\n\nKey concepts: resumability, QRLs, `$`-suffixed optimizer boundaries, fine-grained signals, VNodes,\nthe cursor system, and the Rust optimizer.\n\n## Monorepo Map\n\n- Base branch and release branch for v2 PRs: `main`. V1 lives on the `v1` branch.\n\n| Package | Path | Notes |\n| --- | --- | --- |\n| `@qwik.dev/core` | `packages/qwik` | Core runtime, SSR, optimizer-facing code |\n| `@qwik.dev/router` | `packages/qwik-router` | Routing, middleware, adapters, SSG |\n| `@qwik.dev/react` | `packages/qwik-react` | React integration |\n| `@qwik.dev/utils` | `packages/qwik-utils` | Less-common helpers (`usePoll`, `zod$`), may use qwik internals |\n| `@qwik.dev/dom` | `packages/qwik-dom` | Server-side DOM implementation |\n| `@qwik.dev/qwik-vite` | `packages/qwik-vite` | `vite-plugin-qwik`, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/ts-optimizer` | `packages/ts-optimizer` | TypeScript optimizer, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/optimizer` | `packages/optimizer` | Rust optimizer, WASM, NAPI bindings; kept for parity comparison |\n| `eslint-plugin-qwik` | `packages/eslint-plugin-qwik` | ESLint rules |\n| `create-qwik` | `packages/create-qwik` | Project scaffolding CLI |\n| `qwik-docs` | `packages/docs` | Docs site, private package |\n| `insights` | `packages/insights` | Analytics dashboard, private package |\n\nUse v2 package names (`@qwik.dev/core`, `@qwik.dev/router`, etc.). Do not introduce v1\n`@builder.io/qwik` or `@builder.io/qwik-city` imports except when working on explicit\ncompatibility override code.\n\n## Setup And Iteration Loop\n\nThis is the canonical loop for nearly all framework work. Default to it; do not substitute broader\ncommands:\n\n### getting started\n\n```bash\npnpm i\n```\n\n```bash\n# Materialize the agent skills into .claude/.codex (gitignored) — run once per fresh clone/worktree.\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\n```bash\npnpm build.core # for a fresh start\npnpm build.full # for a fresh start and you are working on the docs or the other packages\npnpm build.rust # only when working on the Rust optimizer; the only step that needs the Rust toolchain\n```\n\nThe local scripts and tests use the TypeScript optimizer (`tsOptimizer: true` in the repo's own\nvite configs and test harnesses), so no Rust toolchain or prebuilt bindings are needed for them.\nKeep that flag on any new repo-owned `qwikVite()` call site; the plugin still defaults to the Rust\noptimizer for published apps. `QWIK_OPTIMIZER=rust` (or `ts`) overrides the flag for a whole run, which\nis how CI runs the e2e suites on both optimizers; it needs `pnpm build.rust` or\n`pnpm build.platform.copy` first.\n### Iterating\n\nPrefer focused commands and builds over repo-wide commands and builds.\n\n```bash\n# Fast dev build — required once before any tests can run, and again after framework\n# source changes when the verification consumes build output (all e2e suites do)\npnpm build.core.dev\n\n# Closest focused unit/spec test\npnpm vitest run packages/qwik/src/core/tests/use-task.spec.tsx\n\n# Focused e2e test\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\n`build.core.dev` also re-emits fresh Qwik and Router `.d.ts` incrementally (via `tscDevDts` + re-export shims), so editing a public signature no longer leaves stale types — `build.watch` skips the type pass to stay instant.\n\nFor Qwik e2e tests, use `--browser=chromium` with `e2e/qwik-e2e/playwright.config.ts`.\n\nRe-run `pnpm build.rust` (or `pnpm build.rust.dev`) when you are touching the optimizer rust code.\n\n### When making a PR\n\n```bash\n# for type-level verification when no focused test covers the change\npnpm tsc.check\n\n# update the API\npnpm api.update\n\n# Verify the build passes\npnpm build.core\n\n# Verify unit tests pass\npnpm test.unit\n\n# Verify the E2Es pass\npnpm test.e2e.chromium\n\n# In case of html output change, update the ssg snapshot\npnpm test.e2e.router.ssg.update\n\n# In case of a new feature, run the test.bench\npnpm test.bench\n\n# In case of qwikloader changes\npnpm vitest packages/qwik/src/qwikloader.unit.ts -u\n```\n\nIf any of those fail, fix and push your changes.\n\n## Rules\n\nRecent Qwik v2 work by core maintainers favors small, behavior-shaped changes with regression proof.\nFollow that bias:\n\n### Guidance Freshness\n\n- If a skill or reference you used is stale, incomplete, or contradicted by current source, update\n  the `.ruler` source guidance before finishing the task unless the user explicitly restricted the\n  scope.\n- Keep new durable lessons in the most specific skill or reference that future agents are likely to\n  load. Do not add package-specific details to these always-on rules unless they affect most tasks.\n- Only add a lesson to a skill when it generalizes to future tasks. Keep single-PR specifics (one\n  module's protocol, one fix's mechanics) in the code and its tests, not in a skill.\n- Write those notes **prescriptively** — the invariants to keep, the traps that cause false passes,\n  where things live, and how to verify — rather than describing how the code currently works. Omit \"don't do X\" prohibitions for anything a test already enforces; the\n  suite is the guardrail, so reserve notes for what it can't self-enforce.\n- When updating guidance, load the `qwik-guidance-maintenance` skill.\n\n### Skill Selection\n\nLoad the relevant skill before non-trivial work in that area:\n\n| Skill | Use when |\n| --- | --- |\n| `qwik-core-development` | Editing/reviewing `packages/qwik/**` core runtime code |\n| `qwik-router-development` | Editing/reviewing router runtime, buildtime, middleware, adapters, or SSG |\n| `qwik-optimizer-development` | Editing/reviewing Rust optimizer, WASM, NAPI, or optimizer-facing behavior |\n| `qwik-e2e-verification` | Creating, debugging, or running Playwright e2e suites |\n| `qwik-docs-development` | Writing/editing docs content, docs site routes, or docs LLM outputs |\n| `qwik-guidance-maintenance` | Editing `.ruler/**`, generated-output guidance, or stale skill/reference content |\n\nIf no skill fits, stay with these repo-wide rules and inspect local source before changing code.\n\nIf a skill above is not loadable, its copy has not been generated in this worktree yet — run the\n`ruler apply` step from Setup, or read the source directly at `.ruler/skills/<name>/SKILL.md`.\n\nKeep the `qwik-` prefix on committed source skill names. Ruler copies these skills into\nagent-native skill directories where they may coexist with user or plugin skills, so the prefix keeps\nthe skill list unambiguous outside the repo-local `.ruler` tree.\n\n### Changesets\n\nWhen a change affects published packages, add a changeset under `.changeset/`.\n\n- Use `patch` for bug fixes: focus on the issue rather than the solution.\n- `minor` for new features: explain the new feature.\n- `major` for API removal: may also include a new feature, but it must remove or break a public API.\n- Enforce 1 changeset per change.\n- Write the changeset summary in lowercase (e.g. `fix:`)\n- 1 short sentence (10-ish words) focused on the bug fix or feature. Don't include implementation details.\n\n### Commits\n\n- One coherent set of changes per commit. Do not fold an unrelated fix into a commit for another\n  change.\n- Fixes that are independent of the branch's main change get their own commits, placed before it,\n  so they can be reviewed and cherry-picked on their own.\n- Write the subject as a short imperative summary. The body explains the \"why\" tersely when it is\n  not obvious from the subject. The \"what\" and \"how\" live in the code; summarize them only when the\n  commit is large.\n- When a branch has grown out of that shape, rewrite it into that order before review instead of\n  stacking fix-up commits.\n\n### Code Quality\n\n\n#### Sanity\n\n- Remember to keep your code DRY.\n- Do not leave debug logging or temporary names in the final diff.\n- Only add comments for crucial information that is not self-explanatory. Keep your comments constrained to 1 short sentence (10-ish words) maximum. Focus on explaning the why/issue rather than implementation details.  \n- Write one changeset per patch/minor/major change. Keep the changeset message constrained to 1 short sentence or 2 maximum, focused on the bug fix, feature or breaking changes. Don't explain the internals or implementation details.\n\n#### Naming\n\n- Use names that explain the domain idea, not the implementation trick.\n- Prefer specific names over short names when the value crosses more than a few lines.\n- Name booleans as questions or states, such as `isReady`, `hasSubscribers`, or `shouldFlush`.\n- Name functions by the action they perform, such as `resolveLoaderData()` or\n  `markContainerReady()`.\n- Avoid vague names like `data`, `item`, `temp`, `handle`, `process`, or `doWork` unless the local\n  scope makes the meaning obvious.\n- Keep existing public API names unless the task is intentionally changing the API.\n\n#### Control Flow\n\n- Prefer early returns for invalid, empty, unsupported, or already-handled cases.\n- Avoid deep nesting when a guard clause can make the main path easier to read.\n- Keep the success path visible at the outer indentation level when possible.\n- Do not use clever boolean expressions when a named condition or small helper would be clearer.\n- Keep error and compatibility branches explicit so reviewers can see why they exist.\n\n#### Modularity\n\n- Keep functions focused on one responsibility.\n- Extract a helper when a block has a clear name, is reused, or hides the main path.\n- Do not extract helpers only to move complexity around; the caller should become easier to read.\n- Keep helpers close to their first use unless they are shared across files.\n- Prefer local semantic helpers over broad abstractions.\n- Keep consumer- or framework-specific carve-outs (magic values, special cases) at the boundary that\n  owns that knowledge; do not push them into a generic lower-level utility that should stay agnostic.\n\n#### Review Standard\n\nBefore finishing, read the changed code as if you are new to the package:\n\n1. Can a junior developer explain what each name represents?\n2. Can an AI agent identify the main path without following deeply nested branches?\n3. Are edge cases handled by clear guard clauses or named helpers?\n4. Is the change modular without hiding important state or protocol boundaries?\n\nIf the answer is no, simplify the code before calling the task complete.\n\n### Code Style\n\nPrettier and ESLint define style. Keep semicolons, single quotes, two-space indentation, trailing\ncommas where configured, and always use braces for control flow.\n\nNaming conventions:\n\n| Pattern | Usage |\n| --- | --- |\n| `use*` | Hooks called in component/task scope |\n| `*$` | QRL boundary extracted by the optimizer |\n| `create*` | Factory functions |\n| `*.unit.ts(x)` | Vitest unit files |\n| `*.spec.ts(x)` | Vitest spec files |\n| `*.e2e.ts` | Playwright e2e files |\n\n### Security And Supply Chain\n\nTreat security-sensitive changes as behavior changes even when they look like config, dependency,\nor CI maintenance.\n\n#### Security Review Trigger\n\nPause for a focused security pass when a change touches:\n\n- authentication, authorization, sessions, cookies, redirects, URL parsing, filesystem paths, SSR,\n  serialization, HTML/script output, request handling, or server adapters\n- dependency versions, lockfiles, package manager settings, release scripts, publishing scripts, or\n  build tooling\n- GitHub Actions, reusable workflows, workflow permissions, tokens, secrets, cache keys, artifact\n  upload/download, or deployment credentials\n\nUse the changed diff as the starting point. Check directly supporting files when needed, but do not\nturn a small change into a repository-wide security scan unless the user asks.\n\n#### What To Check\n\n- Identify the trust boundary: attacker-controlled input, untrusted dependency code, untrusted CI\n  event data, secrets, tokens, publish credentials, or generated output.\n- Find the closest existing guard and the sink it protects. Do not claim safety from a broad\n  intuition; point to the concrete validation, escaping, permission, or isolation boundary.\n- Prefer fail-closed behavior for malformed input, unknown modes, unsupported hosts, and missing\n  config.\n- Keep secrets out of logs, snapshots, artifacts, caches, generated files, browser output, and error\n  messages.\n- When changing dependencies or build tools, check for new install scripts, binary downloads,\n  network fetches, transitive tool execution, license or provenance surprises, and lockfile drift.\n\n#### GitHub Actions\n\nWhen editing `.github/workflows/**` or action-related scripts:\n\n- Keep `permissions:` least-privilege at the workflow or job level.\n- Do not introduce `pull_request_target` for code checkout/build/test of untrusted PR content unless\n  the workflow is explicitly designed to avoid running attacker-controlled code with secrets.\n- Avoid passing secrets to forked PRs, third-party actions, shell commands that print env, or\n  generated artifacts.\n- Prefer trusted first-party actions. For new third-party actions, pin to a full commit SHA or\n  document why a moving tag is acceptable.\n- Treat cache restore keys and artifact paths as untrusted input surfaces. Avoid broad paths that can\n  poison future jobs or expose credentials.\n- Quote shell variables and avoid `eval`, curl-piped shells, and unchecked interpolation of GitHub\n  context values into shell commands.\n\n#### Verification\n\nFor security-sensitive changes, record the focused security reasoning in the final response:\n\n1. What boundary changed?\n2. What guard or invariant prevents abuse?\n3. What focused test, lint, config check, or manual inspection covered it?\n\nIf you cannot verify the security property locally, say exactly what remains unverified.\n\n### Test Driven Development\n\nUse test-driven development for behavior changes and bug fixes.\n\n#### Required Workflow\n\n1. Identify the observable behavior or invariant before editing implementation code.\n2. Add or update the closest focused test that proves the behavior.\n3. Run that test before the implementation change when feasible and confirm it fails for the\n   expected reason.\n4. Make the smallest implementation change that satisfies the test.\n5. Rerun the focused test and keep iterating until it passes.\n6. Run any broader verification required by the touched surface, such as API docs, optimizer\n   snapshots, build output, or e2e coverage.\n\n#### Test Selection\n\n- Prefer unit/spec tests next to the changed code.\n- Use optimizer fixtures and snapshots for Rust transform behavior.\n- Use e2e tests only when the behavior depends on a real browser, navigation, streaming, SSR/CSR\n  integration, adapter behavior, or fixture app wiring.\n- For serialization, hydration, streaming, or loader protocol changes, test both the writer and the\n  reader path.\n- For compatibility behavior, test both the current API path and the supported deprecated path.\n\n#### Exceptions\n\nDocs-only, rules-only, formatting-only, dependency metadata, and generated-output maintenance\nchanges do not need a failing product test first. They still need the narrowest relevant\nverification, such as formatting, Ruler dry-run, generated-output checks, or docs build checks.\n\nIf dependencies, missing generated artifacts, or local environment constraints prevent a pre-fix\ntest run, write the focused test first, record the blocker, and run the test as soon as the blocker\nis resolved.\n\n### Boundaries\n\n- Preserve user work and unrelated changes. Do not reset or revert unrelated files.\n- Keep edits scoped to the package, generated-file boundary, and verification surface implied by the\n  task.\n- Do not commit `.only` tests.\n- Do not skip tests for behavior changes; use the closest focused test first.\n\n### No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n#### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.","packages/qwik-vite/api-extractor.json":"# Qwik-vite Skill\n\nPath: `packages/qwik-vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/api-extractor.json)","packages/qwik-vite/package.json":"# Qwik-vite Skill\n\nPath: `packages/qwik-vite/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/package.json)","packages/qwik-vite/tsconfig.json":"# Qwik-vite Skill\n\nPath: `packages/qwik-vite/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/tsconfig.json)","packages/qwik-router/ARCHITECTURE.md":"# Qwik-router Skill\n\nPath: `packages/qwik-router/ARCHITECTURE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/ARCHITECTURE.md)","packages/qwik-router/CHANGELOG.md":"# Qwik-router Skill\n\nPath: `packages/qwik-router/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/CHANGELOG.md)","packages/qwik-router/package.json":"# Qwik-router Skill\n\nPath: `packages/qwik-router/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/package.json)","packages/qwik-router/README.md":"# qwik-router Documentation\n\nPath: `packages/qwik-router/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/README.md)","packages/qwik-router/tsconfig.json":"# Qwik-router Skill\n\nPath: `packages/qwik-router/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/tsconfig.json)","packages/qwik-react/api-extractor.json":"# Qwik-react Skill\n\nPath: `packages/qwik-react/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/api-extractor.json)","packages/qwik-react/CHANGELOG.md":"# Qwik-react Skill\n\nPath: `packages/qwik-react/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/CHANGELOG.md)","packages/qwik-react/package.json":"# Qwik-react Skill\n\nPath: `packages/qwik-react/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/package.json)","packages/qwik-react/README.md":"# qwik-react Documentation\n\nPath: `packages/qwik-react/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/README.md)","packages/qwik-react/tsconfig.json":"# Qwik-react Skill\n\nPath: `packages/qwik-react/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/tsconfig.json)","packages/qwik-dom/CHANGELOG.md":"# Qwik-dom Skill\n\nPath: `packages/qwik-dom/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-dom/CHANGELOG.md)","packages/qwik-dom/package.json":"# Qwik-dom Skill\n\nPath: `packages/qwik-dom/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-dom/package.json)","packages/qwik-auth/CHANGELOG.md":"# Qwik-auth Skill\n\nPath: `packages/qwik-auth/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-auth/CHANGELOG.md)","packages/qwik/CHANGELOG.md":"# Qwik Skill\n\nPath: `packages/qwik/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/CHANGELOG.md)","packages/qwik/package.json":"# Qwik Skill\n\nPath: `packages/qwik/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/package.json)","packages/qwik/tsconfig.json":"# Qwik Skill\n\nPath: `packages/qwik/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/tsconfig.json)","packages/qwik/tsdoc.json":"# Qwik Skill\n\nPath: `packages/qwik/tsdoc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/tsdoc.json)","packages/optimizer/CHANGELOG.md":"# Optimizer Skill\n\nPath: `packages/optimizer/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/CHANGELOG.md)","packages/optimizer/package.json":"# Optimizer Skill\n\nPath: `packages/optimizer/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/package.json)","packages/optimizer/README.md":"# optimizer Documentation\n\nPath: `packages/optimizer/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/README.md)","packages/optimizer/tsconfig.json":"# Optimizer Skill\n\nPath: `packages/optimizer/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/tsconfig.json)","packages/insights/package.json":"# Insights Skill\n\nPath: `packages/insights/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/package.json)","packages/insights/README.md":"# insights Documentation\n\nPath: `packages/insights/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/README.md)","packages/insights/tsconfig.json":"# Insights Skill\n\nPath: `packages/insights/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/tsconfig.json)","packages/eslint-plugin-qwik/CHANGELOG.md":"# Eslint-plugin-qwik Skill\n\nPath: `packages/eslint-plugin-qwik/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/CHANGELOG.md)","packages/eslint-plugin-qwik/package.json":"# Eslint-plugin-qwik Skill\n\nPath: `packages/eslint-plugin-qwik/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/package.json)","packages/eslint-plugin-qwik/README.md":"# eslint-plugin-qwik Documentation\n\nPath: `packages/eslint-plugin-qwik/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/README.md)","packages/docs/algolia.json":"# Docs Skill\n\nPath: `packages/docs/algolia.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/algolia.json)","packages/docs/package.json":"# Docs Skill\n\nPath: `packages/docs/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/package.json)","packages/docs/README.md":"# docs Documentation\n\nPath: `packages/docs/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/README.md)","packages/docs/tsconfig.json":"# Docs Skill\n\nPath: `packages/docs/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/tsconfig.json)","packages/devtools/CHANGELOG.md":"# Devtools Skill\n\nPath: `packages/devtools/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/CHANGELOG.md)","packages/devtools/package.json":"# Devtools Skill\n\nPath: `packages/devtools/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/package.json)","packages/devtools/README.md":"# devtools Documentation\n\nPath: `packages/devtools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/README.md)","packages/devtools/tsconfig.json":"# Devtools Skill\n\nPath: `packages/devtools/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/tsconfig.json)","packages/create-qwik/CHANGELOG.md":"# Create-qwik Skill\n\nPath: `packages/create-qwik/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/CHANGELOG.md)","packages/create-qwik/package.json":"# Create-qwik Skill\n\nPath: `packages/create-qwik/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/package.json)","packages/create-qwik/README.md":"# create-qwik Documentation\n\nPath: `packages/create-qwik/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/README.md)","packages/browser-extension/CHANGELOG.md":"# Browser-extension Skill\n\nPath: `packages/browser-extension/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/CHANGELOG.md)","packages/browser-extension/package.json":"# Browser-extension Skill\n\nPath: `packages/browser-extension/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/package.json)","packages/browser-extension/tsconfig.json":"# Browser-extension Skill\n\nPath: `packages/browser-extension/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/tsconfig.json)","packages/qwik-vite/src/qwik.optimizer.api.md":"# Src Skill\n\nPath: `packages/qwik-vite/src/qwik.optimizer.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/src/qwik.optimizer.api.md)","packages/qwik-router/src/api-extractor.json":"# Src Skill\n\nPath: `packages/qwik-router/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/api-extractor.json)","packages/qwik-react/src/api-extractor.json":"# Src Skill\n\nPath: `packages/qwik-react/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/src/api-extractor.json)","packages/qwik/src/api-extractor.json":"# Src Skill\n\nPath: `packages/qwik/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/api-extractor.json)","packages/optimizer/core/README.md":"# core Documentation\n\nPath: `packages/optimizer/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/core/README.md)","packages/optimizer/napi/napi.config.json":"# Napi Skill\n\nPath: `packages/optimizer/napi/napi.config.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/napi/napi.config.json)","packages/insights/.vscode/extensions.json":"# .vscode Skill\n\nPath: `packages/insights/.vscode/extensions.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/.vscode/extensions.json)","packages/insights/.vscode/launch.json":"# .vscode Skill\n\nPath: `packages/insights/.vscode/launch.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/.vscode/launch.json)","packages/insights/public/manifest.json":"# Public Skill\n\nPath: `packages/insights/public/manifest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/public/manifest.json)","packages/eslint-plugin-qwik/tests/tsconfig.json":"# Tests Skill\n\nPath: `packages/eslint-plugin-qwik/tests/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/tests/tsconfig.json)","packages/docs/public/_routes.json":"# Public Skill\n\nPath: `packages/docs/public/_routes.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/public/_routes.json)","packages/docs/scripts/pages.json":"# Scripts Skill\n\nPath: `packages/docs/scripts/pages.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/scripts/pages.json)","packages/devtools/plugin/tsconfig.json":"# Plugin Skill\n\nPath: `packages/devtools/plugin/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/plugin/tsconfig.json)","packages/devtools/ui/README.md":"# ui Documentation\n\nPath: `packages/devtools/ui/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/ui/README.md)","packages/devtools/ui/tsconfig.json":"# Ui Skill\n\nPath: `packages/devtools/ui/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/ui/tsconfig.json)","packages/browser-extension/.wxt/tsconfig.json":"# .wxt Skill\n\nPath: `packages/browser-extension/.wxt/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/.wxt/tsconfig.json)",".ruler/skills/qwik-core-development/references/core-notes.md":"# References Skill\n\nPath: `.ruler/skills/qwik-core-development/references/core-notes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/skills/qwik-core-development/references/core-notes.md)","packages/qwik-vite/src/plugins/fixture-output-bundles.json":"# Plugins Skill\n\nPath: `packages/qwik-vite/src/plugins/fixture-output-bundles.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/src/plugins/fixture-output-bundles.json)","packages/qwik-router/src/ssg/api-extractor.json":"# Ssg Skill\n\nPath: `packages/qwik-router/src/ssg/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/ssg/api-extractor.json)","packages/qwik-router/src/ssg/qwik-router.ssg.api.md":"# Ssg Skill\n\nPath: `packages/qwik-router/src/ssg/qwik-router.ssg.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/ssg/qwik-router.ssg.api.md)","packages/qwik/src/build/api-extractor.json":"# Build Skill\n\nPath: `packages/qwik/src/build/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/build/api-extractor.json)","packages/qwik/src/build/qwik.build.api.md":"# Build Skill\n\nPath: `packages/qwik/src/build/qwik.build.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/build/qwik.build.api.md)","packages/qwik/src/core/api-extractor.json":"# Core Skill\n\nPath: `packages/qwik/src/core/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/api-extractor.json)","packages/qwik/src/core/GLOSSARY.md":"# Core Skill\n\nPath: `packages/qwik/src/core/GLOSSARY.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/GLOSSARY.md)","packages/qwik/src/core/qwik.core.api.md":"# Core Skill\n\nPath: `packages/qwik/src/core/qwik.core.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/qwik.core.api.md)","packages/qwik/src/core/readme.md":"# core Documentation\n\nPath: `packages/qwik/src/core/readme.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/readme.md)","packages/qwik/src/insights/api-extractor.json":"# Insights Skill\n\nPath: `packages/qwik/src/insights/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/api-extractor.json)","packages/qwik/src/insights/qwik.insights.api.md":"# Insights Skill\n\nPath: `packages/qwik/src/insights/qwik.insights.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/qwik.insights.api.md)","packages/qwik/src/server/api-extractor.json":"# Server Skill\n\nPath: `packages/qwik/src/server/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/api-extractor.json)","packages/qwik/src/server/preloading.md":"# Server Skill\n\nPath: `packages/qwik/src/server/preloading.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/preloading.md)","packages/qwik/src/server/qwik.server.api.md":"# Server Skill\n\nPath: `packages/qwik/src/server/qwik.server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/qwik.server.api.md)","packages/qwik/src/server/README.md":"# server Documentation\n\nPath: `packages/qwik/src/server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/README.md)","packages/qwik/src/testing/api-extractor.json":"# Testing Skill\n\nPath: `packages/qwik/src/testing/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/api-extractor.json)","packages/qwik/src/testing/qwik.testing.api.md":"# Testing Skill\n\nPath: `packages/qwik/src/testing/qwik.testing.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/qwik.testing.api.md)","packages/qwik/src/testing/README.md":"# testing Documentation\n\nPath: `packages/qwik/src/testing/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/README.md)","packages/qwik/src/web-worker/api-extractor.json":"# Web-worker Skill\n\nPath: `packages/qwik/src/web-worker/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/web-worker/api-extractor.json)","packages/qwik/src/web-worker/qwik.worker.api.md":"# Web-worker Skill\n\nPath: `packages/qwik/src/web-worker/qwik.worker.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/web-worker/qwik.worker.api.md)","packages/insights/drizzle/meta/_journal.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/_journal.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/_journal.json)","packages/insights/drizzle/meta/0000_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0000_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0000_snapshot.json)","packages/insights/drizzle/meta/0001_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0001_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0001_snapshot.json)","packages/insights/drizzle/meta/0002_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0002_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0002_snapshot.json)","packages/insights/drizzle/meta/0003_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0003_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0003_snapshot.json)","packages/insights/drizzle/meta/0004_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0004_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0004_snapshot.json)","packages/insights/drizzle/meta/0005_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0005_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0005_snapshot.json)","packages/insights/drizzle/meta/0006_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0006_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0006_snapshot.json)","packages/insights/drizzle/meta/0007_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0007_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0007_snapshot.json)","packages/insights/drizzle/meta/0008_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0008_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0008_snapshot.json)","packages/insights/drizzle/meta/0009_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0009_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0009_snapshot.json)","packages/insights/drizzle/meta/0010_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0010_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0010_snapshot.json)","packages/insights/drizzle/meta/0011_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0011_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0011_snapshot.json)","packages/insights/drizzle/meta/0012_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0012_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0012_snapshot.json)","packages/insights/drizzle/meta/0013_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0013_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0013_snapshot.json)","packages/insights/drizzle/meta/0014_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0014_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0014_snapshot.json)","packages/insights/drizzle/meta/0015_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0015_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0015_snapshot.json)","packages/insights/drizzle/meta/0016_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0016_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0016_snapshot.json)","packages/insights/drizzle/meta/0017_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0017_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0017_snapshot.json)","packages/insights/drizzle/meta/0018_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0018_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0018_snapshot.json)","packages/insights/drizzle/meta/0019_snapshot.json":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0019_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0019_snapshot.json)","packages/insights/src/db/README.md":"# db Documentation\n\nPath: `packages/insights/src/db/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/src/db/README.md)","packages/docs/src/repl/README.md":"# repl Documentation\n\nPath: `packages/docs/src/repl/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/repl/README.md)","packages/create-qwik/src/helpers/jokes.json":"# Helpers Skill\n\nPath: `packages/create-qwik/src/helpers/jokes.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/src/helpers/jokes.json)","packages/qwik-router/src/adapters/vercel-edge/adapter.vercel-edge.api.md":"# Vercel-edge Skill\n\nPath: `packages/qwik-router/src/adapters/vercel-edge/adapter.vercel-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/vercel-edge/adapter.vercel-edge.api.md)","packages/qwik-router/src/adapters/ssg/adapter.ssg.api.md":"# Ssg Skill\n\nPath: `packages/qwik-router/src/adapters/ssg/adapter.ssg.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/ssg/adapter.ssg.api.md)","packages/qwik-router/src/adapters/shared/adapter.shared.api.md":"# Shared Skill\n\nPath: `packages/qwik-router/src/adapters/shared/adapter.shared.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/shared/adapter.shared.api.md)","packages/qwik-router/src/adapters/node-server/adapter.node-server.api.md":"# Node-server Skill\n\nPath: `packages/qwik-router/src/adapters/node-server/adapter.node-server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/node-server/adapter.node-server.api.md)","packages/qwik-router/src/adapters/netlify-edge/adapter.netlify-edge.api.md":"# Netlify-edge Skill\n\nPath: `packages/qwik-router/src/adapters/netlify-edge/adapter.netlify-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/netlify-edge/adapter.netlify-edge.api.md)","packages/qwik-router/src/adapters/deno-server/adapter.deno-server.api.md":"# Deno-server Skill\n\nPath: `packages/qwik-router/src/adapters/deno-server/adapter.deno-server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/deno-server/adapter.deno-server.api.md)","packages/qwik-router/src/adapters/cloudflare-pages/adapter.cloudflare-pages.api.md":"# Cloudflare-pages Skill\n\nPath: `packages/qwik-router/src/adapters/cloudflare-pages/adapter.cloudflare-pages.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloudflare-pages/adapter.cloudflare-pages.api.md)","packages/qwik-router/src/adapters/cloud-run/adapter.cloud-run.api.md":"# Cloud-run Skill\n\nPath: `packages/qwik-router/src/adapters/cloud-run/adapter.cloud-run.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloud-run/adapter.cloud-run.api.md)","packages/qwik-router/src/adapters/bun-server/adapter.bun-server.api.md":"# Bun-server Skill\n\nPath: `packages/qwik-router/src/adapters/bun-server/adapter.bun-server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/bun-server/adapter.bun-server.api.md)","packages/qwik-router/src/adapters/azure-swa/adapter.azure-swa.api.md":"# Azure-swa Skill\n\nPath: `packages/qwik-router/src/adapters/azure-swa/adapter.azure-swa.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/azure-swa/adapter.azure-swa.api.md)","packages/qwik-router/src/buildtime/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/buildtime/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/buildtime/vite/api-extractor.json)","packages/qwik-router/src/buildtime/vite/qwik-router.buildtime.api.md":"# Vite Skill\n\nPath: `packages/qwik-router/src/buildtime/vite/qwik-router.buildtime.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/buildtime/vite/qwik-router.buildtime.api.md)","packages/qwik-router/src/middleware/vercel-edge/api-extractor.json":"# Vercel-edge Skill\n\nPath: `packages/qwik-router/src/middleware/vercel-edge/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/vercel-edge/api-extractor.json)","packages/qwik-router/src/middleware/vercel-edge/middleware.vercel-edge.api.md":"# Vercel-edge Skill\n\nPath: `packages/qwik-router/src/middleware/vercel-edge/middleware.vercel-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/vercel-edge/middleware.vercel-edge.api.md)","packages/qwik-router/src/middleware/request-handler/api-extractor.json":"# Request-handler Skill\n\nPath: `packages/qwik-router/src/middleware/request-handler/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/request-handler/api-extractor.json)","packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md":"# Request-handler Skill\n\nPath: `packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md)","packages/qwik-router/src/middleware/node/api-extractor.json":"# Node Skill\n\nPath: `packages/qwik-router/src/middleware/node/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/node/api-extractor.json)","packages/qwik-router/src/middleware/node/middleware.node.api.md":"# Node Skill\n\nPath: `packages/qwik-router/src/middleware/node/middleware.node.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/node/middleware.node.api.md)","packages/qwik-router/src/middleware/netlify-edge/api-extractor.json":"# Netlify-edge Skill\n\nPath: `packages/qwik-router/src/middleware/netlify-edge/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/netlify-edge/api-extractor.json)","packages/qwik-router/src/middleware/netlify-edge/middleware.netlify-edge.api.md":"# Netlify-edge Skill\n\nPath: `packages/qwik-router/src/middleware/netlify-edge/middleware.netlify-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/netlify-edge/middleware.netlify-edge.api.md)","packages/qwik-router/src/middleware/firebase/api-extractor.json":"# Firebase Skill\n\nPath: `packages/qwik-router/src/middleware/firebase/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/firebase/api-extractor.json)","packages/qwik-router/src/middleware/firebase/middleware.firebase.api.md":"# Firebase Skill\n\nPath: `packages/qwik-router/src/middleware/firebase/middleware.firebase.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/firebase/middleware.firebase.api.md)","packages/qwik-router/src/middleware/deno/api-extractor.json":"# Deno Skill\n\nPath: `packages/qwik-router/src/middleware/deno/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/deno/api-extractor.json)","packages/qwik-router/src/middleware/deno/middleware.deno.api.md":"# Deno Skill\n\nPath: `packages/qwik-router/src/middleware/deno/middleware.deno.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/deno/middleware.deno.api.md)","packages/qwik-router/src/middleware/cloudflare-pages/api-extractor.json":"# Cloudflare-pages Skill\n\nPath: `packages/qwik-router/src/middleware/cloudflare-pages/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/cloudflare-pages/api-extractor.json)","packages/qwik-router/src/middleware/cloudflare-pages/middleware.cloudflare-pages.api.md":"# Cloudflare-pages Skill\n\nPath: `packages/qwik-router/src/middleware/cloudflare-pages/middleware.cloudflare-pages.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/cloudflare-pages/middleware.cloudflare-pages.api.md)","packages/qwik-router/src/middleware/bun/api-extractor.json":"# Bun Skill\n\nPath: `packages/qwik-router/src/middleware/bun/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/bun/api-extractor.json)","packages/qwik-router/src/middleware/bun/middleware.bun.api.md":"# Bun Skill\n\nPath: `packages/qwik-router/src/middleware/bun/middleware.bun.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/bun/middleware.bun.api.md)","packages/qwik-router/src/middleware/azure-swa/api-extractor.json":"# Azure-swa Skill\n\nPath: `packages/qwik-router/src/middleware/azure-swa/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/azure-swa/api-extractor.json)","packages/qwik-router/src/middleware/azure-swa/middleware.azure-swa.api.md":"# Azure-swa Skill\n\nPath: `packages/qwik-router/src/middleware/azure-swa/middleware.azure-swa.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/azure-swa/middleware.azure-swa.api.md)","packages/qwik-router/src/middleware/aws-lambda/api-extractor.json":"# Aws-lambda Skill\n\nPath: `packages/qwik-router/src/middleware/aws-lambda/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/aws-lambda/api-extractor.json)","packages/qwik-router/src/middleware/aws-lambda/middleware.aws-lambda.api.md":"# Aws-lambda Skill\n\nPath: `packages/qwik-router/src/middleware/aws-lambda/middleware.aws-lambda.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/aws-lambda/middleware.aws-lambda.api.md)","packages/qwik-router/src/runtime/src/api-extractor.json":"# Src Skill\n\nPath: `packages/qwik-router/src/runtime/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/api-extractor.json)","packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md":"# Src Skill\n\nPath: `packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md)","packages/qwik/src/core/bench/bench-memory-results.json":"# Bench Skill\n\nPath: `packages/qwik/src/core/bench/bench-memory-results.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/bench/bench-memory-results.json)","packages/qwik/src/core/bench/bench-results.json":"# Bench Skill\n\nPath: `packages/qwik/src/core/bench/bench-results.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/bench/bench-results.json)","packages/qwik/src/core/shared/README.md":"# shared Documentation\n\nPath: `packages/qwik/src/core/shared/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/README.md)","packages/qwik/src/core/tests/README.md":"# tests Documentation\n\nPath: `packages/qwik/src/core/tests/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/tests/README.md)","packages/qwik/src/insights/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik/src/insights/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/vite/api-extractor.json)","packages/qwik/src/insights/vite/qwik.insights.vite.api.md":"# Vite Skill\n\nPath: `packages/qwik/src/insights/vite/qwik.insights.vite.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/vite/qwik.insights.vite.api.md)","packages/docs/src/components/theme-toggle/README.md":"# theme-toggle Documentation\n\nPath: `packages/docs/src/components/theme-toggle/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/components/theme-toggle/README.md)","packages/docs/src/routes/(ecosystem)/ecosystem.json":"# (ecosystem) Skill\n\nPath: `packages/docs/src/routes/(ecosystem)/ecosystem.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/(ecosystem)/ecosystem.json)","packages/docs/src/routes/community/menu.md":"# Community Skill\n\nPath: `packages/docs/src/routes/community/menu.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/community/menu.md)","packages/docs/src/routes/demo/.prettierrc.json":"# Demo Skill\n\nPath: `packages/docs/src/routes/demo/.prettierrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/.prettierrc.json)","packages/docs/src/routes/demo/tsconfig.json":"# Demo Skill\n\nPath: `packages/docs/src/routes/demo/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/tsconfig.json)","packages/docs/src/routes/docs/menu.md":"# Docs Skill\n\nPath: `packages/docs/src/routes/docs/menu.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/docs/menu.md)","packages/docs/src/routes/tutorial/tutorial-menu.json":"# Tutorial Skill\n\nPath: `packages/docs/src/routes/tutorial/tutorial-menu.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/tutorial/tutorial-menu.json)","packages/qwik-router/src/adapters/vercel-edge/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/vercel-edge/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/vercel-edge/vite/api-extractor.json)","packages/qwik-router/src/adapters/ssg/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/ssg/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/ssg/vite/api-extractor.json)","packages/qwik-router/src/adapters/shared/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/shared/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/shared/vite/api-extractor.json)","packages/qwik-router/src/adapters/node-server/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/node-server/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/node-server/vite/api-extractor.json)","packages/qwik-router/src/adapters/netlify-edge/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/netlify-edge/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/netlify-edge/vite/api-extractor.json)","packages/qwik-router/src/adapters/deno-server/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/deno-server/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/deno-server/vite/api-extractor.json)","packages/qwik-router/src/adapters/cloudflare-pages/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/cloudflare-pages/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloudflare-pages/vite/api-extractor.json)","packages/qwik-router/src/adapters/cloud-run/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/cloud-run/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloud-run/vite/api-extractor.json)","packages/qwik-router/src/adapters/bun-server/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/bun-server/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/bun-server/vite/api-extractor.json)","packages/qwik-router/src/adapters/azure-swa/vite/api-extractor.json":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/azure-swa/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/azure-swa/vite/api-extractor.json)","packages/qwik-router/src/runtime/src/service-worker/api-extractor.json":"# Service-worker Skill\n\nPath: `packages/qwik-router/src/runtime/src/service-worker/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/service-worker/api-extractor.json)","packages/qwik-router/src/runtime/src/service-worker/qwik-router.service-worker.api.md":"# Service-worker Skill\n\nPath: `packages/qwik-router/src/runtime/src/service-worker/qwik-router.service-worker.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/service-worker/qwik-router.service-worker.api.md)","packages/qwik/src/core/reactive-primitives/impl/README.md":"# impl Documentation\n\nPath: `packages/qwik/src/core/reactive-primitives/impl/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/reactive-primitives/impl/README.md)","packages/qwik/src/core/shared/jsx/README.md":"# jsx Documentation\n\nPath: `packages/qwik/src/core/shared/jsx/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/jsx/README.md)","packages/qwik/src/core/shared/platform/readme.md":"# platform Documentation\n\nPath: `packages/qwik/src/core/shared/platform/readme.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/platform/readme.md)","packages/qwik/src/core/shared/serdes/serialization.md":"# Serdes Skill\n\nPath: `packages/qwik/src/core/shared/serdes/serialization.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/serdes/serialization.md)","packages/qwik/src/core/shared/utils/README.md":"# utils Documentation\n\nPath: `packages/qwik/src/core/shared/utils/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/utils/README.md)","packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json":"# Showcase Skill\n\nPath: `packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json)","packages/docs/src/routes/api/qwik/api.json":"# Qwik Skill\n\nPath: `packages/docs/src/routes/api/qwik/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik/api.json)","packages/docs/src/routes/api/qwik-insights/api.json":"# Qwik-insights Skill\n\nPath: `packages/docs/src/routes/api/qwik-insights/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-insights/api.json)","packages/docs/src/routes/api/qwik-optimizer/api.json":"# Qwik-optimizer Skill\n\nPath: `packages/docs/src/routes/api/qwik-optimizer/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-optimizer/api.json)","packages/docs/src/routes/api/qwik-router/api.json":"# Qwik-router Skill\n\nPath: `packages/docs/src/routes/api/qwik-router/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router/api.json)","packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json":"# Qwik-router-middleware-aws-lambda Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json)","packages/docs/src/routes/api/qwik-router-middleware-azure-swa/api.json":"# Qwik-router-middleware-azure-swa Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-azure-swa/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-azure-swa/api.json)","packages/docs/src/routes/api/qwik-router-middleware-cloudflare-pages/api.json":"# Qwik-router-middleware-cloudflare-pages Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-cloudflare-pages/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-cloudflare-pages/api.json)","packages/docs/src/routes/api/qwik-router-middleware-firebase/api.json":"# Qwik-router-middleware-firebase Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-firebase/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-firebase/api.json)","packages/docs/src/routes/api/qwik-router-middleware-netlify-edge/api.json":"# Qwik-router-middleware-netlify-edge Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-netlify-edge/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-netlify-edge/api.json)","packages/docs/src/routes/api/qwik-router-middleware-node/api.json":"# Qwik-router-middleware-node Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-node/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-node/api.json)","packages/docs/src/routes/api/qwik-router-middleware-request-handler/api.json":"# Qwik-router-middleware-request-handler Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-request-handler/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-request-handler/api.json)","packages/docs/src/routes/api/qwik-router-middleware-vercel-edge/api.json":"# Qwik-router-middleware-vercel-edge Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-vercel-edge/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-vercel-edge/api.json)","packages/docs/src/routes/api/qwik-router-ssg/api.json":"# Qwik-router-ssg Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-ssg/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-ssg/api.json)","packages/docs/src/routes/api/qwik-router-vite-azure-swa/api.json":"# Qwik-router-vite-azure-swa Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-azure-swa/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-azure-swa/api.json)","packages/docs/src/routes/api/qwik-router-vite-bun-server/api.json":"# Qwik-router-vite-bun-server Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-bun-server/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-bun-server/api.json)","packages/docs/src/routes/api/qwik-router-vite-cloud-run/api.json":"# Qwik-router-vite-cloud-run Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-cloud-run/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-cloud-run/api.json)","packages/docs/src/routes/api/qwik-router-vite-cloudflare-pages/api.json":"# Qwik-router-vite-cloudflare-pages Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-cloudflare-pages/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-cloudflare-pages/api.json)","packages/docs/src/routes/api/qwik-router-vite-netlify-edge/api.json":"# Qwik-router-vite-netlify-edge Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-netlify-edge/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-netlify-edge/api.json)","packages/docs/src/routes/api/qwik-router-vite-node-server/api.json":"# Qwik-router-vite-node-server Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-node-server/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-node-server/api.json)","packages/docs/src/routes/api/qwik-router-vite-ssg/api.json":"# Qwik-router-vite-ssg Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-ssg/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-ssg/api.json)","packages/docs/src/routes/api/qwik-router-vite-vercel/api.json":"# Qwik-router-vite-vercel Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-vercel/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-vercel/api.json)","packages/docs/src/routes/api/qwik-server/api.json":"# Qwik-server Skill\n\nPath: `packages/docs/src/routes/api/qwik-server/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-server/api.json)","packages/docs/src/routes/api/qwik-testing/api.json":"# Qwik-testing Skill\n\nPath: `packages/docs/src/routes/api/qwik-testing/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-testing/api.json)","packages/docs/src/routes/api/qwik-worker/api.json":"# Qwik-worker Skill\n\nPath: `packages/docs/src/routes/api/qwik-worker/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-worker/api.json)","packages/docs/src/routes/examples/apps/examples-menu.json":"# Apps Skill\n\nPath: `packages/docs/src/routes/examples/apps/examples-menu.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/examples/apps/examples-menu.json)","packages/docs/src/routes/examples/apps/README.md":"# apps Documentation\n\nPath: `packages/docs/src/routes/examples/apps/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/examples/apps/README.md)","packages/docs/src/routes/demo/state/counter-signal/.prettierrc.json":"# Counter-signal Skill\n\nPath: `packages/docs/src/routes/demo/state/counter-signal/.prettierrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/state/counter-signal/.prettierrc.json)","packages/docs/src/routes/tutorial/welcome/overview/index.md":"# Overview Skill\n\nPath: `packages/docs/src/routes/tutorial/welcome/overview/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/tutorial/welcome/overview/index.md)",".cursorrules (qwik-basic-cursorrules-prompt-file.mdc)":"---\ndescription: \"Cursor rules for Qwik development with TypeScript and Vite integration.\"\nglobs: **/*\nalwaysApply: false\n---\n// Qwik.js Basic Setup (with TypeScript and Vite) .cursorrules\n\n// Prefer functional components\n\nconst preferFunctionalComponents = true;\n\n// Qwik.js best practices\n\nconst qwikBestPractices = [\n  \"Use $ suffix for lazy-loaded functions\",\n  \"Utilize useSignal() for reactive state\",\n  \"Implement useStore() for complex state objects\",\n  \"Use useResource$() for data fetching\",\n  \"Implement useTask$() for side effects\",\n  \"Utilize useVisibleTask$() for browser-only code\",\n  \"Leverage TypeScript for type safety\",\n  \"Use Vite's fast HMR for development\",\n];\n\n// Folder structure\n\nconst folderStructure = `\nsrc/\n  components/\n  routes/\n  global.css\n  root.tsx\n  entry.ssr.tsx\npublic/\nvite.config.ts\ntsconfig.json\n`;\n\n// Additional instructions\n\nconst additionalInstructions = `\n1. Use TypeScript for all .ts and .tsx files\n2. Implement proper error boundaries\n3. Utilize Qwik City for routing when applicable\n4. Use Qwik's built-in optimization features\n5. Implement lazy-loading for improved performance\n6. Follow Qwik's naming conventions and best practices\n7. Use server$ for server-side code execution\n8. Leverage Vite plugins for optimized builds\n`;\n"},"items":[{"name":"AGENTS.md","path":".ruler/AGENTS.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/AGENTS.md","title":".ruler - AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"# Qwik v2 agents reference, instructions and rules\n\n> [!IMPORTANT]\n> **ALWAYS RUN `ruler apply` AT THE START OF A SESSION.** The agent skills are gitignored, not\n> committed, so a fresh clone/worktree has none until you generate them (once per worktree):\n>\n> ```bash\n> pnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n> ```\n\n> Canonical source for repo-wide AI coding agent rules. For contributor setup, see\n> [CONTRIBUTING.md](./CONTRIBUTING.md). For package-specific workflows, load the relevant\n> `.ruler/skills/*/SKILL.md` file.\n\n## Source Of Truth\n\n- Shared AI guidance lives in `.ruler/`.\n- Only the root `AGENTS.md` and `CLAUDE.md` are committed generated outputs; the `.claude/`/`.codex/`\n  skill copies are gitignored and regenerated locally with `ruler apply` (see Setup below).\n- Never hand-edit a generated output — edit `.ruler/` and regenerate with `ruler apply`. A CI check\n  re-runs it and fails if the committed root files drift.\n- To change assistant behavior, edit `.ruler/AGENTS.md`, `.ruler/README.md`, or `.ruler/skills/**`,\n  then regenerate with Ruler when needed.\n\n## Project Snapshot\n\nQwik is a resumable web framework. SSR serializes application and framework state into HTML, and\nthe client resumes without re-running component code. Qwik v2 is a rewrite with VNode-based\nruntime work, rewritten reactive primitives, a new serialization mechanism, and package names under\n`@qwik.dev/*`.\n\nKey concepts: resumability, QRLs, `$`-suffixed optimizer boundaries, fine-grained signals, VNodes,\nthe cursor system, and the Rust optimizer.\n\n## Monorepo Map\n\n- Base branch and release branch for v2 PRs: `main`. V1 lives on the `v1` branch.\n\n| Package | Path | Notes |\n| --- | --- | --- |\n| `@qwik.dev/core` | `packages/qwik` | Core runtime, SSR, optimizer-facing code |\n| `@qwik.dev/router` | `packages/qwik-router` | Routing, middleware, adapters, SSG |\n| `@qwik.dev/react` | `packages/qwik-react` | React integration |\n| `@qwik.dev/utils` | `packages/qwik-utils` | Less-common helpers (`usePoll`, `zod$`), may use qwik internals |\n| `@qwik.dev/dom` | `packages/qwik-dom` | Server-side DOM implementation |\n| `@qwik.dev/qwik-vite` | `packages/qwik-vite` | `vite-plugin-qwik`, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/ts-optimizer` | `packages/ts-optimizer` | TypeScript optimizer, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/optimizer` | `packages/optimizer` | Rust optimizer, WASM, NAPI bindings; kept for parity comparison |\n| `eslint-plugin-qwik` | `packages/eslint-plugin-qwik` | ESLint rules |\n| `create-qwik` | `packages/create-qwik` | Project scaffolding CLI |\n| `qwik-docs` | `packages/docs` | Docs site, private package |\n| `insights` | `packages/insights` | Analytics dashboard, private package |\n\nUse v2 package names (`@qwik.dev/core`, `@qwik.dev/router`, etc.). Do not introduce v1\n`@builder.io/qwik` or `@builder.io/qwik-city` imports except when working on explicit\ncompatibility override code.\n\n## Setup And Iteration Loop\n\nThis is the canonical loop for nearly all framework work. Default to it; do not substitute broader\ncommands:\n\n### getting started\n\n```bash\npnpm i\n```\n\n```bash\n# Materialize the agent skills into .claude/.codex (gitignored) — run once per fresh clone/worktree.\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\n```bash\npnpm build.core # for a fresh start\npnpm build.full # for a fresh start and you are working on the docs or the other packages\npnpm build.rust # only when working on the Rust optimizer; the only step that needs the Rust toolchain\n```\n\nThe local scripts and tests use the TypeScript optimizer (`tsOptimizer: true` in the repo's own\nvite configs and test harnesses), so no Rust toolchain or prebuilt bindings are needed for them.\nKeep that flag on any new repo-owned `qwikVite()` call site; the plugin still defaults to the Rust\noptimizer for published apps. `QWIK_OPTIMIZER=rust` (or `ts`) overrides the flag for a whole run, which\nis how CI runs the e2e suites on both optimizers; it needs `pnpm build.rust` or\n`pnpm build.platform.copy` first.\n### Iterating\n\nPrefer focused commands and builds over repo-wide commands and builds.\n\n```bash\n# Fast dev build — required once before any tests can run, and again after framework\n# source changes when the verification consumes build output (all e2e suites do)\npnpm build.core.dev\n\n# Closest focused unit/spec test\npnpm vitest run packages/qwik/src/core/tests/use-task.spec.tsx\n\n# Focused e2e test\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\n`build.core.dev` also re-emits fresh Qwik and Router `.d.ts` incrementally (via `tscDevDts` + re-export shims), so editing a public signature no longer leaves stale types — `build.watch` skips the type pass to stay instant.\n\nFor Qwik e2e tests, use `--browser=chromium` with `e2e/qwik-e2e/playwright.config.ts`.\n\nRe-run `pnpm build.rust` (or `pnpm build.rust.dev`) when you are touching the optimizer rust code.\n\n### When making a PR\n\n```bash\n# for type-level verification when no focused test covers the change\npnpm tsc.check\n\n# update the API\npnpm api.update\n\n# Verify the build passes\npnpm build.core\n\n# Verify unit tests pass\npnpm test.unit\n\n# Verify the E2Es pass\npnpm test.e2e.chromium\n\n# In case of html output change, update the ssg snapshot\npnpm test.e2e.router.ssg.update\n\n# In case of a new feature, run the test.bench\npnpm test.bench\n\n# In case of qwikloader changes\npnpm vitest packages/qwik/src/qwikloader.unit.ts -u\n```\n\nIf any of those fail, fix and push your changes.\n\n## Rules\n\nRecent Qwik v2 work by core maintainers favors small, behavior-shaped changes with regression proof.\nFollow that bias:\n\n### Guidance Freshness\n\n- If a skill or reference you used is stale, incomplete, or contradicted by current source, update\n  the `.ruler` source guidance before finishing the task unless the user explicitly restricted the\n  scope.\n- Keep new durable lessons in the most specific skill or reference that future agents are likely to\n  load. Do not add package-specific details to these always-on rules unless they affect most tasks.\n- Only add a lesson to a skill when it generalizes to future tasks. Keep single-PR specifics (one\n  module's protocol, one fix's mechanics) in the code and its tests, not in a skill.\n- Write those notes **prescriptively** — the invariants to keep, the traps that cause false passes,\n  where things live, and how to verify — rather than describing how the code currently works. Omit \"don't do X\" prohibitions for anything a test already enforces; the\n  suite is the guardrail, so reserve notes for what it can't self-enforce.\n- When updating guidance, load the `qwik-guidance-maintenance` skill.\n\n### Skill Selection\n\nLoad the relevant skill before non-trivial work in that area:\n\n| Skill | Use when |\n| --- | --- |\n| `qwik-core-development` | Editing/reviewing `packages/qwik/**` core runtime code |\n| `qwik-router-development` | Editing/reviewing router runtime, buildtime, middleware, adapters, or SSG |\n| `qwik-optimizer-development` | Editing/reviewing Rust optimizer, WASM, NAPI, or optimizer-facing behavior |\n| `qwik-e2e-verification` | Creating, debugging, or running Playwright e2e suites |\n| `qwik-docs-development` | Writing/editing docs content, docs site routes, or docs LLM outputs |\n| `qwik-guidance-maintenance` | Editing `.ruler/**`, generated-output guidance, or stale skill/reference content |\n\nIf no skill fits, stay with these repo-wide rules and inspect local source before changing code.\n\nIf a skill above is not loadable, its copy has not been generated in this worktree yet — run the\n`ruler apply` step from Setup, or read the source directly at `.ruler/skills/<name>/SKILL.md`.\n\nKeep the `qwik-` prefix on committed source skill names. Ruler copies these skills into\nagent-native skill directories where they may coexist with user or plugin skills, so the prefix keeps\nthe skill list unambiguous outside the repo-local `.ruler` tree.\n\n### Changesets\n\nWhen a change affects published packages, add a changeset under `.changeset/`.\n\n- Use `patch` for bug fixes: focus on the issue rather than the solution.\n- `minor` for new features: explain the new feature.\n- `major` for API removal: may also include a new feature, but it must remove or break a public API.\n- Enforce 1 changeset per change.\n- Write the changeset summary in lowercase (e.g. `fix:`)\n- 1 short sentence (10-ish words) focused on the bug fix or feature. Don't include implementation details.\n\n### Commits\n\n- One coherent set of changes per commit. Do not fold an unrelated fix into a commit for another\n  change.\n- Fixes that are independent of the branch's main change get their own commits, placed before it,\n  so they can be reviewed and cherry-picked on their own.\n- Write the subject as a short imperative summary. The body explains the \"why\" tersely when it is\n  not obvious from the subject. The \"what\" and \"how\" live in the code; summarize them only when the\n  commit is large.\n- When a branch has grown out of that shape, rewrite it into that order before review instead of\n  stacking fix-up commits.\n\n### Code Quality\n\n\n#### Sanity\n\n- Remember to keep your code DRY.\n- Do not leave debug logging or temporary names in the final diff.\n- Only add comments for crucial information that is not self-explanatory. Keep your comments constrained to 1 short sentence (10-ish words) maximum. Focus on explaning the why/issue rather than implementation details.  \n- Write one changeset per patch/minor/major change. Keep the changeset message constrained to 1 short sentence or 2 maximum, focused on the bug fix, feature or breaking changes. Don't explain the internals or implementation details.\n\n#### Naming\n\n- Use names that explain the domain idea, not the implementation trick.\n- Prefer specific names over short names when the value crosses more than a few lines.\n- Name booleans as questions or states, such as `isReady`, `hasSubscribers`, or `shouldFlush`.\n- Name functions by the action they perform, such as `resolveLoaderData()` or\n  `markContainerReady()`.\n- Avoid vague names like `data`, `item`, `temp`, `handle`, `process`, or `doWork` unless the local\n  scope makes the meaning obvious.\n- Keep existing public API names unless the task is intentionally changing the API.\n\n#### Control Flow\n\n- Prefer early returns for invalid, empty, unsupported, or already-handled cases.\n- Avoid deep nesting when a guard clause can make the main path easier to read.\n- Keep the success path visible at the outer indentation level when possible.\n- Do not use clever boolean expressions when a named condition or small helper would be clearer.\n- Keep error and compatibility branches explicit so reviewers can see why they exist.\n\n#### Modularity\n\n- Keep functions focused on one responsibility.\n- Extract a helper when a block has a clear name, is reused, or hides the main path.\n- Do not extract helpers only to move complexity around; the caller should become easier to read.\n- Keep helpers close to their first use unless they are shared across files.\n- Prefer local semantic helpers over broad abstractions.\n- Keep consumer- or framework-specific carve-outs (magic values, special cases) at the boundary that\n  owns that knowledge; do not push them into a generic lower-level utility that should stay agnostic.\n\n#### Review Standard\n\nBefore finishing, read the changed code as if you are new to the package:\n\n1. Can a junior developer explain what each name represents?\n2. Can an AI agent identify the main path without following deeply nested branches?\n3. Are edge cases handled by clear guard clauses or named helpers?\n4. Is the change modular without hiding important state or protocol boundaries?\n\nIf the answer is no, simplify the code before calling the task complete.\n\n### Code Style\n\nPrettier and ESLint define style. Keep semicolons, single quotes, two-space indentation, trailing\ncommas where configured, and always use braces for control flow.\n\nNaming conventions:\n\n| Pattern | Usage |\n| --- | --- |\n| `use*` | Hooks called in component/task scope |\n| `*$` | QRL boundary extracted by the optimizer |\n| `create*` | Factory functions |\n| `*.unit.ts(x)` | Vitest unit files |\n| `*.spec.ts(x)` | Vitest spec files |\n| `*.e2e.ts` | Playwright e2e files |\n\n### Security And Supply Chain\n\nTreat security-sensitive changes as behavior changes even when they look like config, dependency,\nor CI maintenance.\n\n#### Security Review Trigger\n\nPause for a focused security pass when a change touches:\n\n- authentication, authorization, sessions, cookies, redirects, URL parsing, filesystem paths, SSR,\n  serialization, HTML/script output, request handling, or server adapters\n- dependency versions, lockfiles, package manager settings, release scripts, publishing scripts, or\n  build tooling\n- GitHub Actions, reusable workflows, workflow permissions, tokens, secrets, cache keys, artifact\n  upload/download, or deployment credentials\n\nUse the changed diff as the starting point. Check directly supporting files when needed, but do not\nturn a small change into a repository-wide security scan unless the user asks.\n\n#### What To Check\n\n- Identify the trust boundary: attacker-controlled input, untrusted dependency code, untrusted CI\n  event data, secrets, tokens, publish credentials, or generated output.\n- Find the closest existing guard and the sink it protects. Do not claim safety from a broad\n  intuition; point to the concrete validation, escaping, permission, or isolation boundary.\n- Prefer fail-closed behavior for malformed input, unknown modes, unsupported hosts, and missing\n  config.\n- Keep secrets out of logs, snapshots, artifacts, caches, generated files, browser output, and error\n  messages.\n- When changing dependencies or build tools, check for new install scripts, binary downloads,\n  network fetches, transitive tool execution, license or provenance surprises, and lockfile drift.\n\n#### GitHub Actions\n\nWhen editing `.github/workflows/**` or action-related scripts:\n\n- Keep `permissions:` least-privilege at the workflow or job level.\n- Do not introduce `pull_request_target` for code checkout/build/test of untrusted PR content unless\n  the workflow is explicitly designed to avoid running attacker-controlled code with secrets.\n- Avoid passing secrets to forked PRs, third-party actions, shell commands that print env, or\n  generated artifacts.\n- Prefer trusted first-party actions. For new third-party actions, pin to a full commit SHA or\n  document why a moving tag is acceptable.\n- Treat cache restore keys and artifact paths as untrusted input surfaces. Avoid broad paths that can\n  poison future jobs or expose credentials.\n- Quote shell variables and avoid `eval`, curl-piped shells, and unchecked interpolation of GitHub\n  context values into shell commands.\n\n#### Verification\n\nFor security-sensitive changes, record the focused security reasoning in the final response:\n\n1. What boundary changed?\n2. What guard or invariant prevents abuse?\n3. What focused test, lint, config check, or manual inspection covered it?\n\nIf you cannot verify the security property locally, say exactly what remains unverified.\n\n### Test Driven Development\n\nUse test-driven development for behavior changes and bug fixes.\n\n#### Required Workflow\n\n1. Identify the observable behavior or invariant before editing implementation code.\n2. Add or update the closest focused test that proves the behavior.\n3. Run that test before the implementation change when feasible and confirm it fails for the\n   expected reason.\n4. Make the smallest implementation change that satisfies the test.\n5. Rerun the focused test and keep iterating until it passes.\n6. Run any broader verification required by the touched surface, such as API docs, optimizer\n   snapshots, build output, or e2e coverage.\n\n#### Test Selection\n\n- Prefer unit/spec tests next to the changed code.\n- Use optimizer fixtures and snapshots for Rust transform behavior.\n- Use e2e tests only when the behavior depends on a real browser, navigation, streaming, SSR/CSR\n  integration, adapter behavior, or fixture app wiring.\n- For serialization, hydration, streaming, or loader protocol changes, test both the writer and the\n  reader path.\n- For compatibility behavior, test both the current API path and the supported deprecated path.\n\n#### Exceptions\n\nDocs-only, rules-only, formatting-only, dependency metadata, and generated-output maintenance\nchanges do not need a failing product test first. They still need the narrowest relevant\nverification, such as formatting, Ruler dry-run, generated-output checks, or docs build checks.\n\nIf dependencies, missing generated artifacts, or local environment constraints prevent a pre-fix\ntest run, write the focused test first, record the blocker, and run the test as soon as the blocker\nis resolved.\n\n### Boundaries\n\n- Preserve user work and unrelated changes. Do not reset or revert unrelated files.\n- Keep edits scoped to the package, generated-file boundary, and verification surface implied by the\n  task.\n- Do not commit `.only` tests.\n- Do not skip tests for behavior changes; use the closest focused test first.\n\n### No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n#### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.","isInternal":false,"tokens":4305,"sizeBytes":18523},{"name":"AGENTS.md","path":"AGENTS.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/AGENTS.md","title":"AI Agent Protocol & Instructions","category":"root-instruction","format":"markdown","content":"<!-- Generated by Ruler -->\n\n\n<!-- Source: .ruler/AGENTS.md -->\n\n# Qwik v2 agents reference, instructions and rules\n\n> [!IMPORTANT]\n> **ALWAYS RUN `ruler apply` AT THE START OF A SESSION.** The agent skills are gitignored, not\n> committed, so a fresh clone/worktree has none until you generate them (once per worktree):\n>\n> ```bash\n> pnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n> ```\n\n> Canonical source for repo-wide AI coding agent rules. For contributor setup, see\n> [CONTRIBUTING.md](./CONTRIBUTING.md). For package-specific workflows, load the relevant\n> `.ruler/skills/*/SKILL.md` file.\n\n## Source Of Truth\n\n- Shared AI guidance lives in `.ruler/`.\n- Only the root `AGENTS.md` and `CLAUDE.md` are committed generated outputs; the `.claude/`/`.codex/`\n  skill copies are gitignored and regenerated locally with `ruler apply` (see Setup below).\n- Never hand-edit a generated output — edit `.ruler/` and regenerate with `ruler apply`. A CI check\n  re-runs it and fails if the committed root files drift.\n- To change assistant behavior, edit `.ruler/AGENTS.md`, `.ruler/README.md`, or `.ruler/skills/**`,\n  then regenerate with Ruler when needed.\n\n## Project Snapshot\n\nQwik is a resumable web framework. SSR serializes application and framework state into HTML, and\nthe client resumes without re-running component code. Qwik v2 is a rewrite with VNode-based\nruntime work, rewritten reactive primitives, a new serialization mechanism, and package names under\n`@qwik.dev/*`.\n\nKey concepts: resumability, QRLs, `$`-suffixed optimizer boundaries, fine-grained signals, VNodes,\nthe cursor system, and the Rust optimizer.\n\n## Monorepo Map\n\n- Base branch and release branch for v2 PRs: `main`. V1 lives on the `v1` branch.\n\n| Package | Path | Notes |\n| --- | --- | --- |\n| `@qwik.dev/core` | `packages/qwik` | Core runtime, SSR, optimizer-facing code |\n| `@qwik.dev/router` | `packages/qwik-router` | Routing, middleware, adapters, SSG |\n| `@qwik.dev/react` | `packages/qwik-react` | React integration |\n| `@qwik.dev/utils` | `packages/qwik-utils` | Less-common helpers (`usePoll`, `zod$`), may use qwik internals |\n| `@qwik.dev/dom` | `packages/qwik-dom` | Server-side DOM implementation |\n| `@qwik.dev/qwik-vite` | `packages/qwik-vite` | `vite-plugin-qwik`, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/ts-optimizer` | `packages/ts-optimizer` | TypeScript optimizer, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/optimizer` | `packages/optimizer` | Rust optimizer, WASM, NAPI bindings; kept for parity comparison |\n| `eslint-plugin-qwik` | `packages/eslint-plugin-qwik` | ESLint rules |\n| `create-qwik` | `packages/create-qwik` | Project scaffolding CLI |\n| `qwik-docs` | `packages/docs` | Docs site, private package |\n| `insights` | `packages/insights` | Analytics dashboard, private package |\n\nUse v2 package names (`@qwik.dev/core`, `@qwik.dev/router`, etc.). Do not introduce v1\n`@builder.io/qwik` or `@builder.io/qwik-city` imports except when working on explicit\ncompatibility override code.\n\n## Setup And Iteration Loop\n\nThis is the canonical loop for nearly all framework work. Default to it; do not substitute broader\ncommands:\n\n### getting started\n\n```bash\npnpm i\n```\n\n```bash\n# Materialize the agent skills into .claude/.codex (gitignored) — run once per fresh clone/worktree.\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\n```bash\npnpm build.core # for a fresh start\npnpm build.full # for a fresh start and you are working on the docs or the other packages\npnpm build.rust # only when working on the Rust optimizer; the only step that needs the Rust toolchain\n```\n\nThe local scripts and tests use the TypeScript optimizer (`tsOptimizer: true` in the repo's own\nvite configs and test harnesses), so no Rust toolchain or prebuilt bindings are needed for them.\nKeep that flag on any new repo-owned `qwikVite()` call site; the plugin still defaults to the Rust\noptimizer for published apps. `QWIK_OPTIMIZER=rust` (or `ts`) overrides the flag for a whole run, which\nis how CI runs the e2e suites on both optimizers; it needs `pnpm build.rust` or\n`pnpm build.platform.copy` first.\n### Iterating\n\nPrefer focused commands and builds over repo-wide commands and builds.\n\n```bash\n# Fast dev build — required once before any tests can run, and again after framework\n# source changes when the verification consumes build output (all e2e suites do)\npnpm build.core.dev\n\n# Closest focused unit/spec test\npnpm vitest run packages/qwik/src/core/tests/use-task.spec.tsx\n\n# Focused e2e test\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\n`build.core.dev` also re-emits fresh Qwik and Router `.d.ts` incrementally (via `tscDevDts` + re-export shims), so editing a public signature no longer leaves stale types — `build.watch` skips the type pass to stay instant.\n\nFor Qwik e2e tests, use `--browser=chromium` with `e2e/qwik-e2e/playwright.config.ts`.\n\nRe-run `pnpm build.rust` (or `pnpm build.rust.dev`) when you are touching the optimizer rust code.\n\n### When making a PR\n\n```bash\n# for type-level verification when no focused test covers the change\npnpm tsc.check\n\n# update the API\npnpm api.update\n\n# Verify the build passes\npnpm build.core\n\n# Verify unit tests pass\npnpm test.unit\n\n# Verify the E2Es pass\npnpm test.e2e.chromium\n\n# In case of html output change, update the ssg snapshot\npnpm test.e2e.router.ssg.update\n\n# In case of a new feature, run the test.bench\npnpm test.bench\n\n# In case of qwikloader changes\npnpm vitest packages/qwik/src/qwikloader.unit.ts -u\n```\n\nIf any of those fail, fix and push your changes.\n\n## Rules\n\nRecent Qwik v2 work by core maintainers favors small, behavior-shaped changes with regression proof.\nFollow that bias:\n\n### Guidance Freshness\n\n- If a skill or reference you used is stale, incomplete, or contradicted by current source, update\n  the `.ruler` source guidance before finishing the task unless the user explicitly restricted the\n  scope.\n- Keep new durable lessons in the most specific skill or reference that future agents are likely to\n  load. Do not add package-specific details to these always-on rules unless they affect most tasks.\n- Only add a lesson to a skill when it generalizes to future tasks. Keep single-PR specifics (one\n  module's protocol, one fix's mechanics) in the code and its tests, not in a skill.\n- Write those notes **prescriptively** — the invariants to keep, the traps that cause false passes,\n  where things live, and how to verify — rather than describing how the code currently works. Omit \"don't do X\" prohibitions for anything a test already enforces; the\n  suite is the guardrail, so reserve notes for what it can't self-enforce.\n- When updating guidance, load the `qwik-guidance-maintenance` skill.\n\n### Skill Selection\n\nLoad the relevant skill before non-trivial work in that area:\n\n| Skill | Use when |\n| --- | --- |\n| `qwik-core-development` | Editing/reviewing `packages/qwik/**` core runtime code |\n| `qwik-router-development` | Editing/reviewing router runtime, buildtime, middleware, adapters, or SSG |\n| `qwik-optimizer-development` | Editing/reviewing Rust optimizer, WASM, NAPI, or optimizer-facing behavior |\n| `qwik-e2e-verification` | Creating, debugging, or running Playwright e2e suites |\n| `qwik-docs-development` | Writing/editing docs content, docs site routes, or docs LLM outputs |\n| `qwik-guidance-maintenance` | Editing `.ruler/**`, generated-output guidance, or stale skill/reference content |\n\nIf no skill fits, stay with these repo-wide rules and inspect local source before changing code.\n\nIf a skill above is not loadable, its copy has not been generated in this worktree yet — run the\n`ruler apply` step from Setup, or read the source directly at `.ruler/skills/<name>/SKILL.md`.\n\nKeep the `qwik-` prefix on committed source skill names. Ruler copies these skills into\nagent-native skill directories where they may coexist with user or plugin skills, so the prefix keeps\nthe skill list unambiguous outside the repo-local `.ruler` tree.\n\n### Changesets\n\nWhen a change affects published packages, add a changeset under `.changeset/`.\n\n- Use `patch` for bug fixes: focus on the issue rather than the solution.\n- `minor` for new features: explain the new feature.\n- `major` for API removal: may also include a new feature, but it must remove or break a public API.\n- Enforce 1 changeset per change.\n- Write the changeset summary in lowercase (e.g. `fix:`)\n- 1 short sentence (10-ish words) focused on the bug fix or feature. Don't include implementation details.\n\n### Commits\n\n- One coherent set of changes per commit. Do not fold an unrelated fix into a commit for another\n  change.\n- Fixes that are independent of the branch's main change get their own commits, placed before it,\n  so they can be reviewed and cherry-picked on their own.\n- Write the subject as a short imperative summary. The body explains the \"why\" tersely when it is\n  not obvious from the subject. The \"what\" and \"how\" live in the code; summarize them only when the\n  commit is large.\n- When a branch has grown out of that shape, rewrite it into that order before review instead of\n  stacking fix-up commits.\n\n### Code Quality\n\n\n#### Sanity\n\n- Remember to keep your code DRY.\n- Do not leave debug logging or temporary names in the final diff.\n- Only add comments for crucial information that is not self-explanatory. Keep your comments constrained to 1 short sentence (10-ish words) maximum. Focus on explaning the why/issue rather than implementation details.  \n- Write one changeset per patch/minor/major change. Keep the changeset message constrained to 1 short sentence or 2 maximum, focused on the bug fix, feature or breaking changes. Don't explain the internals or implementation details.\n\n#### Naming\n\n- Use names that explain the domain idea, not the implementation trick.\n- Prefer specific names over short names when the value crosses more than a few lines.\n- Name booleans as questions or states, such as `isReady`, `hasSubscribers`, or `shouldFlush`.\n- Name functions by the action they perform, such as `resolveLoaderData()` or\n  `markContainerReady()`.\n- Avoid vague names like `data`, `item`, `temp`, `handle`, `process`, or `doWork` unless the local\n  scope makes the meaning obvious.\n- Keep existing public API names unless the task is intentionally changing the API.\n\n#### Control Flow\n\n- Prefer early returns for invalid, empty, unsupported, or already-handled cases.\n- Avoid deep nesting when a guard clause can make the main path easier to read.\n- Keep the success path visible at the outer indentation level when possible.\n- Do not use clever boolean expressions when a named condition or small helper would be clearer.\n- Keep error and compatibility branches explicit so reviewers can see why they exist.\n\n#### Modularity\n\n- Keep functions focused on one responsibility.\n- Extract a helper when a block has a clear name, is reused, or hides the main path.\n- Do not extract helpers only to move complexity around; the caller should become easier to read.\n- Keep helpers close to their first use unless they are shared across files.\n- Prefer local semantic helpers over broad abstractions.\n- Keep consumer- or framework-specific carve-outs (magic values, special cases) at the boundary that\n  owns that knowledge; do not push them into a generic lower-level utility that should stay agnostic.\n\n#### Review Standard\n\nBefore finishing, read the changed code as if you are new to the package:\n\n1. Can a junior developer explain what each name represents?\n2. Can an AI agent identify the main path without following deeply nested branches?\n3. Are edge cases handled by clear guard clauses or named helpers?\n4. Is the change modular without hiding important state or protocol boundaries?\n\nIf the answer is no, simplify the code before calling the task complete.\n\n### Code Style\n\nPrettier and ESLint define style. Keep semicolons, single quotes, two-space indentation, trailing\ncommas where configured, and always use braces for control flow.\n\nNaming conventions:\n\n| Pattern | Usage |\n| --- | --- |\n| `use*` | Hooks called in component/task scope |\n| `*$` | QRL boundary extracted by the optimizer |\n| `create*` | Factory functions |\n| `*.unit.ts(x)` | Vitest unit files |\n| `*.spec.ts(x)` | Vitest spec files |\n| `*.e2e.ts` | Playwright e2e files |\n\n### Security And Supply Chain\n\nTreat security-sensitive changes as behavior changes even when they look like config, dependency,\nor CI maintenance.\n\n#### Security Review Trigger\n\nPause for a focused security pass when a change touches:\n\n- authentication, authorization, sessions, cookies, redirects, URL parsing, filesystem paths, SSR,\n  serialization, HTML/script output, request handling, or server adapters\n- dependency versions, lockfiles, package manager settings, release scripts, publishing scripts, or\n  build tooling\n- GitHub Actions, reusable workflows, workflow permissions, tokens, secrets, cache keys, artifact\n  upload/download, or deployment credentials\n\nUse the changed diff as the starting point. Check directly supporting files when needed, but do not\nturn a small change into a repository-wide security scan unless the user asks.\n\n#### What To Check\n\n- Identify the trust boundary: attacker-controlled input, untrusted dependency code, untrusted CI\n  event data, secrets, tokens, publish credentials, or generated output.\n- Find the closest existing guard and the sink it protects. Do not claim safety from a broad\n  intuition; point to the concrete validation, escaping, permission, or isolation boundary.\n- Prefer fail-closed behavior for malformed input, unknown modes, unsupported hosts, and missing\n  config.\n- Keep secrets out of logs, snapshots, artifacts, caches, generated files, browser output, and error\n  messages.\n- When changing dependencies or build tools, check for new install scripts, binary downloads,\n  network fetches, transitive tool execution, license or provenance surprises, and lockfile drift.\n\n#### GitHub Actions\n\nWhen editing `.github/workflows/**` or action-related scripts:\n\n- Keep `permissions:` least-privilege at the workflow or job level.\n- Do not introduce `pull_request_target` for code checkout/build/test of untrusted PR content unless\n  the workflow is explicitly designed to avoid running attacker-controlled code with secrets.\n- Avoid passing secrets to forked PRs, third-party actions, shell commands that print env, or\n  generated artifacts.\n- Prefer trusted first-party actions. For new third-party actions, pin to a full commit SHA or\n  document why a moving tag is acceptable.\n- Treat cache restore keys and artifact paths as untrusted input surfaces. Avoid broad paths that can\n  poison future jobs or expose credentials.\n- Quote shell variables and avoid `eval`, curl-piped shells, and unchecked interpolation of GitHub\n  context values into shell commands.\n\n#### Verification\n\nFor security-sensitive changes, record the focused security reasoning in the final response:\n\n1. What boundary changed?\n2. What guard or invariant prevents abuse?\n3. What focused test, lint, config check, or manual inspection covered it?\n\nIf you cannot verify the security property locally, say exactly what remains unverified.\n\n### Test Driven Development\n\nUse test-driven development for behavior changes and bug fixes.\n\n#### Required Workflow\n\n1. Identify the observable behavior or invariant before editing implementation code.\n2. Add or update the closest focused test that proves the behavior.\n3. Run that test before the implementation change when feasible and confirm it fails for the\n   expected reason.\n4. Make the smallest implementation change that satisfies the test.\n5. Rerun the focused test and keep iterating until it passes.\n6. Run any broader verification required by the touched surface, such as API docs, optimizer\n   snapshots, build output, or e2e coverage.\n\n#### Test Selection\n\n- Prefer unit/spec tests next to the changed code.\n- Use optimizer fixtures and snapshots for Rust transform behavior.\n- Use e2e tests only when the behavior depends on a real browser, navigation, streaming, SSR/CSR\n  integration, adapter behavior, or fixture app wiring.\n- For serialization, hydration, streaming, or loader protocol changes, test both the writer and the\n  reader path.\n- For compatibility behavior, test both the current API path and the supported deprecated path.\n\n#### Exceptions\n\nDocs-only, rules-only, formatting-only, dependency metadata, and generated-output maintenance\nchanges do not need a failing product test first. They still need the narrowest relevant\nverification, such as formatting, Ruler dry-run, generated-output checks, or docs build checks.\n\nIf dependencies, missing generated artifacts, or local environment constraints prevent a pre-fix\ntest run, write the focused test first, record the blocker, and run the test as soon as the blocker\nis resolved.\n\n### Boundaries\n\n- Preserve user work and unrelated changes. Do not reset or revert unrelated files.\n- Keep edits scoped to the package, generated-file boundary, and verification surface implied by the\n  task.\n- Do not commit `.only` tests.\n- Do not skip tests for behavior changes; use the closest focused test first.\n\n### No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n#### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n\n\n\n<!-- Source: .ruler/README.md -->\n\n# Ruler Setup\n\nThis project uses [Ruler](https://github.com/intellectronica/ruler) to keep AI assistant instructions in one committed source of truth.\n\n## Source Of Truth\n\n```\n.ruler/\n├── AGENTS.md      # Repo-wide guidance + always-on rules (appended at the end)\n├── skills/        # Shared source skills propagated by Ruler\n└── ruler.toml     # Ruler agent configuration\n```\n\nUse `.ruler/AGENTS.md` for always-on repository context and rules (the rules live as sections at the\nend of that file). Use `.ruler/skills/` for task-specific workflows that should be loaded only when\nrelevant.\n\nAlways-on rules currently in `.ruler/AGENTS.md`:\n\n- `changeset-conventions`\n- `commit-conventions`\n- `code-quality`\n- `generated-output-boundaries`\n- `guidance-source-of-truth`\n- `no-hydration-terminology`\n- `security-and-supply-chain`\n- `test-driven-development`\n\nCurrent source skills:\n\n- `qwik-core-development`\n- `qwik-router-development`\n- `qwik-optimizer-development`\n- `qwik-e2e-verification`\n- `qwik-docs-development`\n- `qwik-guidance-maintenance`\n\nThe `qwik-` prefix is intentional. Ruler copies skills into assistant-native directories where they\ncan appear beside personal and plugin skills, so the prefix keeps these repo skills recognizable\noutside the `.ruler/` tree.\n\nRoot `AGENTS.md` and `CLAUDE.md` are generated by Ruler but committed (so fresh clones and worktrees\nhave the always-on guidance immediately). The generated skill directories (`.claude/skills/`,\n`.codex/skills/`) and the rest of `.claude/`/`.codex/`/`.cursor/` stay local and gitignored — run\n`ruler apply` to materialize the skills. Never edit a generated file directly — update `.ruler/`,\nrun `ruler apply`, and commit the regenerated root files.\n\n## AI Config Builder\n\nTreat Ruler as the source layer and the selected assistant as the output layer.\n\nWhen you are setting up or debugging an assistant-specific config:\n\n1. Identify the target assistant and Ruler agent id.\n2. Read this file and `.ruler/ruler.toml`.\n3. Research the target assistant's current native instruction, rule, skill, config, and policy\n   formats when the mapping is ambiguous.\n4. Map `.ruler` files by semantic role, not by filename.\n5. Run `ruler apply --agents <agent>`.\n6. Verify that the generated files contain the expected source guidance and skills.\n\n| Ruler source | Semantic role | Builder action |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Repo-wide AI guidance + always-on rules | Generate into the target assistant's primary native guidance file. |\n| `.ruler/skills/*/SKILL.md` | Task-triggered workflows | Copy to the target assistant's native skills directory when supported. |\n| `.ruler/ruler.toml` and Ruler MCP config | Agent selection, output paths, MCP/config | Generate or merge native config only where Ruler and the target assistant support it. |\n\nDifferent tools use words like \"rules\" for different things. A native rules file may mean\nnatural-language guidance, directory-scoped steering, MCP config, hooks, or command execution\npolicy. Check current docs or the installed Ruler adapter before creating or copying a tool-specific\nfile.\n\n## Markdown Guidance Bundle\n\nThe AI-agnostic Markdown guidance bundle is `.ruler/AGENTS.md` (repo-wide context plus the always-on\nrules appended at its end) together with this `.ruler/README.md`.\n\nRuler concatenates that bundle and writes it to each selected assistant's native AI guidance file.\nUse source markers in the generated file to verify inclusion. Do not bypass Ruler by copying these\nMarkdown files into a tool-specific directory whose format has not been verified.\n\nIf you are an AI assistant building local config for a target tool, research that tool's current\nnative guidance, skill, config, and policy formats before adding any tool-specific output. Map\n`.ruler` files by what they mean, not by filename: Markdown guidance belongs in the assistant's\nnative AI guidance surface, skills belong in native skills if supported, and command-permission\npolicy belongs only in a separately researched policy format. For Codex, Ruler includes all\n`.ruler` Markdown guidance in generated `AGENTS.md`; `.codex/rules/*.rules` is command policy, not\nMarkdown guidance.\n\n### Worked Example: Codex\n\nCurrent Ruler and OpenAI Codex behavior maps this repo's sources as follows:\n\n| Ruler source | Codex-native output | Verify after `ruler apply --agents codex` |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Generated root `AGENTS.md` | `rg -n 'Source: .ruler/AGENTS.md' AGENTS.md` |\n| `.ruler/skills/*/SKILL.md` | `.codex/skills/*/SKILL.md` | `find .codex/skills -name SKILL.md` |\n| Ruler MCP config | `.codex/config.toml` when MCP config is generated | `test -f .codex/config.toml` when MCP/config is expected |\n\nCodex `.rules` files are command execution policy files that use `prefix_rule(...)`. They are not a\ntarget for `.ruler/AGENTS.md` prose guidance. If Codex command policy is needed, maintain it as a\nseparate local or team policy using OpenAI Codex's `.rules` format; do not treat it as Ruler\nMarkdown guidance.\n\nExpected Codex check:\n\n```bash\nruler apply --agents codex\nrg -n 'Source: .ruler/AGENTS.md' AGENTS.md\nfind .codex/skills -name SKILL.md\n```\n\n## What Is Committed vs Regenerated\n\nOnly the root `AGENTS.md` and `CLAUDE.md` are **committed** generated outputs, so a fresh clone or\nworktree has the always-on guidance immediately (`.ruler/ruler.toml` keeps `[gitignore] enabled = false`\nso Ruler leaves those two files tracked). The generated skill copies (`.claude/skills/`,\n`.codex/skills/`) are **gitignored** — regenerate them locally with `ruler apply`. This keeps skill\nand note edits from appearing three times (source plus two copies) in every PR.\n\nTo change guidance, edit `.ruler/`, run `ruler apply`, and commit the regenerated root files\nalongside your `.ruler/` change. Never hand-edit the generated files. A CI check\n(`.github/workflows/ruler-check.yml`) re-runs `ruler apply` and fails if the committed root files\ndrift from `.ruler/`.\n\n## Generate Local Assistant Files\n\nInstall Ruler if you do not already have it:\n\n```bash\nnpm install -g @intellectronica/ruler\n```\n\nOr run it without installing (the form used by fresh worktrees and CI):\n\n```bash\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\nGenerate files for the default configured agents:\n\n```bash\nruler apply\n```\n\nGenerate files for a specific assistant:\n\n```bash\nruler apply --agents claude\nruler apply --agents codex\n```\n\nGenerate files for multiple assistants:\n\n```bash\nruler apply --agents claude,codex\n```\n\n## Project And Personal Configuration\n\nUse `.ruler/` for team-shared instructions and project conventions that should travel with the repo.\n\nUse `~/.config/ruler/` for personal preferences, local workflow shortcuts, API keys, and personal MCP servers:\n\n```bash\nruler init --global\n```\n\nIf it helps everyone working in this repo, add it to `.ruler/`. If it only helps your local setup,\nkeep it in your global Ruler config.\n\n## Updating Instructions\n\nEdit `.ruler/AGENTS.md` for repository-wide guidance and always-on rules (the rules are sections at\nthe end of that file). Edit the relevant `.ruler/skills/<skill-name>/SKILL.md` file for\npackage-specific or workflow-specific guidance.\n\nIf a code task proves a skill or reference stale, update that guidance as part of the same task when\nthe scope allows it.\n\nThen regenerate the local assistant files:\n\n```bash\nruler apply --agents <your-tool>\n```\n\nDo not update generated files like `CLAUDE.md` or `AGENTS.md` by hand. They will be overwritten the\nnext time Ruler runs.\n\n## Skills\n\nAuthor shared skills under `.ruler/skills/` (the committed source). Ruler copies them into each\nenabled agent's skill directory (`.claude/skills/` for Claude, `.codex/skills/` for Codex); those\ncopies are gitignored, so run `ruler apply` once per fresh clone or worktree to materialize them.\nNever hand-edit the copies — edit `.ruler/skills/` and regenerate.\n\nKeep each skill focused:\n\n- Use frontmatter with `name` and a trigger-oriented `description`.\n- Put the fast path in `SKILL.md`.\n- Move long notes into `references/` only when progressive disclosure helps.\n- Keep always-on policy in `.ruler/AGENTS.md`, not duplicated in every skill.\n- Keep durable maintainer lessons current. Prefer updating the specific skill/reference that was\n  wrong over adding broad prose here.\n","isInternal":false,"tokens":6373,"sizeBytes":27007},{"name":"core-notes.md","path":".ruler/skills/qwik-core-development/references/core-notes.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/skills/qwik-core-development/references/core-notes.md","title":"References Skill","category":"anthropic-skill","format":"markdown","content":"# References Skill\n\nPath: `.ruler/skills/qwik-core-development/references/core-notes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/skills/qwik-core-development/references/core-notes.md)","tokens":300,"sizeBytes":232},{"name":"SKILL.md","path":".ruler/skills/qwik-core-development/SKILL.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/skills/qwik-core-development/SKILL.md","title":"qwik-core-development","category":"anthropic-skill","format":"markdown","content":"---\nname: qwik-core-development\ndescription: Use when modifying or reviewing Qwik core package code under packages/qwik, especially reactive primitives, signals, VNodes, cursor behavior, QRLs, optimizer-facing runtime behavior, or Qwik core tests.\n---\n\n# Qwik Core Development\n\nUse this skill for `packages/qwik/**` work. Keep the normal repo-wide instructions from `.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify the touched subsystem before editing: reactive primitives, VNode/client diffing, cursor, QRL/serialization, SSR, hooks, or tests.\n2. Read the smallest relevant source and tests before making changes.\n3. Find the invariant that must stay true across SSR, resume, client render, and serialization when\n   the touched code crosses those boundaries.\n4. After implementation changes, immediately run the closest focused Vitest file with `pnpm vitest run <path>`. Do not use `pnpm test.unit`.\n5. If touching Rust optimizer code, load `qwik-optimizer-development` instead of treating the change as TypeScript-only.\n\n## When to Load Detailed Notes\n\nRead `references/core-notes.md` only when the task involves:\n\n- async signals, computed signals, polling, or signal invalidation;\n- QRL creation, `$` transform behavior, or serialization issues;\n- VNode, cursor, or DOM diff behavior;\n- Qwik core tests that use `$()`, `retryOnPromise`, or private runtime state;\n- an unfamiliar pattern in `packages/qwik/src/core`.\n\nDo not load the reference for simple docs, package metadata, formatting, or unrelated monorepo work.\n\n## Core Reminders\n\n- Prefer existing Qwik runtime patterns over new abstractions.\n- Keep state ownership explicit. For serialized or streamed data, update emit and consume paths\n  together and add a round-trip or regression test.\n- Preserve compatibility deliberately. If deprecated input remains accepted, test both deprecated and\n  current behavior.\n- Use `$`-suffixed functions and `$()` in tests when a QRL boundary is expected.\n- Avoid manual QRL construction unless nearby code already does it for the same reason.\n- Keep tests focused and close to the behavior that changed; add e2e coverage only when browser,\n  streaming, navigation, or integration timing is the behavior under test.\n- If the change affects public API, run `pnpm api.update` after the focused tests pass.\n- If this skill or `references/core-notes.md` is stale after your source inspection, update it before\n  finishing or record why guidance edits were out of scope.\n","frontmatter":{"name":"qwik-core-development","description":"Use when modifying or reviewing Qwik core package code under packages/qwik, especially reactive primitives, signals, VNodes, cursor behavior, QRLs, optimizer-facing runtime behavior, or Qwik core tests."},"isInternal":false,"tokens":534,"sizeBytes":2474},{"name":"SKILL.md","path":".ruler/skills/qwik-docs-development/SKILL.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/skills/qwik-docs-development/SKILL.md","title":"qwik-docs-development","category":"anthropic-skill","format":"markdown","content":"---\nname: qwik-docs-development\ndescription: Use when writing, modifying, or reviewing Qwik docs content or docs-site code under packages/docs, including docs routes, MDX content, generated LLM outputs, docs build behavior, or docs-specific e2e tests.\n---\n\n# Qwik Docs Development\n\nUse this skill for `packages/docs/**` work. Keep the repo-wide rules from `.ruler/AGENTS.md` in\nforce.\n\n## Fast Path\n\n1. Identify whether the change is docs content, route/layout code, API docs surfacing, generated LLM\n   output, search/indexing, or deployment behavior.\n2. For docs content, follow the writing style below before changing site mechanics.\n3. For existing docs pages already in the LLM manifest, edit source content and regenerate only when\n   verification requires generated output.\n4. Documentation and API pages enter LLM outputs automatically through `createLlmsManifest()` in\n   `packages/docs/scripts/generate-llms.ts`; use curated entries for ordering and richer descriptions.\n5. When editing docs scripts, keep generation deterministic and add focused unit coverage for parser,\n   path, URL, or output-shape behavior.\n6. Prefer docs-specific commands from `packages/docs/package.json`.\n\n## Writing Style\n\nWrite Qwik docs for readers who are learning the concept while solving a concrete task.\n\n- Start with the user need and the Qwik concept in one or two plain paragraphs.\n- Split the page into short sections named after the concept or API, such as `useSignal()`,\n  `Passing signals to child components`, or `Nested objects and arrays`.\n- Explain the default case first, then reveal deeper, less common, or higher-cost cases later, this is done in a note block. There is short and long form notes in MDX.\n- Use complete, minimal examples with current v2 imports from `@qwik.dev/core`.\n- After each example, state what the example created or changed and what Qwik tracks, updates, or\n  serializes.\n- Prefer direct sentences over marketing claims or framework jargon. Define Qwik-specific terms\n  before relying on them.\n- Use notes sparingly for important mental models, tradeoffs, or pitfalls, such as avoiding store\n  destructuring or using `function` when a store method needs `this`.\n- Keep examples small enough to scan, but complete enough to paste into a demo or fixture.\n- Link demos after the core explanation; do not make the link carry the explanation.\n\n## Content Pattern\n\nFor concept docs, use this shape unless the page has a better existing local pattern:\n\n1. State the problem and divide the concept into the two or three choices users need to understand.\n2. Show the simplest API with a complete code example.\n3. Explain the important variable or object in the example in one short paragraph.\n4. Add a sharing, nesting, async, or advanced section only after the default case is clear.\n5. Include a short note for automatic tracking, serialization, or performance tradeoffs when that\n   knowledge prevents common mistakes.\n\n## Source Map\n\n- Docs routes and MDX: `packages/docs/src/routes/`\n- Docs components: `packages/docs/src/components/`\n- LLM generator: `packages/docs/scripts/generate-llms.ts`\n- Docs e2e: `e2e/docs-e2e/tests/`\n- Generated docs build output: `packages/docs/dist/`\n- Web fonts: `packages/docs/src/font-faces.ts` inlines the `*-subset-*` fonts from\n  `packages/docs/src/media/fonts/` and links the `*-latin-*` files for the remaining characters.\n  Regenerate a subset with fontTools:\n  `pyftsubset <latin file> --unicodes=\"<subsetUnicodeRange>\" --layout-features='*' --flavor=woff2 --output-file=<subset file>`,\n  then keep `restOfLatinUnicodeRange` equal to the rest of the Latin file's characters.\n\n## LLM Output Rules\n\nThe docs build can generate:\n\n- `dist/llms.txt`\n- `dist/llms-ctx.txt`\n- `dist/llms-ctx-full.txt`\n- curated markdown mirrors under `dist/docs/`\n\nDo not hand-edit generated files in `packages/docs/dist/`. Edit docs source or\n`packages/docs/scripts/generate-llms.ts`, then regenerate.\n\nKeep `llms.txt` and MCP on the same complete manifest. Documentation and API pages are discovered\nautomatically; curated entries provide ordering, descriptions, and additional landing pages.\n\n## Verification\n\nUse the narrowest relevant command:\n\n```bash\npnpm -C packages/docs generate.llms\npnpm -C packages/docs build\npnpm playwright test e2e/docs-e2e/tests/docs-smoke.spec.ts --config e2e/docs-e2e/playwright.config.ts --project chromium\n```\n\nSet `QWIK_LLMS_BASE_URL` only when intentionally testing alternate generated links.\n\n## Stop Conditions\n\n- Keep additional landing pages in the curated entries of the shared manifest.\n- Stop and run or request the relevant docs build when route generation or static output behavior is\n  changed.\n- If docs source or scripts contradict this skill, update the skill before finishing or record why\n  guidance edits were out of scope.\n\n## No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n","frontmatter":{"name":"qwik-docs-development","description":"Use when writing, modifying, or reviewing Qwik docs content or docs-site code under packages/docs, including docs routes, MDX content, generated LLM outputs, docs build behavior, or docs-specific e2e tests."},"isInternal":false,"tokens":1387,"sizeBytes":6138},{"name":"SKILL.md","path":".ruler/skills/qwik-e2e-verification/SKILL.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/skills/qwik-e2e-verification/SKILL.md","title":"qwik-e2e-verification","category":"anthropic-skill","format":"markdown","content":"---\nname: qwik-e2e-verification\ndescription: Use when creating, modifying, debugging, or running Qwik Playwright e2e tests under e2e/, including router, adapters, docs, CLI, and React integration suites.\n---\n\n# Qwik E2E Verification\n\nUse this skill for Playwright e2e work in `e2e/**`. Keep the repo-wide rules from\n`.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify the suite: Qwik core app, Qwik Router, adapters, docs, CLI, or Qwik React.\n2. Run the dev rebuild first when testing Qwik runtime/router behavior.\n3. Use the suite's Playwright config and the browser-selection style that config expects.\n4. Prefer one focused e2e file before broad suite commands.\n5. When debugging app fixtures, inspect the matching `e2e/*/apps/` source before changing tests.\n6. Turn a failing behavior into the smallest deterministic regression. Avoid sleeps and broad\n   assertions when a route, marker, event, or serialized state check can prove the behavior.\n\n## Suites\n\n- Main Qwik e2e: `e2e/qwik-e2e/tests/`\n- Router e2e: `e2e/qwik-e2e/tests/qwikrouter/`\n- Adapter e2e: `e2e/adapters-e2e/tests/`\n- Docs e2e: `e2e/docs-e2e/tests/`\n- CLI e2e: `e2e/qwik-cli-e2e/tests/`\n- React integration e2e: `e2e/qwik-react-e2e/tests/`\n\nApps whose directory names contain `.prod` run in production mode under the shared Qwik dev server.\nKeep exact production-only assertions in those fixtures; regular fixtures must pass after either\n`build.core.dev` or `build.core`.\n\n## Commands\n\nMain Qwik e2e config uses `--browser`, not Playwright projects:\n\n```bash\npnpm build.core.dev\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\npnpm playwright test e2e/qwik-e2e/tests/qwikrouter/nav.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\nFor timing-sensitive regressions, prefix the command with `GITHUB_ACTIONS=true` and use\n`--retries=0` to disable local `slowMo: 100` and expose races. Wait for a fresh completion marker\nafter lazy handlers; a completed click or previously populated output does not prove completion.\n\nSSR content can appear before the dynamically imported qwikloader registers listeners. Before\ntesting client handlers, wait for `window._qwikEv?.roots`; neither `commit` nor `load` guarantees\nthat the dynamic import has finished.\n\nThe brotli budget tests in `ssg-snapshot.e2e.ts` measure the built core chunk, so they need a\nproduction `pnpm build.core` — `build.core.dev` leaves core unminified and blows the budget by ~4%.\nBefore believing a budget failure, rebuild with `build.core` and re-run `pnpm test.e2e.router.ssg`.\n\nPlaywright's `reuseExistingServer: !CI` means a dev server left over from an earlier run serves\nstale bundles, so a local pass can hide a build break that CI catches. Kill port 3301 before\ntrusting a green local sweep after optimizer or bundler changes.\n\nThe CLI e2e scaffolds starters with `create-qwik` and runs their own `npm run dev`/`build` scripts,\nso it is the only suite that exercises a real starter's Vite dev server and production builds; the\nshared Qwik dev server above passes its own resolve conditions. Run it locally with `CI=1` so the\nscaffolds land inside the workspace, where pnpm's `allowBuilds` lets `sharp` build (a `/tmp`\nscaffold fails with `ERR_PNPM_IGNORED_BUILDS`), and after `pnpm build.platform.copy` if\n`packages/optimizer/bindings` is missing. It scaffolds from `packages/create-qwik/dist`, so run\n`pnpm build.cli` after editing `starters/`, or the suite silently tests the previous starters:\n\n```bash\nCI=1 pnpm --filter qwik-cli-e2e exec vitest run --config=vite.config.ts tests/external-library.spec.ts\n```\n\nCommands the CLI e2e spawns inherit Vitest's `NODE_ENV=test`, which Vite treats as a development\nbuild; pass `NODE_ENV` explicitly through `runCommandUntil` when a test depends on the build mode.\n\nFor HTTP cache assertions, use a fresh `launchPersistentContext()` profile per test and remove\nit after closing the context. WebKit's default ephemeral context has no network disk cache, so\n`fetch()` may hit the server despite a fresh `Cache-Control` response. Keep request routing off\nfor cache tests: Playwright interception disables HTTP caching.\n\nOther suites may use named Playwright projects. Check their config before choosing flags:\n\n```bash\npnpm playwright test e2e/docs-e2e/tests/docs-smoke.spec.ts --config e2e/docs-e2e/playwright.config.ts --project chromium\npnpm playwright test e2e/adapters-e2e/tests/adapters.spec.ts --project=chromium --config e2e/adapters-e2e/playwright.config.ts\npnpm playwright test e2e/qwik-react-e2e/tests/reactify.spec.ts --project=chromium --config e2e/qwik-react-e2e/playwright.config.ts\n```\n\n## SSG snapshot suite\n\n`e2e/qwik-e2e/tests/qwikrouter/ssg-snapshot.e2e.ts` asserts two independent things against the built\n`qwikrouter-ssg-snapshot` app:\n\n- **Serialized output goldens** — `expected.state.txt` and `expected.ssg.html`. Regenerate after an\n  intentional serialization or SSR output change with `pnpm test.e2e.router.ssg.update`.\n- **Brotli size budgets** — `CORE_BROTLI_BUDGET` / `PRELOADER_BROTLI_BUDGET` /\n  `QWIKLOADER_BROTLI_BUDGET` constants in that spec. A core change that grows a bundle fails with the\n  exact over-budget byte count; bump the matching constant when the growth is intentional.\n\nTraps:\n\n- The core budget also runs after dev builds; measure it only after `pnpm build.core`.\n- `test.e2e.router.ssg.update` regenerates the goldens only; it never touches the budgets, so a\n  budget breach survives the update.\n- The update run can exit non-zero because a sibling budget assertion failed, not the golden. \"N\n  passed\" with exit 1 usually means a budget breach — read the failing assertion instead of assuming\n  the golden is stale.\n- After rebasing onto a moved base the golden conflicts; regenerate it rather than hand-merging, then\n  re-run `pnpm test.e2e.router.ssg` (no update flag) to confirm it passes deterministically.\n\n## Stop Conditions\n\n- Stop and inspect the suite config when `--browser` versus `--project` is unclear.\n- Stop and report if browser binaries, build artifacts, or dependencies are missing.\n- Do not broaden to all e2e suites unless the user asks or the changed surface requires it.\n- If a test failure shows this skill has stale suite or command guidance, update the skill before\n  finishing or record why guidance edits were out of scope.\n","frontmatter":{"name":"qwik-e2e-verification","description":"Use when creating, modifying, debugging, or running Qwik Playwright e2e tests under e2e/, including router, adapters, docs, CLI, and React integration suites."},"isInternal":false,"tokens":1640,"sizeBytes":6392},{"name":"SKILL.md","path":".ruler/skills/qwik-guidance-maintenance/SKILL.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/skills/qwik-guidance-maintenance/SKILL.md","title":"qwik-guidance-maintenance","category":"anthropic-skill","format":"markdown","content":"---\nname: qwik-guidance-maintenance\ndescription: Use when editing Qwik's .ruler guidance, adding or changing rules or skills, keeping AI guidance from going stale, updating assistant setup docs, or answering how Ruler should generate assistant-native guidance, skills, config, or policy for this repo.\n---\n\n# Qwik Guidance Maintenance\n\nUse this skill for `.ruler/**`, README AI assistant setup, dedicated rules, generated\nassistant-output boundaries, rule-vs-skill taxonomy work, and assistant-native config questions.\nAlso use it at the end of a code task when source inspection proves a loaded skill or reference is\nstale.\n\n## Fast Path\n\n1. Follow the Guidance Source Of Truth rule (in `.ruler/AGENTS.md`) for source layout, rule-vs-skill\n   taxonomy, generated assistant outputs, AI config builder behavior, skill naming, and stale-guidance policy.\n2. Follow the Generated Output Boundaries rule (in `.ruler/AGENTS.md`) before editing, regenerating,\n   or relying on generated output.\n3. Edit committed source files in `.ruler/`, not generated assistant outputs.\n4. Keep new durable policy in the narrowest source: `.ruler/AGENTS.md` for repo-wide context and\n   always-on rules, and `.ruler/skills/**` for task-specific workflows.\n5. For a target assistant, research the current native guidance, skill, config, and policy formats\n   when the mapping is ambiguous.\n6. Verify Ruler behavior with a dry run when the CLI is available.\n7. Verify generated guidance by checking source markers in the target assistant's native guidance\n   file and generated skills in the target assistant's native skills directory when supported.\n\n## Freshness Workflow\n\nWhen an agent uses a skill and current source contradicts it:\n\n1. Finish the user's product-code task first unless the guidance defect blocks the task.\n2. Update the narrowest `.ruler` source that was wrong.\n3. Prefer replacing stale details over appending another long lesson.\n4. Keep history-derived guidance behavioral and durable.\n5. Mention the guidance update in the final response so reviewers know why `.ruler` changed.\n\n## Source Map\n\n- Repo-wide guidance + always-on rules: `.ruler/AGENTS.md`\n- Human setup guide: `.ruler/README.md`\n- Ruler config: `.ruler/ruler.toml`\n- Source skills: `.ruler/skills/**/SKILL.md`\n- Generated outputs (committed): root `AGENTS.md` and `CLAUDE.md`; generated skill copies and\n  other `.claude/`/`.codex/`/`.cursor/` files stay local and gitignored\n\n## Rule And Skill Workflow\n\n- For a new always-on policy, add or update a rule section in `.ruler/AGENTS.md` and its summary in\n  the Source Rules index there.\n- For package-specific details, update the package skill or a directly linked reference.\n- For long notes, add a `references/` file only when progressive disclosure keeps the skill body\n  smaller and clearer.\n- For assistant setup changes, keep human setup steps in `.ruler/README.md` and behavioral agent\n  rules in `.ruler/AGENTS.md`.\n- For assistant output questions, use the `guidance-source-of-truth` rule unless current Ruler or\n  target-tool docs have changed.\n- Treat command execution policy as a separate native format from prose guidance. Do not translate\n  `.ruler/AGENTS.md` guidance into command-policy files just because the target tool calls them \"rules\".\n\n## Verification\n\nUse the target assistant for the change. For a Codex example:\n\n```bash\nnpx @intellectronica/ruler apply --agents codex --dry-run --no-mcp --no-gitignore\nruler apply --agents codex\nrg -n 'Source: .ruler/AGENTS.md' AGENTS.md\nfind .codex/skills -name SKILL.md\npnpm prettier --check .ruler README.md .gitignore\ngit diff --check\n```\n\nIf `npx` cannot reach the registry, retry only when network approval is appropriate; otherwise\nrecord the blocker and still run local formatting/diff checks.\n\n## Stop Conditions\n\n- Stop before editing generated assistant outputs directly.\n- Stop if a proposed rule duplicates detailed skill content instead of summarizing durable policy.\n- Stop if current Ruler or target-tool docs contradict the Guidance Source Of Truth rule in\n  `.ruler/AGENTS.md`.\n","frontmatter":{"name":"qwik-guidance-maintenance","description":"Use when editing Qwik's .ruler guidance, adding or changing rules or skills, keeping AI guidance from going stale, updating assistant setup docs, or answering how Ruler should generate assistant-native guidance, skills, config, or policy for this repo."},"isInternal":false,"tokens":939,"sizeBytes":4074},{"name":"SKILL.md","path":".ruler/skills/qwik-optimizer-development/SKILL.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/skills/qwik-optimizer-development/SKILL.md","title":"qwik-optimizer-development","category":"anthropic-skill","format":"markdown","content":"---\nname: qwik-optimizer-development\ndescription: Use when modifying or reviewing the Qwik optimizer under packages/optimizer, Rust transform code, WASM/NAPI bindings, optimizer snapshots, or optimizer-facing runtime behavior.\n---\n\n# Qwik Optimizer Development\n\nUse this skill for `packages/optimizer/**` and Rust optimizer work. Keep the repo-wide rules from\n`.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify whether the change is Rust transform logic, snapshots, WASM bindings, NAPI bindings, or\n   TypeScript optimizer-facing integration.\n2. Read the closest Rust source, fixture, snapshot, and runtime helper that consumes the emitted\n   shape before editing.\n3. Keep transform behavior deterministic: prefer explicit parser/AST cases and stable ordering over\n   source-text heuristics.\n4. Use Rust-focused verification first; use `pnpm build.rust` only when a full binding/WASM rebuild\n   is required. It is the only build step that needs the Rust toolchain and `wasm-pack`.\n5. If a runtime/core change is also involved, load `qwik-core-development` for that slice.\n\n## Source Map\n\n- Rust optimizer core: `packages/optimizer/core/src/`\n- Rust fixtures: `packages/optimizer/core/src/fixtures/`\n- Rust snapshots: `packages/optimizer/core/src/snapshots/`\n- WASM bindings: `packages/optimizer/wasm/`\n- NAPI bindings: `packages/optimizer/napi/`\n- Optimizer package entry points: `packages/optimizer/src/`\n- Vite/Rollup integration: `packages/qwik-vite/src/`\n\n## Verification\n\nUse the smallest command that covers the change:\n\n```bash\npnpm lint.rust\npnpm test.rust\npnpm test.rust.update\npnpm build.rust\npnpm vitest run packages/qwik-vite/src/plugins/plugin.unit.ts\n```\n\n`pnpm test.rust` maps to `make test`, which runs Cargo tests for\n`packages/optimizer/core/Cargo.toml`. Use `pnpm test.rust.update` only when snapshot updates are\nintentional. The repo's own scripts and tests run on the TypeScript optimizer, and CI runs core\nspecs only there. To run a focused spec on the Rust optimizer, rebuild the native binding\n(`pnpm build.rust.dev`; `scripts/index.ts --optimizer --platform-binding --dev` skips WASM) and\nrerun the spec with `QWIK_OPTIMIZER=rust`.\n\n## Baselining a TypeScript optimizer failure\n\nThe repo's unit and e2e suites run on the TypeScript optimizer, so a parity bug shows up as a\nfailing core test rather than a snapshot diff. To tell a TS-only bug from a pre-existing failure:\n\n1. `pnpm build.platform.copy` downloads the published Rust bindings (no toolchain needed).\n2. Rerun the failing file with `QWIK_OPTIMIZER=rust`, which overrides `tsOptimizer` for the run.\n3. Transform the failing source with both `createOptimizer`s (`packages/optimizer/dist/index.mjs`\n   and `packages/qwik/dist/ts-optimizer.mjs`) using the plugin's options (server: `hoist`,\n   `minify: 'simplify'`, plus the client `stripCtxName`/`stripExports` and server\n   `stripEventHandlers` lists from `packages/qwik-vite/src/plugins/plugin.ts`) and diff the\n   outputs; without the strip options a diff can look identical while the real build differs.\n   Call sites (`.w([captures])`, `q:p`, stripped `q_qrl_*` sentinels) diverge more often than\n   segment bodies.\n   When an e2e app misbehaves, baseline the app build too, not only the router library: the dev\n   server compiles the fixture apps with whichever optimizer its `qwikVite()` call selects.\n   Compare `segment.entry` per display name as well, in `mode: 'prod'`: a grouping gap shows up\n   only as a different bundle count in the app's `q-manifest.json`, never as a failing test.\n   The router SSG snapshot e2e runs on both optimizers in CI, so any output difference between\n   them fails there; keep it that way instead of skipping one leg.\n4. Rebuild the bundle with `pnpm build --optimizer --dev` before rerunning core tests; vitest loads\n   `packages/qwik/dist/ts-optimizer.mjs`, not the optimizer source.\n\n## TypeScript-only syntax\n\nEvery pass after `stripTypeScript` parses its input as `.js`, and oxc drops syntax that only parses\nas TypeScript (parameter decorators) from those ASTs, so what it references looks unused and gets\nDCE'd. Lower such syntax inside `stripTypeScript` itself, threading the option to every call site\n(see `decorator`); lowering later in the Vite plugin is too late. Segments are served as `.js`, so\nVite's own `vite:oxc` pass never touches them.\n\n## JSX tag names\n\nRust transpiles JSX before its Qwik transform, so SWC's rule decides what a tag is: only a tag\nstarting with `[a-z]` is an intrinsic element, while `<Foo>`, `<_Foo>` and the object of\n`<ui.Home>` read bindings. In the TypeScript optimizer, ask oxc-walker's `isReferenceIdentifier`\n(or `isNonReferenceIdentifier`) whether a `JSXIdentifier` reads a binding, and `isHtmlElement`\nwhether a tag is intrinsic.\n\n## Const prop bag\n\nThe runtime trusts a const prop to stay the same for the component's lifetime: reads never\nsubscribe, `_wrapProp` returns const values unwrapped, and SSR skips serializing all-const props.\nIf one changes anyway, the child only re-renders and its `useComputed$`/`useTask$` readers go stale.\nSo either optimizer may put a prop, including a `_fnSignal`/`_wrapProp` wrapper, in the const bag\nonly when every local it reads survives re-renders: imports, `const` bindings with a static\ninitializer (`use*`, `*$`, `*Qrl` calls), or params. Render-computed locals and `_restProps` copies\nare recreated per render and belong in the var bag. Unit specs pass on the TS optimizer alone, so\npin classification with a `test_input!` snapshot and check the runtime with `QWIK_OPTIMIZER=rust`.\n\n## Worker pool changes\n\nThe transform worker pool (`packages/ts-optimizer/src/worker-pool.ts`) never starts real workers\nunder vitest: the worker entry cannot resolve the `.js`-suffixed imports of the TypeScript sources,\nso pool tests silently fall back to in-process transforms. Verify worker behaviour against the\nbuilt bundle instead: `pnpm build --optimizer`, then a Node script that imports\n`packages/qwik/dist/ts-optimizer.mjs`, runs a few transforms, and reads `VmData` from\n`/proc/self/status` before spawning a child process. fork() fails with ENOMEM when one mapping\nexceeds RAM plus swap, and the raw-transfer buffers of several threads in one process coalesce into\none mapping (three workers made an 18 GB mapping on a 16 GB host), so keep raw-transfer parsing\nand other multi-gigabyte reservations out of the workers. `QWIK_TS_OPTIMIZER_RAW_TRANSFER=0` turns\nraw transfer off in the host as well when a spawn still fails with ENOMEM.\n\n## Generated Binding Names\n\nBoth optimizers invent bindings (`_rawProps`, `_defaultValue`, the `use*` destructure flattening).\nNeither gets a scope-correct rename for free, so name uniqueness is the transform's job:\n\n- Rust: `private_ident!` plus swc hygiene is not enough once a binding is captured by an extracted\n  segment. Hygiene commits one name per `SyntaxContext` in source order, and segments lifted to\n  module scope are sibling scopes that each keep the base name — the enclosing component scope then\n  carries a duplicate declaration hygiene never revisits. Number generated names at creation.\n- TypeScript: there is no hygiene pass at all, and the rewrite matches identifiers by name. Number\n  every generated binding, skip names inside destructuring patterns, and resolve references through\n  oxc-walker's `ScopeTracker` so names re-bound in a nested scope keep their declaration. Do not\n  bail out of the rewrite on shadowing — Rust still consolidates, and the snapshot diverges.\n- Props objects (`_rawProps`) follow Rust hygiene: each takes the lowest `_rawProps{n}` not held by\n  a props object bound beside it, in emission order. A segment file is its own module; inline `.s()`\n  bodies share one, so never hardcode a suffix — go through `rawPropsBindingNames`.\n\nPin cross-optimizer behavior with a Rust `test_input!` snapshot registered in\n`packages/ts-optimizer/tests/optimizer/snapshot-options.ts`, not with string asserts in a TS test:\nonly the convergence suite catches parity drift. Its mismatches fail in the final\n`convergence summary` test, so a `-t` filter that skips it reports a false pass.\n\n## Hard Rules\n\n- Do not hand-edit generated optimizer build output in `dist/`, `lib/`, or `target/`.\n- Do not update snapshots without understanding the transform behavior change.\n- Add or update a transform fixture/snapshot for every optimizer behavior change, including negative\n  cases where the transform must not run.\n- Keep optimizer output and runtime JSX/QRL/loader semantics in sync. If a transform changes an\n  emitted attribute, import, segment, or capture shape, inspect the runtime consumer too.\n- After touching `packages/optimizer/core/`, do not claim verification without Rust test/build\n  evidence or a recorded blocker.\n- If this skill becomes stale after source inspection, update it before finishing or record why\n  guidance edits were out of scope.\n","frontmatter":{"name":"qwik-optimizer-development","description":"Use when modifying or reviewing the Qwik optimizer under packages/optimizer, Rust transform code, WASM/NAPI bindings, optimizer snapshots, or optimizer-facing runtime behavior."},"isInternal":false,"tokens":2112,"sizeBytes":8904},{"name":"SKILL.md","path":".ruler/skills/qwik-router-development/SKILL.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/skills/qwik-router-development/SKILL.md","title":"qwik-router-development","category":"anthropic-skill","format":"markdown","content":"---\nname: qwik-router-development\ndescription: Use when modifying or reviewing Qwik Router code under packages/qwik-router, including runtime routing, buildtime route generation, middleware, adapters, SSG, markdown/MDX handling, or router tests.\n---\n\n# Qwik Router Development\n\nUse this skill for `packages/qwik-router/**` work. Keep the repo-wide rules from `.ruler/AGENTS.md`\nin force.\n\n## Fast Path\n\n1. Classify the touched router surface before editing: runtime, buildtime, middleware, adapter, SSG,\n   markdown/MDX, or Vite integration.\n2. Read the smallest source file plus the closest `*.unit.ts` or `*.spec.ts` file before changing\n   behavior.\n3. For middleware, loader, action, or navigation changes, trace handler ordering and shared state\n   from request creation through response/client consumption before editing.\n4. For unit/spec coverage, run `pnpm vitest run <path>`.\n5. For browser/router behavior, rebuild first with `pnpm build.core.dev`, then use the focused\n   Qwik Router e2e command.\n6. If public router API markdown changes are expected, run `pnpm api.update` after tests pass.\n\n## Source Map\n\n- Runtime: `packages/qwik-router/src/runtime/src/`\n- Buildtime route generation: `packages/qwik-router/src/buildtime/`\n- Vite integration: `packages/qwik-router/src/buildtime/vite/`\n- Middleware: `packages/qwik-router/src/middleware/`\n- Adapters: `packages/qwik-router/src/adapters/`\n- SSG: `packages/qwik-router/src/ssg/`\n- Router e2e tests: `e2e/qwik-e2e/tests/qwikrouter/`\n\n## Verification\n\nUse the closest command that covers the changed surface:\n\n```bash\npnpm vitest run packages/qwik-router/src/buildtime/routing/parse-pathname.unit.ts\npnpm vitest run packages/qwik-router/src/runtime/src/client-navigate.unit.ts\npnpm build.core.dev\npnpm playwright test e2e/qwik-e2e/tests/qwikrouter/nav.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\nDo not use `--project chromium` with `e2e/qwik-e2e/playwright.config.ts`; this config expects the\n`--browser=chromium` flag.\n\n## Quality Bar\n\n- Keep middleware, loader, and action ordering explicit. Do not add broad fallbacks that hide which\n  module owns a request.\n- Add regression tests for the exact route shape or request mode that failed, such as index route,\n  layout loader, page loader, redirect, action, or SPA navigation.\n- When changing serialized route state or loader data, update both server output and client\n  consumption in the same change.\n- Preserve deprecated Qwik City compatibility only when current source still supports it, and keep\n  compatibility warnings/tests intentional.\n- If router work exposes stale guidance here or in `.ruler/AGENTS.md`, update the guidance before\n  finishing or record why guidance edits were out of scope.\n\n## Stop Conditions\n\n- Stop and inspect the generated API workflow before hand-editing any `*.api.md` file.\n- Stop and switch to `qwik-e2e-verification` when most of the work is Playwright setup/debugging.\n- Stop and run `pnpm api.update` if exported router API changed.\n","frontmatter":{"name":"qwik-router-development","description":"Use when modifying or reviewing Qwik Router code under packages/qwik-router, including runtime routing, buildtime route generation, middleware, adapters, SSG, markdown/MDX handling, or router tests."},"isInternal":false,"tokens":725,"sizeBytes":3018},{"name":"tsconfig.json","path":"packages/browser-extension/.wxt/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/.wxt/tsconfig.json","title":".wxt Skill","category":"anthropic-skill","format":"json","content":"# .wxt Skill\n\nPath: `packages/browser-extension/.wxt/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/.wxt/tsconfig.json)","tokens":300,"sizeBytes":196},{"name":"CHANGELOG.md","path":"packages/browser-extension/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/CHANGELOG.md","title":"Browser-extension Skill","category":"anthropic-skill","format":"markdown","content":"# Browser-extension Skill\n\nPath: `packages/browser-extension/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/CHANGELOG.md)","tokens":300,"sizeBytes":197},{"name":"package.json","path":"packages/browser-extension/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/package.json","title":"Browser-extension Skill","category":"anthropic-skill","format":"json","content":"# Browser-extension Skill\n\nPath: `packages/browser-extension/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/package.json)","tokens":300,"sizeBytes":197},{"name":"tsconfig.json","path":"packages/browser-extension/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/tsconfig.json","title":"Browser-extension Skill","category":"anthropic-skill","format":"json","content":"# Browser-extension Skill\n\nPath: `packages/browser-extension/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/tsconfig.json)","tokens":300,"sizeBytes":199},{"name":"CHANGELOG.md","path":"packages/create-qwik/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/CHANGELOG.md","title":"Create-qwik Skill","category":"anthropic-skill","format":"markdown","content":"# Create-qwik Skill\n\nPath: `packages/create-qwik/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/CHANGELOG.md)","tokens":300,"sizeBytes":179},{"name":"package.json","path":"packages/create-qwik/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/package.json","title":"Create-qwik Skill","category":"anthropic-skill","format":"json","content":"# Create-qwik Skill\n\nPath: `packages/create-qwik/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/package.json)","tokens":300,"sizeBytes":179},{"name":"jokes.json","path":"packages/create-qwik/src/helpers/jokes.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/src/helpers/jokes.json","title":"Helpers Skill","category":"anthropic-skill","format":"json","content":"# Helpers Skill\n\nPath: `packages/create-qwik/src/helpers/jokes.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/src/helpers/jokes.json)","tokens":300,"sizeBytes":195},{"name":"CHANGELOG.md","path":"packages/devtools/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/CHANGELOG.md","title":"Devtools Skill","category":"anthropic-skill","format":"markdown","content":"# Devtools Skill\n\nPath: `packages/devtools/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/CHANGELOG.md)","tokens":300,"sizeBytes":170},{"name":"package.json","path":"packages/devtools/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/package.json","title":"Devtools Skill","category":"anthropic-skill","format":"json","content":"# Devtools Skill\n\nPath: `packages/devtools/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/package.json)","tokens":300,"sizeBytes":170},{"name":"tsconfig.json","path":"packages/devtools/plugin/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/plugin/tsconfig.json","title":"Plugin Skill","category":"anthropic-skill","format":"json","content":"# Plugin Skill\n\nPath: `packages/devtools/plugin/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/plugin/tsconfig.json)","tokens":300,"sizeBytes":184},{"name":"tsconfig.json","path":"packages/devtools/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/tsconfig.json","title":"Devtools Skill","category":"anthropic-skill","format":"json","content":"# Devtools Skill\n\nPath: `packages/devtools/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/tsconfig.json)","tokens":300,"sizeBytes":172},{"name":"tsconfig.json","path":"packages/devtools/ui/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/ui/tsconfig.json","title":"Ui Skill","category":"anthropic-skill","format":"json","content":"# Ui Skill\n\nPath: `packages/devtools/ui/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/ui/tsconfig.json)","tokens":300,"sizeBytes":172},{"name":"algolia.json","path":"packages/docs/algolia.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/algolia.json","title":"Docs Skill","category":"anthropic-skill","format":"json","content":"# Docs Skill\n\nPath: `packages/docs/algolia.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/algolia.json)","tokens":300,"sizeBytes":158},{"name":"package.json","path":"packages/docs/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/package.json","title":"Docs Skill","category":"anthropic-skill","format":"json","content":"# Docs Skill\n\nPath: `packages/docs/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/package.json)","tokens":300,"sizeBytes":158},{"name":"_routes.json","path":"packages/docs/public/_routes.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/public/_routes.json","title":"Public Skill","category":"anthropic-skill","format":"json","content":"# Public Skill\n\nPath: `packages/docs/public/_routes.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/public/_routes.json)","tokens":300,"sizeBytes":174},{"name":"pages.json","path":"packages/docs/scripts/pages.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/scripts/pages.json","title":"Scripts Skill","category":"anthropic-skill","format":"json","content":"# Scripts Skill\n\nPath: `packages/docs/scripts/pages.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/scripts/pages.json)","tokens":300,"sizeBytes":173},{"name":"ecosystem.json","path":"packages/docs/src/routes/(ecosystem)/ecosystem.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/(ecosystem)/ecosystem.json","title":"(ecosystem) Skill","category":"anthropic-skill","format":"json","content":"# (ecosystem) Skill\n\nPath: `packages/docs/src/routes/(ecosystem)/ecosystem.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/(ecosystem)/ecosystem.json)","tokens":300,"sizeBytes":215},{"name":"generated-pages.json","path":"packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json","title":"Showcase Skill","category":"anthropic-skill","format":"json","content":"# Showcase Skill\n\nPath: `packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json)","tokens":300,"sizeBytes":242},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-insights/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-insights/api.json","title":"Qwik-insights Skill","category":"anthropic-skill","format":"json","content":"# Qwik-insights Skill\n\nPath: `packages/docs/src/routes/api/qwik-insights/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-insights/api.json)","tokens":300,"sizeBytes":217},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-optimizer/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-optimizer/api.json","title":"Qwik-optimizer Skill","category":"anthropic-skill","format":"json","content":"# Qwik-optimizer Skill\n\nPath: `packages/docs/src/routes/api/qwik-optimizer/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-optimizer/api.json)","tokens":300,"sizeBytes":220},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json","title":"Qwik-router-middleware-aws-lambda Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-middleware-aws-lambda Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json)","tokens":300,"sizeBytes":277},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-middleware-azure-swa/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-azure-swa/api.json","title":"Qwik-router-middleware-azure-swa Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-middleware-azure-swa Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-azure-swa/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-azure-swa/api.json)","tokens":300,"sizeBytes":274},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-middleware-cloudflare-pages/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-cloudflare-pages/api.json","title":"Qwik-router-middleware-cloudflare-pages Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-middleware-cloudflare-pages Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-cloudflare-pages/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-cloudflare-pages/api.json)","tokens":300,"sizeBytes":295},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-middleware-firebase/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-firebase/api.json","title":"Qwik-router-middleware-firebase Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-middleware-firebase Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-firebase/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-firebase/api.json)","tokens":300,"sizeBytes":271},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-middleware-netlify-edge/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-netlify-edge/api.json","title":"Qwik-router-middleware-netlify-edge Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-middleware-netlify-edge Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-netlify-edge/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-netlify-edge/api.json)","tokens":300,"sizeBytes":283},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-middleware-node/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-node/api.json","title":"Qwik-router-middleware-node Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-middleware-node Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-node/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-node/api.json)","tokens":300,"sizeBytes":259},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-middleware-request-handler/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-request-handler/api.json","title":"Qwik-router-middleware-request-handler Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-middleware-request-handler Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-request-handler/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-request-handler/api.json)","tokens":300,"sizeBytes":292},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-middleware-vercel-edge/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-vercel-edge/api.json","title":"Qwik-router-middleware-vercel-edge Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-middleware-vercel-edge Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-vercel-edge/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-vercel-edge/api.json)","tokens":300,"sizeBytes":280},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-ssg/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-ssg/api.json","title":"Qwik-router-ssg Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-ssg Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-ssg/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-ssg/api.json)","tokens":300,"sizeBytes":223},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-vite-azure-swa/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-azure-swa/api.json","title":"Qwik-router-vite-azure-swa Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-vite-azure-swa Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-azure-swa/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-azure-swa/api.json)","tokens":300,"sizeBytes":256},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-vite-bun-server/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-bun-server/api.json","title":"Qwik-router-vite-bun-server Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-vite-bun-server Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-bun-server/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-bun-server/api.json)","tokens":300,"sizeBytes":259},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-vite-cloud-run/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-cloud-run/api.json","title":"Qwik-router-vite-cloud-run Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-vite-cloud-run Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-cloud-run/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-cloud-run/api.json)","tokens":300,"sizeBytes":256},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-vite-cloudflare-pages/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-cloudflare-pages/api.json","title":"Qwik-router-vite-cloudflare-pages Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-vite-cloudflare-pages Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-cloudflare-pages/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-cloudflare-pages/api.json)","tokens":300,"sizeBytes":277},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-vite-netlify-edge/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-netlify-edge/api.json","title":"Qwik-router-vite-netlify-edge Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-vite-netlify-edge Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-netlify-edge/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-netlify-edge/api.json)","tokens":300,"sizeBytes":265},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-vite-node-server/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-node-server/api.json","title":"Qwik-router-vite-node-server Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-vite-node-server Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-node-server/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-node-server/api.json)","tokens":300,"sizeBytes":262},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-vite-ssg/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-ssg/api.json","title":"Qwik-router-vite-ssg Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-vite-ssg Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-ssg/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-ssg/api.json)","tokens":300,"sizeBytes":238},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router-vite-vercel/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-vercel/api.json","title":"Qwik-router-vite-vercel Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router-vite-vercel Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-vite-vercel/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-vite-vercel/api.json)","tokens":300,"sizeBytes":247},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-router/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router/api.json","title":"Qwik-router Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router Skill\n\nPath: `packages/docs/src/routes/api/qwik-router/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router/api.json)","tokens":300,"sizeBytes":211},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-server/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-server/api.json","title":"Qwik-server Skill","category":"anthropic-skill","format":"json","content":"# Qwik-server Skill\n\nPath: `packages/docs/src/routes/api/qwik-server/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-server/api.json)","tokens":300,"sizeBytes":211},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-testing/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-testing/api.json","title":"Qwik-testing Skill","category":"anthropic-skill","format":"json","content":"# Qwik-testing Skill\n\nPath: `packages/docs/src/routes/api/qwik-testing/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-testing/api.json)","tokens":300,"sizeBytes":214},{"name":"api.json","path":"packages/docs/src/routes/api/qwik-worker/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-worker/api.json","title":"Qwik-worker Skill","category":"anthropic-skill","format":"json","content":"# Qwik-worker Skill\n\nPath: `packages/docs/src/routes/api/qwik-worker/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-worker/api.json)","tokens":300,"sizeBytes":211},{"name":"api.json","path":"packages/docs/src/routes/api/qwik/api.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik/api.json","title":"Qwik Skill","category":"anthropic-skill","format":"json","content":"# Qwik Skill\n\nPath: `packages/docs/src/routes/api/qwik/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik/api.json)","tokens":300,"sizeBytes":190},{"name":"menu.md","path":"packages/docs/src/routes/community/menu.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/community/menu.md","title":"Community Skill","category":"anthropic-skill","format":"markdown","content":"# Community Skill\n\nPath: `packages/docs/src/routes/community/menu.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/community/menu.md)","tokens":300,"sizeBytes":195},{"name":".prettierrc.json","path":"packages/docs/src/routes/demo/.prettierrc.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/.prettierrc.json","title":"Demo Skill","category":"anthropic-skill","format":"json","content":"# Demo Skill\n\nPath: `packages/docs/src/routes/demo/.prettierrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/.prettierrc.json)","tokens":300,"sizeBytes":198},{"name":".prettierrc.json","path":"packages/docs/src/routes/demo/state/counter-signal/.prettierrc.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/state/counter-signal/.prettierrc.json","title":"Counter-signal Skill","category":"anthropic-skill","format":"json","content":"# Counter-signal Skill\n\nPath: `packages/docs/src/routes/demo/state/counter-signal/.prettierrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/state/counter-signal/.prettierrc.json)","tokens":300,"sizeBytes":250},{"name":"tsconfig.json","path":"packages/docs/src/routes/demo/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/tsconfig.json","title":"Demo Skill","category":"anthropic-skill","format":"json","content":"# Demo Skill\n\nPath: `packages/docs/src/routes/demo/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/demo/tsconfig.json)","tokens":300,"sizeBytes":192},{"name":"menu.md","path":"packages/docs/src/routes/docs/menu.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/docs/menu.md","title":"Docs Skill","category":"anthropic-skill","format":"markdown","content":"# Docs Skill\n\nPath: `packages/docs/src/routes/docs/menu.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/docs/menu.md)","tokens":300,"sizeBytes":180},{"name":"examples-menu.json","path":"packages/docs/src/routes/examples/apps/examples-menu.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/examples/apps/examples-menu.json","title":"Apps Skill","category":"anthropic-skill","format":"json","content":"# Apps Skill\n\nPath: `packages/docs/src/routes/examples/apps/examples-menu.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/examples/apps/examples-menu.json)","tokens":300,"sizeBytes":220},{"name":"tutorial-menu.json","path":"packages/docs/src/routes/tutorial/tutorial-menu.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/tutorial/tutorial-menu.json","title":"Tutorial Skill","category":"anthropic-skill","format":"json","content":"# Tutorial Skill\n\nPath: `packages/docs/src/routes/tutorial/tutorial-menu.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/tutorial/tutorial-menu.json)","tokens":300,"sizeBytes":214},{"name":"index.md","path":"packages/docs/src/routes/tutorial/welcome/overview/index.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/tutorial/welcome/overview/index.md","title":"Overview Skill","category":"anthropic-skill","format":"markdown","content":"# Overview Skill\n\nPath: `packages/docs/src/routes/tutorial/welcome/overview/index.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/tutorial/welcome/overview/index.md)","tokens":300,"sizeBytes":228},{"name":"tsconfig.json","path":"packages/docs/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/tsconfig.json","title":"Docs Skill","category":"anthropic-skill","format":"json","content":"# Docs Skill\n\nPath: `packages/docs/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/tsconfig.json)","tokens":300,"sizeBytes":160},{"name":"CHANGELOG.md","path":"packages/eslint-plugin-qwik/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/CHANGELOG.md","title":"Eslint-plugin-qwik Skill","category":"anthropic-skill","format":"markdown","content":"# Eslint-plugin-qwik Skill\n\nPath: `packages/eslint-plugin-qwik/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/CHANGELOG.md)","tokens":300,"sizeBytes":200},{"name":"package.json","path":"packages/eslint-plugin-qwik/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/package.json","title":"Eslint-plugin-qwik Skill","category":"anthropic-skill","format":"json","content":"# Eslint-plugin-qwik Skill\n\nPath: `packages/eslint-plugin-qwik/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/package.json)","tokens":300,"sizeBytes":200},{"name":"tsconfig.json","path":"packages/eslint-plugin-qwik/tests/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/tests/tsconfig.json","title":"Tests Skill","category":"anthropic-skill","format":"json","content":"# Tests Skill\n\nPath: `packages/eslint-plugin-qwik/tests/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/tests/tsconfig.json)","tokens":300,"sizeBytes":201},{"name":"extensions.json","path":"packages/insights/.vscode/extensions.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/.vscode/extensions.json","title":".vscode Skill","category":"anthropic-skill","format":"json","content":"# .vscode Skill\n\nPath: `packages/insights/.vscode/extensions.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/.vscode/extensions.json)","tokens":300,"sizeBytes":191},{"name":"launch.json","path":"packages/insights/.vscode/launch.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/.vscode/launch.json","title":".vscode Skill","category":"anthropic-skill","format":"json","content":"# .vscode Skill\n\nPath: `packages/insights/.vscode/launch.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/.vscode/launch.json)","tokens":300,"sizeBytes":183},{"name":"_journal.json","path":"packages/insights/drizzle/meta/_journal.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/_journal.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/_journal.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/_journal.json)","tokens":300,"sizeBytes":194},{"name":"0000_snapshot.json","path":"packages/insights/drizzle/meta/0000_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0000_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0000_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0000_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0001_snapshot.json","path":"packages/insights/drizzle/meta/0001_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0001_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0001_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0001_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0002_snapshot.json","path":"packages/insights/drizzle/meta/0002_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0002_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0002_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0002_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0003_snapshot.json","path":"packages/insights/drizzle/meta/0003_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0003_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0003_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0003_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0004_snapshot.json","path":"packages/insights/drizzle/meta/0004_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0004_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0004_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0004_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0005_snapshot.json","path":"packages/insights/drizzle/meta/0005_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0005_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0005_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0005_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0006_snapshot.json","path":"packages/insights/drizzle/meta/0006_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0006_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0006_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0006_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0007_snapshot.json","path":"packages/insights/drizzle/meta/0007_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0007_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0007_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0007_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0008_snapshot.json","path":"packages/insights/drizzle/meta/0008_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0008_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0008_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0008_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0009_snapshot.json","path":"packages/insights/drizzle/meta/0009_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0009_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0009_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0009_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0010_snapshot.json","path":"packages/insights/drizzle/meta/0010_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0010_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0010_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0010_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0011_snapshot.json","path":"packages/insights/drizzle/meta/0011_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0011_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0011_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0011_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0012_snapshot.json","path":"packages/insights/drizzle/meta/0012_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0012_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0012_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0012_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0013_snapshot.json","path":"packages/insights/drizzle/meta/0013_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0013_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0013_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0013_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0014_snapshot.json","path":"packages/insights/drizzle/meta/0014_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0014_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0014_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0014_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0015_snapshot.json","path":"packages/insights/drizzle/meta/0015_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0015_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0015_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0015_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0016_snapshot.json","path":"packages/insights/drizzle/meta/0016_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0016_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0016_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0016_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0017_snapshot.json","path":"packages/insights/drizzle/meta/0017_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0017_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0017_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0017_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0018_snapshot.json","path":"packages/insights/drizzle/meta/0018_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0018_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0018_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0018_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"0019_snapshot.json","path":"packages/insights/drizzle/meta/0019_snapshot.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0019_snapshot.json","title":"Meta Skill","category":"anthropic-skill","format":"json","content":"# Meta Skill\n\nPath: `packages/insights/drizzle/meta/0019_snapshot.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/drizzle/meta/0019_snapshot.json)","tokens":300,"sizeBytes":204},{"name":"package.json","path":"packages/insights/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/package.json","title":"Insights Skill","category":"anthropic-skill","format":"json","content":"# Insights Skill\n\nPath: `packages/insights/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/package.json)","tokens":300,"sizeBytes":170},{"name":"manifest.json","path":"packages/insights/public/manifest.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/public/manifest.json","title":"Public Skill","category":"anthropic-skill","format":"json","content":"# Public Skill\n\nPath: `packages/insights/public/manifest.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/public/manifest.json)","tokens":300,"sizeBytes":184},{"name":"tsconfig.json","path":"packages/insights/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/tsconfig.json","title":"Insights Skill","category":"anthropic-skill","format":"json","content":"# Insights Skill\n\nPath: `packages/insights/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/tsconfig.json)","tokens":300,"sizeBytes":172},{"name":"CHANGELOG.md","path":"packages/optimizer/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/CHANGELOG.md","title":"Optimizer Skill","category":"anthropic-skill","format":"markdown","content":"# Optimizer Skill\n\nPath: `packages/optimizer/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/CHANGELOG.md)","tokens":300,"sizeBytes":173},{"name":"napi.config.json","path":"packages/optimizer/napi/napi.config.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/napi/napi.config.json","title":"Napi Skill","category":"anthropic-skill","format":"json","content":"# Napi Skill\n\nPath: `packages/optimizer/napi/napi.config.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/napi/napi.config.json)","tokens":300,"sizeBytes":186},{"name":"package.json","path":"packages/optimizer/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/package.json","title":"Optimizer Skill","category":"anthropic-skill","format":"json","content":"# Optimizer Skill\n\nPath: `packages/optimizer/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/package.json)","tokens":300,"sizeBytes":173},{"name":"tsconfig.json","path":"packages/optimizer/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/tsconfig.json","title":"Optimizer Skill","category":"anthropic-skill","format":"json","content":"# Optimizer Skill\n\nPath: `packages/optimizer/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/tsconfig.json)","tokens":300,"sizeBytes":175},{"name":"CHANGELOG.md","path":"packages/qwik-auth/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-auth/CHANGELOG.md","title":"Qwik-auth Skill","category":"anthropic-skill","format":"markdown","content":"# Qwik-auth Skill\n\nPath: `packages/qwik-auth/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-auth/CHANGELOG.md)","tokens":300,"sizeBytes":173},{"name":"CHANGELOG.md","path":"packages/qwik-dom/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-dom/CHANGELOG.md","title":"Qwik-dom Skill","category":"anthropic-skill","format":"markdown","content":"# Qwik-dom Skill\n\nPath: `packages/qwik-dom/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-dom/CHANGELOG.md)","tokens":300,"sizeBytes":170},{"name":"package.json","path":"packages/qwik-dom/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-dom/package.json","title":"Qwik-dom Skill","category":"anthropic-skill","format":"json","content":"# Qwik-dom Skill\n\nPath: `packages/qwik-dom/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-dom/package.json)","tokens":300,"sizeBytes":170},{"name":"api-extractor.json","path":"packages/qwik-react/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/api-extractor.json","title":"Qwik-react Skill","category":"anthropic-skill","format":"json","content":"# Qwik-react Skill\n\nPath: `packages/qwik-react/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/api-extractor.json)","tokens":300,"sizeBytes":188},{"name":"CHANGELOG.md","path":"packages/qwik-react/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/CHANGELOG.md","title":"Qwik-react Skill","category":"anthropic-skill","format":"markdown","content":"# Qwik-react Skill\n\nPath: `packages/qwik-react/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/CHANGELOG.md)","tokens":300,"sizeBytes":176},{"name":"package.json","path":"packages/qwik-react/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/package.json","title":"Qwik-react Skill","category":"anthropic-skill","format":"json","content":"# Qwik-react Skill\n\nPath: `packages/qwik-react/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/package.json)","tokens":300,"sizeBytes":176},{"name":"api-extractor.json","path":"packages/qwik-react/src/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/src/api-extractor.json","title":"Src Skill","category":"anthropic-skill","format":"json","content":"# Src Skill\n\nPath: `packages/qwik-react/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/src/api-extractor.json)","tokens":300,"sizeBytes":189},{"name":"tsconfig.json","path":"packages/qwik-react/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/tsconfig.json","title":"Qwik-react Skill","category":"anthropic-skill","format":"json","content":"# Qwik-react Skill\n\nPath: `packages/qwik-react/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/tsconfig.json)","tokens":300,"sizeBytes":178},{"name":"ARCHITECTURE.md","path":"packages/qwik-router/ARCHITECTURE.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/ARCHITECTURE.md","title":"Qwik-router Skill","category":"anthropic-skill","format":"markdown","content":"# Qwik-router Skill\n\nPath: `packages/qwik-router/ARCHITECTURE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/ARCHITECTURE.md)","tokens":300,"sizeBytes":185},{"name":"CHANGELOG.md","path":"packages/qwik-router/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/CHANGELOG.md","title":"Qwik-router Skill","category":"anthropic-skill","format":"markdown","content":"# Qwik-router Skill\n\nPath: `packages/qwik-router/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/CHANGELOG.md)","tokens":300,"sizeBytes":179},{"name":"package.json","path":"packages/qwik-router/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/package.json","title":"Qwik-router Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router Skill\n\nPath: `packages/qwik-router/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/package.json)","tokens":300,"sizeBytes":179},{"name":"adapter.azure-swa.api.md","path":"packages/qwik-router/src/adapters/azure-swa/adapter.azure-swa.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/azure-swa/adapter.azure-swa.api.md","title":"Azure-swa Skill","category":"anthropic-skill","format":"markdown","content":"# Azure-swa Skill\n\nPath: `packages/qwik-router/src/adapters/azure-swa/adapter.azure-swa.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/azure-swa/adapter.azure-swa.api.md)","tokens":300,"sizeBytes":247},{"name":"api-extractor.json","path":"packages/qwik-router/src/adapters/azure-swa/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/azure-swa/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/azure-swa/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/azure-swa/vite/api-extractor.json)","tokens":300,"sizeBytes":240},{"name":"adapter.bun-server.api.md","path":"packages/qwik-router/src/adapters/bun-server/adapter.bun-server.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/bun-server/adapter.bun-server.api.md","title":"Bun-server Skill","category":"anthropic-skill","format":"markdown","content":"# Bun-server Skill\n\nPath: `packages/qwik-router/src/adapters/bun-server/adapter.bun-server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/bun-server/adapter.bun-server.api.md)","tokens":300,"sizeBytes":252},{"name":"api-extractor.json","path":"packages/qwik-router/src/adapters/bun-server/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/bun-server/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/bun-server/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/bun-server/vite/api-extractor.json)","tokens":300,"sizeBytes":242},{"name":"adapter.cloud-run.api.md","path":"packages/qwik-router/src/adapters/cloud-run/adapter.cloud-run.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloud-run/adapter.cloud-run.api.md","title":"Cloud-run Skill","category":"anthropic-skill","format":"markdown","content":"# Cloud-run Skill\n\nPath: `packages/qwik-router/src/adapters/cloud-run/adapter.cloud-run.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloud-run/adapter.cloud-run.api.md)","tokens":300,"sizeBytes":247},{"name":"api-extractor.json","path":"packages/qwik-router/src/adapters/cloud-run/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloud-run/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/cloud-run/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloud-run/vite/api-extractor.json)","tokens":300,"sizeBytes":240},{"name":"adapter.cloudflare-pages.api.md","path":"packages/qwik-router/src/adapters/cloudflare-pages/adapter.cloudflare-pages.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloudflare-pages/adapter.cloudflare-pages.api.md","title":"Cloudflare-pages Skill","category":"anthropic-skill","format":"markdown","content":"# Cloudflare-pages Skill\n\nPath: `packages/qwik-router/src/adapters/cloudflare-pages/adapter.cloudflare-pages.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloudflare-pages/adapter.cloudflare-pages.api.md)","tokens":300,"sizeBytes":282},{"name":"api-extractor.json","path":"packages/qwik-router/src/adapters/cloudflare-pages/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloudflare-pages/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/cloudflare-pages/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/cloudflare-pages/vite/api-extractor.json)","tokens":300,"sizeBytes":254},{"name":"adapter.deno-server.api.md","path":"packages/qwik-router/src/adapters/deno-server/adapter.deno-server.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/deno-server/adapter.deno-server.api.md","title":"Deno-server Skill","category":"anthropic-skill","format":"markdown","content":"# Deno-server Skill\n\nPath: `packages/qwik-router/src/adapters/deno-server/adapter.deno-server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/deno-server/adapter.deno-server.api.md)","tokens":300,"sizeBytes":257},{"name":"api-extractor.json","path":"packages/qwik-router/src/adapters/deno-server/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/deno-server/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/deno-server/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/deno-server/vite/api-extractor.json)","tokens":300,"sizeBytes":244},{"name":"adapter.netlify-edge.api.md","path":"packages/qwik-router/src/adapters/netlify-edge/adapter.netlify-edge.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/netlify-edge/adapter.netlify-edge.api.md","title":"Netlify-edge Skill","category":"anthropic-skill","format":"markdown","content":"# Netlify-edge Skill\n\nPath: `packages/qwik-router/src/adapters/netlify-edge/adapter.netlify-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/netlify-edge/adapter.netlify-edge.api.md)","tokens":300,"sizeBytes":262},{"name":"api-extractor.json","path":"packages/qwik-router/src/adapters/netlify-edge/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/netlify-edge/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/netlify-edge/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/netlify-edge/vite/api-extractor.json)","tokens":300,"sizeBytes":246},{"name":"adapter.node-server.api.md","path":"packages/qwik-router/src/adapters/node-server/adapter.node-server.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/node-server/adapter.node-server.api.md","title":"Node-server Skill","category":"anthropic-skill","format":"markdown","content":"# Node-server Skill\n\nPath: `packages/qwik-router/src/adapters/node-server/adapter.node-server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/node-server/adapter.node-server.api.md)","tokens":300,"sizeBytes":257},{"name":"api-extractor.json","path":"packages/qwik-router/src/adapters/node-server/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/node-server/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/node-server/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/node-server/vite/api-extractor.json)","tokens":300,"sizeBytes":244},{"name":"adapter.shared.api.md","path":"packages/qwik-router/src/adapters/shared/adapter.shared.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/shared/adapter.shared.api.md","title":"Shared Skill","category":"anthropic-skill","format":"markdown","content":"# Shared Skill\n\nPath: `packages/qwik-router/src/adapters/shared/adapter.shared.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/shared/adapter.shared.api.md)","tokens":300,"sizeBytes":232},{"name":"api-extractor.json","path":"packages/qwik-router/src/adapters/shared/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/shared/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/shared/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/shared/vite/api-extractor.json)","tokens":300,"sizeBytes":234},{"name":"adapter.ssg.api.md","path":"packages/qwik-router/src/adapters/ssg/adapter.ssg.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/ssg/adapter.ssg.api.md","title":"Ssg Skill","category":"anthropic-skill","format":"markdown","content":"# Ssg Skill\n\nPath: `packages/qwik-router/src/adapters/ssg/adapter.ssg.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/ssg/adapter.ssg.api.md)","tokens":300,"sizeBytes":217},{"name":"api-extractor.json","path":"packages/qwik-router/src/adapters/ssg/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/ssg/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/ssg/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/ssg/vite/api-extractor.json)","tokens":300,"sizeBytes":228},{"name":"adapter.vercel-edge.api.md","path":"packages/qwik-router/src/adapters/vercel-edge/adapter.vercel-edge.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/vercel-edge/adapter.vercel-edge.api.md","title":"Vercel-edge Skill","category":"anthropic-skill","format":"markdown","content":"# Vercel-edge Skill\n\nPath: `packages/qwik-router/src/adapters/vercel-edge/adapter.vercel-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/vercel-edge/adapter.vercel-edge.api.md)","tokens":300,"sizeBytes":257},{"name":"api-extractor.json","path":"packages/qwik-router/src/adapters/vercel-edge/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/vercel-edge/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/adapters/vercel-edge/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/adapters/vercel-edge/vite/api-extractor.json)","tokens":300,"sizeBytes":244},{"name":"api-extractor.json","path":"packages/qwik-router/src/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/api-extractor.json","title":"Src Skill","category":"anthropic-skill","format":"json","content":"# Src Skill\n\nPath: `packages/qwik-router/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/api-extractor.json)","tokens":300,"sizeBytes":191},{"name":"api-extractor.json","path":"packages/qwik-router/src/buildtime/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/buildtime/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/buildtime/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/buildtime/vite/api-extractor.json)","tokens":300,"sizeBytes":222},{"name":"qwik-router.buildtime.api.md","path":"packages/qwik-router/src/buildtime/vite/qwik-router.buildtime.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/buildtime/vite/qwik-router.buildtime.api.md","title":"Vite Skill","category":"anthropic-skill","format":"markdown","content":"# Vite Skill\n\nPath: `packages/qwik-router/src/buildtime/vite/qwik-router.buildtime.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/buildtime/vite/qwik-router.buildtime.api.md)","tokens":300,"sizeBytes":242},{"name":"api-extractor.json","path":"packages/qwik-router/src/middleware/aws-lambda/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/aws-lambda/api-extractor.json","title":"Aws-lambda Skill","category":"anthropic-skill","format":"json","content":"# Aws-lambda Skill\n\nPath: `packages/qwik-router/src/middleware/aws-lambda/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/aws-lambda/api-extractor.json)","tokens":300,"sizeBytes":242},{"name":"middleware.aws-lambda.api.md","path":"packages/qwik-router/src/middleware/aws-lambda/middleware.aws-lambda.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/aws-lambda/middleware.aws-lambda.api.md","title":"Aws-lambda Skill","category":"anthropic-skill","format":"markdown","content":"# Aws-lambda Skill\n\nPath: `packages/qwik-router/src/middleware/aws-lambda/middleware.aws-lambda.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/aws-lambda/middleware.aws-lambda.api.md)","tokens":300,"sizeBytes":262},{"name":"api-extractor.json","path":"packages/qwik-router/src/middleware/azure-swa/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/azure-swa/api-extractor.json","title":"Azure-swa Skill","category":"anthropic-skill","format":"json","content":"# Azure-swa Skill\n\nPath: `packages/qwik-router/src/middleware/azure-swa/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/azure-swa/api-extractor.json)","tokens":300,"sizeBytes":239},{"name":"middleware.azure-swa.api.md","path":"packages/qwik-router/src/middleware/azure-swa/middleware.azure-swa.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/azure-swa/middleware.azure-swa.api.md","title":"Azure-swa Skill","category":"anthropic-skill","format":"markdown","content":"# Azure-swa Skill\n\nPath: `packages/qwik-router/src/middleware/azure-swa/middleware.azure-swa.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/azure-swa/middleware.azure-swa.api.md)","tokens":300,"sizeBytes":257},{"name":"api-extractor.json","path":"packages/qwik-router/src/middleware/bun/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/bun/api-extractor.json","title":"Bun Skill","category":"anthropic-skill","format":"json","content":"# Bun Skill\n\nPath: `packages/qwik-router/src/middleware/bun/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/bun/api-extractor.json)","tokens":300,"sizeBytes":221},{"name":"middleware.bun.api.md","path":"packages/qwik-router/src/middleware/bun/middleware.bun.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/bun/middleware.bun.api.md","title":"Bun Skill","category":"anthropic-skill","format":"markdown","content":"# Bun Skill\n\nPath: `packages/qwik-router/src/middleware/bun/middleware.bun.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/bun/middleware.bun.api.md)","tokens":300,"sizeBytes":227},{"name":"api-extractor.json","path":"packages/qwik-router/src/middleware/cloudflare-pages/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/cloudflare-pages/api-extractor.json","title":"Cloudflare-pages Skill","category":"anthropic-skill","format":"json","content":"# Cloudflare-pages Skill\n\nPath: `packages/qwik-router/src/middleware/cloudflare-pages/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/cloudflare-pages/api-extractor.json)","tokens":300,"sizeBytes":260},{"name":"middleware.cloudflare-pages.api.md","path":"packages/qwik-router/src/middleware/cloudflare-pages/middleware.cloudflare-pages.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/cloudflare-pages/middleware.cloudflare-pages.api.md","title":"Cloudflare-pages Skill","category":"anthropic-skill","format":"markdown","content":"# Cloudflare-pages Skill\n\nPath: `packages/qwik-router/src/middleware/cloudflare-pages/middleware.cloudflare-pages.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/cloudflare-pages/middleware.cloudflare-pages.api.md)","tokens":300,"sizeBytes":292},{"name":"api-extractor.json","path":"packages/qwik-router/src/middleware/deno/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/deno/api-extractor.json","title":"Deno Skill","category":"anthropic-skill","format":"json","content":"# Deno Skill\n\nPath: `packages/qwik-router/src/middleware/deno/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/deno/api-extractor.json)","tokens":300,"sizeBytes":224},{"name":"middleware.deno.api.md","path":"packages/qwik-router/src/middleware/deno/middleware.deno.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/deno/middleware.deno.api.md","title":"Deno Skill","category":"anthropic-skill","format":"markdown","content":"# Deno Skill\n\nPath: `packages/qwik-router/src/middleware/deno/middleware.deno.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/deno/middleware.deno.api.md)","tokens":300,"sizeBytes":232},{"name":"api-extractor.json","path":"packages/qwik-router/src/middleware/firebase/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/firebase/api-extractor.json","title":"Firebase Skill","category":"anthropic-skill","format":"json","content":"# Firebase Skill\n\nPath: `packages/qwik-router/src/middleware/firebase/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/firebase/api-extractor.json)","tokens":300,"sizeBytes":236},{"name":"middleware.firebase.api.md","path":"packages/qwik-router/src/middleware/firebase/middleware.firebase.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/firebase/middleware.firebase.api.md","title":"Firebase Skill","category":"anthropic-skill","format":"markdown","content":"# Firebase Skill\n\nPath: `packages/qwik-router/src/middleware/firebase/middleware.firebase.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/firebase/middleware.firebase.api.md)","tokens":300,"sizeBytes":252},{"name":"api-extractor.json","path":"packages/qwik-router/src/middleware/netlify-edge/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/netlify-edge/api-extractor.json","title":"Netlify-edge Skill","category":"anthropic-skill","format":"json","content":"# Netlify-edge Skill\n\nPath: `packages/qwik-router/src/middleware/netlify-edge/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/netlify-edge/api-extractor.json)","tokens":300,"sizeBytes":248},{"name":"middleware.netlify-edge.api.md","path":"packages/qwik-router/src/middleware/netlify-edge/middleware.netlify-edge.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/netlify-edge/middleware.netlify-edge.api.md","title":"Netlify-edge Skill","category":"anthropic-skill","format":"markdown","content":"# Netlify-edge Skill\n\nPath: `packages/qwik-router/src/middleware/netlify-edge/middleware.netlify-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/netlify-edge/middleware.netlify-edge.api.md)","tokens":300,"sizeBytes":272},{"name":"api-extractor.json","path":"packages/qwik-router/src/middleware/node/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/node/api-extractor.json","title":"Node Skill","category":"anthropic-skill","format":"json","content":"# Node Skill\n\nPath: `packages/qwik-router/src/middleware/node/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/node/api-extractor.json)","tokens":300,"sizeBytes":224},{"name":"middleware.node.api.md","path":"packages/qwik-router/src/middleware/node/middleware.node.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/node/middleware.node.api.md","title":"Node Skill","category":"anthropic-skill","format":"markdown","content":"# Node Skill\n\nPath: `packages/qwik-router/src/middleware/node/middleware.node.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/node/middleware.node.api.md)","tokens":300,"sizeBytes":232},{"name":"api-extractor.json","path":"packages/qwik-router/src/middleware/request-handler/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/request-handler/api-extractor.json","title":"Request-handler Skill","category":"anthropic-skill","format":"json","content":"# Request-handler Skill\n\nPath: `packages/qwik-router/src/middleware/request-handler/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/request-handler/api-extractor.json)","tokens":300,"sizeBytes":257},{"name":"middleware.request-handler.api.md","path":"packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md","title":"Request-handler Skill","category":"anthropic-skill","format":"markdown","content":"# Request-handler Skill\n\nPath: `packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/request-handler/middleware.request-handler.api.md)","tokens":300,"sizeBytes":287},{"name":"api-extractor.json","path":"packages/qwik-router/src/middleware/vercel-edge/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/vercel-edge/api-extractor.json","title":"Vercel-edge Skill","category":"anthropic-skill","format":"json","content":"# Vercel-edge Skill\n\nPath: `packages/qwik-router/src/middleware/vercel-edge/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/vercel-edge/api-extractor.json)","tokens":300,"sizeBytes":245},{"name":"middleware.vercel-edge.api.md","path":"packages/qwik-router/src/middleware/vercel-edge/middleware.vercel-edge.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/vercel-edge/middleware.vercel-edge.api.md","title":"Vercel-edge Skill","category":"anthropic-skill","format":"markdown","content":"# Vercel-edge Skill\n\nPath: `packages/qwik-router/src/middleware/vercel-edge/middleware.vercel-edge.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/middleware/vercel-edge/middleware.vercel-edge.api.md)","tokens":300,"sizeBytes":267},{"name":"api-extractor.json","path":"packages/qwik-router/src/runtime/src/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/api-extractor.json","title":"Src Skill","category":"anthropic-skill","format":"json","content":"# Src Skill\n\nPath: `packages/qwik-router/src/runtime/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/api-extractor.json)","tokens":300,"sizeBytes":215},{"name":"qwik-router.runtime.api.md","path":"packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md","title":"Src Skill","category":"anthropic-skill","format":"markdown","content":"# Src Skill\n\nPath: `packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/qwik-router.runtime.api.md)","tokens":300,"sizeBytes":231},{"name":"api-extractor.json","path":"packages/qwik-router/src/runtime/src/service-worker/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/service-worker/api-extractor.json","title":"Service-worker Skill","category":"anthropic-skill","format":"json","content":"# Service-worker Skill\n\nPath: `packages/qwik-router/src/runtime/src/service-worker/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/service-worker/api-extractor.json)","tokens":300,"sizeBytes":256},{"name":"qwik-router.service-worker.api.md","path":"packages/qwik-router/src/runtime/src/service-worker/qwik-router.service-worker.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/service-worker/qwik-router.service-worker.api.md","title":"Service-worker Skill","category":"anthropic-skill","format":"markdown","content":"# Service-worker Skill\n\nPath: `packages/qwik-router/src/runtime/src/service-worker/qwik-router.service-worker.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/runtime/src/service-worker/qwik-router.service-worker.api.md)","tokens":300,"sizeBytes":286},{"name":"api-extractor.json","path":"packages/qwik-router/src/ssg/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/ssg/api-extractor.json","title":"Ssg Skill","category":"anthropic-skill","format":"json","content":"# Ssg Skill\n\nPath: `packages/qwik-router/src/ssg/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/ssg/api-extractor.json)","tokens":300,"sizeBytes":199},{"name":"qwik-router.ssg.api.md","path":"packages/qwik-router/src/ssg/qwik-router.ssg.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/ssg/qwik-router.ssg.api.md","title":"Ssg Skill","category":"anthropic-skill","format":"markdown","content":"# Ssg Skill\n\nPath: `packages/qwik-router/src/ssg/qwik-router.ssg.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/src/ssg/qwik-router.ssg.api.md)","tokens":300,"sizeBytes":207},{"name":"tsconfig.json","path":"packages/qwik-router/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/tsconfig.json","title":"Qwik-router Skill","category":"anthropic-skill","format":"json","content":"# Qwik-router Skill\n\nPath: `packages/qwik-router/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/tsconfig.json)","tokens":300,"sizeBytes":181},{"name":"api-extractor.json","path":"packages/qwik-vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/api-extractor.json","title":"Qwik-vite Skill","category":"anthropic-skill","format":"json","content":"# Qwik-vite Skill\n\nPath: `packages/qwik-vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/api-extractor.json)","tokens":300,"sizeBytes":185},{"name":"package.json","path":"packages/qwik-vite/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/package.json","title":"Qwik-vite Skill","category":"anthropic-skill","format":"json","content":"# Qwik-vite Skill\n\nPath: `packages/qwik-vite/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/package.json)","tokens":300,"sizeBytes":173},{"name":"fixture-output-bundles.json","path":"packages/qwik-vite/src/plugins/fixture-output-bundles.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/src/plugins/fixture-output-bundles.json","title":"Plugins Skill","category":"anthropic-skill","format":"json","content":"# Plugins Skill\n\nPath: `packages/qwik-vite/src/plugins/fixture-output-bundles.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/src/plugins/fixture-output-bundles.json)","tokens":300,"sizeBytes":225},{"name":"qwik.optimizer.api.md","path":"packages/qwik-vite/src/qwik.optimizer.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/src/qwik.optimizer.api.md","title":"Src Skill","category":"anthropic-skill","format":"markdown","content":"# Src Skill\n\nPath: `packages/qwik-vite/src/qwik.optimizer.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/src/qwik.optimizer.api.md)","tokens":300,"sizeBytes":193},{"name":"tsconfig.json","path":"packages/qwik-vite/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/tsconfig.json","title":"Qwik-vite Skill","category":"anthropic-skill","format":"json","content":"# Qwik-vite Skill\n\nPath: `packages/qwik-vite/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-vite/tsconfig.json)","tokens":300,"sizeBytes":175},{"name":"CHANGELOG.md","path":"packages/qwik/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/CHANGELOG.md","title":"Qwik Skill","category":"anthropic-skill","format":"markdown","content":"# Qwik Skill\n\nPath: `packages/qwik/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/CHANGELOG.md)","tokens":300,"sizeBytes":158},{"name":"package.json","path":"packages/qwik/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/package.json","title":"Qwik Skill","category":"anthropic-skill","format":"json","content":"# Qwik Skill\n\nPath: `packages/qwik/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/package.json)","tokens":300,"sizeBytes":158},{"name":"api-extractor.json","path":"packages/qwik/src/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/api-extractor.json","title":"Src Skill","category":"anthropic-skill","format":"json","content":"# Src Skill\n\nPath: `packages/qwik/src/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/api-extractor.json)","tokens":300,"sizeBytes":177},{"name":"api-extractor.json","path":"packages/qwik/src/build/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/build/api-extractor.json","title":"Build Skill","category":"anthropic-skill","format":"json","content":"# Build Skill\n\nPath: `packages/qwik/src/build/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/build/api-extractor.json)","tokens":300,"sizeBytes":191},{"name":"qwik.build.api.md","path":"packages/qwik/src/build/qwik.build.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/build/qwik.build.api.md","title":"Build Skill","category":"anthropic-skill","format":"markdown","content":"# Build Skill\n\nPath: `packages/qwik/src/build/qwik.build.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/build/qwik.build.api.md)","tokens":300,"sizeBytes":189},{"name":"api-extractor.json","path":"packages/qwik/src/core/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/api-extractor.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `packages/qwik/src/core/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/api-extractor.json)","tokens":300,"sizeBytes":188},{"name":"bench-memory-results.json","path":"packages/qwik/src/core/bench/bench-memory-results.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/bench/bench-memory-results.json","title":"Bench Skill","category":"anthropic-skill","format":"json","content":"# Bench Skill\n\nPath: `packages/qwik/src/core/bench/bench-memory-results.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/bench/bench-memory-results.json)","tokens":300,"sizeBytes":215},{"name":"bench-results.json","path":"packages/qwik/src/core/bench/bench-results.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/bench/bench-results.json","title":"Bench Skill","category":"anthropic-skill","format":"json","content":"# Bench Skill\n\nPath: `packages/qwik/src/core/bench/bench-results.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/bench/bench-results.json)","tokens":300,"sizeBytes":201},{"name":"GLOSSARY.md","path":"packages/qwik/src/core/GLOSSARY.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/GLOSSARY.md","title":"Core Skill","category":"anthropic-skill","format":"markdown","content":"# Core Skill\n\nPath: `packages/qwik/src/core/GLOSSARY.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/GLOSSARY.md)","tokens":300,"sizeBytes":174},{"name":"qwik.core.api.md","path":"packages/qwik/src/core/qwik.core.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/qwik.core.api.md","title":"Core Skill","category":"anthropic-skill","format":"markdown","content":"# Core Skill\n\nPath: `packages/qwik/src/core/qwik.core.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/qwik.core.api.md)","tokens":300,"sizeBytes":184},{"name":"serialization.md","path":"packages/qwik/src/core/shared/serdes/serialization.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/serdes/serialization.md","title":"Serdes Skill","category":"anthropic-skill","format":"markdown","content":"# Serdes Skill\n\nPath: `packages/qwik/src/core/shared/serdes/serialization.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/serdes/serialization.md)","tokens":300,"sizeBytes":214},{"name":"api-extractor.json","path":"packages/qwik/src/insights/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/api-extractor.json","title":"Insights Skill","category":"anthropic-skill","format":"json","content":"# Insights Skill\n\nPath: `packages/qwik/src/insights/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/api-extractor.json)","tokens":300,"sizeBytes":200},{"name":"qwik.insights.api.md","path":"packages/qwik/src/insights/qwik.insights.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/qwik.insights.api.md","title":"Insights Skill","category":"anthropic-skill","format":"markdown","content":"# Insights Skill\n\nPath: `packages/qwik/src/insights/qwik.insights.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/qwik.insights.api.md)","tokens":300,"sizeBytes":204},{"name":"api-extractor.json","path":"packages/qwik/src/insights/vite/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/vite/api-extractor.json","title":"Vite Skill","category":"anthropic-skill","format":"json","content":"# Vite Skill\n\nPath: `packages/qwik/src/insights/vite/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/vite/api-extractor.json)","tokens":300,"sizeBytes":206},{"name":"qwik.insights.vite.api.md","path":"packages/qwik/src/insights/vite/qwik.insights.vite.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/vite/qwik.insights.vite.api.md","title":"Vite Skill","category":"anthropic-skill","format":"markdown","content":"# Vite Skill\n\nPath: `packages/qwik/src/insights/vite/qwik.insights.vite.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/insights/vite/qwik.insights.vite.api.md)","tokens":300,"sizeBytes":220},{"name":"api-extractor.json","path":"packages/qwik/src/server/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/api-extractor.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `packages/qwik/src/server/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/api-extractor.json)","tokens":300,"sizeBytes":194},{"name":"preloading.md","path":"packages/qwik/src/server/preloading.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/preloading.md","title":"Server Skill","category":"anthropic-skill","format":"markdown","content":"# Server Skill\n\nPath: `packages/qwik/src/server/preloading.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/preloading.md)","tokens":300,"sizeBytes":184},{"name":"qwik.server.api.md","path":"packages/qwik/src/server/qwik.server.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/qwik.server.api.md","title":"Server Skill","category":"anthropic-skill","format":"markdown","content":"# Server Skill\n\nPath: `packages/qwik/src/server/qwik.server.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/qwik.server.api.md)","tokens":300,"sizeBytes":194},{"name":"api-extractor.json","path":"packages/qwik/src/testing/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/api-extractor.json","title":"Testing Skill","category":"anthropic-skill","format":"json","content":"# Testing Skill\n\nPath: `packages/qwik/src/testing/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/api-extractor.json)","tokens":300,"sizeBytes":197},{"name":"qwik.testing.api.md","path":"packages/qwik/src/testing/qwik.testing.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/qwik.testing.api.md","title":"Testing Skill","category":"anthropic-skill","format":"markdown","content":"# Testing Skill\n\nPath: `packages/qwik/src/testing/qwik.testing.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/qwik.testing.api.md)","tokens":300,"sizeBytes":199},{"name":"api-extractor.json","path":"packages/qwik/src/web-worker/api-extractor.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/web-worker/api-extractor.json","title":"Web-worker Skill","category":"anthropic-skill","format":"json","content":"# Web-worker Skill\n\nPath: `packages/qwik/src/web-worker/api-extractor.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/web-worker/api-extractor.json)","tokens":300,"sizeBytes":206},{"name":"qwik.worker.api.md","path":"packages/qwik/src/web-worker/qwik.worker.api.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/web-worker/qwik.worker.api.md","title":"Web-worker Skill","category":"anthropic-skill","format":"markdown","content":"# Web-worker Skill\n\nPath: `packages/qwik/src/web-worker/qwik.worker.api.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/web-worker/qwik.worker.api.md)","tokens":300,"sizeBytes":206},{"name":"tsconfig.json","path":"packages/qwik/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/tsconfig.json","title":"Qwik Skill","category":"anthropic-skill","format":"json","content":"# Qwik Skill\n\nPath: `packages/qwik/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/tsconfig.json)","tokens":300,"sizeBytes":160},{"name":"tsdoc.json","path":"packages/qwik/tsdoc.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/tsdoc.json","title":"Qwik Skill","category":"anthropic-skill","format":"json","content":"# Qwik Skill\n\nPath: `packages/qwik/tsdoc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/tsdoc.json)","tokens":300,"sizeBytes":154},{"name":"CHANGELOG.md","path":"packages/supabase-auth-helpers-qwik/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/supabase-auth-helpers-qwik/CHANGELOG.md","title":"Supabase-auth-helpers-qwik Skill","category":"anthropic-skill","format":"markdown","content":"# supabase-auth-helpers-qwik\n\n## 0.0.4-beta.0\n\n### Patch Changes\n\n- 🛠 build the library packages with the TypeScript optimizer (by [@wmertens](https://github.com/wmertens) in [#9017](https://github.com/QwikDev/qwik/pull/9017))\n\n## 1.0.0-beta.0\n\n### Major Changes\n\n- BREAKING: the CJS/UMD builds have been removed; ESM is well-supported everywhere and allows better optimizations. (by [@JerryWu1234](https://github.com/JerryWu1234) in [#8103](https://github.com/QwikDev/qwik/pull/8103))\n","isInternal":false,"tokens":154,"sizeBytes":489},{"name":"package.json","path":"packages/supabase-auth-helpers-qwik/package.json","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/supabase-auth-helpers-qwik/package.json","title":"supabase-auth-helpers-qwik","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"supabase-auth-helpers-qwik\",\n  \"description\": \"A collection of Qwik framework specific Auth utilities for working with Supabase.\",\n  \"version\": \"0.0.4-beta.0\",\n  \"author\": \"Qwik Team\",\n  \"bugs\": \"https://github.com/QwikDev/qwik/issues\",\n  \"devDependencies\": {\n    \"@qwik.dev/core\": \"workspace:*\",\n    \"@qwik.dev/router\": \"workspace:*\",\n    \"@supabase/ssr\": \"0.6.1\",\n    \"@supabase/supabase-js\": \"2.53.0\"\n  },\n  \"exports\": {\n    \".\": {\n      \"types\": \"./lib/types/index.d.ts\",\n      \"import\": \"./lib/index.qwik.mjs\"\n    }\n  },\n  \"files\": [\n    \"lib\"\n  ],\n  \"homepage\": \"https://qwik.dev/\",\n  \"keywords\": [\n    \"Auth\",\n    \"Qwik\",\n    \"Supabase\"\n  ],\n  \"license\": \"MIT\",\n  \"main\": \"./lib/index.qwik.mjs\",\n  \"peerDependencies\": {\n    \"@supabase/supabase-js\": \"^2.49.4\"\n  },\n  \"private\": true,\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"qwik\": \"./lib/index.qwik.mjs\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/QwikDev/qwik.git\",\n    \"directory\": \"packages/supabase-auth-helpers-qwik\"\n  },\n  \"scripts\": {\n    \"build\": \"vite build --mode lib\"\n  },\n  \"type\": \"module\",\n  \"types\": \"./lib/types/index.d.ts\"\n}\n","frontmatter":{"name":"supabase-auth-helpers-qwik","description":"A collection of Qwik framework specific Auth utilities for working with Supabase.","version":"0.0.4-beta.0","author":"Qwik Team","bugs":"https://github.com/QwikDev/qwik/issues","devDependencies":{"@qwik.dev/core":"workspace:*","@qwik.dev/router":"workspace:*","@supabase/ssr":"0.6.1","@supabase/supabase-js":"2.53.0"},"exports":{".":{"types":"./lib/types/index.d.ts","import":"./lib/index.qwik.mjs"}},"files":["lib"],"homepage":"https://qwik.dev/","keywords":["Auth","Qwik","Supabase"],"license":"MIT","main":"./lib/index.qwik.mjs","peerDependencies":{"@supabase/supabase-js":"^2.49.4"},"private":true,"publishConfig":{"access":"public"},"qwik":"./lib/index.qwik.mjs","repository":{"type":"git","url":"https://github.com/QwikDev/qwik.git","directory":"packages/supabase-auth-helpers-qwik"},"scripts":{"build":"vite build --mode lib"},"type":"module","types":"./lib/types/index.d.ts"},"isInternal":false,"tokens":381,"sizeBytes":1148},{"name":"CLAUDE.md","path":"CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/CLAUDE.md","title":"Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"\n\n<!-- Source: .ruler/AGENTS.md -->\n\n# Qwik v2 agents reference, instructions and rules\n\n> [!IMPORTANT]\n> **ALWAYS RUN `ruler apply` AT THE START OF A SESSION.** The agent skills are gitignored, not\n> committed, so a fresh clone/worktree has none until you generate them (once per worktree):\n>\n> ```bash\n> pnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n> ```\n\n> Canonical source for repo-wide AI coding agent rules. For contributor setup, see\n> [CONTRIBUTING.md](./CONTRIBUTING.md). For package-specific workflows, load the relevant\n> `.ruler/skills/*/SKILL.md` file.\n\n## Source Of Truth\n\n- Shared AI guidance lives in `.ruler/`.\n- Only the root `AGENTS.md` and `CLAUDE.md` are committed generated outputs; the `.claude/`/`.codex/`\n  skill copies are gitignored and regenerated locally with `ruler apply` (see Setup below).\n- Never hand-edit a generated output — edit `.ruler/` and regenerate with `ruler apply`. A CI check\n  re-runs it and fails if the committed root files drift.\n- To change assistant behavior, edit `.ruler/AGENTS.md`, `.ruler/README.md`, or `.ruler/skills/**`,\n  then regenerate with Ruler when needed.\n\n## Project Snapshot\n\nQwik is a resumable web framework. SSR serializes application and framework state into HTML, and\nthe client resumes without re-running component code. Qwik v2 is a rewrite with VNode-based\nruntime work, rewritten reactive primitives, a new serialization mechanism, and package names under\n`@qwik.dev/*`.\n\nKey concepts: resumability, QRLs, `$`-suffixed optimizer boundaries, fine-grained signals, VNodes,\nthe cursor system, and the Rust optimizer.\n\n## Monorepo Map\n\n- Base branch and release branch for v2 PRs: `main`. V1 lives on the `v1` branch.\n\n| Package | Path | Notes |\n| --- | --- | --- |\n| `@qwik.dev/core` | `packages/qwik` | Core runtime, SSR, optimizer-facing code |\n| `@qwik.dev/router` | `packages/qwik-router` | Routing, middleware, adapters, SSG |\n| `@qwik.dev/react` | `packages/qwik-react` | React integration |\n| `@qwik.dev/utils` | `packages/qwik-utils` | Less-common helpers (`usePoll`, `zod$`), may use qwik internals |\n| `@qwik.dev/dom` | `packages/qwik-dom` | Server-side DOM implementation |\n| `@qwik.dev/qwik-vite` | `packages/qwik-vite` | `vite-plugin-qwik`, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/ts-optimizer` | `packages/ts-optimizer` | TypeScript optimizer, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/optimizer` | `packages/optimizer` | Rust optimizer, WASM, NAPI bindings; kept for parity comparison |\n| `eslint-plugin-qwik` | `packages/eslint-plugin-qwik` | ESLint rules |\n| `create-qwik` | `packages/create-qwik` | Project scaffolding CLI |\n| `qwik-docs` | `packages/docs` | Docs site, private package |\n| `insights` | `packages/insights` | Analytics dashboard, private package |\n\nUse v2 package names (`@qwik.dev/core`, `@qwik.dev/router`, etc.). Do not introduce v1\n`@builder.io/qwik` or `@builder.io/qwik-city` imports except when working on explicit\ncompatibility override code.\n\n## Setup And Iteration Loop\n\nThis is the canonical loop for nearly all framework work. Default to it; do not substitute broader\ncommands:\n\n### getting started\n\n```bash\npnpm i\n```\n\n```bash\n# Materialize the agent skills into .claude/.codex (gitignored) — run once per fresh clone/worktree.\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\n```bash\npnpm build.core # for a fresh start\npnpm build.full # for a fresh start and you are working on the docs or the other packages\npnpm build.rust # only when working on the Rust optimizer; the only step that needs the Rust toolchain\n```\n\nThe local scripts and tests use the TypeScript optimizer (`tsOptimizer: true` in the repo's own\nvite configs and test harnesses), so no Rust toolchain or prebuilt bindings are needed for them.\nKeep that flag on any new repo-owned `qwikVite()` call site; the plugin still defaults to the Rust\noptimizer for published apps. `QWIK_OPTIMIZER=rust` (or `ts`) overrides the flag for a whole run, which\nis how CI runs the e2e suites on both optimizers; it needs `pnpm build.rust` or\n`pnpm build.platform.copy` first.\n### Iterating\n\nPrefer focused commands and builds over repo-wide commands and builds.\n\n```bash\n# Fast dev build — required once before any tests can run, and again after framework\n# source changes when the verification consumes build output (all e2e suites do)\npnpm build.core.dev\n\n# Closest focused unit/spec test\npnpm vitest run packages/qwik/src/core/tests/use-task.spec.tsx\n\n# Focused e2e test\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\n`build.core.dev` also re-emits fresh Qwik and Router `.d.ts` incrementally (via `tscDevDts` + re-export shims), so editing a public signature no longer leaves stale types — `build.watch` skips the type pass to stay instant.\n\nFor Qwik e2e tests, use `--browser=chromium` with `e2e/qwik-e2e/playwright.config.ts`.\n\nRe-run `pnpm build.rust` (or `pnpm build.rust.dev`) when you are touching the optimizer rust code.\n\n### When making a PR\n\n```bash\n# for type-level verification when no focused test covers the change\npnpm tsc.check\n\n# update the API\npnpm api.update\n\n# Verify the build passes\npnpm build.core\n\n# Verify unit tests pass\npnpm test.unit\n\n# Verify the E2Es pass\npnpm test.e2e.chromium\n\n# In case of html output change, update the ssg snapshot\npnpm test.e2e.router.ssg.update\n\n# In case of a new feature, run the test.bench\npnpm test.bench\n\n# In case of qwikloader changes\npnpm vitest packages/qwik/src/qwikloader.unit.ts -u\n```\n\nIf any of those fail, fix and push your changes.\n\n## Rules\n\nRecent Qwik v2 work by core maintainers favors small, behavior-shaped changes with regression proof.\nFollow that bias:\n\n### Guidance Freshness\n\n- If a skill or reference you used is stale, incomplete, or contradicted by current source, update\n  the `.ruler` source guidance before finishing the task unless the user explicitly restricted the\n  scope.\n- Keep new durable lessons in the most specific skill or reference that future agents are likely to\n  load. Do not add package-specific details to these always-on rules unless they affect most tasks.\n- Only add a lesson to a skill when it generalizes to future tasks. Keep single-PR specifics (one\n  module's protocol, one fix's mechanics) in the code and its tests, not in a skill.\n- Write those notes **prescriptively** — the invariants to keep, the traps that cause false passes,\n  where things live, and how to verify — rather than describing how the code currently works. Omit \"don't do X\" prohibitions for anything a test already enforces; the\n  suite is the guardrail, so reserve notes for what it can't self-enforce.\n- When updating guidance, load the `qwik-guidance-maintenance` skill.\n\n### Skill Selection\n\nLoad the relevant skill before non-trivial work in that area:\n\n| Skill | Use when |\n| --- | --- |\n| `qwik-core-development` | Editing/reviewing `packages/qwik/**` core runtime code |\n| `qwik-router-development` | Editing/reviewing router runtime, buildtime, middleware, adapters, or SSG |\n| `qwik-optimizer-development` | Editing/reviewing Rust optimizer, WASM, NAPI, or optimizer-facing behavior |\n| `qwik-e2e-verification` | Creating, debugging, or running Playwright e2e suites |\n| `qwik-docs-development` | Writing/editing docs content, docs site routes, or docs LLM outputs |\n| `qwik-guidance-maintenance` | Editing `.ruler/**`, generated-output guidance, or stale skill/reference content |\n\nIf no skill fits, stay with these repo-wide rules and inspect local source before changing code.\n\nIf a skill above is not loadable, its copy has not been generated in this worktree yet — run the\n`ruler apply` step from Setup, or read the source directly at `.ruler/skills/<name>/SKILL.md`.\n\nKeep the `qwik-` prefix on committed source skill names. Ruler copies these skills into\nagent-native skill directories where they may coexist with user or plugin skills, so the prefix keeps\nthe skill list unambiguous outside the repo-local `.ruler` tree.\n\n### Changesets\n\nWhen a change affects published packages, add a changeset under `.changeset/`.\n\n- Use `patch` for bug fixes: focus on the issue rather than the solution.\n- `minor` for new features: explain the new feature.\n- `major` for API removal: may also include a new feature, but it must remove or break a public API.\n- Enforce 1 changeset per change.\n- Write the changeset summary in lowercase (e.g. `fix:`)\n- 1 short sentence (10-ish words) focused on the bug fix or feature. Don't include implementation details.\n\n### Commits\n\n- One coherent set of changes per commit. Do not fold an unrelated fix into a commit for another\n  change.\n- Fixes that are independent of the branch's main change get their own commits, placed before it,\n  so they can be reviewed and cherry-picked on their own.\n- Write the subject as a short imperative summary. The body explains the \"why\" tersely when it is\n  not obvious from the subject. The \"what\" and \"how\" live in the code; summarize them only when the\n  commit is large.\n- When a branch has grown out of that shape, rewrite it into that order before review instead of\n  stacking fix-up commits.\n\n### Code Quality\n\n\n#### Sanity\n\n- Remember to keep your code DRY.\n- Do not leave debug logging or temporary names in the final diff.\n- Only add comments for crucial information that is not self-explanatory. Keep your comments constrained to 1 short sentence (10-ish words) maximum. Focus on explaning the why/issue rather than implementation details.  \n- Write one changeset per patch/minor/major change. Keep the changeset message constrained to 1 short sentence or 2 maximum, focused on the bug fix, feature or breaking changes. Don't explain the internals or implementation details.\n\n#### Naming\n\n- Use names that explain the domain idea, not the implementation trick.\n- Prefer specific names over short names when the value crosses more than a few lines.\n- Name booleans as questions or states, such as `isReady`, `hasSubscribers`, or `shouldFlush`.\n- Name functions by the action they perform, such as `resolveLoaderData()` or\n  `markContainerReady()`.\n- Avoid vague names like `data`, `item`, `temp`, `handle`, `process`, or `doWork` unless the local\n  scope makes the meaning obvious.\n- Keep existing public API names unless the task is intentionally changing the API.\n\n#### Control Flow\n\n- Prefer early returns for invalid, empty, unsupported, or already-handled cases.\n- Avoid deep nesting when a guard clause can make the main path easier to read.\n- Keep the success path visible at the outer indentation level when possible.\n- Do not use clever boolean expressions when a named condition or small helper would be clearer.\n- Keep error and compatibility branches explicit so reviewers can see why they exist.\n\n#### Modularity\n\n- Keep functions focused on one responsibility.\n- Extract a helper when a block has a clear name, is reused, or hides the main path.\n- Do not extract helpers only to move complexity around; the caller should become easier to read.\n- Keep helpers close to their first use unless they are shared across files.\n- Prefer local semantic helpers over broad abstractions.\n- Keep consumer- or framework-specific carve-outs (magic values, special cases) at the boundary that\n  owns that knowledge; do not push them into a generic lower-level utility that should stay agnostic.\n\n#### Review Standard\n\nBefore finishing, read the changed code as if you are new to the package:\n\n1. Can a junior developer explain what each name represents?\n2. Can an AI agent identify the main path without following deeply nested branches?\n3. Are edge cases handled by clear guard clauses or named helpers?\n4. Is the change modular without hiding important state or protocol boundaries?\n\nIf the answer is no, simplify the code before calling the task complete.\n\n### Code Style\n\nPrettier and ESLint define style. Keep semicolons, single quotes, two-space indentation, trailing\ncommas where configured, and always use braces for control flow.\n\nNaming conventions:\n\n| Pattern | Usage |\n| --- | --- |\n| `use*` | Hooks called in component/task scope |\n| `*$` | QRL boundary extracted by the optimizer |\n| `create*` | Factory functions |\n| `*.unit.ts(x)` | Vitest unit files |\n| `*.spec.ts(x)` | Vitest spec files |\n| `*.e2e.ts` | Playwright e2e files |\n\n### Security And Supply Chain\n\nTreat security-sensitive changes as behavior changes even when they look like config, dependency,\nor CI maintenance.\n\n#### Security Review Trigger\n\nPause for a focused security pass when a change touches:\n\n- authentication, authorization, sessions, cookies, redirects, URL parsing, filesystem paths, SSR,\n  serialization, HTML/script output, request handling, or server adapters\n- dependency versions, lockfiles, package manager settings, release scripts, publishing scripts, or\n  build tooling\n- GitHub Actions, reusable workflows, workflow permissions, tokens, secrets, cache keys, artifact\n  upload/download, or deployment credentials\n\nUse the changed diff as the starting point. Check directly supporting files when needed, but do not\nturn a small change into a repository-wide security scan unless the user asks.\n\n#### What To Check\n\n- Identify the trust boundary: attacker-controlled input, untrusted dependency code, untrusted CI\n  event data, secrets, tokens, publish credentials, or generated output.\n- Find the closest existing guard and the sink it protects. Do not claim safety from a broad\n  intuition; point to the concrete validation, escaping, permission, or isolation boundary.\n- Prefer fail-closed behavior for malformed input, unknown modes, unsupported hosts, and missing\n  config.\n- Keep secrets out of logs, snapshots, artifacts, caches, generated files, browser output, and error\n  messages.\n- When changing dependencies or build tools, check for new install scripts, binary downloads,\n  network fetches, transitive tool execution, license or provenance surprises, and lockfile drift.\n\n#### GitHub Actions\n\nWhen editing `.github/workflows/**` or action-related scripts:\n\n- Keep `permissions:` least-privilege at the workflow or job level.\n- Do not introduce `pull_request_target` for code checkout/build/test of untrusted PR content unless\n  the workflow is explicitly designed to avoid running attacker-controlled code with secrets.\n- Avoid passing secrets to forked PRs, third-party actions, shell commands that print env, or\n  generated artifacts.\n- Prefer trusted first-party actions. For new third-party actions, pin to a full commit SHA or\n  document why a moving tag is acceptable.\n- Treat cache restore keys and artifact paths as untrusted input surfaces. Avoid broad paths that can\n  poison future jobs or expose credentials.\n- Quote shell variables and avoid `eval`, curl-piped shells, and unchecked interpolation of GitHub\n  context values into shell commands.\n\n#### Verification\n\nFor security-sensitive changes, record the focused security reasoning in the final response:\n\n1. What boundary changed?\n2. What guard or invariant prevents abuse?\n3. What focused test, lint, config check, or manual inspection covered it?\n\nIf you cannot verify the security property locally, say exactly what remains unverified.\n\n### Test Driven Development\n\nUse test-driven development for behavior changes and bug fixes.\n\n#### Required Workflow\n\n1. Identify the observable behavior or invariant before editing implementation code.\n2. Add or update the closest focused test that proves the behavior.\n3. Run that test before the implementation change when feasible and confirm it fails for the\n   expected reason.\n4. Make the smallest implementation change that satisfies the test.\n5. Rerun the focused test and keep iterating until it passes.\n6. Run any broader verification required by the touched surface, such as API docs, optimizer\n   snapshots, build output, or e2e coverage.\n\n#### Test Selection\n\n- Prefer unit/spec tests next to the changed code.\n- Use optimizer fixtures and snapshots for Rust transform behavior.\n- Use e2e tests only when the behavior depends on a real browser, navigation, streaming, SSR/CSR\n  integration, adapter behavior, or fixture app wiring.\n- For serialization, hydration, streaming, or loader protocol changes, test both the writer and the\n  reader path.\n- For compatibility behavior, test both the current API path and the supported deprecated path.\n\n#### Exceptions\n\nDocs-only, rules-only, formatting-only, dependency metadata, and generated-output maintenance\nchanges do not need a failing product test first. They still need the narrowest relevant\nverification, such as formatting, Ruler dry-run, generated-output checks, or docs build checks.\n\nIf dependencies, missing generated artifacts, or local environment constraints prevent a pre-fix\ntest run, write the focused test first, record the blocker, and run the test as soon as the blocker\nis resolved.\n\n### Boundaries\n\n- Preserve user work and unrelated changes. Do not reset or revert unrelated files.\n- Keep edits scoped to the package, generated-file boundary, and verification surface implied by the\n  task.\n- Do not commit `.only` tests.\n- Do not skip tests for behavior changes; use the closest focused test first.\n\n### No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n#### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n\n\n\n<!-- Source: .ruler/README.md -->\n\n# Ruler Setup\n\nThis project uses [Ruler](https://github.com/intellectronica/ruler) to keep AI assistant instructions in one committed source of truth.\n\n## Source Of Truth\n\n```\n.ruler/\n├── AGENTS.md      # Repo-wide guidance + always-on rules (appended at the end)\n├── skills/        # Shared source skills propagated by Ruler\n└── ruler.toml     # Ruler agent configuration\n```\n\nUse `.ruler/AGENTS.md` for always-on repository context and rules (the rules live as sections at the\nend of that file). Use `.ruler/skills/` for task-specific workflows that should be loaded only when\nrelevant.\n\nAlways-on rules currently in `.ruler/AGENTS.md`:\n\n- `changeset-conventions`\n- `commit-conventions`\n- `code-quality`\n- `generated-output-boundaries`\n- `guidance-source-of-truth`\n- `no-hydration-terminology`\n- `security-and-supply-chain`\n- `test-driven-development`\n\nCurrent source skills:\n\n- `qwik-core-development`\n- `qwik-router-development`\n- `qwik-optimizer-development`\n- `qwik-e2e-verification`\n- `qwik-docs-development`\n- `qwik-guidance-maintenance`\n\nThe `qwik-` prefix is intentional. Ruler copies skills into assistant-native directories where they\ncan appear beside personal and plugin skills, so the prefix keeps these repo skills recognizable\noutside the `.ruler/` tree.\n\nRoot `AGENTS.md` and `CLAUDE.md` are generated by Ruler but committed (so fresh clones and worktrees\nhave the always-on guidance immediately). The generated skill directories (`.claude/skills/`,\n`.codex/skills/`) and the rest of `.claude/`/`.codex/`/`.cursor/` stay local and gitignored — run\n`ruler apply` to materialize the skills. Never edit a generated file directly — update `.ruler/`,\nrun `ruler apply`, and commit the regenerated root files.\n\n## AI Config Builder\n\nTreat Ruler as the source layer and the selected assistant as the output layer.\n\nWhen you are setting up or debugging an assistant-specific config:\n\n1. Identify the target assistant and Ruler agent id.\n2. Read this file and `.ruler/ruler.toml`.\n3. Research the target assistant's current native instruction, rule, skill, config, and policy\n   formats when the mapping is ambiguous.\n4. Map `.ruler` files by semantic role, not by filename.\n5. Run `ruler apply --agents <agent>`.\n6. Verify that the generated files contain the expected source guidance and skills.\n\n| Ruler source | Semantic role | Builder action |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Repo-wide AI guidance + always-on rules | Generate into the target assistant's primary native guidance file. |\n| `.ruler/skills/*/SKILL.md` | Task-triggered workflows | Copy to the target assistant's native skills directory when supported. |\n| `.ruler/ruler.toml` and Ruler MCP config | Agent selection, output paths, MCP/config | Generate or merge native config only where Ruler and the target assistant support it. |\n\nDifferent tools use words like \"rules\" for different things. A native rules file may mean\nnatural-language guidance, directory-scoped steering, MCP config, hooks, or command execution\npolicy. Check current docs or the installed Ruler adapter before creating or copying a tool-specific\nfile.\n\n## Markdown Guidance Bundle\n\nThe AI-agnostic Markdown guidance bundle is `.ruler/AGENTS.md` (repo-wide context plus the always-on\nrules appended at its end) together with this `.ruler/README.md`.\n\nRuler concatenates that bundle and writes it to each selected assistant's native AI guidance file.\nUse source markers in the generated file to verify inclusion. Do not bypass Ruler by copying these\nMarkdown files into a tool-specific directory whose format has not been verified.\n\nIf you are an AI assistant building local config for a target tool, research that tool's current\nnative guidance, skill, config, and policy formats before adding any tool-specific output. Map\n`.ruler` files by what they mean, not by filename: Markdown guidance belongs in the assistant's\nnative AI guidance surface, skills belong in native skills if supported, and command-permission\npolicy belongs only in a separately researched policy format. For Codex, Ruler includes all\n`.ruler` Markdown guidance in generated `AGENTS.md`; `.codex/rules/*.rules` is command policy, not\nMarkdown guidance.\n\n### Worked Example: Codex\n\nCurrent Ruler and OpenAI Codex behavior maps this repo's sources as follows:\n\n| Ruler source | Codex-native output | Verify after `ruler apply --agents codex` |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Generated root `AGENTS.md` | `rg -n 'Source: .ruler/AGENTS.md' AGENTS.md` |\n| `.ruler/skills/*/SKILL.md` | `.codex/skills/*/SKILL.md` | `find .codex/skills -name SKILL.md` |\n| Ruler MCP config | `.codex/config.toml` when MCP config is generated | `test -f .codex/config.toml` when MCP/config is expected |\n\nCodex `.rules` files are command execution policy files that use `prefix_rule(...)`. They are not a\ntarget for `.ruler/AGENTS.md` prose guidance. If Codex command policy is needed, maintain it as a\nseparate local or team policy using OpenAI Codex's `.rules` format; do not treat it as Ruler\nMarkdown guidance.\n\nExpected Codex check:\n\n```bash\nruler apply --agents codex\nrg -n 'Source: .ruler/AGENTS.md' AGENTS.md\nfind .codex/skills -name SKILL.md\n```\n\n## What Is Committed vs Regenerated\n\nOnly the root `AGENTS.md` and `CLAUDE.md` are **committed** generated outputs, so a fresh clone or\nworktree has the always-on guidance immediately (`.ruler/ruler.toml` keeps `[gitignore] enabled = false`\nso Ruler leaves those two files tracked). The generated skill copies (`.claude/skills/`,\n`.codex/skills/`) are **gitignored** — regenerate them locally with `ruler apply`. This keeps skill\nand note edits from appearing three times (source plus two copies) in every PR.\n\nTo change guidance, edit `.ruler/`, run `ruler apply`, and commit the regenerated root files\nalongside your `.ruler/` change. Never hand-edit the generated files. A CI check\n(`.github/workflows/ruler-check.yml`) re-runs `ruler apply` and fails if the committed root files\ndrift from `.ruler/`.\n\n## Generate Local Assistant Files\n\nInstall Ruler if you do not already have it:\n\n```bash\nnpm install -g @intellectronica/ruler\n```\n\nOr run it without installing (the form used by fresh worktrees and CI):\n\n```bash\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\nGenerate files for the default configured agents:\n\n```bash\nruler apply\n```\n\nGenerate files for a specific assistant:\n\n```bash\nruler apply --agents claude\nruler apply --agents codex\n```\n\nGenerate files for multiple assistants:\n\n```bash\nruler apply --agents claude,codex\n```\n\n## Project And Personal Configuration\n\nUse `.ruler/` for team-shared instructions and project conventions that should travel with the repo.\n\nUse `~/.config/ruler/` for personal preferences, local workflow shortcuts, API keys, and personal MCP servers:\n\n```bash\nruler init --global\n```\n\nIf it helps everyone working in this repo, add it to `.ruler/`. If it only helps your local setup,\nkeep it in your global Ruler config.\n\n## Updating Instructions\n\nEdit `.ruler/AGENTS.md` for repository-wide guidance and always-on rules (the rules are sections at\nthe end of that file). Edit the relevant `.ruler/skills/<skill-name>/SKILL.md` file for\npackage-specific or workflow-specific guidance.\n\nIf a code task proves a skill or reference stale, update that guidance as part of the same task when\nthe scope allows it.\n\nThen regenerate the local assistant files:\n\n```bash\nruler apply --agents <your-tool>\n```\n\nDo not update generated files like `CLAUDE.md` or `AGENTS.md` by hand. They will be overwritten the\nnext time Ruler runs.\n\n## Skills\n\nAuthor shared skills under `.ruler/skills/` (the committed source). Ruler copies them into each\nenabled agent's skill directory (`.claude/skills/` for Claude, `.codex/skills/` for Codex); those\ncopies are gitignored, so run `ruler apply` once per fresh clone or worktree to materialize them.\nNever hand-edit the copies — edit `.ruler/skills/` and regenerate.\n\nKeep each skill focused:\n\n- Use frontmatter with `name` and a trigger-oriented `description`.\n- Put the fast path in `SKILL.md`.\n- Move long notes into `references/` only when progressive disclosure helps.\n- Keep always-on policy in `.ruler/AGENTS.md`, not duplicated in every skill.\n- Keep durable maintainer lessons current. Prefer updating the specific skill/reference that was\n  wrong over adding broad prose here.\n","isInternal":false,"tokens":6368,"sizeBytes":26979},{"name":"README.md","path":"packages/create-qwik/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/README.md","title":"create-qwik Documentation","category":"plugin-manifest","format":"markdown","content":"# create-qwik Documentation\n\nPath: `packages/create-qwik/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/README.md)","tokens":300,"sizeBytes":181},{"name":"README.md","path":"packages/devtools/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/README.md","title":"devtools Documentation","category":"plugin-manifest","format":"markdown","content":"# devtools Documentation\n\nPath: `packages/devtools/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/README.md)","tokens":300,"sizeBytes":172},{"name":"README.md","path":"packages/devtools/ui/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/ui/README.md","title":"ui Documentation","category":"plugin-manifest","format":"markdown","content":"# ui Documentation\n\nPath: `packages/devtools/ui/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/ui/README.md)","tokens":300,"sizeBytes":172},{"name":"README.md","path":"packages/docs/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/README.md","title":"docs Documentation","category":"plugin-manifest","format":"markdown","content":"# docs Documentation\n\nPath: `packages/docs/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/README.md)","tokens":300,"sizeBytes":160},{"name":"README.md","path":"packages/docs/src/components/theme-toggle/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/components/theme-toggle/README.md","title":"theme-toggle Documentation","category":"plugin-manifest","format":"markdown","content":"# theme-toggle Documentation\n\nPath: `packages/docs/src/components/theme-toggle/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/components/theme-toggle/README.md)","tokens":300,"sizeBytes":224},{"name":"README.md","path":"packages/docs/src/repl/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/repl/README.md","title":"repl Documentation","category":"plugin-manifest","format":"markdown","content":"# repl Documentation\n\nPath: `packages/docs/src/repl/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/repl/README.md)","tokens":300,"sizeBytes":178},{"name":"README.md","path":"packages/docs/src/routes/examples/apps/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/examples/apps/README.md","title":"apps Documentation","category":"plugin-manifest","format":"markdown","content":"# apps Documentation\n\nPath: `packages/docs/src/routes/examples/apps/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/examples/apps/README.md)","tokens":300,"sizeBytes":210},{"name":"README.md","path":"packages/eslint-plugin-qwik/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/README.md","title":"eslint-plugin-qwik Documentation","category":"plugin-manifest","format":"markdown","content":"# eslint-plugin-qwik Documentation\n\nPath: `packages/eslint-plugin-qwik/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/eslint-plugin-qwik/README.md)","tokens":300,"sizeBytes":202},{"name":"README.md","path":"packages/insights/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/README.md","title":"insights Documentation","category":"plugin-manifest","format":"markdown","content":"# insights Documentation\n\nPath: `packages/insights/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/README.md)","tokens":300,"sizeBytes":172},{"name":"README.md","path":"packages/insights/src/db/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/src/db/README.md","title":"db Documentation","category":"plugin-manifest","format":"markdown","content":"# db Documentation\n\nPath: `packages/insights/src/db/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/insights/src/db/README.md)","tokens":300,"sizeBytes":180},{"name":"README.md","path":"packages/optimizer/core/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/core/README.md","title":"core Documentation","category":"plugin-manifest","format":"markdown","content":"# core Documentation\n\nPath: `packages/optimizer/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/core/README.md)","tokens":300,"sizeBytes":180},{"name":"README.md","path":"packages/optimizer/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/README.md","title":"optimizer Documentation","category":"plugin-manifest","format":"markdown","content":"# optimizer Documentation\n\nPath: `packages/optimizer/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/optimizer/README.md)","tokens":300,"sizeBytes":175},{"name":"README.md","path":"packages/qwik-react/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/README.md","title":"qwik-react Documentation","category":"plugin-manifest","format":"markdown","content":"# qwik-react Documentation\n\nPath: `packages/qwik-react/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-react/README.md)","tokens":300,"sizeBytes":178},{"name":"README.md","path":"packages/qwik-router/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/README.md","title":"qwik-router Documentation","category":"plugin-manifest","format":"markdown","content":"# qwik-router Documentation\n\nPath: `packages/qwik-router/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik-router/README.md)","tokens":300,"sizeBytes":181},{"name":"README.md","path":"packages/qwik/src/core/reactive-primitives/impl/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/reactive-primitives/impl/README.md","title":"impl Documentation","category":"plugin-manifest","format":"markdown","content":"# impl Documentation\n\nPath: `packages/qwik/src/core/reactive-primitives/impl/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/reactive-primitives/impl/README.md)","tokens":300,"sizeBytes":228},{"name":"readme.md","path":"packages/qwik/src/core/readme.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/readme.md","title":"core Documentation","category":"plugin-manifest","format":"markdown","content":"# core Documentation\n\nPath: `packages/qwik/src/core/readme.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/readme.md)","tokens":300,"sizeBytes":178},{"name":"README.md","path":"packages/qwik/src/core/shared/jsx/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/jsx/README.md","title":"jsx Documentation","category":"plugin-manifest","format":"markdown","content":"# jsx Documentation\n\nPath: `packages/qwik/src/core/shared/jsx/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/jsx/README.md)","tokens":300,"sizeBytes":199},{"name":"readme.md","path":"packages/qwik/src/core/shared/platform/readme.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/platform/readme.md","title":"platform Documentation","category":"plugin-manifest","format":"markdown","content":"# platform Documentation\n\nPath: `packages/qwik/src/core/shared/platform/readme.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/platform/readme.md)","tokens":300,"sizeBytes":214},{"name":"README.md","path":"packages/qwik/src/core/shared/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/README.md","title":"shared Documentation","category":"plugin-manifest","format":"markdown","content":"# shared Documentation\n\nPath: `packages/qwik/src/core/shared/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/README.md)","tokens":300,"sizeBytes":194},{"name":"README.md","path":"packages/qwik/src/core/shared/utils/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/utils/README.md","title":"utils Documentation","category":"plugin-manifest","format":"markdown","content":"# utils Documentation\n\nPath: `packages/qwik/src/core/shared/utils/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/shared/utils/README.md)","tokens":300,"sizeBytes":205},{"name":"README.md","path":"packages/qwik/src/core/tests/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/tests/README.md","title":"tests Documentation","category":"plugin-manifest","format":"markdown","content":"# tests Documentation\n\nPath: `packages/qwik/src/core/tests/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/core/tests/README.md)","tokens":300,"sizeBytes":191},{"name":"README.md","path":"packages/qwik/src/server/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/README.md","title":"server Documentation","category":"plugin-manifest","format":"markdown","content":"# server Documentation\n\nPath: `packages/qwik/src/server/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/server/README.md)","tokens":300,"sizeBytes":184},{"name":"README.md","path":"packages/qwik/src/testing/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/README.md","title":"testing Documentation","category":"plugin-manifest","format":"markdown","content":"# testing Documentation\n\nPath: `packages/qwik/src/testing/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/qwik/src/testing/README.md)","tokens":300,"sizeBytes":187},{"name":"README.md","path":"packages/supabase-auth-helpers-qwik/README.md","rawUrl":"https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/supabase-auth-helpers-qwik/README.md","title":"supabase-auth-helpers-qwik Documentation","category":"plugin-manifest","format":"markdown","content":"# @supabase/auth-helpers-qwik (BETA)\n\nThis submodule provides convenience helpers for implementing user authentication in Qwik applications.\n","isInternal":false,"tokens":28,"sizeBytes":141},{"name":".cursorrules","path":".cursorrules (qwik-basic-cursorrules-prompt-file.mdc)","rawUrl":"https://raw.githubusercontent.com/PatrickJS/awesome-cursorrules/main/rules/qwik-basic-cursorrules-prompt-file.mdc","title":"Awesome Cursorrules: qwik basic","category":"cursor-rule","format":"markdown","content":"---\ndescription: \"Cursor rules for Qwik development with TypeScript and Vite integration.\"\nglobs: **/*\nalwaysApply: false\n---\n// Qwik.js Basic Setup (with TypeScript and Vite) .cursorrules\n\n// Prefer functional components\n\nconst preferFunctionalComponents = true;\n\n// Qwik.js best practices\n\nconst qwikBestPractices = [\n  \"Use $ suffix for lazy-loaded functions\",\n  \"Utilize useSignal() for reactive state\",\n  \"Implement useStore() for complex state objects\",\n  \"Use useResource$() for data fetching\",\n  \"Implement useTask$() for side effects\",\n  \"Utilize useVisibleTask$() for browser-only code\",\n  \"Leverage TypeScript for type safety\",\n  \"Use Vite's fast HMR for development\",\n];\n\n// Folder structure\n\nconst folderStructure = `\nsrc/\n  components/\n  routes/\n  global.css\n  root.tsx\n  entry.ssr.tsx\npublic/\nvite.config.ts\ntsconfig.json\n`;\n\n// Additional instructions\n\nconst additionalInstructions = `\n1. Use TypeScript for all .ts and .tsx files\n2. Implement proper error boundaries\n3. Utilize Qwik City for routing when applicable\n4. Use Qwik's built-in optimization features\n5. Implement lazy-loading for improved performance\n6. Follow Qwik's naming conventions and best practices\n7. Use server$ for server-side code execution\n8. Leverage Vite plugins for optimized builds\n`;\n","tokens":304,"sizeBytes":1279}],"systemPromptSnippet":"<yakaai_skills repo=\"QwikDev/qwik\">\n<!-- File: .ruler/AGENTS.md (Tokens: ~4305 | Category: root-instruction) -->\n# Qwik v2 agents reference, instructions and rules\n\n> [!IMPORTANT]\n> **ALWAYS RUN `ruler apply` AT THE START OF A SESSION.** The agent skills are gitignored, not\n> committed, so a fresh clone/worktree has none until you generate them (once per worktree):\n>\n> ```bash\n> pnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n> ```\n\n> Canonical source for repo-wide AI coding agent rules. For contributor setup, see\n> [CONTRIBUTING.md](./CONTRIBUTING.md). For package-specific workflows, load the relevant\n> `.ruler/skills/*/SKILL.md` file.\n\n## Source Of Truth\n\n- Shared AI guidance lives in `.ruler/`.\n- Only the root `AGENTS.md` and `CLAUDE.md` are committed generated outputs; the `.claude/`/`.codex/`\n  skill copies are gitignored and regenerated locally with `ruler apply` (see Setup below).\n- Never hand-edit a generated output — edit `.ruler/` and regenerate with `ruler apply`. A CI check\n  re-runs it and fails if the committed root files drift.\n- To change assistant behavior, edit `.ruler/AGENTS.md`, `.ruler/README.md`, or `.ruler/skills/**`,\n  then regenerate with Ruler when needed.\n\n## Project Snapshot\n\nQwik is a resumable web framework. SSR serializes application and framework state into HTML, and\nthe client resumes without re-running component code. Qwik v2 is a rewrite with VNode-based\nruntime work, rewritten reactive primitives, a new serialization mechanism, and package names under\n`@qwik.dev/*`.\n\nKey concepts: resumability, QRLs, `$`-suffixed optimizer boundaries, fine-grained signals, VNodes,\nthe cursor system, and the Rust optimizer.\n\n## Monorepo Map\n\n- Base branch and release branch for v2 PRs: `main`. V1 lives on the `v1` branch.\n\n| Package | Path | Notes |\n| --- | --- | --- |\n| `@qwik.dev/core` | `packages/qwik` | Core runtime, SSR, optimizer-facing code |\n| `@qwik.dev/router` | `packages/qwik-router` | Routing, middleware, adapters, SSG |\n| `@qwik.dev/react` | `packages/qwik-react` | React integration |\n| `@qwik.dev/utils` | `packages/qwik-utils` | Less-common helpers (`usePoll`, `zod$`), may use qwik internals |\n| `@qwik.dev/dom` | `packages/qwik-dom` | Server-side DOM implementation |\n| `@qwik.dev/qwik-vite` | `packages/qwik-vite` | `vite-plugin-qwik`, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/ts-optimizer` | `packages/ts-optimizer` | TypeScript optimizer, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/optimizer` | `packages/optimizer` | Rust optimizer, WASM, NAPI bindings; kept for parity comparison |\n| `eslint-plugin-qwik` | `packages/eslint-plugin-qwik` | ESLint rules |\n| `create-qwik` | `packages/create-qwik` | Project scaffolding CLI |\n| `qwik-docs` | `packages/docs` | Docs site, private package |\n| `insights` | `packages/insights` | Analytics dashboard, private package |\n\nUse v2 package names (`@qwik.dev/core`, `@qwik.dev/router`, etc.). Do not introduce v1\n`@builder.io/qwik` or `@builder.io/qwik-city` imports except when working on explicit\ncompatibility override code.\n\n## Setup And Iteration Loop\n\nThis is the canonical loop for nearly all framework work. Default to it; do not substitute broader\ncommands:\n\n### getting started\n\n```bash\npnpm i\n```\n\n```bash\n# Materialize the agent skills into .claude/.codex (gitignored) — run once per fresh clone/worktree.\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\n```bash\npnpm build.core # for a fresh start\npnpm build.full # for a fresh start and you are working on the docs or the other packages\npnpm build.rust # only when working on the Rust optimizer; the only step that needs the Rust toolchain\n```\n\nThe local scripts and tests use the TypeScript optimizer (`tsOptimizer: true` in the repo's own\nvite configs and test harnesses), so no Rust toolchain or prebuilt bindings are needed for them.\nKeep that flag on any new repo-owned `qwikVite()` call site; the plugin still defaults to the Rust\noptimizer for published apps. `QWIK_OPTIMIZER=rust` (or `ts`) overrides the flag for a whole run, which\nis how CI runs the e2e suites on both optimizers; it needs `pnpm build.rust` or\n`pnpm build.platform.copy` first.\n### Iterating\n\nPrefer focused commands and builds over repo-wide commands and builds.\n\n```bash\n# Fast dev build — required once before any tests can run, and again after framework\n# source changes when the verification consumes build output (all e2e suites do)\npnpm build.core.dev\n\n# Closest focused unit/spec test\npnpm vitest run packages/qwik/src/core/tests/use-task.spec.tsx\n\n# Focused e2e test\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\n`build.core.dev` also re-emits fresh Qwik and Router `.d.ts` incrementally (via `tscDevDts` + re-export shims), so editing a public signature no longer leaves stale types — `build.watch` skips the type pass to stay instant.\n\nFor Qwik e2e tests, use `--browser=chromium` with `e2e/qwik-e2e/playwright.config.ts`.\n\nRe-run `pnpm build.rust` (or `pnpm build.rust.dev`) when you are touching the optimizer rust code.\n\n### When making a PR\n\n```bash\n# for type-level verification when no focused test covers the change\npnpm tsc.check\n\n# update the API\npnpm api.update\n\n# Verify the build passes\npnpm build.core\n\n# Verify unit tests pass\npnpm test.unit\n\n# Verify the E2Es pass\npnpm test.e2e.chromium\n\n# In case of html output change, update the ssg snapshot\npnpm test.e2e.router.ssg.update\n\n# In case of a new feature, run the test.bench\npnpm test.bench\n\n# In case of qwikloader changes\npnpm vitest packages/qwik/src/qwikloader.unit.ts -u\n```\n\nIf any of those fail, fix and push your changes.\n\n## Rules\n\nRecent Qwik v2 work by core maintainers favors small, behavior-shaped changes with regression proof.\nFollow that bias:\n\n### Guidance Freshness\n\n- If a skill or reference you used is stale, incomplete, or contradicted by current source, update\n  the `.ruler` source guidance before finishing the task unless the user explicitly restricted the\n  scope.\n- Keep new durable lessons in the most specific skill or reference that future agents are likely to\n  load. Do not add package-specific details to these always-on rules unless they affect most tasks.\n- Only add a lesson to a skill when it generalizes to future tasks. Keep single-PR specifics (one\n  module's protocol, one fix's mechanics) in the code and its tests, not in a skill.\n- Write those notes **prescriptively** — the invariants to keep, the traps that cause false passes,\n  where things live, and how to verify — rather than describing how the code currently works. Omit \"don't do X\" prohibitions for anything a test already enforces; the\n  suite is the guardrail, so reserve notes for what it can't self-enforce.\n- When updating guidance, load the `qwik-guidance-maintenance` skill.\n\n### Skill Selection\n\nLoad the relevant skill before non-trivial work in that area:\n\n| Skill | Use when |\n| --- | --- |\n| `qwik-core-development` | Editing/reviewing `packages/qwik/**` core runtime code |\n| `qwik-router-development` | Editing/reviewing router runtime, buildtime, middleware, adapters, or SSG |\n| `qwik-optimizer-development` | Editing/reviewing Rust optimizer, WASM, NAPI, or optimizer-facing behavior |\n| `qwik-e2e-verification` | Creating, debugging, or running Playwright e2e suites |\n| `qwik-docs-development` | Writing/editing docs content, docs site routes, or docs LLM outputs |\n| `qwik-guidance-maintenance` | Editing `.ruler/**`, generated-output guidance, or stale skill/reference content |\n\nIf no skill fits, stay with these repo-wide rules and inspect local source before changing code.\n\nIf a skill above is not loadable, its copy has not been generated in this worktree yet — run the\n`ruler apply` step from Setup, or read the source directly at `.ruler/skills/<name>/SKILL.md`.\n\nKeep the `qwik-` prefix on committed source skill names. Ruler copies these skills into\nagent-native skill directories where they may coexist with user or plugin skills, so the prefix keeps\nthe skill list unambiguous outside the repo-local `.ruler` tree.\n\n### Changesets\n\nWhen a change affects published packages, add a changeset under `.changeset/`.\n\n- Use `patch` for bug fixes: focus on the issue rather than the solution.\n- `minor` for new features: explain the new feature.\n- `major` for API removal: may also include a new feature, but it must remove or break a public API.\n- Enforce 1 changeset per change.\n- Write the changeset summary in lowercase (e.g. `fix:`)\n- 1 short sentence (10-ish words) focused on the bug fix or feature. Don't include implementation details.\n\n### Commits\n\n- One coherent set of changes per commit. Do not fold an unrelated fix into a commit for another\n  change.\n- Fixes that are independent of the branch's main change get their own commits, placed before it,\n  so they can be reviewed and cherry-picked on their own.\n- Write the subject as a short imperative summary. The body explains the \"why\" tersely when it is\n  not obvious from the subject. The \"what\" and \"how\" live in the code; summarize them only when the\n  commit is large.\n- When a branch has grown out of that shape, rewrite it into that order before review instead of\n  stacking fix-up commits.\n\n### Code Quality\n\n\n#### Sanity\n\n- Remember to keep your code DRY.\n- Do not leave debug logging or temporary names in the final diff.\n- Only add comments for crucial information that is not self-explanatory. Keep your comments constrained to 1 short sentence (10-ish words) maximum. Focus on explaning the why/issue rather than implementation details.  \n- Write one changeset per patch/minor/major change. Keep the changeset message constrained to 1 short sentence or 2 maximum, focused on the bug fix, feature or breaking changes. Don't explain the internals or implementation details.\n\n#### Naming\n\n- Use names that explain the domain idea, not the implementation trick.\n- Prefer specific names over short names when the value crosses more than a few lines.\n- Name booleans as questions or states, such as `isReady`, `hasSubscribers`, or `shouldFlush`.\n- Name functions by the action they perform, such as `resolveLoaderData()` or\n  `markContainerReady()`.\n- Avoid vague names like `data`, `item`, `temp`, `handle`, `process`, or `doWork` unless the local\n  scope makes the meaning obvious.\n- Keep existing public API names unless the task is intentionally changing the API.\n\n#### Control Flow\n\n- Prefer early returns for invalid, empty, unsupported, or already-handled cases.\n- Avoid deep nesting when a guard clause can make the main path easier to read.\n- Keep the success path visible at the outer indentation level when possible.\n- Do not use clever boolean expressions when a named condition or small helper would be clearer.\n- Keep error and compatibility branches explicit so reviewers can see why they exist.\n\n#### Modularity\n\n- Keep functions focused on one responsibility.\n- Extract a helper when a block has a clear name, is reused, or hides the main path.\n- Do not extract helpers only to move complexity around; the caller should become easier to read.\n- Keep helpers close to their first use unless they are shared across files.\n- Prefer local semantic helpers over broad abstractions.\n- Keep consumer- or framework-specific carve-outs (magic values, special cases) at the boundary that\n  owns that knowledge; do not push them into a generic lower-level utility that should stay agnostic.\n\n#### Review Standard\n\nBefore finishing, read the changed code as if you are new to the package:\n\n1. Can a junior developer explain what each name represents?\n2. Can an AI agent identify the main path without following deeply nested branches?\n3. Are edge cases handled by clear guard clauses or named helpers?\n4. Is the change modular without hiding important state or protocol boundaries?\n\nIf the answer is no, simplify the code before calling the task complete.\n\n### Code Style\n\nPrettier and ESLint define style. Keep semicolons, single quotes, two-space indentation, trailing\ncommas where configured, and always use braces for control flow.\n\nNaming conventions:\n\n| Pattern | Usage |\n| --- | --- |\n| `use*` | Hooks called in component/task scope |\n| `*$` | QRL boundary extracted by the optimizer |\n| `create*` | Factory functions |\n| `*.unit.ts(x)` | Vitest unit files |\n| `*.spec.ts(x)` | Vitest spec files |\n| `*.e2e.ts` | Playwright e2e files |\n\n### Security And Supply Chain\n\nTreat security-sensitive changes as behavior changes even when they look like config, dependency,\nor CI maintenance.\n\n#### Security Review Trigger\n\nPause for a focused security pass when a change touches:\n\n- authentication, authorization, sessions, cookies, redirects, URL parsing, filesystem paths, SSR,\n  serialization, HTML/script output, request handling, or server adapters\n- dependency versions, lockfiles, package manager settings, release scripts, publishing scripts, or\n  build tooling\n- GitHub Actions, reusable workflows, workflow permissions, tokens, secrets, cache keys, artifact\n  upload/download, or deployment credentials\n\nUse the changed diff as the starting point. Check directly supporting files when needed, but do not\nturn a small change into a repository-wide security scan unless the user asks.\n\n#### What To Check\n\n- Identify the trust boundary: attacker-controlled input, untrusted dependency code, untrusted CI\n  event data, secrets, tokens, publish credentials, or generated output.\n- Find the closest existing guard and the sink it protects. Do not claim safety from a broad\n  intuition; point to the concrete validation, escaping, permission, or isolation boundary.\n- Prefer fail-closed behavior for malformed input, unknown modes, unsupported hosts, and missing\n  config.\n- Keep secrets out of logs, snapshots, artifacts, caches, generated files, browser output, and error\n  messages.\n- When changing dependencies or build tools, check for new install scripts, binary downloads,\n  network fetches, transitive tool execution, license or provenance surprises, and lockfile drift.\n\n#### GitHub Actions\n\nWhen editing `.github/workflows/**` or action-related scripts:\n\n- Keep `permissions:` least-privilege at the workflow or job level.\n- Do not introduce `pull_request_target` for code checkout/build/test of untrusted PR content unless\n  the workflow is explicitly designed to avoid running attacker-controlled code with secrets.\n- Avoid passing secrets to forked PRs, third-party actions, shell commands that print env, or\n  generated artifacts.\n- Prefer trusted first-party actions. For new third-party actions, pin to a full commit SHA or\n  document why a moving tag is acceptable.\n- Treat cache restore keys and artifact paths as untrusted input surfaces. Avoid broad paths that can\n  poison future jobs or expose credentials.\n- Quote shell variables and avoid `eval`, curl-piped shells, and unchecked interpolation of GitHub\n  context values into shell commands.\n\n#### Verification\n\nFor security-sensitive changes, record the focused security reasoning in the final response:\n\n1. What boundary changed?\n2. What guard or invariant prevents abuse?\n3. What focused test, lint, config check, or manual inspection covered it?\n\nIf you cannot verify the security property locally, say exactly what remains unverified.\n\n### Test Driven Development\n\nUse test-driven development for behavior changes and bug fixes.\n\n#### Required Workflow\n\n1. Identify the observable behavior or invariant before editing implementation code.\n2. Add or update the closest focused test that proves the behavior.\n3. Run that test before the implementation change when feasible and confirm it fails for the\n   expected reason.\n4. Make the smallest implementation change that satisfies the test.\n5. Rerun the focused test and keep iterating until it passes.\n6. Run any broader verification required by the touched surface, such as API docs, optimizer\n   snapshots, build output, or e2e coverage.\n\n#### Test Selection\n\n- Prefer unit/spec tests next to the changed code.\n- Use optimizer fixtures and snapshots for Rust transform behavior.\n- Use e2e tests only when the behavior depends on a real browser, navigation, streaming, SSR/CSR\n  integration, adapter behavior, or fixture app wiring.\n- For serialization, hydration, streaming, or loader protocol changes, test both the writer and the\n  reader path.\n- For compatibility behavior, test both the current API path and the supported deprecated path.\n\n#### Exceptions\n\nDocs-only, rules-only, formatting-only, dependency metadata, and generated-output maintenance\nchanges do not need a failing product test first. They still need the narrowest relevant\nverification, such as formatting, Ruler dry-run, generated-output checks, or docs build checks.\n\nIf dependencies, missing generated artifacts, or local environment constraints prevent a pre-fix\ntest run, write the focused test first, record the blocker, and run the test as soon as the blocker\nis resolved.\n\n### Boundaries\n\n- Preserve user work and unrelated changes. Do not reset or revert unrelated files.\n- Keep edits scoped to the package, generated-file boundary, and verification surface implied by the\n  task.\n- Do not commit `.only` tests.\n- Do not skip tests for behavior changes; use the closest focused test first.\n\n### No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n#### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n\n<!-- File: AGENTS.md (Tokens: ~6373 | Category: root-instruction) -->\n<!-- Generated by Ruler -->\n\n\n<!-- Source: .ruler/AGENTS.md -->\n\n# Qwik v2 agents reference, instructions and rules\n\n> [!IMPORTANT]\n> **ALWAYS RUN `ruler apply` AT THE START OF A SESSION.** The agent skills are gitignored, not\n> committed, so a fresh clone/worktree has none until you generate them (once per worktree):\n>\n> ```bash\n> pnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n> ```\n\n> Canonical source for repo-wide AI coding agent rules. For contributor setup, see\n> [CONTRIBUTING.md](./CONTRIBUTING.md). For package-specific workflows, load the relevant\n> `.ruler/skills/*/SKILL.md` file.\n\n## Source Of Truth\n\n- Shared AI guidance lives in `.ruler/`.\n- Only the root `AGENTS.md` and `CLAUDE.md` are committed generated outputs; the `.claude/`/`.codex/`\n  skill copies are gitignored and regenerated locally with `ruler apply` (see Setup below).\n- Never hand-edit a generated output — edit `.ruler/` and regenerate with `ruler apply`. A CI check\n  re-runs it and fails if the committed root files drift.\n- To change assistant behavior, edit `.ruler/AGENTS.md`, `.ruler/README.md`, or `.ruler/skills/**`,\n  then regenerate with Ruler when needed.\n\n## Project Snapshot\n\nQwik is a resumable web framework. SSR serializes application and framework state into HTML, and\nthe client resumes without re-running component code. Qwik v2 is a rewrite with VNode-based\nruntime work, rewritten reactive primitives, a new serialization mechanism, and package names under\n`@qwik.dev/*`.\n\nKey concepts: resumability, QRLs, `$`-suffixed optimizer boundaries, fine-grained signals, VNodes,\nthe cursor system, and the Rust optimizer.\n\n## Monorepo Map\n\n- Base branch and release branch for v2 PRs: `main`. V1 lives on the `v1` branch.\n\n| Package | Path | Notes |\n| --- | --- | --- |\n| `@qwik.dev/core` | `packages/qwik` | Core runtime, SSR, optimizer-facing code |\n| `@qwik.dev/router` | `packages/qwik-router` | Routing, middleware, adapters, SSG |\n| `@qwik.dev/react` | `packages/qwik-react` | React integration |\n| `@qwik.dev/utils` | `packages/qwik-utils` | Less-common helpers (`usePoll`, `zod$`), may use qwik internals |\n| `@qwik.dev/dom` | `packages/qwik-dom` | Server-side DOM implementation |\n| `@qwik.dev/qwik-vite` | `packages/qwik-vite` | `vite-plugin-qwik`, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/ts-optimizer` | `packages/ts-optimizer` | TypeScript optimizer, private, bundled into `@qwik.dev/core/optimizer` |\n| `@qwik.dev/optimizer` | `packages/optimizer` | Rust optimizer, WASM, NAPI bindings; kept for parity comparison |\n| `eslint-plugin-qwik` | `packages/eslint-plugin-qwik` | ESLint rules |\n| `create-qwik` | `packages/create-qwik` | Project scaffolding CLI |\n| `qwik-docs` | `packages/docs` | Docs site, private package |\n| `insights` | `packages/insights` | Analytics dashboard, private package |\n\nUse v2 package names (`@qwik.dev/core`, `@qwik.dev/router`, etc.). Do not introduce v1\n`@builder.io/qwik` or `@builder.io/qwik-city` imports except when working on explicit\ncompatibility override code.\n\n## Setup And Iteration Loop\n\nThis is the canonical loop for nearly all framework work. Default to it; do not substitute broader\ncommands:\n\n### getting started\n\n```bash\npnpm i\n```\n\n```bash\n# Materialize the agent skills into .claude/.codex (gitignored) — run once per fresh clone/worktree.\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\n```bash\npnpm build.core # for a fresh start\npnpm build.full # for a fresh start and you are working on the docs or the other packages\npnpm build.rust # only when working on the Rust optimizer; the only step that needs the Rust toolchain\n```\n\nThe local scripts and tests use the TypeScript optimizer (`tsOptimizer: true` in the repo's own\nvite configs and test harnesses), so no Rust toolchain or prebuilt bindings are needed for them.\nKeep that flag on any new repo-owned `qwikVite()` call site; the plugin still defaults to the Rust\noptimizer for published apps. `QWIK_OPTIMIZER=rust` (or `ts`) overrides the flag for a whole run, which\nis how CI runs the e2e suites on both optimizers; it needs `pnpm build.rust` or\n`pnpm build.platform.copy` first.\n### Iterating\n\nPrefer focused commands and builds over repo-wide commands and builds.\n\n```bash\n# Fast dev build — required once before any tests can run, and again after framework\n# source changes when the verification consumes build output (all e2e suites do)\npnpm build.core.dev\n\n# Closest focused unit/spec test\npnpm vitest run packages/qwik/src/core/tests/use-task.spec.tsx\n\n# Focused e2e test\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\n`build.core.dev` also re-emits fresh Qwik and Router `.d.ts` incrementally (via `tscDevDts` + re-export shims), so editing a public signature no longer leaves stale types — `build.watch` skips the type pass to stay instant.\n\nFor Qwik e2e tests, use `--browser=chromium` with `e2e/qwik-e2e/playwright.config.ts`.\n\nRe-run `pnpm build.rust` (or `pnpm build.rust.dev`) when you are touching the optimizer rust code.\n\n### When making a PR\n\n```bash\n# for type-level verification when no focused test covers the change\npnpm tsc.check\n\n# update the API\npnpm api.update\n\n# Verify the build passes\npnpm build.core\n\n# Verify unit tests pass\npnpm test.unit\n\n# Verify the E2Es pass\npnpm test.e2e.chromium\n\n# In case of html output change, update the ssg snapshot\npnpm test.e2e.router.ssg.update\n\n# In case of a new feature, run the test.bench\npnpm test.bench\n\n# In case of qwikloader changes\npnpm vitest packages/qwik/src/qwikloader.unit.ts -u\n```\n\nIf any of those fail, fix and push your changes.\n\n## Rules\n\nRecent Qwik v2 work by core maintainers favors small, behavior-shaped changes with regression proof.\nFollow that bias:\n\n### Guidance Freshness\n\n- If a skill or reference you used is stale, incomplete, or contradicted by current source, update\n  the `.ruler` source guidance before finishing the task unless the user explicitly restricted the\n  scope.\n- Keep new durable lessons in the most specific skill or reference that future agents are likely to\n  load. Do not add package-specific details to these always-on rules unless they affect most tasks.\n- Only add a lesson to a skill when it generalizes to future tasks. Keep single-PR specifics (one\n  module's protocol, one fix's mechanics) in the code and its tests, not in a skill.\n- Write those notes **prescriptively** — the invariants to keep, the traps that cause false passes,\n  where things live, and how to verify — rather than describing how the code currently works. Omit \"don't do X\" prohibitions for anything a test already enforces; the\n  suite is the guardrail, so reserve notes for what it can't self-enforce.\n- When updating guidance, load the `qwik-guidance-maintenance` skill.\n\n### Skill Selection\n\nLoad the relevant skill before non-trivial work in that area:\n\n| Skill | Use when |\n| --- | --- |\n| `qwik-core-development` | Editing/reviewing `packages/qwik/**` core runtime code |\n| `qwik-router-development` | Editing/reviewing router runtime, buildtime, middleware, adapters, or SSG |\n| `qwik-optimizer-development` | Editing/reviewing Rust optimizer, WASM, NAPI, or optimizer-facing behavior |\n| `qwik-e2e-verification` | Creating, debugging, or running Playwright e2e suites |\n| `qwik-docs-development` | Writing/editing docs content, docs site routes, or docs LLM outputs |\n| `qwik-guidance-maintenance` | Editing `.ruler/**`, generated-output guidance, or stale skill/reference content |\n\nIf no skill fits, stay with these repo-wide rules and inspect local source before changing code.\n\nIf a skill above is not loadable, its copy has not been generated in this worktree yet — run the\n`ruler apply` step from Setup, or read the source directly at `.ruler/skills/<name>/SKILL.md`.\n\nKeep the `qwik-` prefix on committed source skill names. Ruler copies these skills into\nagent-native skill directories where they may coexist with user or plugin skills, so the prefix keeps\nthe skill list unambiguous outside the repo-local `.ruler` tree.\n\n### Changesets\n\nWhen a change affects published packages, add a changeset under `.changeset/`.\n\n- Use `patch` for bug fixes: focus on the issue rather than the solution.\n- `minor` for new features: explain the new feature.\n- `major` for API removal: may also include a new feature, but it must remove or break a public API.\n- Enforce 1 changeset per change.\n- Write the changeset summary in lowercase (e.g. `fix:`)\n- 1 short sentence (10-ish words) focused on the bug fix or feature. Don't include implementation details.\n\n### Commits\n\n- One coherent set of changes per commit. Do not fold an unrelated fix into a commit for another\n  change.\n- Fixes that are independent of the branch's main change get their own commits, placed before it,\n  so they can be reviewed and cherry-picked on their own.\n- Write the subject as a short imperative summary. The body explains the \"why\" tersely when it is\n  not obvious from the subject. The \"what\" and \"how\" live in the code; summarize them only when the\n  commit is large.\n- When a branch has grown out of that shape, rewrite it into that order before review instead of\n  stacking fix-up commits.\n\n### Code Quality\n\n\n#### Sanity\n\n- Remember to keep your code DRY.\n- Do not leave debug logging or temporary names in the final diff.\n- Only add comments for crucial information that is not self-explanatory. Keep your comments constrained to 1 short sentence (10-ish words) maximum. Focus on explaning the why/issue rather than implementation details.  \n- Write one changeset per patch/minor/major change. Keep the changeset message constrained to 1 short sentence or 2 maximum, focused on the bug fix, feature or breaking changes. Don't explain the internals or implementation details.\n\n#### Naming\n\n- Use names that explain the domain idea, not the implementation trick.\n- Prefer specific names over short names when the value crosses more than a few lines.\n- Name booleans as questions or states, such as `isReady`, `hasSubscribers`, or `shouldFlush`.\n- Name functions by the action they perform, such as `resolveLoaderData()` or\n  `markContainerReady()`.\n- Avoid vague names like `data`, `item`, `temp`, `handle`, `process`, or `doWork` unless the local\n  scope makes the meaning obvious.\n- Keep existing public API names unless the task is intentionally changing the API.\n\n#### Control Flow\n\n- Prefer early returns for invalid, empty, unsupported, or already-handled cases.\n- Avoid deep nesting when a guard clause can make the main path easier to read.\n- Keep the success path visible at the outer indentation level when possible.\n- Do not use clever boolean expressions when a named condition or small helper would be clearer.\n- Keep error and compatibility branches explicit so reviewers can see why they exist.\n\n#### Modularity\n\n- Keep functions focused on one responsibility.\n- Extract a helper when a block has a clear name, is reused, or hides the main path.\n- Do not extract helpers only to move complexity around; the caller should become easier to read.\n- Keep helpers close to their first use unless they are shared across files.\n- Prefer local semantic helpers over broad abstractions.\n- Keep consumer- or framework-specific carve-outs (magic values, special cases) at the boundary that\n  owns that knowledge; do not push them into a generic lower-level utility that should stay agnostic.\n\n#### Review Standard\n\nBefore finishing, read the changed code as if you are new to the package:\n\n1. Can a junior developer explain what each name represents?\n2. Can an AI agent identify the main path without following deeply nested branches?\n3. Are edge cases handled by clear guard clauses or named helpers?\n4. Is the change modular without hiding important state or protocol boundaries?\n\nIf the answer is no, simplify the code before calling the task complete.\n\n### Code Style\n\nPrettier and ESLint define style. Keep semicolons, single quotes, two-space indentation, trailing\ncommas where configured, and always use braces for control flow.\n\nNaming conventions:\n\n| Pattern | Usage |\n| --- | --- |\n| `use*` | Hooks called in component/task scope |\n| `*$` | QRL boundary extracted by the optimizer |\n| `create*` | Factory functions |\n| `*.unit.ts(x)` | Vitest unit files |\n| `*.spec.ts(x)` | Vitest spec files |\n| `*.e2e.ts` | Playwright e2e files |\n\n### Security And Supply Chain\n\nTreat security-sensitive changes as behavior changes even when they look like config, dependency,\nor CI maintenance.\n\n#### Security Review Trigger\n\nPause for a focused security pass when a change touches:\n\n- authentication, authorization, sessions, cookies, redirects, URL parsing, filesystem paths, SSR,\n  serialization, HTML/script output, request handling, or server adapters\n- dependency versions, lockfiles, package manager settings, release scripts, publishing scripts, or\n  build tooling\n- GitHub Actions, reusable workflows, workflow permissions, tokens, secrets, cache keys, artifact\n  upload/download, or deployment credentials\n\nUse the changed diff as the starting point. Check directly supporting files when needed, but do not\nturn a small change into a repository-wide security scan unless the user asks.\n\n#### What To Check\n\n- Identify the trust boundary: attacker-controlled input, untrusted dependency code, untrusted CI\n  event data, secrets, tokens, publish credentials, or generated output.\n- Find the closest existing guard and the sink it protects. Do not claim safety from a broad\n  intuition; point to the concrete validation, escaping, permission, or isolation boundary.\n- Prefer fail-closed behavior for malformed input, unknown modes, unsupported hosts, and missing\n  config.\n- Keep secrets out of logs, snapshots, artifacts, caches, generated files, browser output, and error\n  messages.\n- When changing dependencies or build tools, check for new install scripts, binary downloads,\n  network fetches, transitive tool execution, license or provenance surprises, and lockfile drift.\n\n#### GitHub Actions\n\nWhen editing `.github/workflows/**` or action-related scripts:\n\n- Keep `permissions:` least-privilege at the workflow or job level.\n- Do not introduce `pull_request_target` for code checkout/build/test of untrusted PR content unless\n  the workflow is explicitly designed to avoid running attacker-controlled code with secrets.\n- Avoid passing secrets to forked PRs, third-party actions, shell commands that print env, or\n  generated artifacts.\n- Prefer trusted first-party actions. For new third-party actions, pin to a full commit SHA or\n  document why a moving tag is acceptable.\n- Treat cache restore keys and artifact paths as untrusted input surfaces. Avoid broad paths that can\n  poison future jobs or expose credentials.\n- Quote shell variables and avoid `eval`, curl-piped shells, and unchecked interpolation of GitHub\n  context values into shell commands.\n\n#### Verification\n\nFor security-sensitive changes, record the focused security reasoning in the final response:\n\n1. What boundary changed?\n2. What guard or invariant prevents abuse?\n3. What focused test, lint, config check, or manual inspection covered it?\n\nIf you cannot verify the security property locally, say exactly what remains unverified.\n\n### Test Driven Development\n\nUse test-driven development for behavior changes and bug fixes.\n\n#### Required Workflow\n\n1. Identify the observable behavior or invariant before editing implementation code.\n2. Add or update the closest focused test that proves the behavior.\n3. Run that test before the implementation change when feasible and confirm it fails for the\n   expected reason.\n4. Make the smallest implementation change that satisfies the test.\n5. Rerun the focused test and keep iterating until it passes.\n6. Run any broader verification required by the touched surface, such as API docs, optimizer\n   snapshots, build output, or e2e coverage.\n\n#### Test Selection\n\n- Prefer unit/spec tests next to the changed code.\n- Use optimizer fixtures and snapshots for Rust transform behavior.\n- Use e2e tests only when the behavior depends on a real browser, navigation, streaming, SSR/CSR\n  integration, adapter behavior, or fixture app wiring.\n- For serialization, hydration, streaming, or loader protocol changes, test both the writer and the\n  reader path.\n- For compatibility behavior, test both the current API path and the supported deprecated path.\n\n#### Exceptions\n\nDocs-only, rules-only, formatting-only, dependency metadata, and generated-output maintenance\nchanges do not need a failing product test first. They still need the narrowest relevant\nverification, such as formatting, Ruler dry-run, generated-output checks, or docs build checks.\n\nIf dependencies, missing generated artifacts, or local environment constraints prevent a pre-fix\ntest run, write the focused test first, record the blocker, and run the test as soon as the blocker\nis resolved.\n\n### Boundaries\n\n- Preserve user work and unrelated changes. Do not reset or revert unrelated files.\n- Keep edits scoped to the package, generated-file boundary, and verification surface implied by the\n  task.\n- Do not commit `.only` tests.\n- Do not skip tests for behavior changes; use the closest focused test first.\n\n### No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n#### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n\n\n\n<!-- Source: .ruler/README.md -->\n\n# Ruler Setup\n\nThis project uses [Ruler](https://github.com/intellectronica/ruler) to keep AI assistant instructions in one committed source of truth.\n\n## Source Of Truth\n\n```\n.ruler/\n├── AGENTS.md      # Repo-wide guidance + always-on rules (appended at the end)\n├── skills/        # Shared source skills propagated by Ruler\n└── ruler.toml     # Ruler agent configuration\n```\n\nUse `.ruler/AGENTS.md` for always-on repository context and rules (the rules live as sections at the\nend of that file). Use `.ruler/skills/` for task-specific workflows that should be loaded only when\nrelevant.\n\nAlways-on rules currently in `.ruler/AGENTS.md`:\n\n- `changeset-conventions`\n- `commit-conventions`\n- `code-quality`\n- `generated-output-boundaries`\n- `guidance-source-of-truth`\n- `no-hydration-terminology`\n- `security-and-supply-chain`\n- `test-driven-development`\n\nCurrent source skills:\n\n- `qwik-core-development`\n- `qwik-router-development`\n- `qwik-optimizer-development`\n- `qwik-e2e-verification`\n- `qwik-docs-development`\n- `qwik-guidance-maintenance`\n\nThe `qwik-` prefix is intentional. Ruler copies skills into assistant-native directories where they\ncan appear beside personal and plugin skills, so the prefix keeps these repo skills recognizable\noutside the `.ruler/` tree.\n\nRoot `AGENTS.md` and `CLAUDE.md` are generated by Ruler but committed (so fresh clones and worktrees\nhave the always-on guidance immediately). The generated skill directories (`.claude/skills/`,\n`.codex/skills/`) and the rest of `.claude/`/`.codex/`/`.cursor/` stay local and gitignored — run\n`ruler apply` to materialize the skills. Never edit a generated file directly — update `.ruler/`,\nrun `ruler apply`, and commit the regenerated root files.\n\n## AI Config Builder\n\nTreat Ruler as the source layer and the selected assistant as the output layer.\n\nWhen you are setting up or debugging an assistant-specific config:\n\n1. Identify the target assistant and Ruler agent id.\n2. Read this file and `.ruler/ruler.toml`.\n3. Research the target assistant's current native instruction, rule, skill, config, and policy\n   formats when the mapping is ambiguous.\n4. Map `.ruler` files by semantic role, not by filename.\n5. Run `ruler apply --agents <agent>`.\n6. Verify that the generated files contain the expected source guidance and skills.\n\n| Ruler source | Semantic role | Builder action |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Repo-wide AI guidance + always-on rules | Generate into the target assistant's primary native guidance file. |\n| `.ruler/skills/*/SKILL.md` | Task-triggered workflows | Copy to the target assistant's native skills directory when supported. |\n| `.ruler/ruler.toml` and Ruler MCP config | Agent selection, output paths, MCP/config | Generate or merge native config only where Ruler and the target assistant support it. |\n\nDifferent tools use words like \"rules\" for different things. A native rules file may mean\nnatural-language guidance, directory-scoped steering, MCP config, hooks, or command execution\npolicy. Check current docs or the installed Ruler adapter before creating or copying a tool-specific\nfile.\n\n## Markdown Guidance Bundle\n\nThe AI-agnostic Markdown guidance bundle is `.ruler/AGENTS.md` (repo-wide context plus the always-on\nrules appended at its end) together with this `.ruler/README.md`.\n\nRuler concatenates that bundle and writes it to each selected assistant's native AI guidance file.\nUse source markers in the generated file to verify inclusion. Do not bypass Ruler by copying these\nMarkdown files into a tool-specific directory whose format has not been verified.\n\nIf you are an AI assistant building local config for a target tool, research that tool's current\nnative guidance, skill, config, and policy formats before adding any tool-specific output. Map\n`.ruler` files by what they mean, not by filename: Markdown guidance belongs in the assistant's\nnative AI guidance surface, skills belong in native skills if supported, and command-permission\npolicy belongs only in a separately researched policy format. For Codex, Ruler includes all\n`.ruler` Markdown guidance in generated `AGENTS.md`; `.codex/rules/*.rules` is command policy, not\nMarkdown guidance.\n\n### Worked Example: Codex\n\nCurrent Ruler and OpenAI Codex behavior maps this repo's sources as follows:\n\n| Ruler source | Codex-native output | Verify after `ruler apply --agents codex` |\n| --- | --- | --- |\n| `.ruler/AGENTS.md` | Generated root `AGENTS.md` | `rg -n 'Source: .ruler/AGENTS.md' AGENTS.md` |\n| `.ruler/skills/*/SKILL.md` | `.codex/skills/*/SKILL.md` | `find .codex/skills -name SKILL.md` |\n| Ruler MCP config | `.codex/config.toml` when MCP config is generated | `test -f .codex/config.toml` when MCP/config is expected |\n\nCodex `.rules` files are command execution policy files that use `prefix_rule(...)`. They are not a\ntarget for `.ruler/AGENTS.md` prose guidance. If Codex command policy is needed, maintain it as a\nseparate local or team policy using OpenAI Codex's `.rules` format; do not treat it as Ruler\nMarkdown guidance.\n\nExpected Codex check:\n\n```bash\nruler apply --agents codex\nrg -n 'Source: .ruler/AGENTS.md' AGENTS.md\nfind .codex/skills -name SKILL.md\n```\n\n## What Is Committed vs Regenerated\n\nOnly the root `AGENTS.md` and `CLAUDE.md` are **committed** generated outputs, so a fresh clone or\nworktree has the always-on guidance immediately (`.ruler/ruler.toml` keeps `[gitignore] enabled = false`\nso Ruler leaves those two files tracked). The generated skill copies (`.claude/skills/`,\n`.codex/skills/`) are **gitignored** — regenerate them locally with `ruler apply`. This keeps skill\nand note edits from appearing three times (source plus two copies) in every PR.\n\nTo change guidance, edit `.ruler/`, run `ruler apply`, and commit the regenerated root files\nalongside your `.ruler/` change. Never hand-edit the generated files. A CI check\n(`.github/workflows/ruler-check.yml`) re-runs `ruler apply` and fails if the committed root files\ndrift from `.ruler/`.\n\n## Generate Local Assistant Files\n\nInstall Ruler if you do not already have it:\n\n```bash\nnpm install -g @intellectronica/ruler\n```\n\nOr run it without installing (the form used by fresh worktrees and CI):\n\n```bash\npnpm dlx @intellectronica/ruler@0.3.42 apply --no-gitignore --no-mcp\n```\n\nGenerate files for the default configured agents:\n\n```bash\nruler apply\n```\n\nGenerate files for a specific assistant:\n\n```bash\nruler apply --agents claude\nruler apply --agents codex\n```\n\nGenerate files for multiple assistants:\n\n```bash\nruler apply --agents claude,codex\n```\n\n## Project And Personal Configuration\n\nUse `.ruler/` for team-shared instructions and project conventions that should travel with the repo.\n\nUse `~/.config/ruler/` for personal preferences, local workflow shortcuts, API keys, and personal MCP servers:\n\n```bash\nruler init --global\n```\n\nIf it helps everyone working in this repo, add it to `.ruler/`. If it only helps your local setup,\nkeep it in your global Ruler config.\n\n## Updating Instructions\n\nEdit `.ruler/AGENTS.md` for repository-wide guidance and always-on rules (the rules are sections at\nthe end of that file). Edit the relevant `.ruler/skills/<skill-name>/SKILL.md` file for\npackage-specific or workflow-specific guidance.\n\nIf a code task proves a skill or reference stale, update that guidance as part of the same task when\nthe scope allows it.\n\nThen regenerate the local assistant files:\n\n```bash\nruler apply --agents <your-tool>\n```\n\nDo not update generated files like `CLAUDE.md` or `AGENTS.md` by hand. They will be overwritten the\nnext time Ruler runs.\n\n## Skills\n\nAuthor shared skills under `.ruler/skills/` (the committed source). Ruler copies them into each\nenabled agent's skill directory (`.claude/skills/` for Claude, `.codex/skills/` for Codex); those\ncopies are gitignored, so run `ruler apply` once per fresh clone or worktree to materialize them.\nNever hand-edit the copies — edit `.ruler/skills/` and regenerate.\n\nKeep each skill focused:\n\n- Use frontmatter with `name` and a trigger-oriented `description`.\n- Put the fast path in `SKILL.md`.\n- Move long notes into `references/` only when progressive disclosure helps.\n- Keep always-on policy in `.ruler/AGENTS.md`, not duplicated in every skill.\n- Keep durable maintainer lessons current. Prefer updating the specific skill/reference that was\n  wrong over adding broad prose here.\n\n<!-- File: .ruler/skills/qwik-core-development/references/core-notes.md (Tokens: ~300 | Category: anthropic-skill) -->\n# References Skill\n\nPath: `.ruler/skills/qwik-core-development/references/core-notes.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/.ruler/skills/qwik-core-development/references/core-notes.md)\n\n<!-- File: .ruler/skills/qwik-core-development/SKILL.md (Tokens: ~534 | Category: anthropic-skill) -->\n---\nname: qwik-core-development\ndescription: Use when modifying or reviewing Qwik core package code under packages/qwik, especially reactive primitives, signals, VNodes, cursor behavior, QRLs, optimizer-facing runtime behavior, or Qwik core tests.\n---\n\n# Qwik Core Development\n\nUse this skill for `packages/qwik/**` work. Keep the normal repo-wide instructions from `.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify the touched subsystem before editing: reactive primitives, VNode/client diffing, cursor, QRL/serialization, SSR, hooks, or tests.\n2. Read the smallest relevant source and tests before making changes.\n3. Find the invariant that must stay true across SSR, resume, client render, and serialization when\n   the touched code crosses those boundaries.\n4. After implementation changes, immediately run the closest focused Vitest file with `pnpm vitest run <path>`. Do not use `pnpm test.unit`.\n5. If touching Rust optimizer code, load `qwik-optimizer-development` instead of treating the change as TypeScript-only.\n\n## When to Load Detailed Notes\n\nRead `references/core-notes.md` only when the task involves:\n\n- async signals, computed signals, polling, or signal invalidation;\n- QRL creation, `$` transform behavior, or serialization issues;\n- VNode, cursor, or DOM diff behavior;\n- Qwik core tests that use `$()`, `retryOnPromise`, or private runtime state;\n- an unfamiliar pattern in `packages/qwik/src/core`.\n\nDo not load the reference for simple docs, package metadata, formatting, or unrelated monorepo work.\n\n## Core Reminders\n\n- Prefer existing Qwik runtime patterns over new abstractions.\n- Keep state ownership explicit. For serialized or streamed data, update emit and consume paths\n  together and add a round-trip or regression test.\n- Preserve compatibility deliberately. If deprecated input remains accepted, test both deprecated and\n  current behavior.\n- Use `$`-suffixed functions and `$()` in tests when a QRL boundary is expected.\n- Avoid manual QRL construction unless nearby code already does it for the same reason.\n- Keep tests focused and close to the behavior that changed; add e2e coverage only when browser,\n  streaming, navigation, or integration timing is the behavior under test.\n- If the change affects public API, run `pnpm api.update` after the focused tests pass.\n- If this skill or `references/core-notes.md` is stale after your source inspection, update it before\n  finishing or record why guidance edits were out of scope.\n\n<!-- File: .ruler/skills/qwik-docs-development/SKILL.md (Tokens: ~1387 | Category: anthropic-skill) -->\n---\nname: qwik-docs-development\ndescription: Use when writing, modifying, or reviewing Qwik docs content or docs-site code under packages/docs, including docs routes, MDX content, generated LLM outputs, docs build behavior, or docs-specific e2e tests.\n---\n\n# Qwik Docs Development\n\nUse this skill for `packages/docs/**` work. Keep the repo-wide rules from `.ruler/AGENTS.md` in\nforce.\n\n## Fast Path\n\n1. Identify whether the change is docs content, route/layout code, API docs surfacing, generated LLM\n   output, search/indexing, or deployment behavior.\n2. For docs content, follow the writing style below before changing site mechanics.\n3. For existing docs pages already in the LLM manifest, edit source content and regenerate only when\n   verification requires generated output.\n4. Documentation and API pages enter LLM outputs automatically through `createLlmsManifest()` in\n   `packages/docs/scripts/generate-llms.ts`; use curated entries for ordering and richer descriptions.\n5. When editing docs scripts, keep generation deterministic and add focused unit coverage for parser,\n   path, URL, or output-shape behavior.\n6. Prefer docs-specific commands from `packages/docs/package.json`.\n\n## Writing Style\n\nWrite Qwik docs for readers who are learning the concept while solving a concrete task.\n\n- Start with the user need and the Qwik concept in one or two plain paragraphs.\n- Split the page into short sections named after the concept or API, such as `useSignal()`,\n  `Passing signals to child components`, or `Nested objects and arrays`.\n- Explain the default case first, then reveal deeper, less common, or higher-cost cases later, this is done in a note block. There is short and long form notes in MDX.\n- Use complete, minimal examples with current v2 imports from `@qwik.dev/core`.\n- After each example, state what the example created or changed and what Qwik tracks, updates, or\n  serializes.\n- Prefer direct sentences over marketing claims or framework jargon. Define Qwik-specific terms\n  before relying on them.\n- Use notes sparingly for important mental models, tradeoffs, or pitfalls, such as avoiding store\n  destructuring or using `function` when a store method needs `this`.\n- Keep examples small enough to scan, but complete enough to paste into a demo or fixture.\n- Link demos after the core explanation; do not make the link carry the explanation.\n\n## Content Pattern\n\nFor concept docs, use this shape unless the page has a better existing local pattern:\n\n1. State the problem and divide the concept into the two or three choices users need to understand.\n2. Show the simplest API with a complete code example.\n3. Explain the important variable or object in the example in one short paragraph.\n4. Add a sharing, nesting, async, or advanced section only after the default case is clear.\n5. Include a short note for automatic tracking, serialization, or performance tradeoffs when that\n   knowledge prevents common mistakes.\n\n## Source Map\n\n- Docs routes and MDX: `packages/docs/src/routes/`\n- Docs components: `packages/docs/src/components/`\n- LLM generator: `packages/docs/scripts/generate-llms.ts`\n- Docs e2e: `e2e/docs-e2e/tests/`\n- Generated docs build output: `packages/docs/dist/`\n- Web fonts: `packages/docs/src/font-faces.ts` inlines the `*-subset-*` fonts from\n  `packages/docs/src/media/fonts/` and links the `*-latin-*` files for the remaining characters.\n  Regenerate a subset with fontTools:\n  `pyftsubset <latin file> --unicodes=\"<subsetUnicodeRange>\" --layout-features='*' --flavor=woff2 --output-file=<subset file>`,\n  then keep `restOfLatinUnicodeRange` equal to the rest of the Latin file's characters.\n\n## LLM Output Rules\n\nThe docs build can generate:\n\n- `dist/llms.txt`\n- `dist/llms-ctx.txt`\n- `dist/llms-ctx-full.txt`\n- curated markdown mirrors under `dist/docs/`\n\nDo not hand-edit generated files in `packages/docs/dist/`. Edit docs source or\n`packages/docs/scripts/generate-llms.ts`, then regenerate.\n\nKeep `llms.txt` and MCP on the same complete manifest. Documentation and API pages are discovered\nautomatically; curated entries provide ordering, descriptions, and additional landing pages.\n\n## Verification\n\nUse the narrowest relevant command:\n\n```bash\npnpm -C packages/docs generate.llms\npnpm -C packages/docs build\npnpm playwright test e2e/docs-e2e/tests/docs-smoke.spec.ts --config e2e/docs-e2e/playwright.config.ts --project chromium\n```\n\nSet `QWIK_LLMS_BASE_URL` only when intentionally testing alternate generated links.\n\n## Stop Conditions\n\n- Keep additional landing pages in the curated entries of the shared manifest.\n- Stop and run or request the relevant docs build when route generation or static output behavior is\n  changed.\n- If docs source or scripts contradict this skill, update the skill before finishing or record why\n  guidance edits were out of scope.\n\n## No Hydration Terminology\n\nNever describe Qwik or any part of how Qwik works as hydration. Qwik does not hydrate. Qwik is\nresumable: the server serializes application state and listeners into the HTML, and the client\nresumes execution exactly where the server left off, without re-running component code or\nrebuilding the framework state.\n\n- Do not call any Qwik mechanism \"hydration\", \"hydrating\", \"rehydration\", \"partial hydration\",\n  \"progressive hydration\", \"selective hydration\", or \"island hydration\".\n- Do not describe Qwik components, containers, or apps as \"hydrated\" or \"needing to hydrate\".\n- Use the Qwik terminilogy instead: \"javascript streaming\", \"JIT preloading\", \"resumability\", \"resume\", \"resuming\", \"serialization\", \"deserialization\", and \"lazy execution\".\n- Describe client startup as Qwik resuming from serialized state, not as Qwik booting, mounting,\n  or hydrating the app.\n\n### Allowed Mentions\n\nThe word \"hydration\" may appear only when explicitly contrasting Qwik with hydration-based\nframeworks, and the sentence must make clear that hydration is what other frameworks do and what\nQwik avoids. For example: \"Unlike frameworks that hydrate on the client, Qwik resumes from\nserialized state.\" Never use hydration vocabulary, even casually or by analogy, to explain what\nQwik itself does.\n\n<!-- File: .ruler/skills/qwik-e2e-verification/SKILL.md (Tokens: ~1640 | Category: anthropic-skill) -->\n---\nname: qwik-e2e-verification\ndescription: Use when creating, modifying, debugging, or running Qwik Playwright e2e tests under e2e/, including router, adapters, docs, CLI, and React integration suites.\n---\n\n# Qwik E2E Verification\n\nUse this skill for Playwright e2e work in `e2e/**`. Keep the repo-wide rules from\n`.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify the suite: Qwik core app, Qwik Router, adapters, docs, CLI, or Qwik React.\n2. Run the dev rebuild first when testing Qwik runtime/router behavior.\n3. Use the suite's Playwright config and the browser-selection style that config expects.\n4. Prefer one focused e2e file before broad suite commands.\n5. When debugging app fixtures, inspect the matching `e2e/*/apps/` source before changing tests.\n6. Turn a failing behavior into the smallest deterministic regression. Avoid sleeps and broad\n   assertions when a route, marker, event, or serialized state check can prove the behavior.\n\n## Suites\n\n- Main Qwik e2e: `e2e/qwik-e2e/tests/`\n- Router e2e: `e2e/qwik-e2e/tests/qwikrouter/`\n- Adapter e2e: `e2e/adapters-e2e/tests/`\n- Docs e2e: `e2e/docs-e2e/tests/`\n- CLI e2e: `e2e/qwik-cli-e2e/tests/`\n- React integration e2e: `e2e/qwik-react-e2e/tests/`\n\nApps whose directory names contain `.prod` run in production mode under the shared Qwik dev server.\nKeep exact production-only assertions in those fixtures; regular fixtures must pass after either\n`build.core.dev` or `build.core`.\n\n## Commands\n\nMain Qwik e2e config uses `--browser`, not Playwright projects:\n\n```bash\npnpm build.core.dev\npnpm playwright test e2e/qwik-e2e/tests/events.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\npnpm playwright test e2e/qwik-e2e/tests/qwikrouter/nav.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\nFor timing-sensitive regressions, prefix the command with `GITHUB_ACTIONS=true` and use\n`--retries=0` to disable local `slowMo: 100` and expose races. Wait for a fresh completion marker\nafter lazy handlers; a completed click or previously populated output does not prove completion.\n\nSSR content can appear before the dynamically imported qwikloader registers listeners. Before\ntesting client handlers, wait for `window._qwikEv?.roots`; neither `commit` nor `load` guarantees\nthat the dynamic import has finished.\n\nThe brotli budget tests in `ssg-snapshot.e2e.ts` measure the built core chunk, so they need a\nproduction `pnpm build.core` — `build.core.dev` leaves core unminified and blows the budget by ~4%.\nBefore believing a budget failure, rebuild with `build.core` and re-run `pnpm test.e2e.router.ssg`.\n\nPlaywright's `reuseExistingServer: !CI` means a dev server left over from an earlier run serves\nstale bundles, so a local pass can hide a build break that CI catches. Kill port 3301 before\ntrusting a green local sweep after optimizer or bundler changes.\n\nThe CLI e2e scaffolds starters with `create-qwik` and runs their own `npm run dev`/`build` scripts,\nso it is the only suite that exercises a real starter's Vite dev server and production builds; the\nshared Qwik dev server above passes its own resolve conditions. Run it locally with `CI=1` so the\nscaffolds land inside the workspace, where pnpm's `allowBuilds` lets `sharp` build (a `/tmp`\nscaffold fails with `ERR_PNPM_IGNORED_BUILDS`), and after `pnpm build.platform.copy` if\n`packages/optimizer/bindings` is missing. It scaffolds from `packages/create-qwik/dist`, so run\n`pnpm build.cli` after editing `starters/`, or the suite silently tests the previous starters:\n\n```bash\nCI=1 pnpm --filter qwik-cli-e2e exec vitest run --config=vite.config.ts tests/external-library.spec.ts\n```\n\nCommands the CLI e2e spawns inherit Vitest's `NODE_ENV=test`, which Vite treats as a development\nbuild; pass `NODE_ENV` explicitly through `runCommandUntil` when a test depends on the build mode.\n\nFor HTTP cache assertions, use a fresh `launchPersistentContext()` profile per test and remove\nit after closing the context. WebKit's default ephemeral context has no network disk cache, so\n`fetch()` may hit the server despite a fresh `Cache-Control` response. Keep request routing off\nfor cache tests: Playwright interception disables HTTP caching.\n\nOther suites may use named Playwright projects. Check their config before choosing flags:\n\n```bash\npnpm playwright test e2e/docs-e2e/tests/docs-smoke.spec.ts --config e2e/docs-e2e/playwright.config.ts --project chromium\npnpm playwright test e2e/adapters-e2e/tests/adapters.spec.ts --project=chromium --config e2e/adapters-e2e/playwright.config.ts\npnpm playwright test e2e/qwik-react-e2e/tests/reactify.spec.ts --project=chromium --config e2e/qwik-react-e2e/playwright.config.ts\n```\n\n## SSG snapshot suite\n\n`e2e/qwik-e2e/tests/qwikrouter/ssg-snapshot.e2e.ts` asserts two independent things against the built\n`qwikrouter-ssg-snapshot` app:\n\n- **Serialized output goldens** — `expected.state.txt` and `expected.ssg.html`. Regenerate after an\n  intentional serialization or SSR output change with `pnpm test.e2e.router.ssg.update`.\n- **Brotli size budgets** — `CORE_BROTLI_BUDGET` / `PRELOADER_BROTLI_BUDGET` /\n  `QWIKLOADER_BROTLI_BUDGET` constants in that spec. A core change that grows a bundle fails with the\n  exact over-budget byte count; bump the matching constant when the growth is intentional.\n\nTraps:\n\n- The core budget also runs after dev builds; measure it only after `pnpm build.core`.\n- `test.e2e.router.ssg.update` regenerates the goldens only; it never touches the budgets, so a\n  budget breach survives the update.\n- The update run can exit non-zero because a sibling budget assertion failed, not the golden. \"N\n  passed\" with exit 1 usually means a budget breach — read the failing assertion instead of assuming\n  the golden is stale.\n- After rebasing onto a moved base the golden conflicts; regenerate it rather than hand-merging, then\n  re-run `pnpm test.e2e.router.ssg` (no update flag) to confirm it passes deterministically.\n\n## Stop Conditions\n\n- Stop and inspect the suite config when `--browser` versus `--project` is unclear.\n- Stop and report if browser binaries, build artifacts, or dependencies are missing.\n- Do not broaden to all e2e suites unless the user asks or the changed surface requires it.\n- If a test failure shows this skill has stale suite or command guidance, update the skill before\n  finishing or record why guidance edits were out of scope.\n\n<!-- File: .ruler/skills/qwik-guidance-maintenance/SKILL.md (Tokens: ~939 | Category: anthropic-skill) -->\n---\nname: qwik-guidance-maintenance\ndescription: Use when editing Qwik's .ruler guidance, adding or changing rules or skills, keeping AI guidance from going stale, updating assistant setup docs, or answering how Ruler should generate assistant-native guidance, skills, config, or policy for this repo.\n---\n\n# Qwik Guidance Maintenance\n\nUse this skill for `.ruler/**`, README AI assistant setup, dedicated rules, generated\nassistant-output boundaries, rule-vs-skill taxonomy work, and assistant-native config questions.\nAlso use it at the end of a code task when source inspection proves a loaded skill or reference is\nstale.\n\n## Fast Path\n\n1. Follow the Guidance Source Of Truth rule (in `.ruler/AGENTS.md`) for source layout, rule-vs-skill\n   taxonomy, generated assistant outputs, AI config builder behavior, skill naming, and stale-guidance policy.\n2. Follow the Generated Output Boundaries rule (in `.ruler/AGENTS.md`) before editing, regenerating,\n   or relying on generated output.\n3. Edit committed source files in `.ruler/`, not generated assistant outputs.\n4. Keep new durable policy in the narrowest source: `.ruler/AGENTS.md` for repo-wide context and\n   always-on rules, and `.ruler/skills/**` for task-specific workflows.\n5. For a target assistant, research the current native guidance, skill, config, and policy formats\n   when the mapping is ambiguous.\n6. Verify Ruler behavior with a dry run when the CLI is available.\n7. Verify generated guidance by checking source markers in the target assistant's native guidance\n   file and generated skills in the target assistant's native skills directory when supported.\n\n## Freshness Workflow\n\nWhen an agent uses a skill and current source contradicts it:\n\n1. Finish the user's product-code task first unless the guidance defect blocks the task.\n2. Update the narrowest `.ruler` source that was wrong.\n3. Prefer replacing stale details over appending another long lesson.\n4. Keep history-derived guidance behavioral and durable.\n5. Mention the guidance update in the final response so reviewers know why `.ruler` changed.\n\n## Source Map\n\n- Repo-wide guidance + always-on rules: `.ruler/AGENTS.md`\n- Human setup guide: `.ruler/README.md`\n- Ruler config: `.ruler/ruler.toml`\n- Source skills: `.ruler/skills/**/SKILL.md`\n- Generated outputs (committed): root `AGENTS.md` and `CLAUDE.md`; generated skill copies and\n  other `.claude/`/`.codex/`/`.cursor/` files stay local and gitignored\n\n## Rule And Skill Workflow\n\n- For a new always-on policy, add or update a rule section in `.ruler/AGENTS.md` and its summary in\n  the Source Rules index there.\n- For package-specific details, update the package skill or a directly linked reference.\n- For long notes, add a `references/` file only when progressive disclosure keeps the skill body\n  smaller and clearer.\n- For assistant setup changes, keep human setup steps in `.ruler/README.md` and behavioral agent\n  rules in `.ruler/AGENTS.md`.\n- For assistant output questions, use the `guidance-source-of-truth` rule unless current Ruler or\n  target-tool docs have changed.\n- Treat command execution policy as a separate native format from prose guidance. Do not translate\n  `.ruler/AGENTS.md` guidance into command-policy files just because the target tool calls them \"rules\".\n\n## Verification\n\nUse the target assistant for the change. For a Codex example:\n\n```bash\nnpx @intellectronica/ruler apply --agents codex --dry-run --no-mcp --no-gitignore\nruler apply --agents codex\nrg -n 'Source: .ruler/AGENTS.md' AGENTS.md\nfind .codex/skills -name SKILL.md\npnpm prettier --check .ruler README.md .gitignore\ngit diff --check\n```\n\nIf `npx` cannot reach the registry, retry only when network approval is appropriate; otherwise\nrecord the blocker and still run local formatting/diff checks.\n\n## Stop Conditions\n\n- Stop before editing generated assistant outputs directly.\n- Stop if a proposed rule duplicates detailed skill content instead of summarizing durable policy.\n- Stop if current Ruler or target-tool docs contradict the Guidance Source Of Truth rule in\n  `.ruler/AGENTS.md`.\n\n<!-- File: .ruler/skills/qwik-optimizer-development/SKILL.md (Tokens: ~2112 | Category: anthropic-skill) -->\n---\nname: qwik-optimizer-development\ndescription: Use when modifying or reviewing the Qwik optimizer under packages/optimizer, Rust transform code, WASM/NAPI bindings, optimizer snapshots, or optimizer-facing runtime behavior.\n---\n\n# Qwik Optimizer Development\n\nUse this skill for `packages/optimizer/**` and Rust optimizer work. Keep the repo-wide rules from\n`.ruler/AGENTS.md` in force.\n\n## Fast Path\n\n1. Identify whether the change is Rust transform logic, snapshots, WASM bindings, NAPI bindings, or\n   TypeScript optimizer-facing integration.\n2. Read the closest Rust source, fixture, snapshot, and runtime helper that consumes the emitted\n   shape before editing.\n3. Keep transform behavior deterministic: prefer explicit parser/AST cases and stable ordering over\n   source-text heuristics.\n4. Use Rust-focused verification first; use `pnpm build.rust` only when a full binding/WASM rebuild\n   is required. It is the only build step that needs the Rust toolchain and `wasm-pack`.\n5. If a runtime/core change is also involved, load `qwik-core-development` for that slice.\n\n## Source Map\n\n- Rust optimizer core: `packages/optimizer/core/src/`\n- Rust fixtures: `packages/optimizer/core/src/fixtures/`\n- Rust snapshots: `packages/optimizer/core/src/snapshots/`\n- WASM bindings: `packages/optimizer/wasm/`\n- NAPI bindings: `packages/optimizer/napi/`\n- Optimizer package entry points: `packages/optimizer/src/`\n- Vite/Rollup integration: `packages/qwik-vite/src/`\n\n## Verification\n\nUse the smallest command that covers the change:\n\n```bash\npnpm lint.rust\npnpm test.rust\npnpm test.rust.update\npnpm build.rust\npnpm vitest run packages/qwik-vite/src/plugins/plugin.unit.ts\n```\n\n`pnpm test.rust` maps to `make test`, which runs Cargo tests for\n`packages/optimizer/core/Cargo.toml`. Use `pnpm test.rust.update` only when snapshot updates are\nintentional. The repo's own scripts and tests run on the TypeScript optimizer, and CI runs core\nspecs only there. To run a focused spec on the Rust optimizer, rebuild the native binding\n(`pnpm build.rust.dev`; `scripts/index.ts --optimizer --platform-binding --dev` skips WASM) and\nrerun the spec with `QWIK_OPTIMIZER=rust`.\n\n## Baselining a TypeScript optimizer failure\n\nThe repo's unit and e2e suites run on the TypeScript optimizer, so a parity bug shows up as a\nfailing core test rather than a snapshot diff. To tell a TS-only bug from a pre-existing failure:\n\n1. `pnpm build.platform.copy` downloads the published Rust bindings (no toolchain needed).\n2. Rerun the failing file with `QWIK_OPTIMIZER=rust`, which overrides `tsOptimizer` for the run.\n3. Transform the failing source with both `createOptimizer`s (`packages/optimizer/dist/index.mjs`\n   and `packages/qwik/dist/ts-optimizer.mjs`) using the plugin's options (server: `hoist`,\n   `minify: 'simplify'`, plus the client `stripCtxName`/`stripExports` and server\n   `stripEventHandlers` lists from `packages/qwik-vite/src/plugins/plugin.ts`) and diff the\n   outputs; without the strip options a diff can look identical while the real build differs.\n   Call sites (`.w([captures])`, `q:p`, stripped `q_qrl_*` sentinels) diverge more often than\n   segment bodies.\n   When an e2e app misbehaves, baseline the app build too, not only the router library: the dev\n   server compiles the fixture apps with whichever optimizer its `qwikVite()` call selects.\n   Compare `segment.entry` per display name as well, in `mode: 'prod'`: a grouping gap shows up\n   only as a different bundle count in the app's `q-manifest.json`, never as a failing test.\n   The router SSG snapshot e2e runs on both optimizers in CI, so any output difference between\n   them fails there; keep it that way instead of skipping one leg.\n4. Rebuild the bundle with `pnpm build --optimizer --dev` before rerunning core tests; vitest loads\n   `packages/qwik/dist/ts-optimizer.mjs`, not the optimizer source.\n\n## TypeScript-only syntax\n\nEvery pass after `stripTypeScript` parses its input as `.js`, and oxc drops syntax that only parses\nas TypeScript (parameter decorators) from those ASTs, so what it references looks unused and gets\nDCE'd. Lower such syntax inside `stripTypeScript` itself, threading the option to every call site\n(see `decorator`); lowering later in the Vite plugin is too late. Segments are served as `.js`, so\nVite's own `vite:oxc` pass never touches them.\n\n## JSX tag names\n\nRust transpiles JSX before its Qwik transform, so SWC's rule decides what a tag is: only a tag\nstarting with `[a-z]` is an intrinsic element, while `<Foo>`, `<_Foo>` and the object of\n`<ui.Home>` read bindings. In the TypeScript optimizer, ask oxc-walker's `isReferenceIdentifier`\n(or `isNonReferenceIdentifier`) whether a `JSXIdentifier` reads a binding, and `isHtmlElement`\nwhether a tag is intrinsic.\n\n## Const prop bag\n\nThe runtime trusts a const prop to stay the same for the component's lifetime: reads never\nsubscribe, `_wrapProp` returns const values unwrapped, and SSR skips serializing all-const props.\nIf one changes anyway, the child only re-renders and its `useComputed$`/`useTask$` readers go stale.\nSo either optimizer may put a prop, including a `_fnSignal`/`_wrapProp` wrapper, in the const bag\nonly when every local it reads survives re-renders: imports, `const` bindings with a static\ninitializer (`use*`, `*$`, `*Qrl` calls), or params. Render-computed locals and `_restProps` copies\nare recreated per render and belong in the var bag. Unit specs pass on the TS optimizer alone, so\npin classification with a `test_input!` snapshot and check the runtime with `QWIK_OPTIMIZER=rust`.\n\n## Worker pool changes\n\nThe transform worker pool (`packages/ts-optimizer/src/worker-pool.ts`) never starts real workers\nunder vitest: the worker entry cannot resolve the `.js`-suffixed imports of the TypeScript sources,\nso pool tests silently fall back to in-process transforms. Verify worker behaviour against the\nbuilt bundle instead: `pnpm build --optimizer`, then a Node script that imports\n`packages/qwik/dist/ts-optimizer.mjs`, runs a few transforms, and reads `VmData` from\n`/proc/self/status` before spawning a child process. fork() fails with ENOMEM when one mapping\nexceeds RAM plus swap, and the raw-transfer buffers of several threads in one process coalesce into\none mapping (three workers made an 18 GB mapping on a 16 GB host), so keep raw-transfer parsing\nand other multi-gigabyte reservations out of the workers. `QWIK_TS_OPTIMIZER_RAW_TRANSFER=0` turns\nraw transfer off in the host as well when a spawn still fails with ENOMEM.\n\n## Generated Binding Names\n\nBoth optimizers invent bindings (`_rawProps`, `_defaultValue`, the `use*` destructure flattening).\nNeither gets a scope-correct rename for free, so name uniqueness is the transform's job:\n\n- Rust: `private_ident!` plus swc hygiene is not enough once a binding is captured by an extracted\n  segment. Hygiene commits one name per `SyntaxContext` in source order, and segments lifted to\n  module scope are sibling scopes that each keep the base name — the enclosing component scope then\n  carries a duplicate declaration hygiene never revisits. Number generated names at creation.\n- TypeScript: there is no hygiene pass at all, and the rewrite matches identifiers by name. Number\n  every generated binding, skip names inside destructuring patterns, and resolve references through\n  oxc-walker's `ScopeTracker` so names re-bound in a nested scope keep their declaration. Do not\n  bail out of the rewrite on shadowing — Rust still consolidates, and the snapshot diverges.\n- Props objects (`_rawProps`) follow Rust hygiene: each takes the lowest `_rawProps{n}` not held by\n  a props object bound beside it, in emission order. A segment file is its own module; inline `.s()`\n  bodies share one, so never hardcode a suffix — go through `rawPropsBindingNames`.\n\nPin cross-optimizer behavior with a Rust `test_input!` snapshot registered in\n`packages/ts-optimizer/tests/optimizer/snapshot-options.ts`, not with string asserts in a TS test:\nonly the convergence suite catches parity drift. Its mismatches fail in the final\n`convergence summary` test, so a `-t` filter that skips it reports a false pass.\n\n## Hard Rules\n\n- Do not hand-edit generated optimizer build output in `dist/`, `lib/`, or `target/`.\n- Do not update snapshots without understanding the transform behavior change.\n- Add or update a transform fixture/snapshot for every optimizer behavior change, including negative\n  cases where the transform must not run.\n- Keep optimizer output and runtime JSX/QRL/loader semantics in sync. If a transform changes an\n  emitted attribute, import, segment, or capture shape, inspect the runtime consumer too.\n- After touching `packages/optimizer/core/`, do not claim verification without Rust test/build\n  evidence or a recorded blocker.\n- If this skill becomes stale after source inspection, update it before finishing or record why\n  guidance edits were out of scope.\n\n<!-- File: .ruler/skills/qwik-router-development/SKILL.md (Tokens: ~725 | Category: anthropic-skill) -->\n---\nname: qwik-router-development\ndescription: Use when modifying or reviewing Qwik Router code under packages/qwik-router, including runtime routing, buildtime route generation, middleware, adapters, SSG, markdown/MDX handling, or router tests.\n---\n\n# Qwik Router Development\n\nUse this skill for `packages/qwik-router/**` work. Keep the repo-wide rules from `.ruler/AGENTS.md`\nin force.\n\n## Fast Path\n\n1. Classify the touched router surface before editing: runtime, buildtime, middleware, adapter, SSG,\n   markdown/MDX, or Vite integration.\n2. Read the smallest source file plus the closest `*.unit.ts` or `*.spec.ts` file before changing\n   behavior.\n3. For middleware, loader, action, or navigation changes, trace handler ordering and shared state\n   from request creation through response/client consumption before editing.\n4. For unit/spec coverage, run `pnpm vitest run <path>`.\n5. For browser/router behavior, rebuild first with `pnpm build.core.dev`, then use the focused\n   Qwik Router e2e command.\n6. If public router API markdown changes are expected, run `pnpm api.update` after tests pass.\n\n## Source Map\n\n- Runtime: `packages/qwik-router/src/runtime/src/`\n- Buildtime route generation: `packages/qwik-router/src/buildtime/`\n- Vite integration: `packages/qwik-router/src/buildtime/vite/`\n- Middleware: `packages/qwik-router/src/middleware/`\n- Adapters: `packages/qwik-router/src/adapters/`\n- SSG: `packages/qwik-router/src/ssg/`\n- Router e2e tests: `e2e/qwik-e2e/tests/qwikrouter/`\n\n## Verification\n\nUse the closest command that covers the changed surface:\n\n```bash\npnpm vitest run packages/qwik-router/src/buildtime/routing/parse-pathname.unit.ts\npnpm vitest run packages/qwik-router/src/runtime/src/client-navigate.unit.ts\npnpm build.core.dev\npnpm playwright test e2e/qwik-e2e/tests/qwikrouter/nav.e2e.ts --browser=chromium --config e2e/qwik-e2e/playwright.config.ts\n```\n\nDo not use `--project chromium` with `e2e/qwik-e2e/playwright.config.ts`; this config expects the\n`--browser=chromium` flag.\n\n## Quality Bar\n\n- Keep middleware, loader, and action ordering explicit. Do not add broad fallbacks that hide which\n  module owns a request.\n- Add regression tests for the exact route shape or request mode that failed, such as index route,\n  layout loader, page loader, redirect, action, or SPA navigation.\n- When changing serialized route state or loader data, update both server output and client\n  consumption in the same change.\n- Preserve deprecated Qwik City compatibility only when current source still supports it, and keep\n  compatibility warnings/tests intentional.\n- If router work exposes stale guidance here or in `.ruler/AGENTS.md`, update the guidance before\n  finishing or record why guidance edits were out of scope.\n\n## Stop Conditions\n\n- Stop and inspect the generated API workflow before hand-editing any `*.api.md` file.\n- Stop and switch to `qwik-e2e-verification` when most of the work is Playwright setup/debugging.\n- Stop and run `pnpm api.update` if exported router API changed.\n\n<!-- File: packages/browser-extension/.wxt/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# .wxt Skill\n\nPath: `packages/browser-extension/.wxt/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/.wxt/tsconfig.json)\n\n<!-- File: packages/browser-extension/CHANGELOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Browser-extension Skill\n\nPath: `packages/browser-extension/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/CHANGELOG.md)\n\n<!-- File: packages/browser-extension/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Browser-extension Skill\n\nPath: `packages/browser-extension/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/package.json)\n\n<!-- File: packages/browser-extension/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Browser-extension Skill\n\nPath: `packages/browser-extension/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/browser-extension/tsconfig.json)\n\n<!-- File: packages/create-qwik/CHANGELOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Create-qwik Skill\n\nPath: `packages/create-qwik/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/CHANGELOG.md)\n\n<!-- File: packages/create-qwik/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Create-qwik Skill\n\nPath: `packages/create-qwik/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/package.json)\n\n<!-- File: packages/create-qwik/src/helpers/jokes.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Helpers Skill\n\nPath: `packages/create-qwik/src/helpers/jokes.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/create-qwik/src/helpers/jokes.json)\n\n<!-- File: packages/devtools/CHANGELOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Devtools Skill\n\nPath: `packages/devtools/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/CHANGELOG.md)\n\n<!-- File: packages/devtools/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Devtools Skill\n\nPath: `packages/devtools/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/package.json)\n\n<!-- File: packages/devtools/plugin/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Plugin Skill\n\nPath: `packages/devtools/plugin/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/plugin/tsconfig.json)\n\n<!-- File: packages/devtools/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Devtools Skill\n\nPath: `packages/devtools/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/tsconfig.json)\n\n<!-- File: packages/devtools/ui/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Ui Skill\n\nPath: `packages/devtools/ui/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/devtools/ui/tsconfig.json)\n\n<!-- File: packages/docs/algolia.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Docs Skill\n\nPath: `packages/docs/algolia.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/algolia.json)\n\n<!-- File: packages/docs/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Docs Skill\n\nPath: `packages/docs/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/package.json)\n\n<!-- File: packages/docs/public/_routes.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Public Skill\n\nPath: `packages/docs/public/_routes.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/public/_routes.json)\n\n<!-- File: packages/docs/scripts/pages.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Scripts Skill\n\nPath: `packages/docs/scripts/pages.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/scripts/pages.json)\n\n<!-- File: packages/docs/src/routes/(ecosystem)/ecosystem.json (Tokens: ~300 | Category: anthropic-skill) -->\n# (ecosystem) Skill\n\nPath: `packages/docs/src/routes/(ecosystem)/ecosystem.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/(ecosystem)/ecosystem.json)\n\n<!-- File: packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Showcase Skill\n\nPath: `packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/(ecosystem)/showcase/generated-pages.json)\n\n<!-- File: packages/docs/src/routes/api/qwik-insights/api.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Qwik-insights Skill\n\nPath: `packages/docs/src/routes/api/qwik-insights/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-insights/api.json)\n\n<!-- File: packages/docs/src/routes/api/qwik-optimizer/api.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Qwik-optimizer Skill\n\nPath: `packages/docs/src/routes/api/qwik-optimizer/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-optimizer/api.json)\n\n<!-- File: packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Qwik-router-middleware-aws-lambda Skill\n\nPath: `packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/QwikDev/qwik/HEAD/packages/docs/src/routes/api/qwik-router-middleware-aws-lambda/api.json)\n\n<!-- ... +181 more modular skills available via /api/skills/QwikDev/qwik?path={path} -->\n</yakaai_skills>"}