inspector/clients/web/tsconfig.test.json
cliffhall 69e6097b68 refactor: assert retry and asyncUtilTimeout at runtime, delete the source scanner
Round 8 of the review asked for an AST. That was the right diagnosis of the
wrong problem: the question was never which parser to use, it was why a
test-timeout guard was parsing JavaScript at all.

It got there one reasonable step at a time. The guard enforces two rules no
Vitest config can report — a per-test `retry`, and Testing Library's
`asyncUtilTimeout` — so it read them out of source text, and the review found a
new valid spelling it missed in five consecutive rounds: a trailing comment,
nested parens in `it.each([makeCase()])`, a member-access prefix, the shorthand
`{ retry }`, an aliased import, a non-literal title. Each fix was correct and
each made it more parser-shaped, until it carried eight helpers doing quote
tracking and bracket balancing.

Both rules are observable at runtime, exactly:

- `vitest.setup.shared.mts` is loaded by all six projects and reads
  `ctx.task.retry` — the value Vitest resolved for the test. That covers
  strictly more than the scan did: a per-test option, a `describe` option
  inherited by children, a project-level setting, and a `--retry` flag typed at
  a command line, which the scan could never see since it only read npm scripts.
- `clients/web/src/test/asyncUtilTimeout.test.ts` asserts
  `getConfig().asyncUtilTimeout`, the value this project's own waitFors read.

Neither has a spelling to anticipate, so neither can be outrun by a new one.
Both were observed firing before being trusted.

The guard keeps only what it can answer by asking Vitest: resolved budgets,
project-level retry, config discovery, and that each project still loads the
setup file — the one thing about the runtime assertion a config CAN report.
868 lines to 361, every scanner helper gone, and 33 of 48 unit tests deleted
because they pinned edge cases of a thing that no longer exists.

storybookSetup.ts goes with it. At the library's own value its configure() call
was a no-op, and the assertion is what pins the number.

AGENTS.md gains the general rule: a rule about what the code DOES is asserted at
runtime, not read out of the source — reach for a verify:* guard when the
question is about configuration, which a tool can be asked to resolve.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PsmUAZ6aLUAFqenjJKSSRp
Signed-off-by: cliffhall <cliff@futurescale.com>
2026-09-12 15:58:19 -04:00

53 lines
2.2 KiB
JSON

{
"extends": "./tsconfig.app.json",
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.test.tsbuildinfo",
"types": ["vite/client", "@testing-library/jest-dom", "node", "express"],
"paths": {
"@inspector/core/*": ["../../core/*"],
"@modelcontextprotocol/inspector-test-server": ["../../test-servers/src/index.ts"],
"react": ["./node_modules/@types/react"],
"react-dom": ["./node_modules/@types/react-dom"],
"react/jsx-runtime": ["./node_modules/@types/react/jsx-runtime"],
"vitest": ["./node_modules/vitest"],
"pino": ["../../node_modules/pino"],
"hono": ["../../node_modules/hono"],
"hono/streaming": [
"../../node_modules/hono/dist/types/helper/streaming/index"
],
"@hono/node-server": ["../../node_modules/@hono/node-server"],
"atomically": ["../../node_modules/atomically"],
"chokidar": ["../../node_modules/chokidar"],
"express": ["./node_modules/@types/express"],
"yaml": ["./node_modules/yaml"],
"@napi-rs/keyring": ["../../node_modules/@napi-rs/keyring"],
"zod": ["../../node_modules/zod"],
"zod/v4": ["../../node_modules/zod/v4"],
"open": ["../../node_modules/open"],
"react-syntax-highlighter/dist/esm/prism-light": [
"./src/types/react-syntax-highlighter-prism-light"
],
"react-syntax-highlighter/dist/esm/styles/prism/tomorrow": [
"./src/types/react-syntax-highlighter-style"
],
"react-syntax-highlighter/dist/esm/languages/prism/*": [
"./src/types/react-syntax-highlighter-grammar"
]
}
},
"include": [
"src/**/*.test.ts",
"src/**/*.test.tsx",
"src/test/**/*.ts",
"src/test/**/*.tsx",
"../../core/**/__tests__/**/*.ts",
"../../core/**/__tests__/**/*.tsx",
// The shared no-retry setup every Vitest project loads (#2323). It is
// referenced by the configs as a resolved PATH rather than imported, so no
// project's tsconfig picks it up transitively the way `vitest.shared.mts`
// is picked up through `vitest.config.ts` — it needs naming, or it lands in
// no tsconfig project at all and `verify:typecheck-coverage` fails.
"../../vitest.setup.shared.mts"
],
"exclude": []
}