diff --git a/AGENTS.md b/AGENTS.md index 8099ce2..cdbb2e6 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -75,13 +75,15 @@ Prism plugins need it on the `
`.
 
 ```bash
 pnpm build
-# Runs: tsc -p tsconfig.build.json && pnpm test:build && vite build --config vite.build.config.mts
+# Runs: tsc -p tsconfig.build.json && pnpm test:build && vite build --config vite.build.config.mts && pnpm test:dist
 ```
 
 - `tsconfig.build.json` type-checks the shippable plugin source (excludes docs, tests, playground).
 - `vite.build.config.mts` builds ES + CJS; runtime `dependencies` and Vuetify are external.
 - Types entry: `dist/plugin/types/index.d.ts`.
 - `dist/` is git-ignored; `prepublishOnly` rebuilds it before `npm publish`.
+- `pnpm test:dist` checks the built package, so `pnpm build`, `prepublishOnly` and CI fail on a
+  broken `dist/` (see Testing).
 
 ## Testing
 
@@ -89,12 +91,34 @@ pnpm build
 pnpm test:all            # Vitest, run once
 pnpm test:dev            # Vitest, watch mode
 pnpm test:build          # Vitest with --bail 1 (used by build and the pre-commit hook)
+pnpm test:dist           # Shipped-package check against dist/ (run after vite build)
 ```
 
 Tests live in `src/plugin/__tests__/`, `src/plugin/components/__tests__/`, and
 `src/plugin/composables/__tests__/`. Update snapshots with `pnpm vitest --run -u` only when the
 change is intended.
 
+### Shipped-package check
+
+`tests/package/dist.test.ts` runs in Node with its own config (`vitest.dist.config.mts`), not in
+the jsdom unit suite. It needs a fresh `dist/`, so run it after
+`vite build --config vite.build.config.mts` (`pnpm build` does both). It checks that:
+
+- the ES and CJS bundles export `VCodeBlock`, `createVCodeBlock`, `codeBlockOptions` and `default`;
+- the `types` entry (`dist/plugin/types/index.d.ts`) declares `Props` and is not a re-export stub;
+- `dist/scss/` holds the files from `src/plugin/styles/` directly, not nested.
+
+These guard against build-plugin upgrades (`vite-plugin-dts`, `vite-plugin-static-copy`) silently
+changing the output. Keep the folder name `tests/package/`: `.gitignore` ignores any `dist`
+directory, so a `tests/dist/` folder would never be committed.
+
+### Excluded paths
+
+`vitest.config.mts` excludes `tests/package/**` (Node-only, needs `dist/`) and `.claude/**`. Agent
+git worktrees live under `.claude/worktrees/` with their own `node_modules`; running Vitest in the
+main checkout would otherwise pick up their tests and load a second copy of Vue, which breaks slots
+and rendering.
+
 ### Test in the playground
 
 Unit tests run in jsdom, which does not cover real rendering, theme CSS, or Prism plugins well.