@fairfox/polly 0.82.0 → 0.83.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/polly.js +22 -1
- package/dist/cli/polly.js.map +3 -3
- package/dist/tools/bdd/src/args.d.ts +21 -0
- package/dist/tools/bdd/src/bus-driver.d.ts +36 -0
- package/dist/tools/bdd/src/check-verify.d.ts +15 -0
- package/dist/tools/bdd/src/cli.d.ts +2 -0
- package/dist/tools/bdd/src/cli.js +701 -0
- package/dist/tools/bdd/src/cli.js.map +19 -0
- package/dist/tools/bdd/src/config.d.ts +9 -0
- package/dist/tools/bdd/src/extract.d.ts +2 -0
- package/dist/tools/bdd/src/index.d.ts +19 -0
- package/dist/tools/bdd/src/index.js +540 -0
- package/dist/tools/bdd/src/index.js.map +17 -0
- package/dist/tools/bdd/src/parse.d.ts +3 -0
- package/dist/tools/bdd/src/report.d.ts +6 -0
- package/dist/tools/bdd/src/run.d.ts +8 -0
- package/dist/tools/bdd/src/scaffold.d.ts +7 -0
- package/dist/tools/bdd/src/steps.d.ts +55 -0
- package/dist/tools/bdd/src/types.d.ts +145 -0
- package/dist/tools/bdd/src/witness.d.ts +23 -0
- package/dist/tools/gallery/src/cli.js +4 -3
- package/dist/tools/gallery/src/cli.js.map +3 -3
- package/dist/tools/mutate/src/cli.js +8 -1
- package/dist/tools/mutate/src/cli.js.map +3 -3
- package/dist/tools/quality/src/cli.js +304 -15
- package/dist/tools/quality/src/cli.js.map +6 -4
- package/dist/tools/quality/src/index.d.ts +2 -0
- package/dist/tools/quality/src/index.js +309 -15
- package/dist/tools/quality/src/index.js.map +6 -4
- package/dist/tools/quality/src/no-fixed-waits.d.ts +52 -0
- package/dist/tools/quality/src/no-tautology-ensures.d.ts +67 -0
- package/dist/tools/quality/src/plugins/core.d.ts +1 -1
- package/dist/tools/test/src/coverage-policy/cli.js +5 -1
- package/dist/tools/test/src/coverage-policy/cli.js.map +3 -3
- package/dist/tools/test/src/tiers/args.d.ts +5 -0
- package/dist/tools/test/src/tiers/cli.js +97 -23
- package/dist/tools/test/src/tiers/cli.js.map +9 -8
- package/dist/tools/test/src/tiers/index.d.ts +2 -1
- package/dist/tools/test/src/tiers/order.d.ts +25 -0
- package/dist/tools/test/src/tiers/types.d.ts +15 -0
- package/dist/tools/verify/src/cli.js +540 -15
- package/dist/tools/verify/src/cli.js.map +8 -4
- package/dist/tools/visualize/src/cli.js +17 -13
- package/dist/tools/visualize/src/cli.js.map +3 -3
- package/package.json +9 -16
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The step-binding registry and matcher.
|
|
3
|
+
*
|
|
4
|
+
* `defineStep()` is the consumer-facing keystone: one call registers a binding
|
|
5
|
+
* that the runner executes (`given`/`when`/`then`) AND the verify extractor
|
|
6
|
+
* reads (`message`/`stateExpr`). `defineWorld()` records how to build and
|
|
7
|
+
* cold-reset the real-factory world.
|
|
8
|
+
*
|
|
9
|
+
* Patterns use a small Cucumber-expression subset: `{string}`, `{int}`,
|
|
10
|
+
* `{float}`, `{word}`. Everything else is matched literally. That covers
|
|
11
|
+
* declarative steps without dragging in the full cucumber-expressions library.
|
|
12
|
+
*
|
|
13
|
+
* The registry lives on `globalThis`, not in a module-level array, on purpose:
|
|
14
|
+
* `polly bdd` ships as two bundles (the CLI and the `@fairfox/polly/bdd`
|
|
15
|
+
* library export). `build-lib` runs with `splitting: false`, so this module is
|
|
16
|
+
* *inlined separately into each bundle* — a module-level array would give the
|
|
17
|
+
* runner and the consumer's `defineWorld` two different registries. A single
|
|
18
|
+
* global slot is the standard cross-bundle-singleton fix.
|
|
19
|
+
*/
|
|
20
|
+
import type { StepBinding, StepKeyword, WorldDef } from "./types.ts";
|
|
21
|
+
interface CompiledBinding {
|
|
22
|
+
binding: StepBinding;
|
|
23
|
+
regex: RegExp;
|
|
24
|
+
}
|
|
25
|
+
interface RegistryState {
|
|
26
|
+
bindings: CompiledBinding[];
|
|
27
|
+
worldDef: WorldDef | null;
|
|
28
|
+
}
|
|
29
|
+
declare global {
|
|
30
|
+
var __pollyBddRegistry__: RegistryState | undefined;
|
|
31
|
+
}
|
|
32
|
+
/** Translate a Cucumber-expression pattern into an anchored RegExp. */
|
|
33
|
+
export declare function compilePattern(pattern: string): RegExp;
|
|
34
|
+
export declare function defineStep(binding: StepBinding): void;
|
|
35
|
+
export declare function defineWorld(def: WorldDef): void;
|
|
36
|
+
export declare function getWorldDef(): WorldDef | null;
|
|
37
|
+
/** Drop all registrations — used between isolated runs/tests. */
|
|
38
|
+
export declare function resetRegistry(): void;
|
|
39
|
+
export interface StepMatch {
|
|
40
|
+
binding: StepBinding;
|
|
41
|
+
args: string[];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Find the binding whose pattern matches `text`. Captured groups become the
|
|
45
|
+
* step arguments (the `{string}` alternation yields two groups per token, so
|
|
46
|
+
* we drop the undefined half).
|
|
47
|
+
*
|
|
48
|
+
* When `keyword` is given, a binding that *has* the callback for that keyword
|
|
49
|
+
* wins over one that merely matches the text — so the same phrase can serve as
|
|
50
|
+
* a `given` precondition in one scenario and a `then` assertion in another.
|
|
51
|
+
*/
|
|
52
|
+
export declare function matchStep(text: string, keyword?: StepKeyword): StepMatch | null;
|
|
53
|
+
/** Snapshot of all registered bindings (for the verify extractor). */
|
|
54
|
+
export declare function registeredBindings(): StepBinding[];
|
|
55
|
+
export {};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the polly BDD runner.
|
|
3
|
+
*
|
|
4
|
+
* The keystone is {@link StepBinding}: one declaration that speaks BOTH layers.
|
|
5
|
+
* Its `given`/`when`/`then` callbacks drive the *runtime* (the real factory bus
|
|
6
|
+
* + state signals); its `message`/`stateExpr` strings are statically extracted
|
|
7
|
+
* for the *verify* cross-link — exactly the dual-use trick `requires()`/
|
|
8
|
+
* `ensures()` already use (a runtime no-op whose argument text is read by the
|
|
9
|
+
* TLA+ codegen). See tools/bdd/README.md.
|
|
10
|
+
*/
|
|
11
|
+
/** The minimal slice of a polly MessageBus the runner drives. */
|
|
12
|
+
export interface BusLike {
|
|
13
|
+
send: (payload: {
|
|
14
|
+
type: string;
|
|
15
|
+
[k: string]: unknown;
|
|
16
|
+
}, options?: {
|
|
17
|
+
target?: string | string[];
|
|
18
|
+
tabId?: number;
|
|
19
|
+
timeout?: number;
|
|
20
|
+
}) => Promise<unknown>;
|
|
21
|
+
}
|
|
22
|
+
/** The minimal slice of a preact-style signal the runner reads/resets. */
|
|
23
|
+
export interface SignalLike<T = unknown> {
|
|
24
|
+
value: T;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Per-scenario execution context handed to every step callback. The bus and
|
|
28
|
+
* signals are the *real* ones the app uses; `vars` is scratch space for a
|
|
29
|
+
* scenario (e.g. an id captured in a `When` and asserted in a `Then`).
|
|
30
|
+
*/
|
|
31
|
+
export interface World {
|
|
32
|
+
bus: BusLike;
|
|
33
|
+
signals: Record<string, SignalLike>;
|
|
34
|
+
vars: Record<string, unknown>;
|
|
35
|
+
/** Response returned by the most recent `bus.send` in a `When`. */
|
|
36
|
+
lastResponse?: unknown;
|
|
37
|
+
/** Error thrown by the most recent `When`, if any (for rejection asserts). */
|
|
38
|
+
lastError?: unknown;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A step callback: receives the world and the values captured from the text.
|
|
42
|
+
* The return value is captured as `world.lastResponse` when not undefined — so
|
|
43
|
+
* a `when` can simply `return world.bus.send(...)` and a later `then` asserts on
|
|
44
|
+
* the response. `given`/`then` typically return nothing.
|
|
45
|
+
*/
|
|
46
|
+
export type StepFn = (world: World, ...args: string[]) => unknown;
|
|
47
|
+
/**
|
|
48
|
+
* A step binding — declared once, read by two consumers.
|
|
49
|
+
*
|
|
50
|
+
* Runtime: the runner calls `given`/`when`/`then`.
|
|
51
|
+
* Formal: the verify extractor reads `message` (the message type a `when`
|
|
52
|
+
* sends) and `stateExpr` (the TS state expression a `given`/`then`
|
|
53
|
+
* establishes or asserts), turning the scenario into a trace it can
|
|
54
|
+
* check against the verification config and TLA+ model.
|
|
55
|
+
*/
|
|
56
|
+
export interface StepBinding {
|
|
57
|
+
/** Cucumber-expression pattern, e.g. `the user logs in as {string}`. */
|
|
58
|
+
pattern: string;
|
|
59
|
+
given?: StepFn;
|
|
60
|
+
when?: StepFn;
|
|
61
|
+
then?: StepFn;
|
|
62
|
+
/** Formal metadata: the message type a `when` step sends. */
|
|
63
|
+
message?: string;
|
|
64
|
+
/** Formal metadata: the TS state expression a `given`/`then` establishes/asserts. */
|
|
65
|
+
stateExpr?: string;
|
|
66
|
+
}
|
|
67
|
+
/** How the app builds and cold-resets its real-factory world. */
|
|
68
|
+
export interface WorldDef {
|
|
69
|
+
/** Build the world once per runner process (real factory + handlers). */
|
|
70
|
+
create: () => World | Promise<World>;
|
|
71
|
+
/** Cold-start reset run before every scenario (signals back to initial). */
|
|
72
|
+
reset: (world: World) => void | Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
export type StepKeyword = "given" | "when" | "then";
|
|
75
|
+
export interface ParsedStep {
|
|
76
|
+
/** Normalized keyword — And/But resolve to the previous concrete keyword. */
|
|
77
|
+
keyword: StepKeyword;
|
|
78
|
+
/** The raw keyword as written (Given/When/Then/And/But), for reporting. */
|
|
79
|
+
rawKeyword: string;
|
|
80
|
+
text: string;
|
|
81
|
+
line: number;
|
|
82
|
+
}
|
|
83
|
+
export interface ParsedScenario {
|
|
84
|
+
name: string;
|
|
85
|
+
tags: string[];
|
|
86
|
+
steps: ParsedStep[];
|
|
87
|
+
line: number;
|
|
88
|
+
/** True when expanded from a Scenario Outline row. */
|
|
89
|
+
fromOutline?: boolean;
|
|
90
|
+
}
|
|
91
|
+
export interface ParsedFeature {
|
|
92
|
+
name: string;
|
|
93
|
+
description: string;
|
|
94
|
+
tags: string[];
|
|
95
|
+
/** Background steps prepended to every scenario, already keyword-normalized. */
|
|
96
|
+
background: ParsedStep[];
|
|
97
|
+
scenarios: ParsedScenario[];
|
|
98
|
+
file: string;
|
|
99
|
+
}
|
|
100
|
+
export type StepOutcome = "pass" | "fail" | "undefined" | "skipped";
|
|
101
|
+
export interface StepResult {
|
|
102
|
+
text: string;
|
|
103
|
+
rawKeyword: string;
|
|
104
|
+
outcome: StepOutcome;
|
|
105
|
+
message?: string;
|
|
106
|
+
}
|
|
107
|
+
export type ScenarioOutcome = "pass" | "fail" | "undefined" | "deferred-formal";
|
|
108
|
+
export interface ScenarioResult {
|
|
109
|
+
feature: string;
|
|
110
|
+
scenario: string;
|
|
111
|
+
tags: string[];
|
|
112
|
+
outcome: ScenarioOutcome;
|
|
113
|
+
steps: StepResult[];
|
|
114
|
+
file: string;
|
|
115
|
+
}
|
|
116
|
+
export interface RunResult {
|
|
117
|
+
scenarios: ScenarioResult[];
|
|
118
|
+
passed: number;
|
|
119
|
+
failed: number;
|
|
120
|
+
undefinedSteps: number;
|
|
121
|
+
deferred: number;
|
|
122
|
+
ok: boolean;
|
|
123
|
+
}
|
|
124
|
+
/** A step matched to its binding's formal metadata. */
|
|
125
|
+
export interface TraceStep {
|
|
126
|
+
text: string;
|
|
127
|
+
keyword: StepKeyword;
|
|
128
|
+
message?: string;
|
|
129
|
+
stateExpr?: string;
|
|
130
|
+
/** True when the step text matched no registered binding. */
|
|
131
|
+
unbound?: boolean;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* A scenario reduced to the same vocabulary the verify config speaks:
|
|
135
|
+
* Given (initial state exprs) → When (message types) → Then (state exprs).
|
|
136
|
+
*/
|
|
137
|
+
export interface ScenarioTrace {
|
|
138
|
+
feature: string;
|
|
139
|
+
scenario: string;
|
|
140
|
+
tags: string[];
|
|
141
|
+
given: TraceStep[];
|
|
142
|
+
when: TraceStep[];
|
|
143
|
+
then: TraceStep[];
|
|
144
|
+
file: string;
|
|
145
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** A scenario reduced to the post-state it claims, ready for the verify witness. */
|
|
2
|
+
export interface ScenarioWitness {
|
|
3
|
+
feature: string;
|
|
4
|
+
scenario: string;
|
|
5
|
+
tags: string[];
|
|
6
|
+
file: string;
|
|
7
|
+
/**
|
|
8
|
+
* The conjoined Then-predicate (TS, `signal.field` dialect, values
|
|
9
|
+
* substituted) — e.g. `user.loggedIn === true && user.role === "admin"`.
|
|
10
|
+
* `null` when the scenario has no state-observable outcome to witness.
|
|
11
|
+
*/
|
|
12
|
+
predicate: string | null;
|
|
13
|
+
/** Dotted state-field paths the predicate references (for subsystem routing). */
|
|
14
|
+
fields: string[];
|
|
15
|
+
/** Then-step texts skipped: a bare field ref, no binding, or a runtime-only check. */
|
|
16
|
+
skipped: string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Reduce every scenario in the given feature files to a {@link ScenarioWitness}.
|
|
20
|
+
* Step modules are loaded for their `defineStep` side effects (the same import
|
|
21
|
+
* trick {@link extractTraces} uses) so `matchStep` can resolve each Then.
|
|
22
|
+
*/
|
|
23
|
+
export declare function extractWitnesses(featureFiles: string[], stepFiles: string[]): Promise<ScenarioWitness[]>;
|
|
@@ -140,8 +140,9 @@ Usage:
|
|
|
140
140
|
polly gallery --build <dir> Write a static gallery to <dir>
|
|
141
141
|
polly gallery --help Show this help
|
|
142
142
|
|
|
143
|
-
|
|
144
|
-
render surface
|
|
143
|
+
One page that renders every polly-ui primitive: the single place to see the
|
|
144
|
+
components, the render surface the visual-regression baselines capture, and a
|
|
145
|
+
gap-check that fails when a registered primitive has no specimen.`);
|
|
145
146
|
}
|
|
146
147
|
function flagValue(args, flag) {
|
|
147
148
|
const idx = args.indexOf(flag);
|
|
@@ -207,4 +208,4 @@ main().catch((error) => {
|
|
|
207
208
|
process.exit(1);
|
|
208
209
|
});
|
|
209
210
|
|
|
210
|
-
//# debugId=
|
|
211
|
+
//# debugId=B03800BEA169F5A764756E2164756E21
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"sources": ["../tools/gallery/src/server.ts", "../tools/gallery/src/cli.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * Build and serve the component gallery.\n *\n * One `Bun.build` pass of client.tsx bundles the Preact app and — through the\n * components' transitive `.module.css` imports plus the global stylesheets the\n * entry pulls in — emits a single CSS artifact (verified: ~38KB for one\n * primitive). The JS and CSS outputs are served as separate routes, or written\n * to a directory for a static export. CSS-module class hashing is deterministic\n * across builds, so the bundled JS and CSS always agree (the same property the\n * extension build relies on).\n */\n\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst HERE = dirname(fileURLToPath(import.meta.url));\nconst CLIENT_ENTRY = join(HERE, \"client.tsx\");\n/**\n * Where build-lib.ts writes the static gallery at package-build time. Polly\n * ships only `dist`, so the published CLI can't bundle from source at runtime —\n * it serves these pre-built files instead. From the bundled CLI at\n * `dist/tools/gallery/src/`, three levels up is `dist/`, then `gallery/`.\n */\nconst PREBUILT_DIR = join(HERE, \"..\", \"..\", \"..\", \"gallery\");\n\nexport interface GalleryBundle {\n js: string;\n css: string;\n}\n\n/** Bundle the gallery client into a JS string and a CSS string. */\nexport async function buildGalleryBundle(): Promise<GalleryBundle> {\n const result = await Bun.build({\n entrypoints: [CLIENT_ENTRY],\n target: \"browser\",\n format: \"esm\",\n minify: false,\n sourcemap: \"inline\",\n });\n\n if (!result.success) {\n const logs = result.logs.map((log) => String(log)).join(\"\\n\");\n throw new Error(`gallery build failed:\\n${logs}`);\n }\n\n let js = \"\";\n let css = \"\";\n for (const output of result.outputs) {\n const text = await output.text();\n if (output.path.endsWith(\".css\")) css += text;\n else js += text;\n }\n return { js, css };\n}\n\n/** The page shell — links the bundle's JS and CSS as separate files. */\nfunction galleryHtml(): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Polly UI gallery</title>\n<link rel=\"stylesheet\" href=\"./gallery.css\">\n</head>\n<body>\n<div id=\"app\"></div>\n<script type=\"module\" src=\"./gallery.js\"></script>\n</body>\n</html>\n`;\n}\n\nexport interface ServeOptions {\n /** Port to bind. 0 (the default) asks the OS for a free port. */\n port?: number;\n}\n\nexport interface RunningGallery {\n url: string;\n port: number;\n stop: () => void;\n}\n\n/**\n * Resolve the page assets to serve. In the monorepo (source present) the client\n * is bundled fresh; in a published package (source stripped) the pre-built files\n * written by build-lib.ts are read from disk. Either way the served bytes are\n * self-contained — no source is needed at request time.\n */\nasync function resolveAssets(): Promise<{ html: string; js: string; css: string }> {\n if (await Bun.file(CLIENT_ENTRY).exists()) {\n const bundle = await buildGalleryBundle();\n return { html: galleryHtml(), js: bundle.js, css: bundle.css };\n }\n const indexFile = Bun.file(join(PREBUILT_DIR, \"index.html\"));\n if (!(await indexFile.exists())) {\n throw new Error(\n `no gallery source or pre-built bundle found (looked for ${CLIENT_ENTRY} and ${PREBUILT_DIR}). ` +\n \"Rebuild the package with 'bun run build:lib'.\"\n );\n }\n return {\n html: await indexFile.text(),\n js: await Bun.file(join(PREBUILT_DIR, \"gallery.js\")).text(),\n css: await Bun.file(join(PREBUILT_DIR, \"gallery.css\")).text(),\n };\n}\n\n/** Build (or load) once, then serve the gallery over HTTP until `stop()`. */\nexport async function serveGallery(options: ServeOptions = {}): Promise<RunningGallery> {\n const { html, js, css } = await resolveAssets();\n const bundle = { js, css };\n\n const server = Bun.serve({\n port: options.port ?? 0,\n fetch(req) {\n const { pathname } = new URL(req.url);\n if (pathname === \"/\" || pathname === \"/index.html\") {\n return new Response(html, {\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n });\n }\n if (pathname === \"/gallery.js\") {\n return new Response(bundle.js, {\n headers: { \"Content-Type\": \"text/javascript; charset=utf-8\" },\n });\n }\n if (pathname === \"/gallery.css\") {\n return new Response(bundle.css, {\n headers: { \"Content-Type\": \"text/css; charset=utf-8\" },\n });\n }\n // The browser always requests a favicon; answer quietly so it doesn't\n // surface as a console error (the e2e gates on a clean console).\n if (pathname === \"/favicon.ico\") {\n return new Response(null, { status: 204 });\n }\n return new Response(\"Not found\", { status: 404 });\n },\n });\n\n const boundPort = server.port ?? options.port ?? 0;\n return {\n url: `http://localhost:${boundPort}/`,\n port: boundPort,\n stop: () => server.stop(true),\n };\n}\n\n/** Build the gallery and write index.html + gallery.js + gallery.css to a dir. */\nexport async function buildGalleryToDir(outDir: string): Promise<string[]> {\n const { html, js, css } = await resolveAssets();\n const files: Array<[string, string]> = [\n [\"index.html\", html],\n [\"gallery.js\", js],\n [\"gallery.css\", css],\n ];\n const written: string[] = [];\n for (const [name, content] of files) {\n const path = join(outDir, name);\n await Bun.write(path, content);\n written.push(path);\n }\n return written;\n}\n",
|
|
6
|
-
"#!/usr/bin/env bun\n/**\n * `polly gallery` — serve (or statically export) the polly-ui component gallery.\n *\n * polly gallery # serve at http://localhost:4321\n * polly gallery --port 5000 # serve on a chosen port\n * polly gallery --open # serve and open the default browser\n * polly gallery --build <dir> # write a static index.html + js + css\n *\n * Hand-rolled arg parsing, matching the other polly tool CLIs.\n */\n\nimport { buildGalleryToDir, serveGallery } from \"./server.ts\";\n\nconst DEFAULT_PORT = 4321;\n\nfunction printHelp(): void {\n console.log(`polly gallery — preview every polly-ui primitive in one page.\n\nUsage:\n polly gallery [--port <n>] [--open] Serve the gallery (default port ${DEFAULT_PORT})\n polly gallery --build <dir> Write a static gallery to <dir>\n polly gallery --help Show this help\n\
|
|
6
|
+
"#!/usr/bin/env bun\n/**\n * `polly gallery` — serve (or statically export) the polly-ui component gallery.\n *\n * polly gallery # serve at http://localhost:4321\n * polly gallery --port 5000 # serve on a chosen port\n * polly gallery --open # serve and open the default browser\n * polly gallery --build <dir> # write a static index.html + js + css\n *\n * Hand-rolled arg parsing, matching the other polly tool CLIs.\n */\n\nimport { buildGalleryToDir, serveGallery } from \"./server.ts\";\n\nconst DEFAULT_PORT = 4321;\n\nfunction printHelp(): void {\n console.log(`polly gallery — preview every polly-ui primitive in one page.\n\nUsage:\n polly gallery [--port <n>] [--open] Serve the gallery (default port ${DEFAULT_PORT})\n polly gallery --build <dir> Write a static gallery to <dir>\n polly gallery --help Show this help\n\nOne page that renders every polly-ui primitive: the single place to see the\ncomponents, the render surface the visual-regression baselines capture, and a\ngap-check that fails when a registered primitive has no specimen.`);\n}\n\n/** Read the value following a flag, erroring if it is missing or another flag. */\nfunction flagValue(args: string[], flag: string): string | undefined {\n const idx = args.indexOf(flag);\n if (idx === -1) return undefined;\n const value = args[idx + 1];\n if (value === undefined || value.startsWith(\"-\")) {\n console.log(`error: ${flag} requires a value`);\n process.exit(1);\n }\n return value;\n}\n\nfunction openBrowser(url: string): void {\n const command =\n process.platform === \"darwin\"\n ? [\"open\", url]\n : process.platform === \"win32\"\n ? [\"cmd\", \"/c\", \"start\", \"\", url]\n : [\"xdg-open\", url];\n try {\n Bun.spawn(command, { stdout: \"ignore\", stderr: \"ignore\" });\n } catch {\n // Opening the browser is best-effort; the URL is printed regardless.\n }\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n\n if (args.includes(\"--help\") || args.includes(\"-h\")) {\n printHelp();\n return;\n }\n\n const buildDir = flagValue(args, \"--build\");\n if (buildDir !== undefined) {\n const files = await buildGalleryToDir(buildDir);\n console.log(`Gallery written to ${buildDir}:`);\n for (const file of files) console.log(` ${file}`);\n return;\n }\n\n const portArg = flagValue(args, \"--port\");\n const port = portArg === undefined ? DEFAULT_PORT : Number(portArg);\n if (!Number.isInteger(port) || port < 0 || port > 65535) {\n console.log(`error: --port must be an integer in 0–65535 (got \"${portArg}\")`);\n process.exit(1);\n }\n\n let gallery: Awaited<ReturnType<typeof serveGallery>>;\n try {\n gallery = await serveGallery({ port });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(`error: could not start the gallery server: ${message}`);\n if (/EADDRINUSE|in use|address already/i.test(message)) {\n console.log(`Port ${port} is in use — try 'polly gallery --port <other>'.`);\n }\n process.exit(1);\n }\n\n console.log(`Polly UI gallery → ${gallery.url}`);\n console.log(\"Serving the polly-ui component gallery. Press Ctrl-C to stop.\");\n if (args.includes(\"--open\")) openBrowser(gallery.url);\n\n const shutdown = (): void => {\n gallery.stop();\n process.exit(0);\n };\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n}\n\nmain().catch((error) => {\n console.log(error);\n process.exit(1);\n});\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "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
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAYA;AACA;AAEA,IAAM,OAAO,QAAQ,cAAc,YAAY,GAAG,CAAC;AACnD,IAAM,eAAe,KAAK,MAAM,YAAY;AAO5C,IAAM,eAAe,KAAK,MAAM,MAAM,MAAM,MAAM,SAAS;AAQ3D,eAAsB,kBAAkB,GAA2B;AAAA,EACjE,MAAM,SAAS,MAAM,IAAI,MAAM;AAAA,IAC7B,aAAa,CAAC,YAAY;AAAA,IAC1B,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,WAAW;AAAA,EACb,CAAC;AAAA,EAED,IAAI,CAAC,OAAO,SAAS;AAAA,IACnB,MAAM,OAAO,OAAO,KAAK,IAAI,CAAC,QAAQ,OAAO,GAAG,CAAC,EAAE,KAAK;AAAA,CAAI;AAAA,IAC5D,MAAM,IAAI,MAAM;AAAA,EAA0B,MAAM;AAAA,EAClD;AAAA,EAEA,IAAI,KAAK;AAAA,EACT,IAAI,MAAM;AAAA,EACV,WAAW,UAAU,OAAO,SAAS;AAAA,IACnC,MAAM,OAAO,MAAM,OAAO,KAAK;AAAA,IAC/B,IAAI,OAAO,KAAK,SAAS,MAAM;AAAA,MAAG,OAAO;AAAA,IACpC;AAAA,YAAM;AAAA,EACb;AAAA,EACA,OAAO,EAAE,IAAI,IAAI;AAAA;AAInB,SAAS,WAAW,GAAW;AAAA,EAC7B,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiCT,eAAe,aAAa,GAAuD;AAAA,EACjF,IAAI,MAAM,IAAI,KAAK,YAAY,EAAE,OAAO,GAAG;AAAA,IACzC,MAAM,SAAS,MAAM,mBAAmB;AAAA,IACxC,OAAO,EAAE,MAAM,YAAY,GAAG,IAAI,OAAO,IAAI,KAAK,OAAO,IAAI;AAAA,EAC/D;AAAA,EACA,MAAM,YAAY,IAAI,KAAK,KAAK,cAAc,YAAY,CAAC;AAAA,EAC3D,IAAI,CAAE,MAAM,UAAU,OAAO,GAAI;AAAA,IAC/B,MAAM,IAAI,MACR,2DAA2D,oBAAoB,oBAC7E,+CACJ;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM,MAAM,UAAU,KAAK;AAAA,IAC3B,IAAI,MAAM,IAAI,KAAK,KAAK,cAAc,YAAY,CAAC,EAAE,KAAK;AAAA,IAC1D,KAAK,MAAM,IAAI,KAAK,KAAK,cAAc,aAAa,CAAC,EAAE,KAAK;AAAA,EAC9D;AAAA;AAIF,eAAsB,YAAY,CAAC,UAAwB,CAAC,GAA4B;AAAA,EACtF,QAAQ,MAAM,IAAI,QAAQ,MAAM,cAAc;AAAA,EAC9C,MAAM,SAAS,EAAE,IAAI,IAAI;AAAA,EAEzB,MAAM,SAAS,IAAI,MAAM;AAAA,IACvB,MAAM,QAAQ,QAAQ;AAAA,IACtB,KAAK,CAAC,KAAK;AAAA,MACT,QAAQ,aAAa,IAAI,IAAI,IAAI,GAAG;AAAA,MACpC,IAAI,aAAa,OAAO,aAAa,eAAe;AAAA,QAClD,OAAO,IAAI,SAAS,MAAM;AAAA,UACxB,SAAS,EAAE,gBAAgB,2BAA2B;AAAA,QACxD,CAAC;AAAA,MACH;AAAA,MACA,IAAI,aAAa,eAAe;AAAA,QAC9B,OAAO,IAAI,SAAS,OAAO,IAAI;AAAA,UAC7B,SAAS,EAAE,gBAAgB,iCAAiC;AAAA,QAC9D,CAAC;AAAA,MACH;AAAA,MACA,IAAI,aAAa,gBAAgB;AAAA,QAC/B,OAAO,IAAI,SAAS,OAAO,KAAK;AAAA,UAC9B,SAAS,EAAE,gBAAgB,0BAA0B;AAAA,QACvD,CAAC;AAAA,MACH;AAAA,MAGA,IAAI,aAAa,gBAAgB;AAAA,QAC/B,OAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC3C;AAAA,MACA,OAAO,IAAI,SAAS,aAAa,EAAE,QAAQ,IAAI,CAAC;AAAA;AAAA,EAEpD,CAAC;AAAA,EAED,MAAM,YAAY,OAAO,QAAQ,QAAQ,QAAQ;AAAA,EACjD,OAAO;AAAA,IACL,KAAK,oBAAoB;AAAA,IACzB,MAAM;AAAA,IACN,MAAM,MAAM,OAAO,KAAK,IAAI;AAAA,EAC9B;AAAA;AAIF,eAAsB,iBAAiB,CAAC,QAAmC;AAAA,EACzE,QAAQ,MAAM,IAAI,QAAQ,MAAM,cAAc;AAAA,EAC9C,MAAM,QAAiC;AAAA,IACrC,CAAC,cAAc,IAAI;AAAA,IACnB,CAAC,cAAc,EAAE;AAAA,IACjB,CAAC,eAAe,GAAG;AAAA,EACrB;AAAA,EACA,MAAM,UAAoB,CAAC;AAAA,EAC3B,YAAY,MAAM,YAAY,OAAO;AAAA,IACnC,MAAM,OAAO,KAAK,QAAQ,IAAI;AAAA,IAC9B,MAAM,IAAI,MAAM,MAAM,OAAO;AAAA,IAC7B,QAAQ,KAAK,IAAI;AAAA,EACnB;AAAA,EACA,OAAO;AAAA;;;ACtJT,IAAM,eAAe;AAErB,SAAS,SAAS,GAAS;AAAA,EACzB,QAAQ,IAAI;AAAA;AAAA;AAAA,0EAG4D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kEAMR;AAAA;AAIlE,SAAS,SAAS,CAAC,MAAgB,MAAkC;AAAA,EACnE,MAAM,MAAM,KAAK,QAAQ,IAAI;AAAA,EAC7B,IAAI,QAAQ;AAAA,IAAI;AAAA,EAChB,MAAM,QAAQ,KAAK,MAAM;AAAA,EACzB,IAAI,UAAU,aAAa,MAAM,WAAW,GAAG,GAAG;AAAA,IAChD,QAAQ,IAAI,UAAU,uBAAuB;AAAA,IAC7C,QAAQ,KAAK,CAAC;AAAA,EAChB;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,WAAW,CAAC,KAAmB;AAAA,EACtC,MAAM,UACJ,QAAQ,aAAa,WACjB,CAAC,QAAQ,GAAG,IACZ,QAAQ,aAAa,UACnB,CAAC,OAAO,MAAM,SAAS,IAAI,GAAG,IAC9B,CAAC,YAAY,GAAG;AAAA,EACxB,IAAI;AAAA,IACF,IAAI,MAAM,SAAS,EAAE,QAAQ,UAAU,QAAQ,SAAS,CAAC;AAAA,IACzD,MAAM;AAAA;AAKV,eAAe,IAAI,GAAkB;AAAA,EACnC,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAAA,EAEjC,IAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,IAAI,GAAG;AAAA,IAClD,UAAU;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,UAAU,MAAM,SAAS;AAAA,EAC1C,IAAI,aAAa,WAAW;AAAA,IAC1B,MAAM,QAAQ,MAAM,kBAAkB,QAAQ;AAAA,IAC9C,QAAQ,IAAI,sBAAsB,WAAW;AAAA,IAC7C,WAAW,QAAQ;AAAA,MAAO,QAAQ,IAAI,KAAK,MAAM;AAAA,IACjD;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,UAAU,MAAM,QAAQ;AAAA,EACxC,MAAM,OAAO,YAAY,YAAY,eAAe,OAAO,OAAO;AAAA,EAClE,IAAI,CAAC,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,OAAO,OAAO;AAAA,IACvD,QAAQ,IAAI,qDAAoD,WAAW;AAAA,IAC3E,QAAQ,KAAK,CAAC;AAAA,EAChB;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI;AAAA,IACF,UAAU,MAAM,aAAa,EAAE,KAAK,CAAC;AAAA,IACrC,OAAO,OAAO;AAAA,IACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACrE,QAAQ,IAAI,8CAA8C,SAAS;AAAA,IACnE,IAAI,qCAAqC,KAAK,OAAO,GAAG;AAAA,MACtD,QAAQ,IAAI,QAAQ,sDAAqD;AAAA,IAC3E;AAAA,IACA,QAAQ,KAAK,CAAC;AAAA;AAAA,EAGhB,QAAQ,IAAI,sBAAqB,QAAQ,KAAK;AAAA,EAC9C,QAAQ,IAAI,+DAA+D;AAAA,EAC3E,IAAI,KAAK,SAAS,QAAQ;AAAA,IAAG,YAAY,QAAQ,GAAG;AAAA,EAEpD,MAAM,WAAW,MAAY;AAAA,IAC3B,QAAQ,KAAK;AAAA,IACb,QAAQ,KAAK,CAAC;AAAA;AAAA,EAEhB,QAAQ,GAAG,UAAU,QAAQ;AAAA,EAC7B,QAAQ,GAAG,WAAW,QAAQ;AAAA;AAGhC,KAAK,EAAE,MAAM,CAAC,UAAU;AAAA,EACtB,QAAQ,IAAI,KAAK;AAAA,EACjB,QAAQ,KAAK,CAAC;AAAA,CACf;",
|
|
9
|
+
"debugId": "B03800BEA169F5A764756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -618,6 +618,13 @@ async function presetAdvisory(cfg) {
|
|
|
618
618
|
// tools/mutate/src/cli.ts
|
|
619
619
|
var HELP = `polly mutate — mutation testing + useless-test detection
|
|
620
620
|
|
|
621
|
+
Mutation testing breaks your code one edit at a time and checks whether a test
|
|
622
|
+
fails; a surviving mutant is a line no test pins down — a truer signal than line
|
|
623
|
+
coverage, which only proves a line ran. Read the same kill matrix the other way
|
|
624
|
+
and it also finds dead weight: redundant tests (every kill caught elsewhere) and
|
|
625
|
+
theatre (code a test ran but never actually checked). How the matrix is built:
|
|
626
|
+
tools/mutate/README.md.
|
|
627
|
+
|
|
621
628
|
Usage:
|
|
622
629
|
polly mutate init [--force] Scaffold a stryker.conf.json for this project
|
|
623
630
|
polly mutate [run] Run Stryker, then print the useless-test report
|
|
@@ -740,4 +747,4 @@ main().then((code) => process.exit(code)).catch((err) => {
|
|
|
740
747
|
process.exit(1);
|
|
741
748
|
});
|
|
742
749
|
|
|
743
|
-
//# debugId=
|
|
750
|
+
//# debugId=63F5B93A394460DD64756E2164756E21
|
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
"/**\n * Orchestration for `polly mutate run` / `report`: spawn Stryker, then read the\n * mutation report and produce the useless-test analysis — gating the redundancy\n * /subsumption sections on a complete (no-bail) kill matrix.\n */\nimport { resolve } from \"node:path\";\nimport type { MutateConfig } from \"./config.ts\";\nimport { buildDb, loadMutationReport } from \"./ingest.ts\";\nimport { report } from \"./report.ts\";\nimport { isMatrixComplete } from \"./verify-matrix.ts\";\n\n/** Run Stryker against the resolved config. Inherits stdio for the live reporter; returns the exit code. */\nexport async function runStryker(cfg: MutateConfig): Promise<number> {\n // Pass --configFile only when the located config is NOT the auto-discoverable\n // root stryker.conf.json — that keeps a bare repo run identical to `stryker run`.\n const autoDiscoverable = cfg.strykerConfigPath === resolve(cfg.cwd, \"stryker.conf.json\");\n const configFlag =\n cfg.strykerConfigPath && !autoDiscoverable ? [\"--configFile\", cfg.strykerConfigPath] : [];\n const proc = Bun.spawn([\"bunx\", \"stryker\", \"run\", ...configFlag], {\n cwd: cfg.cwd,\n stdout: \"inherit\",\n stderr: \"inherit\",\n stdin: \"inherit\",\n env: process.env,\n });\n return await proc.exited;\n}\n\n/** Build the useless-test report from an existing mutation.json (no Stryker run). */\nexport async function reportFromFile(cfg: MutateConfig): Promise<string> {\n if (!(await Bun.file(cfg.reportPath).exists())) {\n throw new Error(\n `no mutation report at ${cfg.reportPath}. Run 'polly mutate run' (or 'bun run mutation') first, or pass --report <path>.`\n );\n }\n const mreport = await loadMutationReport(cfg.reportPath);\n const db = buildDb(mreport, cfg.dbPath);\n try {\n return report(db, { matrixComplete: isMatrixComplete(mreport) });\n } finally {\n db.close();\n }\n}\n\n/**\n * If the Stryker config doesn't already load polly's verify-primitive ignorer,\n * return a one-line tip. The ignorer must be in the config before the run (it's\n * read at Stryker startup), so this advises rather than mutating the user's config.\n */\nexport async function presetAdvisory(cfg: MutateConfig): Promise<string | null> {\n if (!cfg.strykerConfigPath?.endsWith(\".json\")) return null;\n try {\n const conf = (await Bun.file(cfg.strykerConfigPath).json()) as unknown as {\n plugins?: string[];\n };\n if ((conf.plugins ?? []).includes(\"@fairfox/polly/stryker\")) return null;\n return (\n \"Tip: spread pollyStrykerPreset (from @fairfox/polly/stryker) into your Stryker config — \" +\n \"verify primitives (requires/ensures/…) are runtime no-ops and their mutants always survive, \" +\n \"dragging the score down with noise. See polly#143.\"\n );\n } catch {\n return null;\n }\n}\n",
|
|
12
12
|
"/**\n * Test-debt report: derive the three signals from the kill matrix.\n *\n * gaps survived mutants — code no test pins (the Stryker direction)\n * redundancy tests/files whose every kill is also caught elsewhere\n * theatre covered-but-survived — code a test runs but no test detects\n * (the Survived status under coverageAnalysis \"all\")\n *\n * Redundancy is reported at BOTH file and case level. Decisions are keyed at\n * file level (stable identity); case level is the drill-down.\n */\nimport type { Database } from \"bun:sqlite\";\nimport { buildDb, loadMutationReport, queryAll, queryGet } from \"./ingest.ts\";\n\ntype SubsumedCase = { file: string; name: string; total: number };\ntype LineCount = { line: number; mutator: string; n: number };\n\n/** Greedy set cover: smallest set of `units` whose kill-sets cover all killed mutants. */\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: a textbook greedy set-cover loop — clearer whole than split.\nfunction greedyCover(units: Map<string, Set<string>>, universe: Set<string>): string[] {\n const remaining = new Set(universe);\n const chosen: string[] = [];\n const pool = new Map([...units].map(([k, v]) => [k, new Set(v)]));\n while (remaining.size > 0) {\n let best: string | null = null;\n let bestGain = 0;\n for (const [unit, set] of pool) {\n let gain = 0;\n for (const m of set) if (remaining.has(m)) gain++;\n if (gain > bestGain) {\n bestGain = gain;\n best = unit;\n }\n }\n if (best === null || bestGain === 0) break; // remaining mutants killed by nobody (shouldn't happen for killed set)\n chosen.push(best);\n for (const m of pool.get(best) ?? []) remaining.delete(m);\n pool.delete(best);\n }\n return chosen;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: one report builder emitting all sections in order — splitting would scatter the shared db/out.\nexport function report(db: Database, opts: { matrixComplete?: boolean } = {}): string {\n // Defaults to true so `report(db)` is byte-identical to before (the parity\n // guard depends on this). When false — the kill matrix is partial (an\n // unpatched/bail runner) — the redundancy/subsumption sections would lie, so\n // they are suppressed and a warning shown; score/gaps/theatre still hold.\n const matrixComplete = opts.matrixComplete ?? true;\n const out: string[] = [];\n const p = (s = \"\") => out.push(s);\n\n // --- summary ---\n const tot = queryGet<{\n n: number;\n killed: number;\n survived: number;\n timeout: number;\n nocov: number;\n }>(\n db,\n \"SELECT count(*) n, sum(status='Killed') killed, sum(status='Survived') survived, sum(status='Timeout') timeout, sum(status='NoCoverage') nocov FROM mutants\"\n ) ?? { n: 0, killed: 0, survived: 0, timeout: 0, nocov: 0 };\n const nTests = queryGet<{ n: number }>(db, \"SELECT count(*) n FROM tests\")?.n ?? 0;\n const detected = tot.killed + tot.timeout;\n const score = ((detected / (tot.n - tot.nocov || 1)) * 100).toFixed(1);\n p(\n `MUTATION score ${score}% ${tot.killed} killed · ${tot.timeout} timeout · ${tot.survived} survived · ${tot.nocov} no-coverage (${tot.n} mutants, ${nTests} tests)`\n );\n\n if (matrixComplete) {\n // --- kill-multiplicity: how much slack is in the matrix ---\n const mult = queryAll<{ bucket: string; n: number }>(\n db,\n `\n\t\t\tSELECT CASE WHEN c=1 THEN '1' WHEN c=2 THEN '2' WHEN c BETWEEN 3 AND 5 THEN '3-5' ELSE '6+' END bucket, count(*) n\n\t\t\tFROM (SELECT mutant_id, count(*) c FROM kills GROUP BY mutant_id)\n\t\t\tGROUP BY bucket ORDER BY min(c)`\n );\n p(`\\nKILL MULTIPLICITY (killers per killed mutant — higher = more redundancy slack)`);\n for (const r of mult) p(` killed by ${String(r.bucket).padStart(3)} test(s): ${r.n}`);\n\n // --- redundancy ratio via greedy cover (case + file) ---\n const universe = new Set(\n queryAll<{ mutant_id: string }>(db, \"SELECT DISTINCT mutant_id FROM kills\").map(\n (r) => r.mutant_id\n )\n );\n const byTest = new Map<string, Set<string>>();\n for (const r of queryAll<{ test_id: string; mutant_id: string }>(\n db,\n \"SELECT test_id, mutant_id FROM kills\"\n )) {\n const set = byTest.get(r.test_id) ?? new Set<string>();\n byTest.set(r.test_id, set);\n set.add(r.mutant_id);\n }\n const byFile = new Map<string, Set<string>>();\n for (const r of queryAll<{ file: string; mid: string }>(\n db,\n \"SELECT t.file file, k.mutant_id mid FROM kills k JOIN tests t ON t.id=k.test_id\"\n )) {\n const set = byFile.get(r.file) ?? new Set<string>();\n byFile.set(r.file, set);\n set.add(r.mid);\n }\n const caseCover = greedyCover(byTest, universe);\n const fileCover = greedyCover(byFile, universe);\n p(`\\nREDUNDANCY RATIO (tests that kill something ÷ minimal covering set)`);\n p(\n ` case level: ${byTest.size} killing tests → ${caseCover.length} needed (${(byTest.size / Math.max(1, caseCover.length)).toFixed(2)}×, ~${byTest.size - caseCover.length} prunable)`\n );\n p(\n ` file level: ${byFile.size} killing files → ${fileCover.length} needed (${(byFile.size / Math.max(1, fileCover.length)).toFixed(2)}×, ~${byFile.size - fileCover.length} prunable)`\n );\n\n // --- fully subsumed FILES (every mutant they kill is killed elsewhere too) ---\n const subsumedFiles = queryAll<{ file: string; kills: number }>(\n db,\n `\n\t\t\tWITH file_kill AS (SELECT DISTINCT t.file file, k.mutant_id mid FROM kills k JOIN tests t ON t.id=k.test_id),\n\t\t\t owner AS (SELECT mid, count(DISTINCT file) nf, min(file) only_file FROM file_kill GROUP BY mid)\n\t\t\tSELECT fk.file, count(DISTINCT fk.mid) kills,\n\t\t\t sum(CASE WHEN o.nf=1 THEN 1 ELSE 0 END) unique_kills\n\t\t\tFROM file_kill fk JOIN owner o ON o.mid=fk.mid\n\t\t\tGROUP BY fk.file HAVING unique_kills=0 ORDER BY kills DESC`\n );\n p(`\\nSUBSUMED FILES (file-level identity — safe-to-review deletion candidates)`);\n if (subsumedFiles.length === 0)\n p(` none — every test file kills at least one mutant no other file catches`);\n for (const r of subsumedFiles) p(` ${r.file} (${r.kills} kills, 0 unique)`);\n\n // --- fully subsumed CASES (drill-down) ---\n const subsumedCases = queryAll<SubsumedCase>(\n db,\n `\n\t\t\tWITH mk AS (SELECT mutant_id, count(*) c FROM kills GROUP BY mutant_id),\n\t\t\t tk AS (SELECT test_id, count(*) total, sum(CASE WHEN mk.c=1 THEN 1 ELSE 0 END) uniq\n\t\t\t FROM kills JOIN mk USING(mutant_id) GROUP BY test_id)\n\t\t\tSELECT t.file, t.name, tk.total FROM tk JOIN tests t ON t.id=tk.test_id\n\t\t\tWHERE tk.total>0 AND tk.uniq=0 ORDER BY t.file, tk.total DESC`\n );\n const byFileCases = new Map<string, SubsumedCase[]>();\n for (const r of subsumedCases) {\n const rows = byFileCases.get(r.file) ?? [];\n byFileCases.set(r.file, rows);\n rows.push(r);\n }\n p(\n `\\nSUBSUMED CASES (${subsumedCases.length} individual tests whose every kill is caught elsewhere)`\n );\n for (const [file, rows] of byFileCases) {\n p(` ${file}`);\n for (const r of rows) p(` “${r.name}” (${r.total} kills, 0 unique)`);\n }\n } else {\n p(`\\n⚠ KILL MATRIX INCOMPLETE — redundancy/subsumption analysis suppressed.`);\n p(` Every mutant has at most one recorded killer, so \"which tests are redundant\"`);\n p(` cannot be derived. This needs the no-bail patched Bun runner (not shipped with`);\n p(\n ` @fairfox/polly). Run 'polly mutate verify' to diagnose. Score/gaps/theatre below still hold.`\n );\n }\n\n // Under coverageAnalysis \"all\", Stryker classifies a non-killed mutant as\n // NoCoverage (no test runs it — a true gap) or Survived (a test runs it but\n // nothing detects the mutation — theatre). That status split IS the\n // gap/theatre distinction; it requires coverage to be on (see README).\n const srcFile = queryGet<{ file: string }>(db, \"SELECT file FROM mutants LIMIT 1\")?.file;\n\n // --- gaps: code no test even executes ---\n const gaps = queryAll<LineCount>(\n db,\n \"SELECT line, mutator, count(*) n FROM mutants WHERE status='NoCoverage' GROUP BY line, mutator ORDER BY line\"\n );\n const gapTotal = gaps.reduce((a, r) => a + r.n, 0);\n p(`\\nGAPS (NoCoverage — no test executes this code: ${gapTotal})`);\n if (gapTotal === 0) p(` none — every mutable location is reached by some test`);\n for (const r of gaps) p(` ${srcFile}:${r.line} ${r.mutator}${r.n > 1 ? ` ×${r.n}` : \"\"}`);\n\n // --- theatre: covered but survived ---\n const theatre = queryAll<LineCount>(\n db,\n \"SELECT line, mutator, count(*) n FROM mutants WHERE status='Survived' GROUP BY line, mutator ORDER BY line\"\n );\n const theatreTotal = theatre.reduce((a, r) => a + r.n, 0);\n p(`\\nTHEATRE (Survived — code is covered but no test detects the mutation: ${theatreTotal})`);\n if (theatreTotal === 0) p(` none`);\n for (const r of theatre) p(` ${srcFile}:${r.line} ${r.mutator}${r.n > 1 ? ` ×${r.n}` : \"\"}`);\n\n return out.join(\"\\n\");\n}\n\nif (import.meta.main) {\n const reportPath = process.argv[2] ?? \"reports/mutation/mutation.json\";\n const db = buildDb(await loadMutationReport(reportPath), \"reports/test-debt.sqlite\");\n console.log(report(db));\n db.close();\n}\n",
|
|
13
13
|
"/**\n * Verification artefact for the kill-matrix contract.\n *\n * The whole useless-test analysis rests on one fact: the patched bun runner\n * emits a COMPLETE kill matrix — every test that detects a mutant appears in\n * killedBy, not just the first. That depends on a pinned pair: (Bun version,\n * plugin version + our patch). A Bun upgrade that changes JUnit output, or a\n * patch that stops applying, would silently collapse killedBy to one id each —\n * a green board with the redundancy signal quietly dead (the classic trap).\n *\n * `verifyMatrix` runs the full contract and returns the result; `isMatrixComplete`\n * is the side-effect-free gate the report path consults to decide whether the\n * redundancy/subsumption sections are trustworthy. Run the CLI form after any\n * bump of Bun or the plugin:\n *\n * polly mutate verify # uses the existing report\n * polly mutate verify --run # runs stryker first\n */\nimport { loadMutationReport, type MutationReport } from \"./ingest.ts\";\n\nconst DEFAULT_REPORT = \"reports/mutation/mutation.json\";\n\nexport interface MatrixCheck {\n ok: boolean;\n checks: { name: string; ok: boolean; detail: string }[];\n}\n\n/**\n * Side-effect-free gate: is the kill matrix trustworthy for redundancy /\n * subsumption analysis? True only when\n * (a) some killed mutant has >1 killer — proof the no-bail patched runner\n * recorded EVERY killer, not just the first (verifyMatrix check #4), and\n * (b) coverage was collected — not every mutant is NoCoverage, which would\n * mean the coverage dump broke (verifyMatrix check #5).\n * Without both, REDUNDANCY/SUBSUMED would be computed off a partial matrix and\n * lie, so the report path falls back to score + gaps + theatre only.\n */\nexport function isMatrixComplete(report: MutationReport): boolean {\n const mutants = Object.values(report.files).flatMap((f) => f.mutants);\n if (mutants.length === 0) return false;\n const killed = mutants.filter((m) => m.status === \"Killed\");\n const multiKiller = killed.some((m) => (m.killedBy ?? []).length > 1);\n const noCov = mutants.filter((m) => m.status === \"NoCoverage\").length;\n const coverageCollected = noCov < mutants.length;\n return multiKiller && coverageCollected;\n}\n\n/**\n * Run the full kill-matrix contract (all five checks), optionally running a\n * fresh Stryker pass first. Returns the result rather than exiting, so callers\n * decide what to do with it; the `import.meta.main` wrapper prints and sets the\n * exit code.\n */\nexport async function verifyMatrix(\n opts: { reportPath?: string; run?: boolean; strykerConfig?: string } = {}\n): Promise<MatrixCheck> {\n const reportPath = opts.reportPath ?? DEFAULT_REPORT;\n\n if (opts.run) {\n console.log(\"Running mutation pass (this can take many minutes for a large mutate set)...\");\n const cmd = [\n \"bunx\",\n \"stryker\",\n \"run\",\n ...(opts.strykerConfig ? [\"--configFile\", opts.strykerConfig] : []),\n ];\n const proc = Bun.spawn(cmd, { stdout: \"inherit\", stderr: \"inherit\" });\n const code = await proc.exited;\n if (code !== 0) {\n return { ok: false, checks: [{ name: \"stryker run\", ok: false, detail: `exited ${code}` }] };\n }\n }\n\n if (!(await Bun.file(reportPath).exists())) {\n return {\n ok: false,\n checks: [\n {\n name: \"report exists\",\n ok: false,\n detail: `no report at ${reportPath}. Run with --run, or 'bun run mutation' first.`,\n },\n ],\n };\n }\n\n const report = await loadMutationReport(reportPath);\n const checks: { name: string; ok: boolean; detail: string }[] = [];\n const add = (name: string, ok: boolean, detail: string) => checks.push({ name, ok, detail });\n\n // 1. schema present\n add(\"schema version present\", !!report.schemaVersion, `schemaVersion=${report.schemaVersion}`);\n\n // 2. testFiles keyed by real paths, not the \"\" bucket (file-level identity intact)\n const tfKeys = Object.keys(report.testFiles ?? {});\n const realPaths = tfKeys.filter((k) => k && k !== \"(unknown)\");\n add(\n \"testFiles keyed by real paths\",\n realPaths.length > 0 && !tfKeys.includes(\"\"),\n `${realPaths.length} file(s): ${realPaths.slice(0, 2).join(\", \")}${realPaths.length > 2 ? \"…\" : \"\"}`\n );\n\n // 3. test ids resolve\n const testIds = new Set(\n Object.values(report.testFiles ?? {}).flatMap((tf) => tf.tests.map((t) => t.id))\n );\n const mutants = Object.values(report.files).flatMap((f) => f.mutants);\n const killed = mutants.filter((m) => m.status === \"Killed\");\n const danglingKb = killed.filter((m) => (m.killedBy ?? []).some((id) => !testIds.has(id)));\n add(\n \"every killedBy id resolves to a test\",\n danglingKb.length === 0,\n `${danglingKb.length} dangling`\n );\n\n // 4. THE contract: a complete matrix means some killed mutant has >1 killer.\n // If bail silently re-engaged, every killedBy would have length 1.\n const withKb = killed.filter((m) => (m.killedBy ?? []).length > 0);\n const multi = killed.filter((m) => (m.killedBy ?? []).length > 1);\n add(\n \"killed mutants carry killedBy\",\n killed.length > 0 && withKb.length === killed.length,\n `${withKb.length}/${killed.length}`\n );\n add(\n \"matrix is complete (no-bail): >1 killer exists\",\n multi.length > 0,\n `${multi.length} mutant(s) killed by >1 test — collapses to 0 if bail re-engages`\n );\n\n // 5. coverage extraction works: if the afterAll dump fails, the coverage map is\n // empty and Stryker marks EVERY mutant NoCoverage (theatre/gap split dies).\n const noCov = mutants.filter((m) => m.status === \"NoCoverage\").length;\n add(\n \"coverage collected (not all NoCoverage)\",\n noCov < mutants.length,\n `${noCov}/${mutants.length} NoCoverage — all-NoCoverage means the coverage dump broke`\n );\n\n return { ok: checks.every((c) => c.ok), checks };\n}\n\nif (import.meta.main) {\n const result = await verifyMatrix({ run: process.argv.includes(\"--run\") });\n console.log(\"\\nKill-matrix contract:\");\n for (const c of result.checks) {\n console.log(` ${c.ok ? \"✓\" : \"✗\"} ${c.name} (${c.detail})`);\n }\n if (!result.ok) {\n console.log(\n \"\\n✗ Contract broken. The pinned pair has drifted — re-check Bun version and that the patch applies (bun install).\"\n );\n process.exit(1);\n }\n console.log(\"\\n✓ Kill-matrix contract holds.\");\n}\n",
|
|
14
|
-
"#!/usr/bin/env bun\n/**\n * `polly mutate` — run Stryker mutation testing and surface useless/redundant\n * tests (the inverse reading of the kill matrix). Thin dispatcher over the\n * reusable functions in this directory.\n */\nimport { parseMutateArgs } from \"./args.ts\";\nimport { resolveMutateConfig } from \"./config.ts\";\nimport { decide, status } from \"./decisions.ts\";\nimport { buildDb, loadMutationReport } from \"./ingest.ts\";\nimport { initConfig } from \"./init.ts\";\nimport { presetAdvisory, reportFromFile, runStryker } from \"./run.ts\";\nimport { verifyMatrix } from \"./verify-matrix.ts\";\n\nconst HELP = `polly mutate — mutation testing + useless-test detection\n\nUsage:\n polly mutate init [--force] Scaffold a stryker.conf.json for this project\n polly mutate [run] Run Stryker, then print the useless-test report\n polly mutate report Print the report from an existing mutation.json\n polly mutate decisions Review verdicts: needs-review / stale / settled\n polly mutate decisions decide <file> <keep|prune|rewrite|investigate> \"<rationale>\"\n polly mutate verify [--run] Assert the kill-matrix contract (exit 1 on drift)\n polly mutate help Show this help\n\nFlags:\n --config <path> Stryker config (default: auto-discovered)\n --report <path> mutation report JSON (default: reports/mutation/mutation.json)\n --decisions <path> verdict log (default: .polly/test-debt/decisions.jsonl)\n --db <path> intermediate SQLite (default: in-memory)\n --no-report 'run' only — skip the analysis\n -h, --help\n\nThe redundancy/subsumption sections need a COMPLETE kill matrix (the no-bail\npatched Bun runner). Without it the report degrades to score + gaps + theatre;\n'polly mutate verify' diagnoses the matrix.`;\n\nasync function openDb(\n reportPath: string,\n dbPath: string\n): Promise<ReturnType<typeof buildDb> | null> {\n if (!(await Bun.file(reportPath).exists())) {\n console.log(\n `no mutation report at ${reportPath}. Run 'polly mutate run' first, or pass --report <path>.`\n );\n return null;\n }\n return buildDb(await loadMutationReport(reportPath), dbPath);\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: a flat verb dispatcher — the branches are the command surface.\nasync function main(): Promise<number> {\n const args = parseMutateArgs(process.argv.slice(2));\n if (args.help) {\n console.log(HELP);\n return 0;\n }\n\n const cwd = process.cwd();\n const cfg = await resolveMutateConfig(cwd, args);\n\n switch (args.verb) {\n case \"init\": {\n const result = await initConfig(cwd, { force: args.force });\n if (!result.created) {\n console.log(\n `stryker.conf.json already exists at ${result.configPath}. Re-run with --force to overwrite.`\n );\n return 1;\n }\n console.log(`✓ wrote ${result.configPath}`);\n console.log(` plugin: ${result.pluginRef}`);\n console.log(` mutate: ${result.mutate.join(\", \")}`);\n console.log(` testFiles: ${result.testGlob}`);\n for (const w of result.warnings) console.log(` ⚠ ${w}`);\n console.log(\"\\nNext: polly mutate run\");\n return 0;\n }\n\n case \"run\": {\n const tip = await presetAdvisory(cfg);\n if (tip) console.log(`${tip}\\n`);\n const code = await runStryker(cfg);\n if (code !== 0) return code;\n if (args.noReport) return 0;\n console.log(`\\n${await reportFromFile(cfg)}`);\n return 0;\n }\n\n case \"report\": {\n console.log(await reportFromFile(cfg));\n return 0;\n }\n\n case \"decisions\": {\n const db = await openDb(cfg.reportPath, cfg.dbPath);\n if (!db) return 1;\n try {\n if (args.rest[0] === \"decide\") {\n const [, file, verdict, ...r] = args.rest;\n if (!file || !verdict) {\n console.log(\n 'usage: polly mutate decisions decide <file> <keep|prune|rewrite|investigate> \"<rationale>\"'\n );\n return 1;\n }\n await decide(file, verdict, r.join(\" \").replace(/^\"|\"$/g, \"\"), db, cfg.decisionsPath);\n } else {\n console.log(await status(db, cfg.decisionsPath));\n }\n } finally {\n db.close();\n }\n return 0;\n }\n\n case \"verify\": {\n const result = await verifyMatrix({\n reportPath: cfg.reportPath,\n run: args.run,\n strykerConfig: cfg.strykerConfigPath ?? undefined,\n });\n console.log(\"\\nKill-matrix contract:\");\n for (const c of result.checks) console.log(` ${c.ok ? \"✓\" : \"✗\"} ${c.name} (${c.detail})`);\n if (!result.ok) {\n console.log(\n \"\\n✗ Contract broken. The pinned pair has drifted — re-check Bun version and that the patch applies (bun install).\"\n );\n return 1;\n }\n console.log(\"\\n✓ Kill-matrix contract holds.\");\n return 0;\n }\n\n default:\n console.log(`Unknown subcommand: ${args.verb}\\n`);\n console.log(HELP);\n return 1;\n }\n}\n\nmain()\n .then((code) => process.exit(code))\n .catch((err) => {\n console.log(`\\n❌ ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n });\n"
|
|
14
|
+
"#!/usr/bin/env bun\n/**\n * `polly mutate` — run Stryker mutation testing and surface useless/redundant\n * tests (the inverse reading of the kill matrix). Thin dispatcher over the\n * reusable functions in this directory.\n */\nimport { parseMutateArgs } from \"./args.ts\";\nimport { resolveMutateConfig } from \"./config.ts\";\nimport { decide, status } from \"./decisions.ts\";\nimport { buildDb, loadMutationReport } from \"./ingest.ts\";\nimport { initConfig } from \"./init.ts\";\nimport { presetAdvisory, reportFromFile, runStryker } from \"./run.ts\";\nimport { verifyMatrix } from \"./verify-matrix.ts\";\n\nconst HELP = `polly mutate — mutation testing + useless-test detection\n\nMutation testing breaks your code one edit at a time and checks whether a test\nfails; a surviving mutant is a line no test pins down — a truer signal than line\ncoverage, which only proves a line ran. Read the same kill matrix the other way\nand it also finds dead weight: redundant tests (every kill caught elsewhere) and\ntheatre (code a test ran but never actually checked). How the matrix is built:\ntools/mutate/README.md.\n\nUsage:\n polly mutate init [--force] Scaffold a stryker.conf.json for this project\n polly mutate [run] Run Stryker, then print the useless-test report\n polly mutate report Print the report from an existing mutation.json\n polly mutate decisions Review verdicts: needs-review / stale / settled\n polly mutate decisions decide <file> <keep|prune|rewrite|investigate> \"<rationale>\"\n polly mutate verify [--run] Assert the kill-matrix contract (exit 1 on drift)\n polly mutate help Show this help\n\nFlags:\n --config <path> Stryker config (default: auto-discovered)\n --report <path> mutation report JSON (default: reports/mutation/mutation.json)\n --decisions <path> verdict log (default: .polly/test-debt/decisions.jsonl)\n --db <path> intermediate SQLite (default: in-memory)\n --no-report 'run' only — skip the analysis\n -h, --help\n\nThe redundancy/subsumption sections need a COMPLETE kill matrix (the no-bail\npatched Bun runner). Without it the report degrades to score + gaps + theatre;\n'polly mutate verify' diagnoses the matrix.`;\n\nasync function openDb(\n reportPath: string,\n dbPath: string\n): Promise<ReturnType<typeof buildDb> | null> {\n if (!(await Bun.file(reportPath).exists())) {\n console.log(\n `no mutation report at ${reportPath}. Run 'polly mutate run' first, or pass --report <path>.`\n );\n return null;\n }\n return buildDb(await loadMutationReport(reportPath), dbPath);\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: a flat verb dispatcher — the branches are the command surface.\nasync function main(): Promise<number> {\n const args = parseMutateArgs(process.argv.slice(2));\n if (args.help) {\n console.log(HELP);\n return 0;\n }\n\n const cwd = process.cwd();\n const cfg = await resolveMutateConfig(cwd, args);\n\n switch (args.verb) {\n case \"init\": {\n const result = await initConfig(cwd, { force: args.force });\n if (!result.created) {\n console.log(\n `stryker.conf.json already exists at ${result.configPath}. Re-run with --force to overwrite.`\n );\n return 1;\n }\n console.log(`✓ wrote ${result.configPath}`);\n console.log(` plugin: ${result.pluginRef}`);\n console.log(` mutate: ${result.mutate.join(\", \")}`);\n console.log(` testFiles: ${result.testGlob}`);\n for (const w of result.warnings) console.log(` ⚠ ${w}`);\n console.log(\"\\nNext: polly mutate run\");\n return 0;\n }\n\n case \"run\": {\n const tip = await presetAdvisory(cfg);\n if (tip) console.log(`${tip}\\n`);\n const code = await runStryker(cfg);\n if (code !== 0) return code;\n if (args.noReport) return 0;\n console.log(`\\n${await reportFromFile(cfg)}`);\n return 0;\n }\n\n case \"report\": {\n console.log(await reportFromFile(cfg));\n return 0;\n }\n\n case \"decisions\": {\n const db = await openDb(cfg.reportPath, cfg.dbPath);\n if (!db) return 1;\n try {\n if (args.rest[0] === \"decide\") {\n const [, file, verdict, ...r] = args.rest;\n if (!file || !verdict) {\n console.log(\n 'usage: polly mutate decisions decide <file> <keep|prune|rewrite|investigate> \"<rationale>\"'\n );\n return 1;\n }\n await decide(file, verdict, r.join(\" \").replace(/^\"|\"$/g, \"\"), db, cfg.decisionsPath);\n } else {\n console.log(await status(db, cfg.decisionsPath));\n }\n } finally {\n db.close();\n }\n return 0;\n }\n\n case \"verify\": {\n const result = await verifyMatrix({\n reportPath: cfg.reportPath,\n run: args.run,\n strykerConfig: cfg.strykerConfigPath ?? undefined,\n });\n console.log(\"\\nKill-matrix contract:\");\n for (const c of result.checks) console.log(` ${c.ok ? \"✓\" : \"✗\"} ${c.name} (${c.detail})`);\n if (!result.ok) {\n console.log(\n \"\\n✗ Contract broken. The pinned pair has drifted — re-check Bun version and that the patch applies (bun install).\"\n );\n return 1;\n }\n console.log(\"\\n✓ Kill-matrix contract holds.\");\n return 0;\n }\n\n default:\n console.log(`Unknown subcommand: ${args.verb}\\n`);\n console.log(HELP);\n return 1;\n }\n}\n\nmain()\n .then((code) => process.exit(code))\n .catch((err) => {\n console.log(`\\n❌ ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n });\n"
|
|
15
15
|
],
|
|
16
|
-
"mappings": "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",
|
|
17
|
-
"debugId": "
|
|
16
|
+
"mappings": "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",
|
|
17
|
+
"debugId": "63F5B93A394460DD64756E2164756E21",
|
|
18
18
|
"names": []
|
|
19
19
|
}
|