From e3bb73f1426cde6557b2cd64dee989f2ae78daa2 Mon Sep 17 00:00:00 2001 From: Karan Date: Tue, 3 Nov 2026 00:51:39 -0500 Subject: [PATCH 1/3] Rename cleanup: manifests, code and tests say genclass-dev/GenClass The repository GenClass-lib is now genclass-dev/GenClass (GitHub redirects the old name). The npm manifests' repository and bugs URLs (@genclass/mcp, astro, nuxt, playwright, runtime-model, sv, genclass-runtime), server.json (the next mcp-v* publish fails its provenance repository check otherwise), both plugin manifests, the MCP bundle and plugin-repo scripts (the sync workflow they generate for genclass-dev/genclass-plugin now checks out genclass-dev/GenClass), the sv add-on's doc links and homepage, the MCP client install text, the runtime CLI's REPO constant, the demos' REPO_URL, the dashboard pages' links, the compat report generator, scripts/vm.sh, the hunt harnesses' usage comments (and the mealie harness's hardcoded checkout path), the release workflows' owner-setup comments, the issue template links and the nuxt-modules listing entry. The two tests that pin the old name (packages/mcp/test/manifests.test.ts, packages/runtime/test/install/cli.test.ts) change with the code. `npm run sync -w @genclass/mcp` regenerates nothing further. Co-Authored-By: Claude Fable 5.1 --- .github/ISSUE_TEMPLATE/config.yml | 6 +++--- .github/workflows/release-mcp.yml | 4 ++-- .github/workflows/release.yml | 2 +- compat/harness/report.mjs | 8 ++++---- demos/src/shared/demos.ts | 2 +- docs/adoption/hunts/ghost/hunt.mjs | 2 +- docs/adoption/hunts/mealie-harness/hunt.mjs | 2 +- docs/adoption/hunts/payload-hunt/hunt.mjs | 2 +- docs/adoption/hunts/strapi/hunt.mjs | 2 +- docs/adoption/hunts/umami/hunt.mjs | 2 +- docs/adoption/hunts/vikunja/hunt.mjs | 2 +- docs/adoption/listings/nuxt-modules.yml | 8 ++++---- packages/astro/package.json | 4 ++-- packages/genclass-runtime/package.json | 4 ++-- packages/mcp/package.json | 4 ++-- .../mcp/plugin/.claude-plugin/plugin.json | 8 ++++---- packages/mcp/plugin/plugin.json | 2 +- packages/mcp/scripts/mcpb.mjs | 8 ++++---- packages/mcp/scripts/plugin-repo.mjs | 20 +++++++++---------- packages/mcp/server.json | 2 +- packages/mcp/src/clients.ts | 2 +- packages/mcp/test/manifests.test.ts | 4 ++-- packages/nuxt/package.json | 4 ++-- packages/playwright/package.json | 6 +++--- packages/runtime-model/package.json | 4 ++-- packages/runtime/bin/lib/init.mjs | 2 +- packages/runtime/test/install/cli.test.ts | 2 +- packages/sv/package.json | 4 ++-- packages/sv/src/index.ts | 6 +++--- scripts/vm.sh | 2 +- telemetry-worker/src/pages.ts | 14 ++++++------- telemetry-worker/src/studio.ts | 4 ++-- 32 files changed, 74 insertions(+), 74 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 9e7acbb6..21cc0246 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,14 +1,14 @@ blank_issues_enabled: true contact_links: - name: Questions and answers (FAQ) - url: https://github.com/genclass-dev/GenClass-lib/blob/main/FAQ.md + url: https://github.com/genclass-dev/GenClass/blob/main/FAQ.md about: Short answers to common questions (race conditions in React, stale responses, double submits, what it sends, what it costs), with links to the details. - name: Ask a question in Discussions - url: https://github.com/genclass-dev/GenClass-lib/discussions/categories/q-a + url: https://github.com/genclass-dev/GenClass/discussions/categories/q-a about: Questions about installing, configuring or reading GenClass Runtime's reports. - name: GenClass Discord url: https://discord.gg/kN9kRnFtZm about: Talk with the maintainers and other users. - name: Report a security vulnerability - url: https://github.com/genclass-dev/GenClass-lib/blob/main/SECURITY.md + url: https://github.com/genclass-dev/GenClass/blob/main/SECURITY.md about: Please report security issues privately, not in a public issue; SECURITY.md says how. diff --git a/.github/workflows/release-mcp.yml b/.github/workflows/release-mcp.yml index 73b29a46..1180756d 100644 --- a/.github/workflows/release-mcp.yml +++ b/.github/workflows/release-mcp.yml @@ -9,13 +9,13 @@ name: Release MCP # before this workflow can publish it. Run this workflow once (push the tag): it builds, tests and uploads the tarball # as the `mcp-tarball` artifact, and its publish step fails without a trusted publisher. Publish that exact tarball # once from your own npm login (`npm publish genclass-mcp-.tgz --access public`), then on npmjs.com: -# @genclass/mcp → Settings → Trusted publishing → GitHub Actions: organization genclass-dev, repository GenClass-lib, +# @genclass/mcp → Settings → Trusted publishing → GitHub Actions: organization genclass-dev, repository GenClass, # workflow filename release-mcp.yml, environment npm-publish. Later versions publish from here. Then run this # workflow by hand on the same tag: it publishes server.json to the MCP Registry only (the `registry` job). # - The npm-publish GitHub environment (shared with release.yml) asks its reviewers to approve each run. # - The official MCP Registry: the `registry` job publishes packages/mcp/server.json after npm has the version, with # `mcp-publisher login github-oidc` (this workflow's OIDC token; no secret). OIDC grants the namespace of the -# repository's owner (io.github./*), so it must run in genclass-dev/GenClass-lib for +# repository's owner (io.github./*), so it must run in genclass-dev/GenClass for # io.github.genclass-dev/genclass; `mcp-publisher login github` (device flow) cannot publish to an organization # namespace (modelcontextprotocol/registry#1468). If that job fails, re-run it alone: npm is already done. # - The MCP Bundle (`mcp-bundle` artifact, genclass-.mcpb and its sha256) is built and uploaded, never diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ac782a84..e93fa6d4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,7 @@ name: Release # Authentication: npm trusted publishing (OIDC, `id-token: write`); no npm token is stored in the repository. # Owner setup before the first run: on npmjs.com, package # @genclass/runtime → Settings → Trusted publishing → GitHub Actions: organization genclass-dev, repository -# GenClass-lib, workflow filename release.yml, environment npm-publish; and a GitHub environment `npm-publish` +# GenClass, workflow filename release.yml, environment npm-publish; and a GitHub environment `npm-publish` # (Settings → Environments), ideally with required reviewers. # # Before you push the tag (the order is load-bearing from 0.3.0; packages/runtime/CHANGELOG.md "Dashboard counts"): diff --git a/compat/harness/report.mjs b/compat/harness/report.mjs index 634cc044..3abeb244 100644 --- a/compat/harness/report.mjs +++ b/compat/harness/report.mjs @@ -205,7 +205,7 @@ export function writeReport(results, { jsonPath, mdPath }) { const fixedText = Object.entries(fixedBy).map(([k, v]) => `${v} × ${k}`).join("; "); const byAction = modeCells.reduce((a, c) => a + (c.fixedByAction ?? 0), 0); const noAction = modeCells.reduce((a, c) => a + (c.fixedNoAction ?? 0), 0); - L.push(`- **Bugs fixed by an action: ${byAction}${fixedText ? ` (${fixedText})` : ""}.** The two scenarios with a latent bug (a stale typeahead, a double submit) showed it in ${offBugs} of ${offBugRuns} runs without GenClass; guard left ${bugRuns("guard").reduce((a, c) => a + c.bugs, 0)} and heal ${bugRuns("heal").reduce((a, c) => a + c.bugs, 0)} of the same runs buggy. GenClass acts only when its model is confident, and with the shipped model that is rare: it reports far more than it fixes (see [Model quality](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#model-quality)).${noAction ? ` In ${noAction} more runs a bug of the app did not show with GenClass although GenClass took no action: GenClass changed the timing of a race in the app (listed at the end of the page).` : ""}`); + L.push(`- **Bugs fixed by an action: ${byAction}${fixedText ? ` (${fixedText})` : ""}.** The two scenarios with a latent bug (a stale typeahead, a double submit) showed it in ${offBugs} of ${offBugRuns} runs without GenClass; guard left ${bugRuns("guard").reduce((a, c) => a + c.bugs, 0)} and heal ${bugRuns("heal").reduce((a, c) => a + c.bugs, 0)} of the same runs buggy. GenClass acts only when its model is confident, and with the shipped model that is rare: it reports far more than it fixes (see [Model quality](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#model-quality)).${noAction ? ` In ${noAction} more runs a bug of the app did not show with GenClass although GenClass took no action: GenClass changed the timing of a race in the app (listed at the end of the page).` : ""}`); // findings on correct apps: the ones about a failure the scenario injects on purpose, and the rest (false findings) let injected = 0; const falseBy = {}; @@ -416,8 +416,8 @@ export function writeReport(results, { jsonPath, mdPath }) { // ------------------------------------------------------------------------------------------------ method L.push("## Method"); L.push(""); - L.push(`- **Apps.** One small app per framework under [\`compat/apps/\`](https://github.com/genclass-dev/GenClass-lib/tree/main/compat/apps), written idiomatically for each data layer (no GenClass API anywhere: only the one line). They install \`@genclass/runtime\` from a tarball packed from this repository (\`npm pack\`), so the matrix tests the code as it would be published.`); - L.push("- **Backend.** One seeded mock server for every app ([`compat/harness/backend.mjs`](https://github.com/genclass-dev/GenClass-lib/blob/main/compat/harness/backend.mjs)): REST, a GraphQL endpoint, a WebSocket and EventSource streams on the app's own origin. It injects latency and failures per scenario; nothing in it knows about GenClass."); + L.push(`- **Apps.** One small app per framework under [\`compat/apps/\`](https://github.com/genclass-dev/GenClass/tree/main/compat/apps), written idiomatically for each data layer (no GenClass API anywhere: only the one line). They install \`@genclass/runtime\` from a tarball packed from this repository (\`npm pack\`), so the matrix tests the code as it would be published.`); + L.push("- **Backend.** One seeded mock server for every app ([`compat/harness/backend.mjs`](https://github.com/genclass-dev/GenClass/blob/main/compat/harness/backend.mjs)): REST, a GraphQL endpoint, a WebSocket and EventSource streams on the app's own origin. It injects latency and failures per scenario; nothing in it knows about GenClass."); L.push("- **A trial.** A fresh browser context loads the page (`?genclass=off` for the run without GenClass; otherwise the mode through `window.GENCLASS_CONFIG`, telemetry off), waits until the model is ready, drives the scenario with real (trusted) keyboard and mouse input, waits until nothing is in flight and the page has been quiet for 0.9 s, then reads the page and the server's state."); L.push(`- **Pairing.** Every mode run is compared with the run without GenClass on the same seed. ${seedsN} seeds per cell, plus a second run without GenClass per seed as a determinism control.`); L.push("- **Isolation.** Every request to another host is blocked and counted; the model files and ONNX Runtime are served from a local copy of the files the runtime would fetch from jsDelivr, and the script-tag app gets the packed tarball in place of the CDN."); @@ -429,7 +429,7 @@ export function writeReport(results, { jsonPath, mdPath }) { L.push("On Linux with Node ≥ 22.22.3 (Angular 22's minimum) and about 4 GB free:"); L.push(""); L.push("```bash"); - L.push("git clone https://github.com/genclass-dev/GenClass-lib && cd GenClass-lib"); + L.push("git clone https://github.com/genclass-dev/GenClass && cd GenClass"); L.push("npm ci && (cd compat && npm install && npx playwright install --with-deps chromium)"); L.push("node packages/runtime/bin/genclass-runtime.mjs fetch-model .cache-model/runtime-model-0.2.0 --variant q8 --ort wasm"); L.push(`COMPAT_MODEL_DIR=$PWD/.cache-model/runtime-model-0.2.0 npm --prefix compat run compat -- --seeds ${seedsN}`); diff --git a/demos/src/shared/demos.ts b/demos/src/shared/demos.ts index 82aca33f..9dc7627a 100644 --- a/demos/src/shared/demos.ts +++ b/demos/src/shared/demos.ts @@ -155,4 +155,4 @@ export const DEMO_BY_ID: Record = Object.fromEntries(DEMOS.map DemoInfo >; -export const REPO_URL = "https://github.com/genclass-dev/GenClass-lib"; +export const REPO_URL = "https://github.com/genclass-dev/GenClass"; diff --git a/docs/adoption/hunts/ghost/hunt.mjs b/docs/adoption/hunts/ghost/hunt.mjs index b75a6132..b6ff0601 100644 --- a/docs/adoption/hunts/ghost/hunt.mjs +++ b/docs/adoption/hunts/ghost/hunt.mjs @@ -10,7 +10,7 @@ // atom plus React state discovery and the page text), the Admin API read-back of the post (what the server holds // against what was typed last), and a DOM snapshot of the editor. // -// Usage (from the GenClass-lib repo root, both packages built, Ghost running on 2368 with the owner account below): +// Usage (from the GenClass repo root, both packages built, Ghost running on 2368 with the owner account below): // node docs/adoption/hunts/ghost/hunt.mjs [--slow 600] [--runs 6] [--seed 1] [--replay] [--out dir] // Scenarios: smoke, autosave, switch, list, publish, pickers. // Environment: GHOST_URL (default http://localhost:2368), GHOST_EMAIL / GHOST_PASSWORD (the owner account), diff --git a/docs/adoption/hunts/mealie-harness/hunt.mjs b/docs/adoption/hunts/mealie-harness/hunt.mjs index d63d7d9d..7cbda8dc 100644 --- a/docs/adoption/hunts/mealie-harness/hunt.mjs +++ b/docs/adoption/hunts/mealie-harness/hunt.mjs @@ -32,7 +32,7 @@ const sc = SCENARIOS[scenarioName]; if (!sc) throw new Error(`unknown scenario ${scenarioName}`); const APP = "http://localhost:3000"; -const RT_DIST = "/home/user/GenClass-lib/packages/runtime/dist"; +const RT_DIST = "/home/user/GenClass/packages/runtime/dist"; const OUT = "/home/user/hunt/out"; mkdirSync(OUT, { recursive: true }); diff --git a/docs/adoption/hunts/payload-hunt/hunt.mjs b/docs/adoption/hunts/payload-hunt/hunt.mjs index 328d5e29..8aacc795 100644 --- a/docs/adoption/hunts/payload-hunt/hunt.mjs +++ b/docs/adoption/hunts/payload-hunt/hunt.mjs @@ -17,7 +17,7 @@ import { extname, join } from "node:path"; import { PassThrough } from "node:stream"; import { chromium } from "@playwright/test"; -// GenClass-lib: this repository (four directories up from docs/adoption/hunts/payload-hunt/), or GENCLASS_LIB +// GenClass: this repository (four directories up from docs/adoption/hunts/payload-hunt/), or GENCLASS_LIB const LIB = (process.env.GENCLASS_LIB ?? new URL("../../../../", import.meta.url).pathname).replace(/\/+$/, ""); const { serve } = await import(`${LIB}/packages/mcp/dist/index.js`); diff --git a/docs/adoption/hunts/strapi/hunt.mjs b/docs/adoption/hunts/strapi/hunt.mjs index 59e8c05f..5c1b632d 100644 --- a/docs/adoption/hunts/strapi/hunt.mjs +++ b/docs/adoption/hunts/strapi/hunt.mjs @@ -5,7 +5,7 @@ // is untouched), the real @genclass/mcp server in-process (its bridge on a free port), and the same tool calls a coding // agent makes: genclass_explore start → one page load per armed run → report → genclass_explain → genclass_replay. // -// npm run build -w @genclass/runtime && npm run build -w @genclass/mcp # in GenClass-lib +// npm run build -w @genclass/runtime && npm run build -w @genclass/mcp # in GenClass // node docs/adoption/hunts/strapi/hunt.mjs login # once: saves the admin session // node docs/adoption/hunts/strapi/hunt.mjs probe /admin/content-manager/collection-types/api::article.article // node docs/adoption/hunts/strapi/hunt.mjs once # one natural load, the recording printed diff --git a/docs/adoption/hunts/umami/hunt.mjs b/docs/adoption/hunts/umami/hunt.mjs index f550310b..aa84ba97 100644 --- a/docs/adoption/hunts/umami/hunt.mjs +++ b/docs/adoption/hunts/umami/hunt.mjs @@ -12,7 +12,7 @@ // Each run also keeps a timeline (page clock, ms): keystrokes, history pushes (the URL commit), RSC responses and every // change of the input's value, so a revert can be read in causal order. // -// Usage (from the GenClass-lib repo root, both packages built, Umami on 3000 seeded with seed.mjs): +// Usage (from the GenClass repo root, both packages built, Umami on 3000 seeded with seed.mjs): // node docs/adoption/hunts/umami/hunt.mjs [--slow 600] [--runs 6] [--seed 1] [--once] [--replay] // [--label x] [--out dir] // Pages: websites (/websites), users (/admin/users). Patterns: pause (word, 700 ms, rest), split (650 ms mid-word). diff --git a/docs/adoption/hunts/vikunja/hunt.mjs b/docs/adoption/hunts/vikunja/hunt.mjs index c6a00e80..71f68e87 100644 --- a/docs/adoption/hunts/vikunja/hunt.mjs +++ b/docs/adoption/hunts/vikunja/hunt.mjs @@ -6,7 +6,7 @@ // @genclass/mcp server in-process (its bridge on a free port), and the same tool calls a coding agent makes: // genclass_explore start → one page load per armed run → report → genclass_explain → genclass_replay. // -// npm run build -w @genclass/runtime && npm run build -w @genclass/mcp # in GenClass-lib +// npm run build -w @genclass/runtime && npm run build -w @genclass/mcp # in GenClass // node docs/adoption/hunts/vikunja/hunt.mjs setup # once: user, project, task, board // node docs/adoption/hunts/vikunja/hunt.mjs once [slow_ms] # one load, the recording printed // node docs/adoption/hunts/vikunja/hunt.mjs explore [runs] diff --git a/docs/adoption/listings/nuxt-modules.yml b/docs/adoption/listings/nuxt-modules.yml index b4ce7efd..169b80f8 100644 --- a/docs/adoption/listings/nuxt-modules.yml +++ b/docs/adoption/listings/nuxt-modules.yml @@ -7,7 +7,7 @@ # # Steps (a pull request, no issue first): # 1. Fork https://github.com/nuxt/modules, clone it, `pnpm install`. -# 2. `pnpm sync genclass genclass-dev/GenClass-lib#main/packages/nuxt` +# 2. `pnpm sync genclass genclass-dev/GenClass#main/packages/nuxt` # This writes modules/genclass.yml from the package on npm and the repository. Compare it with the entry below. # 3. In the generated file set `category` (a value from lib/categories.ts; the choice below is "Monitoring & # Logging", where Sentry's module is; "Devtools" is the other candidate), and `type: 3rd-party`. Optionally add @@ -25,12 +25,12 @@ name: genclass description: Reports race conditions, stale responses and duplicate submits in the browser while they happen, with a small local model; observe mode changes nothing -repo: genclass-dev/GenClass-lib#main/packages/nuxt +repo: genclass-dev/GenClass#main/packages/nuxt npm: '@genclass/nuxt' icon: genclass.svg -github: https://github.com/genclass-dev/GenClass-lib +github: https://github.com/genclass-dev/GenClass website: https://genclass.dev -learn_more: https://github.com/genclass-dev/GenClass-lib/tree/main/packages/nuxt +learn_more: https://github.com/genclass-dev/GenClass/tree/main/packages/nuxt category: Monitoring & Logging type: 3rd-party maintainers: diff --git a/packages/astro/package.json b/packages/astro/package.json index db83c59d..3e77c0cb 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -6,11 +6,11 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "git+https://github.com/genclass-dev/GenClass-lib.git", + "url": "git+https://github.com/genclass-dev/GenClass.git", "directory": "packages/astro" }, "homepage": "https://genclass.dev", - "bugs": { "url": "https://github.com/genclass-dev/GenClass-lib/issues" }, + "bugs": { "url": "https://github.com/genclass-dev/GenClass/issues" }, "keywords": [ "astro-integration", "withastro", diff --git a/packages/genclass-runtime/package.json b/packages/genclass-runtime/package.json index 0f995ec3..7e95e47c 100644 --- a/packages/genclass-runtime/package.json +++ b/packages/genclass-runtime/package.json @@ -6,12 +6,12 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "git+https://github.com/genclass-dev/GenClass-lib.git", + "url": "git+https://github.com/genclass-dev/GenClass.git", "directory": "packages/genclass-runtime" }, "homepage": "https://genclass.dev", "bugs": { - "url": "https://github.com/genclass-dev/GenClass-lib/issues" + "url": "https://github.com/genclass-dev/GenClass/issues" }, "keywords": [ "genclass", diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 9d00f1e4..7f13a96a 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -7,11 +7,11 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "git+https://github.com/genclass-dev/GenClass-lib.git", + "url": "git+https://github.com/genclass-dev/GenClass.git", "directory": "packages/mcp" }, "homepage": "https://genclass.dev", - "bugs": { "url": "https://github.com/genclass-dev/GenClass-lib/issues" }, + "bugs": { "url": "https://github.com/genclass-dev/GenClass/issues" }, "keywords": [ "mcp", "mcp-server", diff --git a/packages/mcp/plugin/.claude-plugin/plugin.json b/packages/mcp/plugin/.claude-plugin/plugin.json index 5f79e3f5..99567832 100644 --- a/packages/mcp/plugin/.claude-plugin/plugin.json +++ b/packages/mcp/plugin/.claude-plugin/plugin.json @@ -7,11 +7,11 @@ "url": "https://genclass.dev" }, "homepage": "https://genclass.dev", - "repository": "https://github.com/genclass-dev/GenClass-lib", + "repository": "https://github.com/genclass-dev/GenClass", "license": "Apache-2.0", - "documentationUrl": "https://github.com/genclass-dev/GenClass-lib/blob/main/packages/mcp/plugin/README.md", - "supportUrl": "https://github.com/genclass-dev/GenClass-lib/issues", - "privacyPolicyUrl": "https://github.com/genclass-dev/GenClass-lib/blob/main/packages/mcp/plugin/README.md#privacy", + "documentationUrl": "https://github.com/genclass-dev/GenClass/blob/main/packages/mcp/plugin/README.md", + "supportUrl": "https://github.com/genclass-dev/GenClass/issues", + "privacyPolicyUrl": "https://github.com/genclass-dev/GenClass/blob/main/packages/mcp/plugin/README.md#privacy", "keywords": [ "race-condition", "debugging", diff --git a/packages/mcp/plugin/plugin.json b/packages/mcp/plugin/plugin.json index cc485150..6f44cb8a 100644 --- a/packages/mcp/plugin/plugin.json +++ b/packages/mcp/plugin/plugin.json @@ -8,7 +8,7 @@ "url": "https://genclass.dev" }, "homepage": "https://genclass.dev", - "repository": "https://github.com/genclass-dev/GenClass-lib", + "repository": "https://github.com/genclass-dev/GenClass", "license": "Apache-2.0", "keywords": [ "race-condition", diff --git a/packages/mcp/scripts/mcpb.mjs b/packages/mcp/scripts/mcpb.mjs index e91de6b8..b85d2d2f 100644 --- a/packages/mcp/scripts/mcpb.mjs +++ b/packages/mcp/scripts/mcpb.mjs @@ -26,10 +26,10 @@ export function manifestFor(pkg, server, tools) { long_description: "GenClass records what happens inside the web pages of your app running on this machine (each click, request and response, the order responses were delivered, what each response wrote into the app's state, uncaught errors), re-runs a page with the network answering in different orders to find race conditions, replays one exact order to prove a fix, and writes a Playwright regression test. The page connects through @genclass/runtime's agent link in a development build. Everything stays on your machine: the bridge listens on 127.0.0.1 only.", author: { name: "GenClass", url: "https://genclass.dev" }, - repository: { type: "git", url: "https://github.com/genclass-dev/GenClass-lib" }, + repository: { type: "git", url: "https://github.com/genclass-dev/GenClass" }, homepage: "https://genclass.dev", - documentation: "https://github.com/genclass-dev/GenClass-lib/tree/main/packages/mcp#readme", - support: "https://github.com/genclass-dev/GenClass-lib/issues", + documentation: "https://github.com/genclass-dev/GenClass/tree/main/packages/mcp#readme", + support: "https://github.com/genclass-dev/GenClass/issues", server: { type: "node", entry_point: "bin/genclass-mcp.mjs", @@ -43,7 +43,7 @@ export function manifestFor(pkg, server, tools) { tools: tools.map((t) => ({ name: t.name, description: t.description })), keywords: ["race-condition", "debugging", "playwright", "frontend", "stale-response", "double-submit"], license: pkg.license, - privacy_policies: ["https://github.com/genclass-dev/GenClass-lib/blob/main/packages/mcp/README.md#privacy"], + privacy_policies: ["https://github.com/genclass-dev/GenClass/blob/main/packages/mcp/README.md#privacy"], compatibility: { platforms: ["darwin", "win32", "linux"], runtimes: { node: pkg.engines.node } }, }; } diff --git a/packages/mcp/scripts/plugin-repo.mjs b/packages/mcp/scripts/plugin-repo.mjs index af207ef6..35c3896f 100644 --- a/packages/mcp/scripts/plugin-repo.mjs +++ b/packages/mcp/scripts/plugin-repo.mjs @@ -3,7 +3,7 @@ // (packages/mcp/plugin) at the repository root with the server vendored into it, the marketplace files that point at // that root (Claude Code, Codex, Cursor), the Gemini CLI manifest, the licence, and the workflow that re-runs this // script there daily. Why a second repository: Anthropic's directory stops validating a repository whose GitHub -// archive is over 50 MiB (GenClass-lib's is 51), and Codex, Gemini CLI, `gh skill` and the skills CLI clone or read a +// archive is over 50 MiB (GenClass's is 51), and Codex, Gemini CLI, `gh skill` and the skills CLI clone or read a // whole repository for one plugin. Why the server is vendored there: the directory holds a plugin whose launcher runs // `npx ` for a reviewer, and a lockfile next to that launcher adds a second hold; its own text names the way // out, the package's built files inside the plugin (each under 256 KiB) run from ${CLAUDE_PLUGIN_ROOT}, with no @@ -11,7 +11,7 @@ // `node ${CLAUDE_PLUGIN_ROOT}/server/genclass-mcp.mjs`: server/cli.mjs is the published package's dist/cli.js at // package.json's version, byte for byte (fetched from npm with nothing run; `--server ` takes a local // build instead, for the tests and offline runs), and server/genclass-mcp.mjs is the package's bin/genclass-mcp.mjs -// with its import pointed at that file. The plugin folder in GenClass-lib keeps the npx launchers (the marketplace +// with its import pointed at that file. The plugin folder in GenClass keeps the npx launchers (the marketplace // there lists it too, and nothing built is committed here), and the Agent Plugins mcp.json keeps npx everywhere, // because that format has no plugin-root variable (Codex and Cursor read it). // Invariants: everything in that repository comes from here (its sync.yml overwrites all but .git and .github); the @@ -89,12 +89,12 @@ export function generated(version) { plugins: [{ name: "genclass", source: "./", description: DESCRIPTION, version, category: "development" }], }), ".gitignore": ".DS_Store\nThumbs.db\n", - ".github/workflows/sync.yml": `# Keeps this repository equal to what packages/mcp/scripts/plugin-repo.mjs in genclass-dev/GenClass-lib assembles + ".github/workflows/sync.yml": `# Keeps this repository equal to what packages/mcp/scripts/plugin-repo.mjs in genclass-dev/GenClass assembles # (that script fetches the released server from npm and vendors it under server/). Nothing here is edited by hand: # this workflow overwrites everything but .git and .github (the default token cannot change workflow files, so this -# file is updated from GenClass-lib by a person). Exit code 3 from the script means GenClass-lib's version is not on +# file is updated from GenClass by a person). Exit code 3 from the script means GenClass's version is not on # npm yet (between a bump and its release): the repository then stays as it is. -name: Sync from GenClass-lib +name: Sync from GenClass on: schedule: - cron: "23 6 * * *" @@ -108,26 +108,26 @@ jobs: - uses: actions/checkout@v4 - uses: actions/checkout@v4 with: - repository: genclass-dev/GenClass-lib + repository: genclass-dev/GenClass ref: main path: lib - uses: actions/setup-node@v4 with: node-version: 22 - - name: Assemble from GenClass-lib + - name: Assemble from GenClass run: | SHA=$(git -C lib rev-parse --short HEAD) rc=0; node lib/packages/mcp/scripts/plugin-repo.mjs out || rc=$? if [ "$rc" = 0 ]; then rsync -a --delete --exclude .git --exclude .github --exclude lib --exclude out out/ ./; fi rm -rf lib out - if [ "$rc" = 3 ]; then echo "GenClass-lib's version is not on npm yet: nothing to do until the release"; exit 0; fi + if [ "$rc" = 3 ]; then echo "GenClass's version is not on npm yet: nothing to do until the release"; exit 0; fi [ "$rc" = 0 ] || exit "$rc" echo "SHA=$SHA" >> "$GITHUB_ENV" - name: Commit and push when something changed run: | git add -A if git diff --cached --quiet; then echo "nothing changed"; exit 0; fi - git -c user.name=genclass-sync -c user.email=noreply@genclass.dev commit -m "sync from GenClass-lib $SHA" + git -c user.name=genclass-sync -c user.email=noreply@genclass.dev commit -m "sync from GenClass $SHA" git push `, }; @@ -154,7 +154,7 @@ export function vendoredBin(bin, version) { const from = 'from "../dist/cli.js"'; if (!bin.includes(from)) throw new Error(`bin/genclass-mcp.mjs no longer imports ../dist/cli.js; update plugin-repo.mjs`); const note = - `// Vendored from ${PACKAGE}@${version} by packages/mcp/scripts/plugin-repo.mjs in genclass-dev/GenClass-lib: cli.mjs next\n` + + `// Vendored from ${PACKAGE}@${version} by packages/mcp/scripts/plugin-repo.mjs in genclass-dev/GenClass: cli.mjs next\n` + `// to this file is that package's dist/cli.js, byte for byte, and this file is its bin/genclass-mcp.mjs importing it.\n`; const i = bin.startsWith("#!") ? bin.indexOf("\n") + 1 : 0; return bin.slice(0, i) + note + bin.slice(i).replace(from, 'from "./cli.mjs"'); diff --git a/packages/mcp/server.json b/packages/mcp/server.json index 38907dcc..121230d6 100644 --- a/packages/mcp/server.json +++ b/packages/mcp/server.json @@ -5,7 +5,7 @@ "description": "Find race conditions in your web app by reordering its responses, replay one, prove the fix.", "websiteUrl": "https://genclass.dev", "repository": { - "url": "https://github.com/genclass-dev/GenClass-lib", + "url": "https://github.com/genclass-dev/GenClass", "source": "github", "subfolder": "packages/mcp" }, diff --git a/packages/mcp/src/clients.ts b/packages/mcp/src/clients.ts index 4864f2af..d1d1c179 100644 --- a/packages/mcp/src/clients.ts +++ b/packages/mcp/src/clients.ts @@ -84,7 +84,7 @@ export const CLIENTS: ClientInstall[] = [ fence("", "/plugin marketplace add genclass-dev/genclass-plugin\n/plugin install genclass@genclass"), "Or the server alone (`--scope project` writes `.mcp.json` for everyone on the project; `--scope user` for all your projects). `init` also writes the skill to `.claude/skills/genclass/SKILL.md` (`--no-skill` leaves it out):", fence("bash", `claude mcp add --scope project ${NAME} -- npx -y ${pinned(v)}\n# or: npx -y ${pinned(v)} init --hook (.mcp.json and the skill, plus the prompt hook in .claude/settings.json)`), - "Or just the skill (no server): `npx skills add genclass-dev/genclass-plugin`. (`genclass-dev/genclass-plugin` is this plugin at a repository root, assembled from this package; the marketplace in `genclass-dev/GenClass-lib` lists the same plugin.)", + "Or just the skill (no server): `npx skills add genclass-dev/genclass-plugin`. (`genclass-dev/genclass-plugin` is this plugin at a repository root, assembled from this package; the marketplace in `genclass-dev/GenClass` lists the same plugin.)", ].join("\n\n"), }, { diff --git a/packages/mcp/test/manifests.test.ts b/packages/mcp/test/manifests.test.ts index ee0bb7c5..40abc66f 100644 --- a/packages/mcp/test/manifests.test.ts +++ b/packages/mcp/test/manifests.test.ts @@ -303,9 +303,9 @@ describe("the plugin's own repository (packages/mcp/scripts/plugin-repo.mjs asse } }); - it("its workflow re-runs this script from GenClass-lib, stands still while npm does not serve the version, and touches nothing by hand", () => { + it("its workflow re-runs this script from GenClass, stands still while npm does not serve the version, and touches nothing by hand", () => { const y = at(".github/workflows/sync.yml"); - expect(y).toContain("repository: genclass-dev/GenClass-lib"); + expect(y).toContain("repository: genclass-dev/GenClass"); expect(y).toContain("node lib/packages/mcp/scripts/plugin-repo.mjs out"); expect(y).toContain("--exclude .git --exclude .github"); expect(y).toContain('[ "$rc" = 3 ]'); diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index b3f5cfd9..8c58096f 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -6,11 +6,11 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "git+https://github.com/genclass-dev/GenClass-lib.git", + "url": "git+https://github.com/genclass-dev/GenClass.git", "directory": "packages/nuxt" }, "homepage": "https://genclass.dev", - "bugs": { "url": "https://github.com/genclass-dev/GenClass-lib/issues" }, + "bugs": { "url": "https://github.com/genclass-dev/GenClass/issues" }, "keywords": [ "nuxt", "nuxt-module", diff --git a/packages/playwright/package.json b/packages/playwright/package.json index 5785f682..a1a78a5c 100644 --- a/packages/playwright/package.json +++ b/packages/playwright/package.json @@ -6,11 +6,11 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "git+https://github.com/genclass-dev/GenClass-lib.git", + "url": "git+https://github.com/genclass-dev/GenClass.git", "directory": "packages/playwright" }, - "homepage": "https://github.com/genclass-dev/GenClass-lib/tree/main/packages/playwright#readme", - "bugs": { "url": "https://github.com/genclass-dev/GenClass-lib/issues" }, + "homepage": "https://github.com/genclass-dev/GenClass/tree/main/packages/playwright#readme", + "bugs": { "url": "https://github.com/genclass-dev/GenClass/issues" }, "keywords": [ "playwright", "playwright-reporter", diff --git a/packages/runtime-model/package.json b/packages/runtime-model/package.json index 87636f85..35b3ebbd 100644 --- a/packages/runtime-model/package.json +++ b/packages/runtime-model/package.json @@ -5,12 +5,12 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "git+https://github.com/genclass-dev/GenClass-lib.git", + "url": "git+https://github.com/genclass-dev/GenClass.git", "directory": "packages/runtime-model" }, "homepage": "https://genclass.dev/benchmarks", "bugs": { - "url": "https://github.com/genclass-dev/GenClass-lib/issues" + "url": "https://github.com/genclass-dev/GenClass/issues" }, "keywords": [ "genclass", diff --git a/packages/runtime/bin/lib/init.mjs b/packages/runtime/bin/lib/init.mjs index 9a35330e..90ce888a 100644 --- a/packages/runtime/bin/lib/init.mjs +++ b/packages/runtime/bin/lib/init.mjs @@ -25,7 +25,7 @@ import { CMD, PKG, PKG_DIR, VERSION, compareVersions, distTags, installedVersion const MODES = ["observe", "guard", "heal"]; -const REPO = "https://github.com/genclass-dev/GenClass-lib/blob/main"; +const REPO = "https://github.com/genclass-dev/GenClass/blob/main"; export const TELEMETRY_URL = `${REPO}/packages/runtime/TELEMETRY.md`; export const INTERCEPTION_URL = "https://genclass.dev/docs/interception"; export const PRIVACY_URL = `${REPO}/PRIVACY.md`; diff --git a/packages/runtime/test/install/cli.test.ts b/packages/runtime/test/install/cli.test.ts index 9bb78ac8..6f828b9e 100644 --- a/packages/runtime/test/install/cli.test.ts +++ b/packages/runtime/test/install/cli.test.ts @@ -850,7 +850,7 @@ describe("init options: --no-telemetry / --telemetry / --model-url (Troy trial, const r = cli(viteVue(), "init", "--dry-run"); expect(r.out).toMatch(/Telemetry\s+on \(the default\)/); expect(r.out).toContain(`${CMD} init --no-telemetry`); - expect(r.out).toContain("https://github.com/genclass-dev/GenClass-lib/blob/main/PRIVACY.md"); + expect(r.out).toContain("https://github.com/genclass-dev/GenClass/blob/main/PRIVACY.md"); expect(r.out).toContain("packages/runtime/TELEMETRY.md"); expect(cli(viteVue(), "init", "--dry-run", "--no-telemetry").out).toMatch(/Telemetry\s+off/); const usage = cli(project({}), "init", "--help").out; diff --git a/packages/sv/package.json b/packages/sv/package.json index be2429b0..772a2c74 100644 --- a/packages/sv/package.json +++ b/packages/sv/package.json @@ -6,11 +6,11 @@ "license": "Apache-2.0", "repository": { "type": "git", - "url": "git+https://github.com/genclass-dev/GenClass-lib.git", + "url": "git+https://github.com/genclass-dev/GenClass.git", "directory": "packages/sv" }, "homepage": "https://genclass.dev", - "bugs": { "url": "https://github.com/genclass-dev/GenClass-lib/issues" }, + "bugs": { "url": "https://github.com/genclass-dev/GenClass/issues" }, "keywords": [ "sv-add", "svelte", diff --git a/packages/sv/src/index.ts b/packages/sv/src/index.ts index abe50cf8..1db3f036 100644 --- a/packages/sv/src/index.ts +++ b/packages/sv/src/index.ts @@ -14,8 +14,8 @@ import { color } from "@sveltejs/sv-utils"; import { defineAddon, defineAddonOptions } from "sv"; import { RUNTIME, RUNTIME_RANGE, editAppHtml, editHooks, hasHeadSlot, newHooksFile } from "./edit.js"; -const TELEMETRY_DOC = "https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/TELEMETRY.md"; -const SELF_HOST_DOC = "https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#content-security-policy-and-self-hosting"; +const TELEMETRY_DOC = "https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/TELEMETRY.md"; +const SELF_HOST_DOC = "https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#content-security-policy-and-self-hosting"; const options = defineAddonOptions() .add("mode", { @@ -46,7 +46,7 @@ function read(cwd: string, rel: string): string { export default defineAddon({ id: "@genclass/sv", shortDescription: "race-condition reports", - homepage: "https://github.com/genclass-dev/GenClass-lib/tree/main/packages/sv#readme", + homepage: "https://github.com/genclass-dev/GenClass/tree/main/packages/sv#readme", options, setup: ({ isKit, unsupported }) => { diff --git a/scripts/vm.sh b/scripts/vm.sh index 52b71a7f..2b2c91a5 100755 --- a/scripts/vm.sh +++ b/scripts/vm.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Build/test GenClass-lib on the Azure `train` VM. The Mac only edits files (8 GB RAM; never run builds, +# Build/test GenClass on the Azure `train` VM. The Mac only edits files (8 GB RAM; never run builds, # browsers or models on it). # # scripts/vm.sh sync SLOT rsync this repo to ~/gcl/SLOT on the VM (no node_modules/.git/data) diff --git a/telemetry-worker/src/pages.ts b/telemetry-worker/src/pages.ts index d36e7afb..341cba16 100644 --- a/telemetry-worker/src/pages.ts +++ b/telemetry-worker/src/pages.ts @@ -320,8 +320,8 @@ export function startPage(nonce: string, opts: { runtimeReady?: boolean; endpoin

Install

${notYet}

The token needs @genclass/runtime ${KEY_RUNTIME} or later; earlier versions ignore it. ${LOCAL_HOSTS}

Dashboards show counts only (never the situation text). Data is kept for 90 days. -See privacy and -what is sent.
`; +See privacy and +what is sent.`; const script = ` (function(){ var f = document.getElementById("f"), go = document.getElementById("go"), err = document.getElementById("err"); @@ -470,7 +470,7 @@ export function openSourcePage(nonce: string): string { const prompt = openSourcePrompt(); const cmd = (label: string, code: string) => `

${label}

${esc(code)}
`; - const repo = "https://github.com/genclass-dev/GenClass-lib"; + const repo = "https://github.com/genclass-dev/GenClass"; const body = `
@@ -2636,14 +2636,14 @@ export function dashboardPage( const data = demo ? { ...base, demo: { types: demo.types, actions: demo.actions, slots: demo.slots } } : base; const t = esc(project.token); const keep = opts.keepDays ?? 90; - const report = 'Report a false detection'; + const report = 'Report a false detection'; const privacy = acct ? `${ opts.privateLink ? "This app also has the private dashboard link it had before it joined your account, and anyone with that link can see these stats. You can turn the link off on your Projects page." : "Only you can open this page, while signed in." - } What is collected · ${report} · All projects · Plan and billing` - : `Keep this link private: anyone with it can see these stats. What is collected · Get another token`; + } What is collected · ${report} · All projects · Plan and billing` + : `Keep this link private: anyone with it can see these stats. What is collected · Get another token`; const where = acct && opts.id ? `this app's GenClass dashboard, under Visitors (${ORIGIN_OF(opts)}/account/apps/${opts.id}#visits)` : "this app's GenClass dashboard (the private link I opened it from), under Visitors"; const connect = connectDialog({ token: project.token, @@ -2935,7 +2935,7 @@ function lockedDashboardPage(

Connect to your project

${connectSection({ token: project.token, account: true, runtimeReady: opts.runtimeReady === true, endpoint: opts.endpoint ?? null, analytics: "", mcp: false })}
- + `; return studioPage(nonce, { title: `${project.name} | GenClass dashboard`, diff --git a/telemetry-worker/src/studio.ts b/telemetry-worker/src/studio.ts index f329b5fb..d07bc3d2 100644 --- a/telemetry-worker/src/studio.ts +++ b/telemetry-worker/src/studio.ts @@ -549,7 +549,7 @@ function header(o: StudioOptions): string { const help = ``; @@ -567,7 +567,7 @@ function header(o: StudioOptions): string { ${acts}
-Feedback +Feedback ${help} ${me} From d14050f7d703b4ce70ff52625df404bff49a26b4 Mon Sep 17 00:00:00 2001 From: Karan Date: Tue, 3 Nov 2026 00:51:39 -0500 Subject: [PATCH 2/3] Rename cleanup: docs and READMEs link github.com/genclass-dev/GenClass Every plain link and bare repository name in the Markdown, llms.txt, llms-install.md and CITATION.cff. Left as they were: links that pin a commit (/blob/1f0f617/ in docs/runtime/RESULTS.md; the names next to d77ffd8 in payload.md and vendure.md; the PR link next to commit 12f4a5c in the advisory draft), the prose about the rename itself (the runtime CHANGELOG entry that records it, docs/adoption/listings/skills.md), AGENTS.md, the recorded bench results, the captured evidence and hunt logs, and the owner's local checkout path in demo-site/DEMO-SCRIPT.md. The Repository line of docs/adoption/listings/mcp.md now names both old names as old names that GitHub redirects. Co-Authored-By: Claude Fable 5.1 --- CITATION.cff | 2 +- CONTRIBUTING.md | 2 +- FAQ.md | 64 +++++------ PRIVACY.md | 2 +- README.md | 56 +++++----- SECURITY.md | 6 +- bench/visual/README.md | 6 +- compat/RESULTS.md | 8 +- docs/adoption/hunts/ghost-issue.md | 6 +- docs/adoption/hunts/payload-issue.md | 2 +- docs/adoption/hunts/rtk-5139-comment.md | 12 +- docs/adoption/hunts/rtk-5139.md | 6 +- docs/adoption/hunts/rtk-5139/repro/README.md | 4 +- docs/adoption/hunts/strapi-issue.md | 2 +- docs/adoption/listings/mcp.md | 45 ++++---- docs/adoption/listings/svelte.md | 4 +- docs/adoption/listings/sveltesociety.md | 2 +- docs/adoption/listings/vue-and-angular.md | 4 +- docs/runtime/AGENT.md | 4 +- docs/runtime/CONTRACT.md | 2 +- docs/runtime/VISUAL.md | 2 +- docs/security/2026-10-mode-raise.md | 2 +- llms-install.md | 4 +- llms.txt | 58 +++++----- packages/astro/README.md | 14 +-- packages/genclass-runtime/README.md | 4 +- packages/mcp/CHANGELOG.md | 12 +- packages/mcp/README.md | 12 +- packages/mcp/plugin/README.md | 16 +-- packages/nuxt/README.md | 12 +- packages/playwright/README.md | 8 +- packages/runtime-model/MODEL_CARD.md | 34 +++--- packages/runtime-model/README.md | 20 ++-- packages/runtime/CHANGELOG.md | 16 +-- packages/runtime/INTERCEPTION.md | 22 ++-- packages/runtime/README.md | 110 +++++++++---------- packages/runtime/TELEMETRY.md | 34 +++--- packages/sv/README.md | 12 +- realapps/apps/README.md | 2 +- templates/README.md | 2 +- templates/angular/README.md | 6 +- templates/astro/README.md | 6 +- templates/nextjs/README.md | 8 +- templates/nuxt/README.md | 6 +- templates/react-router/README.md | 4 +- templates/react-vite/README.md | 4 +- templates/sveltekit/README.md | 6 +- templates/vue-vite/README.md | 6 +- 48 files changed, 341 insertions(+), 340 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index ad3e2853..16d70df2 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -12,7 +12,7 @@ abstract: >- authors: - name: "Daybot Solutions Inc." website: "https://genclass.dev" -repository-code: "https://github.com/genclass-dev/GenClass-lib" +repository-code: "https://github.com/genclass-dev/GenClass" url: "https://genclass.dev" license: Apache-2.0 # The newest published release of @genclass/runtime (npm `beta`; `latest` is 0.2.2, dated 2026-10-13 in the diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6e848e98..7618f79c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ # Contributing to GenClass -How to change GenClass-lib, the repository of `@genclass/runtime` (GenClass Runtime, an open-source browser library +How to change GenClass, the repository of `@genclass/runtime` (GenClass Runtime, an open-source browser library that reports race conditions in web apps), its model package, and everything used to train and evaluate the model: where things are, what CI runs, the rules that keep the measurements honest, and how a release is made. To use GenClass in an app, read the [package README](packages/runtime/README.md) instead. diff --git a/FAQ.md b/FAQ.md index 17c625fd..6fbb3ed3 100644 --- a/FAQ.md +++ b/FAQ.md @@ -4,10 +4,10 @@ Short answers to the questions developers ask about GenClass Runtime, for `@genc `beta`) and 0.2.2 (npm `latest`; the dist-tags on 2026-10-22), both with the model `@genclass/runtime-model@0.2.0`. Each answer comes first and the link after it has the details. Every measured number is from -[RESULTS.md](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md) (the compatibility -details from [compat/RESULTS.md](https://github.com/genclass-dev/GenClass-lib/blob/main/compat/RESULTS.md)), which +[RESULTS.md](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md) (the compatibility +details from [compat/RESULTS.md](https://github.com/genclass-dev/GenClass/blob/main/compat/RESULTS.md)), which say how and on what each was measured; defaults and limits come from the code. The headline numbers are under -[current numbers in one place](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md#current-numbers-in-one-place). +[current numbers in one place](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md#current-numbers-in-one-place). ## What is GenClass Runtime? @@ -18,8 +18,8 @@ and each report comes with its evidence. By default it only reports (`observe`): request, a response or a state write. The opt-in `guard` mode may act on a few of them ([how often](#can-it-prevent-these-bugs-or-only-report-them)), and `heal` is experimental. -Details: [README](https://github.com/genclass-dev/GenClass-lib#readme), -[package README](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md). +Details: [README](https://github.com/genclass-dev/GenClass#readme), +[package README](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md). ## How do I find race conditions in a React app? @@ -29,7 +29,7 @@ first in your entry file. React component state is found automatically, and in ` console line with its evidence. Details: [guide: race conditions in React](https://genclass.dev/guides/race-conditions-react), -[what a detection looks like](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#what-it-looks-like). +[what a detection looks like](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#what-it-looks-like). ## Why does my search box show results for an older query? @@ -40,7 +40,7 @@ state and Zustand stores with the `devtools` middleware are found automatically; or `rt.guard`. In `guard`, for state it can write, it can drop the stale write when its gate clears. Details: [guide: stale responses out of order](https://genclass.dev/guides/stale-responses-out-of-order), -[state it can protect](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#state-it-can-protect). +[state it can protect](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#state-it-can-protect). ## Is AbortController enough to stop stale responses? @@ -58,7 +58,7 @@ duplicate submits on held-out real apps with the right diagnosis, under a false- decision that held on held-out test. The 0.3.0 changes to observe were not measured end to end (§11). Details: [guide: prevent duplicate submissions](https://genclass.dev/guides/prevent-duplicate-submissions), -[RESULTS.md §11](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md#observe-detection). +[RESULTS.md §11](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md#observe-detection). ## Does GenClass change what my app does? @@ -69,8 +69,8 @@ show with GenClass although it took no action (1 in observe, 3 in guard or heal: the app's race), and in 38 more guard and heal runs where the bug showed without GenClass, it still showed but the page or server ended in a different state. `guard` and `heal` act only when their gate clears. -Details: [RESULTS.md §16](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md#16-compatibility-matrix-summary), -[INTERCEPTION.md](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/INTERCEPTION.md). +Details: [RESULTS.md §16](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md#16-compatibility-matrix-summary), +[INTERCEPTION.md](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/INTERCEPTION.md). ## How accurate is it? @@ -89,8 +89,8 @@ state; false-detection limit 5% on real apps and 6% on simulated, met on held-ou end on 0.3.0; how many false detections the possible tier adds, and what share of possible detections is false, are not measured. -Details: [Measured results](https://github.com/genclass-dev/GenClass-lib#measured-results), -[current numbers in one place](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md#current-numbers-in-one-place) (RESULTS.md §1, §11). +Details: [Measured results](https://github.com/genclass-dev/GenClass#measured-results), +[current numbers in one place](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md#current-numbers-in-one-place) (RESULTS.md §1, §11). ## Can it prevent these bugs, or only report them? @@ -102,8 +102,8 @@ actions on correct apps in 1,760 runs. In the six demos under network chaos no m GenClass, 70% observe, 72% guard, 73% heal; differences under about 5 points are noise; runtime 0.1.0-beta.4, model 0.2.0), with 0 false interventions in 30 clean trials each in guard and heal. -Details: [Modes](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#modes), -[RESULTS.md §16](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md#16-compatibility-matrix-summary). +Details: [Modes](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#modes), +[RESULTS.md §16](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md#16-compatibility-matrix-summary). ## Which frameworks and data libraries does it work with? @@ -118,8 +118,8 @@ automatically, and so are Zustand stores with the `devtools` middleware (in prod import `@genclass/runtime/discover` first and pass `autoState: true`. Vue / Pinia, Svelte stores, signals, MobX, Jotai and Recoil are not discovered: register such state with `rt.atom` / `rt.guard`. -Details: [compat/RESULTS.md](https://github.com/genclass-dev/GenClass-lib/blob/main/compat/RESULTS.md), -[automatic state discovery](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#automatic-state-discovery). +Details: [compat/RESULTS.md](https://github.com/genclass-dev/GenClass/blob/main/compat/RESULTS.md), +[automatic state discovery](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#automatic-state-discovery). ## How much does it add to my page? @@ -128,9 +128,9 @@ About 108 KB of JavaScript (minified, gzip) on every page for `@genclass/runtime 13 MB downloaded once on WASM, then cached, and +190 to 280 MB of renderer memory while loaded (one pilot app, runtime 0.1.0-beta.3). From 0.3.0, devices reporting 2 GB of memory or less, and Save-Data connections, skip it. -Details: [RESULTS.md §10](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md#first-load) -and [§17](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md#17-browser-cost-on-a-pilot-app-2026-10-09-and-2026-10-10), -[Costs](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#costs). +Details: [RESULTS.md §10](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md#first-load) +and [§17](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md#17-browser-cost-on-a-pilot-app-2026-10-09-and-2026-10-10), +[Costs](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#costs). ## Does it work without the model, or on phones? @@ -142,8 +142,8 @@ If no Web Worker can start, the model runs on the main thread unless `model: { i ignores it and always falls back to the main thread); each model pass then blocks it (about 180 to 600 ms at 500 to 1,170 tokens on one WASM thread, estimated from runs in Node, not in a browser). -Details: [Costs](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#costs), -[Content-Security-Policy and self-hosting](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#content-security-policy-and-self-hosting). +Details: [Costs](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#costs), +[Content-Security-Policy and self-hosting](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#content-security-policy-and-self-hosting). ## Does it send my data anywhere? @@ -157,8 +157,8 @@ also carry the token and the names of `protect()`ed functions. Opt out with `Gen `npx @genclass/runtime@beta init --no-telemetry`, `?genclass=no-telemetry` or `localStorage.setItem("genclass.telemetry", "off")`; Global Privacy Control is honoured. -Details: [TELEMETRY.md](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/TELEMETRY.md), -[PRIVACY.md](https://github.com/genclass-dev/GenClass-lib/blob/main/PRIVACY.md). +Details: [TELEMETRY.md](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/TELEMETRY.md), +[PRIVACY.md](https://github.com/genclass-dev/GenClass/blob/main/PRIVACY.md). ## What does it cost? Does it need an API key? @@ -169,7 +169,7 @@ request. Enterprise, agreed by email, adds GenClass's models in its cloud, a yea Nothing is sold on the site. The pricing page shows the plans in force. Details: [genclass.dev/pricing](https://genclass.dev/pricing), -[billing/plans.json](https://github.com/genclass-dev/GenClass-lib/blob/main/billing/plans.json). +[billing/plans.json](https://github.com/genclass-dev/GenClass/blob/main/billing/plans.json). ## Can I use it without an account? @@ -178,7 +178,7 @@ Yes. Two commands set up every open-source part, and nothing asks you to sign in app's free dashboard link; `--agent` is new in `0.3.0-beta.6`) and `npx -y @genclass/mcp@0.2.1 init` (the MCP server and the `genclass` skill for Claude Code). Anonymous diagnostics stay on, as with every `init` (never page text, never from local hosts); `init --no-telemetry --agent` turns them off and creates no dashboard link. Details: -[INSTALL.md](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/INSTALL.md#how-do-i-set-up-the-open-source-parts-only). +[INSTALL.md](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/INSTALL.md#how-do-i-set-up-the-open-source-parts-only). ## How is it different from Sentry, Datadog or my tests? @@ -187,7 +187,7 @@ nothing they could collect. Tests usually run on fast, ordered networks, where t GenClass looks for them inside the page while people use it, and its reports can go to your own logging. Use it next to both. -Details: [How GenClass compares](https://github.com/genclass-dev/GenClass-lib#how-genclass-compares). +Details: [How GenClass compares](https://github.com/genclass-dev/GenClass#how-genclass-compares). ## Can it explain flaky Playwright tests? @@ -195,7 +195,7 @@ Not as a packaged tool yet. `@genclass/playwright`, a reporter that turns what G one markdown report for the pull request, is in this repository but not on npm, and the fixture it reads has not shipped. Today you can load the runtime in the app under test and read its `[GenClass]` console lines. -Details: [packages/playwright](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/playwright/README.md). +Details: [packages/playwright](https://github.com/genclass-dev/GenClass/blob/main/packages/playwright/README.md). ## How do I turn it off or remove it? @@ -206,7 +206,7 @@ when nothing else imports it (if you edited a marked line, it changes nothing an `.genclass.local` and its `.gitignore` line, and a dashboard `init` created stays on genclass.dev. `?genclass=no-telemetry` turns off only the diagnostics. -Details: [INTERCEPTION.md, turning it off](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/INTERCEPTION.md#turning-it-off-and-restoring-the-page). +Details: [INTERCEPTION.md, turning it off](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/INTERCEPTION.md#turning-it-off-and-restoring-the-page). ## How was it measured, and does that apply to my app? @@ -214,12 +214,12 @@ On held-out data never used in training: simulated apps, real apps run in headle of seven apps (six frameworks and plain HTML) and six demo apps under network chaos. Each recall is reported next to its false rate. It was not evaluated on your app, so watch `observe` before turning on `guard`. -Details: [RESULTS.md](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md), -[model card](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime-model/MODEL_CARD.md). +Details: [RESULTS.md](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md), +[model card](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime-model/MODEL_CARD.md). ## Where can I ask something else? -In [GitHub Discussions](https://github.com/genclass-dev/GenClass-lib/discussions/categories/q-a) or on +In [GitHub Discussions](https://github.com/genclass-dev/GenClass/discussions/categories/q-a) or on [Discord](https://discord.gg/kN9kRnFtZm). Report bugs and false detections in -[Issues](https://github.com/genclass-dev/GenClass-lib/issues); the false-detection template asks for the console +[Issues](https://github.com/genclass-dev/GenClass/issues); the false-detection template asks for the console group and `rt.explain(id)`. diff --git a/PRIVACY.md b/PRIVACY.md index 41a6494d..76795f6b 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -185,7 +185,7 @@ can also contact your local data protection authority. The data comes from your users' browsers. Depending on where you operate, you may need to mention GenClass in your own privacy policy, or keep `telemetry: false` until your users consent to analytics. Full technical details are in -[TELEMETRY.md](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/TELEMETRY.md). +[TELEMETRY.md](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/TELEMETRY.md). ## Changes diff --git a/README.md b/README.md index 8b3b1d62..45e71235 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ [![npm](https://img.shields.io/npm/v/@genclass/runtime/latest?label=npm)](https://www.npmjs.com/package/@genclass/runtime) [![npm beta](https://img.shields.io/npm/v/@genclass/runtime/beta?label=beta)](https://www.npmjs.com/package/@genclass/runtime?activeTab=versions) -[![CI](https://github.com/genclass-dev/GenClass-lib/actions/workflows/ci.yml/badge.svg)](https://github.com/genclass-dev/GenClass-lib/actions/workflows/ci.yml) -[![license](https://img.shields.io/badge/license-Apache--2.0-blue)](https://github.com/genclass-dev/GenClass-lib/blob/main/LICENSE) -[![model](https://img.shields.io/badge/model-runs%20in%20the%20browser-brightgreen)](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime-model/MODEL_CARD.md) +[![CI](https://github.com/genclass-dev/GenClass/actions/workflows/ci.yml/badge.svg)](https://github.com/genclass-dev/GenClass/actions/workflows/ci.yml) +[![license](https://img.shields.io/badge/license-Apache--2.0-blue)](https://github.com/genclass-dev/GenClass/blob/main/LICENSE) +[![model](https://img.shields.io/badge/model-runs%20in%20the%20browser-brightgreen)](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime-model/MODEL_CARD.md) **Website and docs: [genclass.dev](https://genclass.dev)** · [Docs](https://genclass.dev/docs) · [Guides](https://genclass.dev/guides) · [Benchmarks](https://genclass.dev/benchmarks) · [Pricing](https://genclass.dev/pricing) · [FAQ](FAQ.md) · [Discord](https://discord.gg/kN9kRnFtZm) @@ -16,7 +16,7 @@ request, a response or a state write. The opt-in `guard` mode may act on a few o ([how often](#what-it-finds-measured)), and `heal` is experimental. It runs in React, Next.js, Vue, SvelteKit, Angular, Solid and plain-HTML apps (measured in Chromium with an unpublished 0.1.0-beta.4 build and model 0.2.0 on 2026-10-10, not re-run on 0.2.2 or 0.3.0: -[compatibility matrix](https://github.com/genclass-dev/GenClass-lib/blob/main/compat/RESULTS.md)). +[compatibility matrix](https://github.com/genclass-dev/GenClass/blob/main/compat/RESULTS.md)). **Status: `@genclass/runtime@0.3.0-beta.5`, the newest line (npm `beta` dist-tag: `npm install @genclass/runtime@beta`; the stable line is `0.2.x`), with model `@genclass/runtime-model@0.2.0`.** npm dist-tags on 2026-11-02: `latest` is @@ -71,7 +71,7 @@ Or with no build step, first in ``: with `devtools(..., { enabled: true })`) are discovered automatically; discovered React and Zustand state is observed only. Vue / Pinia, Svelte stores, signals, MobX, Jotai and Recoil are not discovered: register such state with `rt.atom` / `rt.guard` - ([state it can protect](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#state-it-can-protect)). + ([state it can protect](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#state-it-can-protect)). `GenClass.init()` is the explicit setup; it discovers state only if you import `@genclass/runtime/discover` first and pass `autoState: true`. - **Pin the version in the script tag**, as above: the unversioned URL serves `latest`, and the CDN cache may serve an @@ -86,18 +86,18 @@ Or with no build step, first in ``: Full install guide, with every `init` and `remove` flag, the app token and the tested project setups: [docs/runtime/INSTALL.md](docs/runtime/INSTALL.md). The short version, with page configuration and the script-tag attributes, is in the -[package README](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#install). +[package README](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#install). To audit any page for visual bugs without adding anything to it: `npx @genclass/runtime@beta scan ` (alias `audit`; a score and each problem with its element and a suggested CSS fix; -[Audit a page](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#audit-a-page)). +[Audit a page](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#audit-a-page)). Coding agents get the same as `genclass_scan` in [`@genclass/mcp`](packages/mcp). ## What it finds (measured) Model `@genclass/runtime-model@0.2.0` at the default profile, `balanced`, on held-out data never used in training -([RESULTS.md](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md) §1, §11; every headline number is under -[current numbers in one place](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md#current-numbers-in-one-place)): +([RESULTS.md](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md) §1, §11; every headline number is under +[current numbers in one place](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md#current-numbers-in-one-place)): | problem | reported with the right diagnosis (observe, held-out real apps; false detections limited to 2% per clean decision) | |---|---| @@ -111,7 +111,7 @@ Model `@genclass/runtime-model@0.2.0` at the default profile, `balanced`, on hel false ones included, at a rate not measured (§11). In the compatibility matrix (an unpublished 0.1.0-beta.4 build, commit `d04eff3`, 2026-10-10), observe made 49 false findings in 880 runs of correct apps, all in one polling and fan-out scenario - ([RESULTS.md §16](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md#16-compatibility-matrix-summary)). + ([RESULTS.md §16](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md#16-compatibility-matrix-summary)). - **Possible detections (0.3.0).** Observe in `0.3.0-beta.0` also records detections below the report gate, at the `eager` profile's gate (0.70), to `console.debug`, the devtools and telemetry. Likely and possible together are expected to match the `eager` profile's offline rates (77% of duplicate submits, 45% of stale overwrites, 40% on @@ -144,15 +144,15 @@ The full tables, with every false-intervention rate next to its recall, are unde load is never a delivery decision: the runtime first has to see what that request writes. - The devtools overlay: `Alt+Shift+G` on localhost (the `init` command loads it in development only). - The first-visit cost, measured on one pilot app with runtime 0.1.0-beta.3 and model 0.2.0 - ([RESULTS.md](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md) §17): about 13 MB + ([RESULTS.md](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md) §17): about 13 MB downloaded from jsDelivr on WASM (12.7 MB measured, with the q8 model at 9.45 MB as recorded, ONNX Runtime's wasm at 3.07 MB brotli and the tokenizer; the q8 file itself is 10.2 MB); on WebGPU with `shader-f16`, the 13.6 MB fp16 model plus a larger ONNX Runtime build. Both are cached afterwards. The renderer process uses 190 to 280 MB more memory while the model is loaded. Devices that report 2 GB of memory or less, and Save-Data connections, do not load the model by default (they observe without it and say so in one console line; new in `0.3.0`: `0.2.x` loads everywhere and only lazily on Save-Data). For phones and strict Content-Security-Policies see - [self-hosting](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#content-security-policy-and-self-hosting) - and [`loadIf`](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#costs). + [self-hosting](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#content-security-policy-and-self-hosting) + and [`loadIf`](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#costs). ## New: your coding agent can see the race, replay it, and prove the fix @@ -184,7 +184,7 @@ showed it on the developer's fast backend, with no false report on the fixed pag Since `0.3.0-beta.0` (the `beta` line on npm). `0.2.x` ignores `token`, has no `protect()` export (an import of it fails), and its `init` creates no token. Details: -[CHANGELOG](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/CHANGELOG.md), 0.3.0-beta.0. +[CHANGELOG](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/CHANGELOG.md), 0.3.0-beta.0. ```ts import { GenClass, protect } from "@genclass/runtime"; // 0.3.0 @@ -206,13 +206,13 @@ export const submitOrder = protect("checkout submit", (cart) => fetch("/api/orde [docs/runtime/DASHBOARD.md](docs/runtime/DASHBOARD.md). - **`protect(name, fn)`** returns a function with the same signature (same `this`, arguments, return value and errors); decisions about what it causes carry `fn: name`. Without a runtime it just calls `fn`. - [Package README](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#function-specific-protect). + [Package README](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#function-specific-protect). - **More sensitive observe mode.** Observe also reports *possible* detections, below the report gate at the `eager` profile's value: one `console.debug` line each, ending in `(possible)`. Your `rt.on("detect")` and report function get them only with `detect: "possible"`; `detect: "likely"` turns them off. Situations raised while the model loads or the tab is hidden are decided once it can, and reported at the possible tier at most until their false-report rate is measured. - [Package README](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#modes). + [Package README](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#modes). ## How it works @@ -282,7 +282,7 @@ very heavy page can cause a long task, which the runtime records as a `perf` eve Every recall is reported next to its false-intervention rate (FIR): the share of cases where doing nothing was best but the gate fired anyway. Source and history: -[RESULTS.md](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md). +[RESULTS.md](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md). **Shipped model:** `genclass-runtime-r17` 2.0.0-rc4t (`@genclass/runtime-model@0.2.0`, run `r17-v2dT`, gain gate), 10.2 MB q8, about 180 to 600 ms per model pass at 500 to 1,170 tokens on one WASM thread (estimated from runs in Node, @@ -300,11 +300,11 @@ The FIR columns are on simulated apps; on held-out real apps FIR was 0.00% for e FIR ≤ 0.1% and heal FIR ≤ 0.5%: `cautious` stays under both, `balanced` is slightly over both, `eager` is well over. Recall is still low: at `balanced`, guard acts on under 8% of the cases where acting would help. Calibration error is not yet measured for this model (r17-v2b: 0.021 to 0.023). See the -[model card](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime-model/MODEL_CARD.md). +[model card](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime-model/MODEL_CARD.md). | what | result | |---|---| -| Compatibility matrix (7 apps: 6 frameworks and plain HTML; 15 data layers, 8 scenarios, 10 seeds; an unpublished 0.1.0-beta.4 build, commit `d04eff3`, which does not contain 0.2.0's audit trail, protect presets, hold-budget ceilings and invariant fixes (committed on another branch) and predates 0.2.1's first-request hold and telemetry defaults; model 0.2.0, `balanced`, 2026-10-10; not re-run on 0.2.2 or 0.3.0) | 0 bugs introduced in 3,510 runs; 0 actions on correct apps in 1,760 guard and heal runs; observe: 49 false findings in 880 correct-app runs; of 250 runs where the app's own bug showed, guard left 249 buggy and heal 240. 350 of 351 cells left the app at least as correct as without GenClass on every seed (observe: the same final page and server state); the other is observe on Next.js + SWR, scenario d, where on seed 7 GenClass's timing tipped the app's own race to the correct result without any action ([compat/RESULTS.md](https://github.com/genclass-dev/GenClass-lib/blob/main/compat/RESULTS.md), §16). | +| Compatibility matrix (7 apps: 6 frameworks and plain HTML; 15 data layers, 8 scenarios, 10 seeds; an unpublished 0.1.0-beta.4 build, commit `d04eff3`, which does not contain 0.2.0's audit trail, protect presets, hold-budget ceilings and invariant fixes (committed on another branch) and predates 0.2.1's first-request hold and telemetry defaults; model 0.2.0, `balanced`, 2026-10-10; not re-run on 0.2.2 or 0.3.0) | 0 bugs introduced in 3,510 runs; 0 actions on correct apps in 1,760 guard and heal runs; observe: 49 false findings in 880 correct-app runs; of 250 runs where the app's own bug showed, guard left 249 buggy and heal 240. 350 of 351 cells left the app at least as correct as without GenClass on every seed (observe: the same final page and server state); the other is observe on Next.js + SWR, scenario d, where on seed 7 GenClass's timing tipped the app's own race to the correct result without any action ([compat/RESULTS.md](https://github.com/genclass-dev/GenClass/blob/main/compat/RESULTS.md), §16). | | Never make a correct app worse (always-passive model, heal vs observe, 66 real apps × 6 seeds; runtime as of 0.1.0-alpha.1, not re-run) | 0 of 396 clean runs changed (final page text, inputs and alerts excluded, and server state). Request timing and store contents are not compared, nor is observe against no runtime. With chaos: 3 of 198. In the demos (guard, same runtime and model), a clean typeahead made 0 model calls and held for 0 ms (§4). | | Six demo apps under network chaos (model 0.2.0, `balanced`, runtime 0.1.0-beta.4, an unpublished build of 2026-10-09; 10 chaos + 5 clean seeds per demo and mode) | Bug rate 72% off, 70% observe, 72% guard, 73% heal (differences under 5 points are noise): nothing is healed at the shipped gates, because candidate gains rarely clear the margins; 0 false interventions on clean runs (§5). | @@ -356,7 +356,7 @@ rows and 837,623 real-browser rows (§6). Recall is the open problem. whether the browser visited before; `runtime.analytics.stop()` removes it); never used for a decision, and every opt-out above turns them off. Where consent is needed (the EU, EEA and UK), leave `analytics` unset and call `runtime.analytics.start()` once the visitor consents - ([TELEMETRY.md](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/TELEMETRY.md#interaction-analytics)). + ([TELEMETRY.md](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/TELEMETRY.md#interaction-analytics)). - **The measured visual checks send counts only** (from `0.3.0-beta.5`): whether they run on the page and whether their runtime fixes are on, and in each summary the findings per check and per page path (at most 20 paths), the fixes applied and undone, and their cost. Never a selector, element text, colour, URL, size or one event per finding; @@ -364,8 +364,8 @@ rows and 837,623 real-browser rows (§6). Recall is the open problem. - **The CLI** contacts genclass.dev only for the command you run (`init` creates a dashboard only after you approve its diff). - Apps that ship GenClass may need to disclose this to their users (GDPR/CCPA). Full schema, storage and guidance: - [TELEMETRY.md](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/TELEMETRY.md); what an - account stores: [PRIVACY.md](https://github.com/genclass-dev/GenClass-lib/blob/main/PRIVACY.md). + [TELEMETRY.md](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/TELEMETRY.md); what an + account stores: [PRIVACY.md](https://github.com/genclass-dev/GenClass/blob/main/PRIVACY.md). ## Security @@ -381,14 +381,14 @@ rows and 837,623 real-browser rows (§6). Recall is the open problem. ## Documentation - [Docs index and glossary](docs/runtime/README.md): every document, what it answers and its status. -- [Package README](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md): the full guide +- [Package README](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md): the full guide (modes, triggers, adapters, observability, performance, privacy, known limitations). - [API reference](docs/runtime/API.md), [interception surface](packages/runtime/INTERCEPTION.md), [CHANGELOG](packages/runtime/CHANGELOG.md). -- Measurements: [RESULTS.md](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md) (every - measured number), [compat/RESULTS.md](https://github.com/genclass-dev/GenClass-lib/blob/main/compat/RESULTS.md) (the +- Measurements: [RESULTS.md](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md) (every + measured number), [compat/RESULTS.md](https://github.com/genclass-dev/GenClass/blob/main/compat/RESULTS.md) (the compatibility matrix), the - [model card](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime-model/MODEL_CARD.md). + [model card](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime-model/MODEL_CARD.md). - Guides on genclass.dev: [race conditions in React](https://genclass.dev/guides/race-conditions-react), [stale responses out of order](https://genclass.dev/guides/stale-responses-out-of-order), [preventing duplicate submissions](https://genclass.dev/guides/prevent-duplicate-submissions). @@ -397,9 +397,9 @@ rows and 837,623 real-browser rows (§6). Recall is the open problem. Short answers to the common questions (race conditions in React, stale responses, double submits, whether it changes your app, what it sends, how big it is, what it costs, how it compares) are in [FAQ.md](FAQ.md). Ask in -[GitHub Discussions](https://github.com/genclass-dev/GenClass-lib/discussions/categories/q-a) or on +[GitHub Discussions](https://github.com/genclass-dev/GenClass/discussions/categories/q-a) or on [Discord](https://discord.gg/kN9kRnFtZm); report bugs and false detections in -[Issues](https://github.com/genclass-dev/GenClass-lib/issues). +[Issues](https://github.com/genclass-dev/GenClass/issues). ## Development diff --git a/SECURITY.md b/SECURITY.md index 80d7a45a..825162fe 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -9,8 +9,8 @@ state writes proceed. We take reports about it seriously. Please report security issues privately, not in public GitHub issues, discussions or pull requests. - **Email:** [mehar@daybot.ca](mailto:mehar@daybot.ca) -- **GitHub:** a private vulnerability report on the GenClass-lib repository - ([Security → Report a vulnerability](https://github.com/genclass-dev/GenClass-lib/security/advisories/new)). +- **GitHub:** a private vulnerability report on the GenClass repository + ([Security → Report a vulnerability](https://github.com/genclass-dev/GenClass/security/advisories/new)). Include what you can of: the affected package and version (`GenClass.runtime.status`, or the version in `package.json`), how GenClass was installed (`@genclass/runtime/auto`, `GenClass.init`, the script tag), the mode @@ -107,7 +107,7 @@ npm pack @genclass/runtime@$V # the published tarball, byt npm view @genclass/runtime@$V dist.shasum dist.integrity gitHead shasum -a 1 genclass-runtime-$V.tgz # equals dist.shasum mkdir published && tar -xzf genclass-runtime-$V.tgz -C published -git clone https://github.com/genclass-dev/GenClass-lib.git src && cd src +git clone https://github.com/genclass-dev/GenClass.git src && cd src git checkout v$V # or the commit in the provenance / gitHead ONNXRUNTIME_NODE_INSTALL=skip npm ci --no-audit --no-fund npm run build -w @genclass/runtime diff --git a/bench/visual/README.md b/bench/visual/README.md index 813dda74..d97cfd93 100644 --- a/bench/visual/README.md +++ b/bench/visual/README.md @@ -81,9 +81,9 @@ finding kinds and uploaded per-site artifacts; deleting their logs and artifacts ## Run ```bash -gh workflow run visual-measure.yml --repo genclass-dev/GenClass-lib --ref -gh run list --repo genclass-dev/GenClass-lib --workflow visual-measure.yml --limit 1 -gh run download --repo genclass-dev/GenClass-lib --name visual-summary +gh workflow run visual-measure.yml --repo genclass-dev/GenClass --ref +gh run list --repo genclass-dev/GenClass --workflow visual-measure.yml --limit 1 +gh run download --repo genclass-dev/GenClass --name visual-summary ``` On the visual branch, a push that changes `bench/visual/` starts it (`[smoke]` in the commit message: two pages per diff --git a/compat/RESULTS.md b/compat/RESULTS.md index 8cb68c80..e70476d2 100644 --- a/compat/RESULTS.md +++ b/compat/RESULTS.md @@ -6,7 +6,7 @@ Does adding GenClass break your app? This page answers that for 7 small, idiomat - **350 of 351** (app × data layer × scenario × mode) cells are ✓: GenClass in that mode left the app as correct as it was without GenClass, on every seed. Observe mode (the default) must leave the final page and server state *identical* to a run without GenClass. - **Bugs introduced: 0** across 3510 mode runs. Non-passive actions on correct apps (scenarios c to h, guard + heal): **0** in 1760 runs. -- **Bugs fixed by an action: 10 (10 × heal, HttpClient withXhr() (XMLHttpRequest) + signals (Angular 22 (SSR + hydration, zoneless)), scenario b, request:block).** The two scenarios with a latent bug (a stale typeahead, a double submit) showed it in 250 of 290 runs without GenClass; guard left 249 and heal 240 of the same runs buggy. GenClass acts only when its model is confident, and with the shipped model that is rare: it reports far more than it fixes (see [Model quality](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md#model-quality)). In 4 more runs a bug of the app did not show with GenClass although GenClass took no action: GenClass changed the timing of a race in the app (listed at the end of the page). +- **Bugs fixed by an action: 10 (10 × heal, HttpClient withXhr() (XMLHttpRequest) + signals (Angular 22 (SSR + hydration, zoneless)), scenario b, request:block).** The two scenarios with a latent bug (a stale typeahead, a double submit) showed it in 250 of 290 runs without GenClass; guard left 249 and heal 240 of the same runs buggy. GenClass acts only when its model is confident, and with the shipped model that is rare: it reports far more than it fixes (see [Model quality](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md#model-quality)). In 4 more runs a bug of the app did not show with GenClass although GenClass took no action: GenClass changed the timing of a race in the app (listed at the end of the page). - **Observe-mode findings on correct apps: 319** in 880 runs (scenarios c to h). 270 of them report the failure a scenario injects on purpose (the HTTP 500 in d, going offline in e), which the app handles correctly; **49 are false findings** (request:overload in g ×45, request:duplicate in g ×4). Findings change nothing in observe mode; they are listed per cell in [What GenClass reported and did](#what-genclass-reported-and-did). Versions: `@genclass/runtime` packed from this repository at commit `d04eff3` (version string 0.1.0-beta.4, never published: the code released as 0.2.0 plus the "Model ready" log fix, which shipped together as **0.2.1**), model `genclass-runtime-r17` 2.0.0-rc4t (the default model, WASM, balanced profile), headless Chromium 153.0.8010.12, Node v24.21.0. Framework versions are in the first table. @@ -342,8 +342,8 @@ Next.js 16 App Router (SSR) / SWR 2 / scenario d (optimistic update, confirmatio ## Method -- **Apps.** One small app per framework under [`compat/apps/`](https://github.com/genclass-dev/GenClass-lib/tree/main/compat/apps), written idiomatically for each data layer (no GenClass API anywhere: only the one line). They install `@genclass/runtime` from a tarball packed from this repository (`npm pack`), so the matrix tests the code as it would be published. -- **Backend.** One seeded mock server for every app ([`compat/harness/backend.mjs`](https://github.com/genclass-dev/GenClass-lib/blob/main/compat/harness/backend.mjs)): REST, a GraphQL endpoint, a WebSocket and EventSource streams on the app's own origin. It injects latency and failures per scenario; nothing in it knows about GenClass. +- **Apps.** One small app per framework under [`compat/apps/`](https://github.com/genclass-dev/GenClass/tree/main/compat/apps), written idiomatically for each data layer (no GenClass API anywhere: only the one line). They install `@genclass/runtime` from a tarball packed from this repository (`npm pack`), so the matrix tests the code as it would be published. +- **Backend.** One seeded mock server for every app ([`compat/harness/backend.mjs`](https://github.com/genclass-dev/GenClass/blob/main/compat/harness/backend.mjs)): REST, a GraphQL endpoint, a WebSocket and EventSource streams on the app's own origin. It injects latency and failures per scenario; nothing in it knows about GenClass. - **A trial.** A fresh browser context loads the page (`?genclass=off` for the run without GenClass; otherwise the mode through `window.GENCLASS_CONFIG`, telemetry off), waits until the model is ready, drives the scenario with real (trusted) keyboard and mouse input, waits until nothing is in flight and the page has been quiet for 0.9 s, then reads the page and the server's state. - **Pairing.** Every mode run is compared with the run without GenClass on the same seed. 10 seeds per cell, plus a second run without GenClass per seed as a determinism control. - **Isolation.** Every request to another host is blocked and counted; the model files and ONNX Runtime are served from a local copy of the files the runtime would fetch from jsDelivr, and the script-tag app gets the packed tarball in place of the CDN. @@ -355,7 +355,7 @@ Next.js 16 App Router (SSR) / SWR 2 / scenario d (optimistic update, confirmatio On Linux with Node ≥ 22.22.3 (Angular 22's minimum) and about 4 GB free: ```bash -git clone https://github.com/genclass-dev/GenClass-lib && cd GenClass-lib +git clone https://github.com/genclass-dev/GenClass && cd GenClass npm ci && (cd compat && npm install && npx playwright install --with-deps chromium) node packages/runtime/bin/genclass-runtime.mjs fetch-model .cache-model/runtime-model-0.2.0 --variant q8 --ort wasm COMPAT_MODEL_DIR=$PWD/.cache-model/runtime-model-0.2.0 npm --prefix compat run compat -- --seeds 10 diff --git a/docs/adoption/hunts/ghost-issue.md b/docs/adoption/hunts/ghost-issue.md index 1fd31e12..e0b7170e 100644 --- a/docs/adoption/hunts/ghost-issue.md +++ b/docs/adoption/hunts/ghost-issue.md @@ -46,13 +46,13 @@ disabled while a save runs. Ghost's own tests cover these paths (`save-engine.qu ## What could be said, if asked > We ran Ghost 6.73.0-rc.0's admin (commit 268846ab) under a response-reordering harness -> (https://github.com/genclass-dev/GenClass-lib, `@genclass/mcp` explore: the same user steps, responses delivered in +> (https://github.com/genclass-dev/GenClass, `@genclass/mcp` explore: the same user steps, responses delivered in > seeded different orders with up to 900 ms of extra latency, final state compared with in-order runs) across the > editor's autosave, post creation, switching posts, the list filters, Publish and Update double-clicks and the tag and > author pickers: 114 reordered page loads, no lost edit, no stale list, no duplicate write. The save engine's > single-flight queue, the slug machine's ticketing and the session's `updated_at` checks held in every order we > tried. Nothing to report; the write-up with every verdict is at -> https://github.com/genclass-dev/GenClass-lib/blob/main/docs/adoption/hunts/ghost.md. +> https://github.com/genclass-dev/GenClass/blob/main/docs/adoption/hunts/ghost.md. ## The template that was not needed @@ -70,6 +70,6 @@ Actual: Root cause: : () Fix: ; regression test: e2e/tests/admin/posts/.test.ts in the style of editor-react.test.ts (writes recorded through page.on('request'), the server read back through page.request) -Found with: a response-reordering harness (https://github.com/genclass-dev/GenClass-lib); the harness is not needed +Found with: a response-reordering harness (https://github.com/genclass-dev/GenClass); the harness is not needed to reproduce or to run the test. ``` diff --git a/docs/adoption/hunts/payload-issue.md b/docs/adoption/hunts/payload-issue.md index 7de6e902..7f558890 100644 --- a/docs/adoption/hunts/payload-issue.md +++ b/docs/adoption/hunts/payload-issue.md @@ -59,7 +59,7 @@ not returned, the wrong ids are marked `false` (read from the code, not reproduc **How it was found** -Found while running the admin panel under [GenClass](https://github.com/genclass-dev/GenClass-lib), which re-runs the +Found while running the admin panel under [GenClass](https://github.com/genclass-dev/GenClass), which re-runs the same user steps with responses delivered in different orders and compares the final state: the page ended identical every time, but the number of relationship batch requests depended on the delivery order: between 2 and 5 per collection for the same steps, different from the request-order runs in 33 of 36 reordered runs of the search and sort diff --git a/docs/adoption/hunts/rtk-5139-comment.md b/docs/adoption/hunts/rtk-5139-comment.md index ce88cd72..fbf4d502 100644 --- a/docs/adoption/hunts/rtk-5139-comment.md +++ b/docs/adoption/hunts/rtk-5139-comment.md @@ -1,6 +1,6 @@ # Draft comment for reduxjs/redux-toolkit#5139 -For the owner to post (not posted). The links assume `docs/adoption/hunts/rtk-5139/` is on genclass-dev/GenClass-lib +For the owner to post (not posted). The links assume `docs/adoption/hunts/rtk-5139/` is on genclass-dev/GenClass `main`; adjust them if it lands elsewhere. Everything in it is measured in [rtk-5139.md](rtk-5139.md). --- @@ -9,8 +9,8 @@ Here is a runnable reproduction, and the sequence of events and state changes as **Repro** (Vite + React + TS, `@reduxjs/toolkit` 2.13.0, backend is an in-memory Map inside the Vite dev server, so `npm install && npm run dev` is the whole setup): -https://github.com/genclass-dev/GenClass-lib/tree/main/docs/adoption/hunts/rtk-5139/repro -(StackBlitz: https://stackblitz.com/github/genclass-dev/GenClass-lib/tree/main/docs/adoption/hunts/rtk-5139/repro) +https://github.com/genclass-dev/GenClass/tree/main/docs/adoption/hunts/rtk-5139/repro +(StackBlitz: https://stackblitz.com/github/genclass-dev/GenClass/tree/main/docs/adoption/hunts/rtk-5139/repro) `GET /api/items` answers at once, `PUT /api/items/:id` takes 2 s. The mutation is the docs' optimistic-update recipe (`updateQueryData` in `onQueryStarted`, `undo` on failure) plus `invalidatesTags`. Three pages: `pollingInterval: 100`, @@ -45,16 +45,16 @@ issue). - Redux-only vitest using the `post` / `updatePost` endpoints, `baseQuery` mock and `storeRef` shape of `optimisticUpdates.test.tsx`, so it can be pasted there: - https://github.com/genclass-dev/GenClass-lib/blob/main/docs/adoption/hunts/rtk-5139/repro/test/optimisticUpdates.pending.test.ts + https://github.com/genclass-dev/GenClass/blob/main/docs/adoption/hunts/rtk-5139/repro/test/optimisticUpdates.pending.test.ts - Playwright against the repro (the name shown in the DOM while the PUT is pending): - https://github.com/genclass-dev/GenClass-lib/blob/main/docs/adoption/hunts/rtk-5139/repro/e2e/rtk-5139.spec.ts + https://github.com/genclass-dev/GenClass/blob/main/docs/adoption/hunts/rtk-5139/repro/e2e/rtk-5139.spec.ts Polling and focus failed 10 of 10 runs each; the controls passed 10 of 10. On the "what should happen" question: re-running the recipes of in-flight mutations after each fulfilled fetch of the entry (a small userland middleware, roughly the reporter's suggestion) makes both tests pass, so that behaviour is reachable without dropping fresh data. Sketch and trade-offs of the alternatives: -https://github.com/genclass-dev/GenClass-lib/blob/main/docs/adoption/hunts/rtk-5139.md#fix-directions-no-pr +https://github.com/genclass-dev/GenClass/blob/main/docs/adoption/hunts/rtk-5139.md#fix-directions-no-pr (The timing was recorded with GenClass, which logs requests next to store writes; the action log above is all it needs.) diff --git a/docs/adoption/hunts/rtk-5139.md b/docs/adoption/hunts/rtk-5139.md index 15c118fe..c4faf315 100644 --- a/docs/adoption/hunts/rtk-5139.md +++ b/docs/adoption/hunts/rtk-5139.md @@ -127,9 +127,9 @@ npm install && npm run dev # http://localhost:5173 since the click with item 1's cached name after it (the information Redux DevTools shows, kept on the page). - StackBlitz layout: `package.json` at the folder root, `.stackblitzrc` (`installDependencies`, `startCommand: npm run dev`), the backend inside Vite (WebContainers run Vite middleware). Link once this folder is on - genclass-dev/GenClass-lib `main`: - https://stackblitz.com/github/genclass-dev/GenClass-lib/tree/main/docs/adoption/hunts/rtk-5139/repro (not opened - from this environment). Copy only the folder: `npx degit genclass-dev/GenClass-lib/docs/adoption/hunts/rtk-5139/repro`. + genclass-dev/GenClass `main`: + https://stackblitz.com/github/genclass-dev/GenClass/tree/main/docs/adoption/hunts/rtk-5139/repro (not opened + from this environment). Copy only the folder: `npx degit genclass-dev/GenClass/docs/adoption/hunts/rtk-5139/repro`. - `npm run build` (tsc + Vite) passes. ## Tests and results diff --git a/docs/adoption/hunts/rtk-5139/repro/README.md b/docs/adoption/hunts/rtk-5139/repro/README.md index 40897e33..54cefd85 100644 --- a/docs/adoption/hunts/rtk-5139/repro/README.md +++ b/docs/adoption/hunts/rtk-5139/repro/README.md @@ -16,9 +16,9 @@ npm run dev # http://localhost:5173 ``` Or open it on StackBlitz: -https://stackblitz.com/github/genclass-dev/GenClass-lib/tree/main/docs/adoption/hunts/rtk-5139/repro +https://stackblitz.com/github/genclass-dev/GenClass/tree/main/docs/adoption/hunts/rtk-5139/repro -Or copy just this folder: `npx degit genclass-dev/GenClass-lib/docs/adoption/hunts/rtk-5139/repro rtk-5139`. +Or copy just this folder: `npx degit genclass-dev/GenClass/docs/adoption/hunts/rtk-5139/repro rtk-5139`. Press **Rename item 1**. The name changes to `Edited 1` at once (the optimistic update), goes back to `Original` within about 100 ms (the next poll's `executeQuery/fulfilled`), and shows `Edited 1` again after the PUT returns and diff --git a/docs/adoption/hunts/strapi-issue.md b/docs/adoption/hunts/strapi-issue.md index b3cbb7e9..1ebb543d 100644 --- a/docs/adoption/hunts/strapi-issue.md +++ b/docs/adoption/hunts/strapi-issue.md @@ -111,7 +111,7 @@ fix. **How it was found** By reordering the admin's responses with GenClass, an open-source library that reports races in web apps -(https://github.com/genclass-dev/GenClass-lib): on this page, 2 of 6 reordered loads ended on the 403 page, and the +(https://github.com/genclass-dev/GenClass): on this page, 2 of 6 reordered loads ended on the 403 page, and the delayed-response script above is the reproduction without it. ## Pull request diff --git a/docs/adoption/listings/mcp.md b/docs/adoption/listings/mcp.md index 497483d5..48cdc790 100644 --- a/docs/adoption/listings/mcp.md +++ b/docs/adoption/listings/mcp.md @@ -23,12 +23,13 @@ submitted. - **What it sends.** Nothing leaves the machine: the bridge listens on 127.0.0.1 only. The one exception is opt-in: `genclass_analytics {source: "production"}` reads the developer's own GenClass dashboard when they set `GENCLASS_DASHBOARD`. -- **Repository.** Public URL: https://github.com/genclass-dev/GenClass-lib (`daybot-solutions-inc/GenClass-lib` is a - mirror; submit the `genclass-dev` one everywhere). Server: `packages/mcp`. Claude Code plugin: `packages/mcp/plugin`. +- **Repository.** Public URL: https://github.com/genclass-dev/GenClass (`daybot-solutions-inc/GenClass-lib` and + `genclass-dev/GenClass-lib` are old names that GitHub redirects; submit the `genclass-dev/GenClass` one everywhere). + Server: `packages/mcp`. Claude Code plugin: `packages/mcp/plugin`. Registry name: `io.github.genclass-dev/genclass`. The plugin at a repository root, with its marketplace files: https://github.com/genclass-dev/genclass-plugin (assembled from `packages/mcp/plugin` by `packages/mcp/scripts/plugin-repo.mjs`, re-synced daily by its own workflow, never edited by hand). Submit that - one to plugin and skill directories, and GenClass-lib to MCP server directories. + one to plugin and skill directories, and GenClass to MCP server directories. ### Texts to reuse @@ -49,9 +50,9 @@ submitted. wants a 400x400 PNG; Cursor a logo committed to the repository. - **Contact email** for the forms that ask (Anthropic, mcpservers.org). PRIVACY.md names mehar@daybot.ca. - **GitHub topics.** `gemini-cli-extension` (Gemini gallery), `agent-skills` (`gh skill`), `claude-code-plugin`, - `claude-plugin` and `codex-plugin` are set on genclass-plugin; GenClass-lib carries `gemini-cli-extension`, + `claude-plugin` and `codex-plugin` are set on genclass-plugin; GenClass carries `gemini-cli-extension`, `claude-code-plugin` and `mcp-server`. Gemini CLI and `gh skill` read the latest GitHub release before the default - branch, and GenClass-lib's latest release (v0.2.1, 2026-10-11) predates the plugin, so only genclass-plugin installs + branch, and GenClass's latest release (v0.2.1, 2026-10-11) predates the plugin, so only genclass-plugin installs through them. ## Order @@ -79,7 +80,7 @@ issue modelcontextprotocol/registry#1468. checks it against the 2025-12-11 schema, and `mcp-publisher validate` against the live registry accepted this file on 2026-10-24 and refused the old 210-character one with 422). - **Organization namespace.** OIDC grants `io.github./*`, so the tag must be pushed to - `genclass-dev/GenClass-lib` (the job checks this first). `mcp-publisher login github` (device flow) cannot publish + `genclass-dev/GenClass` (the job checks this first). `mcp-publisher login github` (device flow) cannot publish to an organization namespace (#1468, open); the fallback is `mcp-publisher login github --token ` with a classic PAT with `read:org` or a fine-grained one with Organization Members read-only, by an organization Owner. - **Draft.** `packages/mcp/server.json` as committed. @@ -96,7 +97,7 @@ official registry); docs.github.com "Extend Copilot Chat with MCP" (VS Code adds > Subject: MCP server for the GitHub MCP Registry: io.github.genclass-dev/genclass > > Hello, we publish io.github.genclass-dev/genclass to the official MCP Registry (npm `@genclass/mcp`, stdio, - > Apache-2.0, source https://github.com/genclass-dev/GenClass-lib/tree/main/packages/mcp) and would like it included + > Apache-2.0, source https://github.com/genclass-dev/GenClass/tree/main/packages/mcp) and would like it included > in the GitHub MCP Registry. It is a local server for coding agents: it shows the agent what happened inside a web > app's pages on the developer's machine in causal order, re-runs a page with network responses delivered in > different orders to find race conditions, replays one exact order to prove a fix, and writes a Playwright @@ -117,8 +118,8 @@ support.claude.com "Anthropic Software Directory Policy". submit a repository folder holds that listing. - **Steps.** claude.ai/directory/manage, Submit new, Plugin bundle. Source: repository `genclass-dev/genclass-plugin`, no plugin path (the plugin is the repository root), branch `main`; Validate. - GenClass-lib itself cannot be submitted: the portal stops validating a repository whose GitHub archive is over - 50 MiB (pre-submission checklist), and GenClass-lib's is 51 MiB. Listing details are read from + GenClass itself cannot be submitted: the portal stops validating a repository whose GitHub archive is over + 50 MiB (pre-submission checklist), and GenClass's is 51 MiB. Listing details are read from `.claude-plugin/plugin.json` and `README.md` at that root (the same files as `packages/mcp/plugin/`). Data handling: the plugin collects and sends nothing; it reads and writes `.genclass/agent/` in the project and `~/.genclass/` (the bridge token); the optional dashboard read is the only network request off the machine. Compliance: contact email and @@ -136,7 +137,7 @@ support.claude.com "Anthropic Software Directory Policy". now is: `scripts/plugin-repo.mjs` fetches the released `@genclass/mcp` at the plugin's version from npm and vendors its `dist/cli.js` (about 150 KB, no dependencies) as `server/cli.mjs` with the package's command next to it, and `.mcp.json` and the hook run `node ${CLAUDE_PLUGIN_ROOT}/server/genclass-mcp.mjs`; the lockfile is gone. The copy - of the plugin inside GenClass-lib keeps `npx` (nothing built is committed there), and the Agent Plugins `mcp.json` + of the plugin inside GenClass keeps `npx` (nothing built is committed there), and the Agent Plugins `mcp.json` keeps `npx` everywhere, since that format has no plugin-root variable. An unpinned launcher would block; the manifests test keeps the `npx` pins equal to `package.json`'s version and checks the assembled tree. Between a version bump and its release the sync script exits 3 (npm does not serve the new version yet) and the plugin @@ -208,7 +209,7 @@ Source: punkpeye/awesome-mcp-servers `CONTRIBUTING.md`, `README.md` (legend, Dev - **Draft** (heading `### 💻 Developer Tools`; confirm the Glama path once listed): ``` -- [genclass-dev/GenClass-lib](https://github.com/genclass-dev/GenClass-lib) [![genclass-dev/GenClass-lib MCP server](https://glama.ai/mcp/servers/genclass-dev/GenClass-lib/badges/score.svg)](https://glama.ai/mcp/servers/genclass-dev/GenClass-lib) 📇 🏠 🍎 🪟 🐧 - Race conditions in web apps for coding agents: records clicks, requests, response order and state writes in the app's pages on your machine, re-runs a page with responses delivered in different orders, replays one exact order to prove a fix and writes a Playwright regression test. +- [genclass-dev/GenClass](https://github.com/genclass-dev/GenClass) [![genclass-dev/GenClass MCP server](https://glama.ai/mcp/servers/genclass-dev/GenClass/badges/score.svg)](https://glama.ai/mcp/servers/genclass-dev/GenClass) 📇 🏠 🍎 🪟 🐧 - Race conditions in web apps for coding agents: records clicks, requests, response order and state writes in the app's pages on your machine, re-runs a page with responses delivered in different orders, replays one exact order to prove a fix and writes a Playwright regression test. ``` ## 5. Glama (glama.ai/mcp/servers) @@ -244,7 +245,7 @@ Source: cline/mcp-marketplace `README.md` and `.github/ISSUE_TEMPLATE/mcp-server Addition" goes here). `llms-install.md` is at the repository root. - **Draft.** - > GitHub Repository URL: https://github.com/genclass-dev/GenClass-lib + > GitHub Repository URL: https://github.com/genclass-dev/GenClass > > Additional Information: The server is in `packages/mcp` (npm `@genclass/mcp`); install steps for agents are in > `llms-install.md` at the repository root. Reason for addition: it gives Cline a way to find and prove timing bugs @@ -259,7 +260,7 @@ Source: cline/mcp-marketplace `README.md` and `.github/ISSUE_TEMPLATE/mcp-server Source: the form at https://mcpservers.org/submit. - **Fields.** Server Name `GenClass`; Category `Development`; Short Description: the one-sentence text above; - Repository, Website or Documentation: `https://github.com/genclass-dev/GenClass-lib/tree/main/packages/mcp`; + Repository, Website or Documentation: `https://github.com/genclass-dev/GenClass/tree/main/packages/mcp`; Official MCP Registry Name: `io.github.genclass-dev/genclass`; "supports remote connections": leave unchecked (stdio only); Contact Email; plan Free (review within two weeks) unless the owner prefers the paid one. @@ -267,12 +268,12 @@ Source: the form at https://mcpservers.org/submit. Source: https://mcp.so/submit; chatmcp/mcpso issue 1 "Submit Your MCP Servers here". -- **How.** The form, type MCP Server: Repository URL `https://github.com/genclass-dev/GenClass-lib`, Name `GenClass`. +- **How.** The form, type MCP Server: Repository URL `https://github.com/genclass-dev/GenClass`, Name `GenClass`. The form shows a paid option ($39, published without review); the free review option was not visible without signing in. Or a comment on issue chatmcp/mcpso#1. - **Draft comment.** - > GenClass: https://github.com/genclass-dev/GenClass-lib (server in `packages/mcp`). A local MCP server that shows a + > GenClass: https://github.com/genclass-dev/GenClass (server in `packages/mcp`). A local MCP server that shows a > coding agent what happened inside a web app's pages in causal order, finds race conditions by re-running a page > with responses delivered in different orders, replays one exact order to prove a fix, and writes a Playwright > regression test. Install: `npx -y @genclass/mcp@0.2.1`. Category: developer tools. @@ -286,7 +287,7 @@ form was not read. components in the Open Plugins (Agent Plugins) layout: `packages/mcp/plugin/plugin.json` and `mcp.json` (Agent Plugins 1.0.0, valid against its schemas in `schemas.test.ts`), `skills/genclass/SKILL.md`, and the Claude Code `.mcp.json` and `hooks/hooks.json`. If it does not find a plugin in a subfolder from the repository URL, paste - `https://github.com/genclass-dev/GenClass-lib/tree/main/packages/mcp/plugin`. Each submission gets an automated + `https://github.com/genclass-dev/GenClass/tree/main/packages/mcp/plugin`. Each submission gets an automated security scan. ## 10. Cursor Marketplace (cursor.com/marketplace/publish) @@ -304,10 +305,10 @@ Source: cursor.com/docs/reference/plugins ("Submitting a plugin"). Source: google-gemini/gemini-cli `docs/extensions/releasing.md` and `docs/extensions/reference.md`. - **How.** No submission: a daily crawler lists public repositories with the GitHub topic `gemini-cli-extension` - whose root holds `gemini-extension.json`. Add the topic to `genclass-dev/GenClass-lib` once 0.1.0 is on npm. The + whose root holds `gemini-extension.json`. Add the topic to `genclass-dev/GenClass` once 0.1.0 is on npm. The committed `gemini-extension.json` starts `npx -y @genclass/mcp@0.2.1` (kept equal to the package version by `manifests.test.ts`). -- **Install line for the entry.** `gemini extensions install https://github.com/genclass-dev/GenClass-lib`. This +- **Install line for the entry.** `gemini extensions install https://github.com/genclass-dev/GenClass`. This clones the whole repository, which is large; `gemini mcp add genclass npx -- -y @genclass/mcp@0.2.1` adds the server alone. @@ -333,7 +334,7 @@ Source: hesreallyhim/awesome-claude-code `CONTRIBUTING.md` and `.github/ISSUE_TE - **Draft.** - Display Name: `GenClass` - Category: `Testing` - - Link: `https://github.com/genclass-dev/GenClass-lib/tree/main/packages/mcp` + - Link: `https://github.com/genclass-dev/GenClass/tree/main/packages/mcp` - Author Name: `GenClass`; Author Link: `https://github.com/genclass-dev` - Description: `A plugin with an MCP server, a prompt hook and a skill that show Claude Code what happened inside a web app's pages in causal order, re-run a page with network responses delivered in different orders to find race conditions, and replay one exact order to confirm a fix. It also writes a Playwright regression test from a finding; so far measured on one page, where the race showed in 5 of 6 reordered runs and the fixed page showed none.` - Checklist: the five required boxes are for the person who submits to check after doing what they say; leave the @@ -345,11 +346,11 @@ Source: ccplugins/awesome-claude-code-plugins `README.md` (no CONTRIBUTING file) - **How.** A pull request adding one line under `### MCP Servers` in `README.md` (roughly alphabetical). Optionally an entry in its `.claude-plugin/marketplace.json`; for a plugin in a subfolder Claude Code's marketplace format - takes `{"source": "git-subdir", "url": "genclass-dev/GenClass-lib", "path": "packages/mcp/plugin"}`. + takes `{"source": "git-subdir", "url": "genclass-dev/GenClass", "path": "packages/mcp/plugin"}`. - **Draft.** ``` -- [GenClass](https://github.com/genclass-dev/GenClass-lib/tree/main/packages/mcp/plugin) - See the race, replay it, prove the fix: an MCP server, a prompt hook and a skill that show Claude what happened inside a web app's pages in causal order, re-run a page with responses in different orders to find races, and write a Playwright regression test. Install: `/plugin marketplace add genclass-dev/GenClass-lib` then `/plugin install genclass@genclass` +- [GenClass](https://github.com/genclass-dev/GenClass/tree/main/packages/mcp/plugin) - See the race, replay it, prove the fix: an MCP server, a prompt hook and a skill that show Claude what happened inside a web app's pages in causal order, re-run a page with responses in different orders to find races, and write a Playwright regression test. Install: `/plugin marketplace add genclass-dev/GenClass` then `/plugin install genclass@genclass` ``` (The list's own entries separate name and text with a long dash; this draft uses a hyphen, per this repository's @@ -363,7 +364,7 @@ Source: mxschmitt/awesome-playwright `README.md` (section "AI & Agents", alphabe - **Draft.** ``` -- [GenClass MCP](https://github.com/genclass-dev/GenClass-lib/tree/main/packages/mcp) - MCP server that lets coding agents find race conditions in a web app by re-running a page with responses delivered in different orders, replay one exact order, and generate a Playwright test that fails while the bug is there. +- [GenClass MCP](https://github.com/genclass-dev/GenClass/tree/main/packages/mcp) - MCP server that lets coding agents find race conditions in a web app by re-running a page with responses delivered in different orders, replay one exact order, and generate a Playwright test that fails while the bug is there. ``` `@genclass/playwright` (the race-file reporter) would go under `## Reporters` in the same format once it is diff --git a/docs/adoption/listings/svelte.md b/docs/adoption/listings/svelte.md index 40cc2472..70824eb9 100644 --- a/docs/adoption/listings/svelte.md +++ b/docs/adoption/listings/svelte.md @@ -20,9 +20,9 @@ on the form itself; check them when submitting. | Type / category | Package (or "Add-on" if the form offers it) | | Title | @genclass/sv | | Short description | `npx sv add @genclass` sets up GenClass in a SvelteKit app: it reports race conditions in the browser (stale responses, duplicate submits, failure storms) with a small on-device model. | -| URL | https://github.com/genclass-dev/GenClass-lib/tree/main/packages/sv | +| URL | https://github.com/genclass-dev/GenClass/tree/main/packages/sv | | npm package | @genclass/sv | -| Repository | https://github.com/genclass-dev/GenClass-lib | +| Repository | https://github.com/genclass-dev/GenClass | | Tags | sv-add, sveltekit, debugging, testing, network, developer-tools | | License | Apache-2.0 | diff --git a/docs/adoption/listings/sveltesociety.md b/docs/adoption/listings/sveltesociety.md index 8ed2a90b..8256527c 100644 --- a/docs/adoption/listings/sveltesociety.md +++ b/docs/adoption/listings/sveltesociety.md @@ -47,7 +47,7 @@ Before submitting: - **Type:** Library - **Title:** GenClass -- **Link:** https://github.com/genclass-dev/GenClass-lib/tree/main/templates/sveltekit (or the npm package) +- **Link:** https://github.com/genclass-dev/GenClass/tree/main/templates/sveltekit (or the npm package) - **Tags:** DevTools, SvelteKit, Utility (Testing fits the coding-agent link in `@genclass/mcp`, but that package is not what a Svelte reader installs; leave it out unless the form asks for every applicable tag) - **Description (draft):** Reports race conditions, stale responses and duplicate submits in the browser while they diff --git a/docs/adoption/listings/vue-and-angular.md b/docs/adoption/listings/vue-and-angular.md index bba40a3a..3ecf7fb2 100644 --- a/docs/adoption/listings/vue-and-angular.md +++ b/docs/adoption/listings/vue-and-angular.md @@ -42,7 +42,7 @@ monitoring of component renders and reactive dependency tracking"). The alternat **Draft entry** (Dev Tools > Inspect, appended at the end of the list): ``` -- [GenClass](https://github.com/genclass-dev/GenClass-lib) - Reports race conditions, stale responses and duplicate submits in the browser while they happen; one import (or the Nuxt module), a small local model, changes nothing by default. +- [GenClass](https://github.com/genclass-dev/GenClass) - Reports race conditions, stale responses and duplicate submits in the browser while they happen; one import (or the Nuxt module), a small local model, changes nothing by default. ``` ## Angular @@ -93,7 +93,7 @@ discovered automatically; the description must not imply they are. **Draft entry** (Development Utilities > Debugging, appended at the bottom): ``` -* [GenClass](https://github.com/genclass-dev/GenClass-lib) - Reports race conditions, stale responses and duplicate submits in the browser while they happen; one import in main.ts, a small local model, changes nothing by default. +* [GenClass](https://github.com/genclass-dev/GenClass) - Reports race conditions, stale responses and duplicate submits in the browser while they happen; one import in main.ts, a small local model, changes nothing by default. ``` ## Checklist for either PR diff --git a/docs/runtime/AGENT.md b/docs/runtime/AGENT.md index 294203db..66cb8447 100644 --- a/docs/runtime/AGENT.md +++ b/docs/runtime/AGENT.md @@ -45,11 +45,11 @@ claude mcp add genclass -- npx -y @genclass/mcp@0.2.1 # or: npx -y @genclass/m Or as a Claude Code plugin from this repository's marketplace (`.claude-plugin/marketplace.json`; the plugin is `packages/mcp/plugin`: the server, a `UserPromptSubmit` hook and the `genclass` skill): -`/plugin marketplace add genclass-dev/GenClass-lib`, then `/plugin install genclass@genclass`. The server's +`/plugin marketplace add genclass-dev/GenClass`, then `/plugin install genclass@genclass`. The server's `instructions` carry the triggers (the symptom words, the code changes that call for an explore, the scan before a UI change is done) and the first call for each, so every client that passes them on gets the "when"; the skill carries the procedure (section 4.2) and does not need the plugin: `init` writes it into the project, and -`npx skills add genclass-dev/GenClass-lib` installs the repository-root copy (`skills/genclass/SKILL.md`, kept +`npx skills add genclass-dev/GenClass` installs the repository-root copy (`skills/genclass/SKILL.md`, kept identical to the plugin's by the version sync) through a skill directory. Other clients (Cursor, VS Code, Codex CLI, Gemini CLI, Windsurf, Cline, Goose, Zed, JetBrains, OpenCode): the install blocks in [packages/mcp/README.md](../../packages/mcp/README.md#install), or `npx -y @genclass/mcp@0.2.1 config `. diff --git a/docs/runtime/CONTRACT.md b/docs/runtime/CONTRACT.md index 10f28b68..badcf5b2 100644 --- a/docs/runtime/CONTRACT.md +++ b/docs/runtime/CONTRACT.md @@ -70,7 +70,7 @@ The console should read like: wrote only cart.items. (unusual, 0.88) ``` -## 1. Repo layout (branch `runtime` of genclass-dev/GenClass-lib) +## 1. Repo layout (branch `runtime` of genclass-dev/GenClass) ``` package.json npm workspaces: packages/*, sim, demos diff --git a/docs/runtime/VISUAL.md b/docs/runtime/VISUAL.md index a942ad2b..62891184 100644 --- a/docs/runtime/VISUAL.md +++ b/docs/runtime/VISUAL.md @@ -1393,7 +1393,7 @@ packages/runtime/src/visual/ ## 14. Test plan No vitest, build or Playwright runs on the Mac (8 GB). Every step is verified in CI on the branch: -`gh workflow run ci.yml --repo genclass-dev/GenClass-lib --ref `, then `gh run watch --exit-status`. +`gh workflow run ci.yml --repo genclass-dev/GenClass --ref `, then `gh run watch --exit-status`. Unit tests (existing vitest step, no new dependency): diff --git a/docs/security/2026-10-mode-raise.md b/docs/security/2026-10-mode-raise.md index 0ac43e63..69179c39 100644 --- a/docs/security/2026-10-mode-raise.md +++ b/docs/security/2026-10-mode-raise.md @@ -1,7 +1,7 @@ DRAFT for the owner to publish through GitHub's security advisory form. Do not publish this file as is. diff --git a/llms-install.md b/llms-install.md index 4d5cc966..e8f974ed 100644 --- a/llms-install.md +++ b/llms-install.md @@ -75,6 +75,6 @@ visual bugs before calling a UI change done (it needs Playwright's Chromium: `np same audit from a terminal is `npx @genclass/runtime@beta scan `). The server's instructions and each tool's description say when to use what; the procedure (explore arguments, how to read a report, what to say when done) is the `genclass` skill: `npx -y @genclass/mcp@0.2.1 init` writes it to `.claude/skills/genclass/SKILL.md` for Claude -Code (`--no-skill` leaves it out), and `npx skills add genclass-dev/GenClass-lib` installs the repository-root copy +Code (`--no-skill` leaves it out), and `npx skills add genclass-dev/GenClass` installs the repository-root copy (`skills/genclass/SKILL.md`) through a skill directory, with no server. More: -https://github.com/genclass-dev/GenClass-lib/tree/main/packages/mcp +https://github.com/genclass-dev/GenClass/tree/main/packages/mcp diff --git a/llms.txt b/llms.txt index c4aaa2b3..82bed7e4 100644 --- a/llms.txt +++ b/llms.txt @@ -2,36 +2,36 @@ > GenClass Runtime (`@genclass/runtime`) is an open-source (Apache-2.0) browser library that reports race conditions in web apps while they happen: stale responses that land over newer data, duplicate requests such as double submits, inconsistent state and failure storms. A small model runs on the user's device, in a Web Worker on WebGPU or WASM, and each report comes with its evidence. By default it only reports (`observe`): it never holds, delays or changes a request, a response or a state write. The opt-in `guard` mode may act on a few of them, and `heal` is experimental. -This file indexes the Markdown sources in the GenClass-lib repository, for `@genclass/runtime` 0.2.2 (npm `latest`) and 0.3.0-beta.0 (`beta`) as of 2026-10-22, both with the model `@genclass/runtime-model@0.2.0`, and the unreleased work on `main`. It holds no numbers on purpose: every measured number, each recall next to its false rate, is in docs/runtime/RESULTS.md, so quote numbers from there. On public hosts it sends anonymous diagnostics about its own decisions to its maintainers by default (with the page's hostname and id-normalised path, and no page text unless the app opts in); TELEMETRY.md lists every field and every opt-out. The website keeps its own index at https://genclass.dev/llms.txt. +This file indexes the Markdown sources in the GenClass repository, for `@genclass/runtime` 0.2.2 (npm `latest`) and 0.3.0-beta.0 (`beta`) as of 2026-10-22, both with the model `@genclass/runtime-model@0.2.0`, and the unreleased work on `main`. It holds no numbers on purpose: every measured number, each recall next to its false rate, is in docs/runtime/RESULTS.md, so quote numbers from there. On public hosts it sends anonymous diagnostics about its own decisions to its maintainers by default (with the page's hostname and id-normalised path, and no page text unless the app opts in); TELEMETRY.md lists every field and every opt-out. The website keeps its own index at https://genclass.dev/llms.txt. ## Start here -- [README](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/README.md): what GenClass Runtime is, the quick start, what it finds, how it compares with error trackers and tests, and the measured results -- [FAQ](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/FAQ.md): short answers to common questions (race conditions in React, stale responses, double submits, what it sends, what it costs), each with a link to the details -- [Package README](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/packages/runtime/README.md): the guide published on npm: install, modes, configuration, model quality, costs, privacy and known limitations -- [Docs index and glossary](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/README.md): which document answers which question, how current each one is, and the terms they use +- [README](https://raw.githubusercontent.com/genclass-dev/GenClass/main/README.md): what GenClass Runtime is, the quick start, what it finds, how it compares with error trackers and tests, and the measured results +- [FAQ](https://raw.githubusercontent.com/genclass-dev/GenClass/main/FAQ.md): short answers to common questions (race conditions in React, stale responses, double submits, what it sends, what it costs), each with a link to the details +- [Package README](https://raw.githubusercontent.com/genclass-dev/GenClass/main/packages/runtime/README.md): the guide published on npm: install, modes, configuration, model quality, costs, privacy and known limitations +- [Docs index and glossary](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/README.md): which document answers which question, how current each one is, and the terms they use ## Install and use -- [INSTALL.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/INSTALL.md): every `init` and `remove` flag, the app token, the import, the script tag and the tested project setups -- [DASHBOARD.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/DASHBOARD.md): app dashboards on genclass.dev and the `login`, `connect`, `whoami`, `logout` and `dashboard` commands -- [SINKS.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/SINKS.md): sending reports to your own logging or endpoint, and the record format -- [API.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/API.md): every export, option, event, action and type -- [OPTIONS-SPEC.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/OPTIONS-SPEC.md): why each configuration option exists and how the options combine +- [INSTALL.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/INSTALL.md): every `init` and `remove` flag, the app token, the import, the script tag and the tested project setups +- [DASHBOARD.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/DASHBOARD.md): app dashboards on genclass.dev and the `login`, `connect`, `whoami`, `logout` and `dashboard` commands +- [SINKS.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/SINKS.md): sending reports to your own logging or endpoint, and the record format +- [API.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/API.md): every export, option, event, action and type +- [OPTIONS-SPEC.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/OPTIONS-SPEC.md): why each configuration option exists and how the options combine ## Behaviour, privacy and security -- [INTERCEPTION.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/packages/runtime/INTERCEPTION.md): every browser API it wraps or listens to, what each mode may change, what it never does, and how to turn it off -- [TELEMETRY.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/packages/runtime/TELEMETRY.md): what the default-on anonymous diagnostics contain, where they go, and every opt-out -- [PRIVACY.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/PRIVACY.md): what genclass.dev collects and keeps -- [SECURITY.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/SECURITY.md): how to report a vulnerability, supported versions, and how to check a published tarball -- [THREAT-MODEL.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/THREAT-MODEL.md): what could go wrong or be made to go wrong, with mitigations and residual risks +- [INTERCEPTION.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/packages/runtime/INTERCEPTION.md): every browser API it wraps or listens to, what each mode may change, what it never does, and how to turn it off +- [TELEMETRY.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/packages/runtime/TELEMETRY.md): what the default-on anonymous diagnostics contain, where they go, and every opt-out +- [PRIVACY.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/PRIVACY.md): what genclass.dev collects and keeps +- [SECURITY.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/SECURITY.md): how to report a vulnerability, supported versions, and how to check a published tarball +- [THREAT-MODEL.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/THREAT-MODEL.md): what could go wrong or be made to go wrong, with mitigations and residual risks ## Measurements -- [RESULTS.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/RESULTS.md): every measured number (detection, false interventions, demos, compatibility, first-load size, browser cost, visual checks), each section naming its model, runtime version and setup -- [compat/RESULTS.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/compat/RESULTS.md): the framework compatibility matrix, generated by a script from a recorded run -- [Model card](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/packages/runtime-model/MODEL_CARD.md): the default model, its training data, gate profiles, accuracy and limits +- [RESULTS.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/RESULTS.md): every measured number (detection, false interventions, demos, compatibility, first-load size, browser cost, visual checks), each section naming its model, runtime version and setup +- [compat/RESULTS.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/compat/RESULTS.md): the framework compatibility matrix, generated by a script from a recorded run +- [Model card](https://raw.githubusercontent.com/genclass-dev/GenClass/main/packages/runtime-model/MODEL_CARD.md): the default model, its training data, gate profiles, accuracy and limits ## Guides @@ -41,14 +41,14 @@ This file indexes the Markdown sources in the GenClass-lib repository, for `@gen ## Optional -- [ARCHITECTURE.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/ARCHITECTURE.md): how the parts fit together and why they are built this way -- [VISUAL.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/VISUAL.md): design of the measured visual and CSS checks, which are deterministic checks, not the model -- [EXPECTATIONS.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/EXPECTATIONS.md): design of the opt-in flow expectations, whose false-report rate is not measured yet -- [ANALYTICS.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/ANALYTICS.md): design of the opt-in interaction analytics, not yet in a published version -- [AGENT.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/AGENT.md): the coding-agent link (`@genclass/runtime/agent`, 0.3.0-beta.1) and the `@genclass/mcp` server, which record a page's run, replay one delivery order, explore others to find races, and generate a Playwright test; neither on npm yet -- [QUERY-CACHE-ADAPTERS.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/QUERY-CACHE-ADAPTERS.md): a proposal for TanStack Query and SWR adapters, not built -- [CONTRACT.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/docs/runtime/CONTRACT.md): the binding rules for people changing the runtime and its training pipeline -- [CHANGELOG](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/packages/runtime/CHANGELOG.md): what changed in each release of `@genclass/runtime` -- [GenClass for Playwright](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/packages/playwright/README.md): `@genclass/playwright` 0.1.0, not on npm yet: a fixture that puts the runtime on every page under test with seeded network chaos and writes one race file per test, and a reporter that turns those files into one markdown report per pull request -- [EVAL.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/training/EVAL.md): the raw model evaluation reports that RESULTS.md summarises -- [AGENTS.md](https://raw.githubusercontent.com/genclass-dev/GenClass-lib/main/AGENTS.md): the repository map and rules for coding agents working on GenClass itself +- [ARCHITECTURE.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/ARCHITECTURE.md): how the parts fit together and why they are built this way +- [VISUAL.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/VISUAL.md): design of the measured visual and CSS checks, which are deterministic checks, not the model +- [EXPECTATIONS.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/EXPECTATIONS.md): design of the opt-in flow expectations, whose false-report rate is not measured yet +- [ANALYTICS.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/ANALYTICS.md): design of the opt-in interaction analytics, not yet in a published version +- [AGENT.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/AGENT.md): the coding-agent link (`@genclass/runtime/agent`, 0.3.0-beta.1) and the `@genclass/mcp` server, which record a page's run, replay one delivery order, explore others to find races, and generate a Playwright test; neither on npm yet +- [QUERY-CACHE-ADAPTERS.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/QUERY-CACHE-ADAPTERS.md): a proposal for TanStack Query and SWR adapters, not built +- [CONTRACT.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/docs/runtime/CONTRACT.md): the binding rules for people changing the runtime and its training pipeline +- [CHANGELOG](https://raw.githubusercontent.com/genclass-dev/GenClass/main/packages/runtime/CHANGELOG.md): what changed in each release of `@genclass/runtime` +- [GenClass for Playwright](https://raw.githubusercontent.com/genclass-dev/GenClass/main/packages/playwright/README.md): `@genclass/playwright` 0.1.0, not on npm yet: a fixture that puts the runtime on every page under test with seeded network chaos and writes one race file per test, and a reporter that turns those files into one markdown report per pull request +- [EVAL.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/training/EVAL.md): the raw model evaluation reports that RESULTS.md summarises +- [AGENTS.md](https://raw.githubusercontent.com/genclass-dev/GenClass/main/AGENTS.md): the repository map and rules for coding agents working on GenClass itself diff --git a/packages/astro/README.md b/packages/astro/README.md index f0b841cd..8578c0c4 100644 --- a/packages/astro/README.md +++ b/packages/astro/README.md @@ -11,8 +11,8 @@ In the default `observe` mode it reports (one console line per finding, the devt `guard` mode, opt-in, lets it drop a stale response or reuse a duplicate's result when the model is confident. It is Apache-2.0, runs on-device, and never sends page content unless you opt in. What it finds and how often, with the false-intervention rate next to every recall number, is in the runtime's -[README](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/README.md) and -[RESULTS.md](https://github.com/genclass-dev/GenClass-lib/blob/main/docs/runtime/RESULTS.md). +[README](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/README.md) and +[RESULTS.md](https://github.com/genclass-dev/GenClass/blob/main/docs/runtime/RESULTS.md). ## Install @@ -64,7 +64,7 @@ export default defineConfig({ |---|---|---|---| | `mode` | `"observe"`, `"guard"` | `"observe"` | `observe` reports what GenClass finds and never holds, delays or changes anything. `guard` also prevents failures with small, reversible actions (drop a stale response, reuse a duplicate's result) when the model is confident. The script imports `@genclass/runtime/auto` or `@genclass/runtime/auto/guard` accordingly. | | `token` | `"gc_..."` | none | Your app's token from [genclass.dev](https://genclass.dev) or `npx @genclass/runtime@beta login`; with telemetry on, findings also reach your dashboard. Needs `@genclass/runtime` 0.3.0 or later (0.2.x ignores it). | -| `telemetry` | `true`, `false` | the runtime's default | Anonymous, redacted diagnostics to the GenClass maintainers ([TELEMETRY.md](https://github.com/genclass-dev/GenClass-lib/blob/main/packages/runtime/TELEMETRY.md)). Unset: on from public hosts, off on localhost and private networks. `false`: off. `true`: an explicit opt-in that also sends from local hosts. | +| `telemetry` | `true`, `false` | the runtime's default | Anonymous, redacted diagnostics to the GenClass maintainers ([TELEMETRY.md](https://github.com/genclass-dev/GenClass/blob/main/packages/runtime/TELEMETRY.md)). Unset: on from public hosts, off on localhost and private networks. `false`: off. `true`: an explicit opt-in that also sends from local hosts. | | `devtools` | `"dev"`, `"always"`, `"never"` | `"dev"` | The devtools overlay (detections, actions, the evidence behind each decision, a mode switch). `"dev"` loads it under `astro dev` only; a production build carries no reference to it. `"always"` loads it in production too. The overlay is a lazy chunk, never part of the first load. | `token` and `telemetry` are passed to the runtime as `window.GENCLASS_CONFIG`, the page configuration it documents, by @@ -80,7 +80,7 @@ storms, retries and stalls, whether the code is a plain `