mjolnir-qa 0.5.31 → 0.5.32

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/CHANGELOG.md CHANGED
@@ -9,6 +9,12 @@ Rule behavior changes (new rules, FP-rate changes against the corpus,
9
9
  severity changes) are first-class entries here — rule IDs are immutable
10
10
  once shipped, so this file is the record of what changed between versions.
11
11
 
12
+ ## [0.5.32] — 2026-09-08
13
+
14
+ ### Changes since 0.5.31
15
+
16
+ - P0: repo state + truth drift — single measured count with drift lock (#62)
17
+
12
18
  ## [0.5.31] — 2026-09-08
13
19
 
14
20
  ### Changes since 0.5.30
package/README.md CHANGED
@@ -241,7 +241,7 @@ globally with `npm i -g mjolnir-qa` if you prefer it over `npx`.
241
241
 
242
242
  ## What Mjölnir finds
243
243
 
244
- **99 rules** in four families — **test hygiene**, **test quality**,
244
+ **<!-- census:total-rules -->99 rules<!-- /census:total-rules -->** in four families — **test hygiene**, **test quality**,
245
245
  **Playwright**, **CI integrity** — over TypeScript/JavaScript, Python,
246
246
  Java, C# and GitHub Actions YAML, covering Playwright in all four bindings
247
247
  plus pytest, JUnit, TestNG, NUnit, xUnit, MSTest, Jest, Vitest and Mocha,
@@ -433,9 +433,9 @@ Rung by rung: [docs/TERMINOLOGY.md](docs/TERMINOLOGY.md).
433
433
 
434
434
  ### How much of this is measured
435
435
 
436
- **78 of 99 rules carry a false-positive rate measured against real OSS code**
436
+ **<!-- census:measured-of-total -->78 of 99<!-- /census:measured-of-total --> rules carry a false-positive rate measured against real OSS code**
437
437
  (≥ 10 hand-classified findings each — [docs/FP-AUDIT.md](docs/FP-AUDIT.md)).
438
- The other 21 ship on the author's estimate and say so, per rule, in
438
+ The other <!-- census:unmeasured -->21<!-- /census:unmeasured --> ship on the author's estimate and say so, per rule, in
439
439
  `mjolnir explain`; `mjolnir rules --unmeasured` lists them, and every scan
440
440
  footer reports how many of the rules that actually _fired_ are measured.
441
441
 
@@ -658,7 +658,7 @@ artifacts.
658
658
  product does what the requirement asked for.
659
659
  - **A 100 is not proof of a good suite.** Whether your suite covers your
660
660
  actual risk is a different question, and this tool does not answer it.
661
- - **21 of 99 rules ship on an estimate**, not a measured rate — disclosed
661
+ - **<!-- census:unmeasured-of-total -->21 of 99<!-- /census:unmeasured-of-total --> rules ship on an estimate**, not a measured rate — disclosed
662
662
  per rule, not buried here.
663
663
  - **E1 is not E2.** Heuristic findings are worth reading, not worth
664
664
  applying blindly.
package/dist/cli.d.mts CHANGED
@@ -728,7 +728,7 @@ declare const runScan: typeof runScan$1, buildUniversalRules: typeof buildUniver
728
728
  * `scripts/sync-sarif-version.cjs` on release and guarded by
729
729
  * `tests/version-consistency.spec.ts` locally.
730
730
  */
731
- declare const CLI_VERSION = "0.5.31";
731
+ declare const CLI_VERSION = "0.5.32";
732
732
  /** A usage-error detail: the offending token, when one exists. */
733
733
  interface UsageErrorDetail {
734
734
  /** The unknown flag or rejected value (e.g. `--nope`, `loud`). */
package/dist/cli.mjs CHANGED
@@ -13290,7 +13290,7 @@ function renderSarif(result, repoRootUri) {
13290
13290
  tool: { driver: {
13291
13291
  name: "Mjölnir",
13292
13292
  informationUri: "https://github.com/Sergey-Bar/Mjolnir",
13293
- version: "0.5.31",
13293
+ version: "0.5.32",
13294
13294
  rules: [...rules.values()].map((r) => {
13295
13295
  const meta = RULES.find((x) => x.id === r.id);
13296
13296
  return {
@@ -18662,7 +18662,7 @@ const { runScan, buildUniversalRules, fallbackWorkspace, pathMatchesGlob, isVali
18662
18662
  * `scripts/sync-sarif-version.cjs` on release and guarded by
18663
18663
  * `tests/version-consistency.spec.ts` locally.
18664
18664
  */
18665
- const CLI_VERSION = "0.5.31";
18665
+ const CLI_VERSION = "0.5.32";
18666
18666
  function parseArgs(argv, onError) {
18667
18667
  const args = {
18668
18668
  target: ".",
@@ -13289,7 +13289,7 @@ function renderSarif(result, repoRootUri) {
13289
13289
  tool: { driver: {
13290
13290
  name: "Mjölnir",
13291
13291
  informationUri: "https://github.com/Sergey-Bar/Mjolnir",
13292
- version: "0.5.31",
13292
+ version: "0.5.32",
13293
13293
  rules: [...rules.values()].map((r) => {
13294
13294
  const meta = RULES.find((x) => x.id === r.id);
13295
13295
  return {
@@ -18298,7 +18298,7 @@ const { runScan, buildUniversalRules, fallbackWorkspace, pathMatchesGlob, isVali
18298
18298
  * `scripts/sync-sarif-version.cjs` on release and guarded by
18299
18299
  * `tests/version-consistency.spec.ts` locally.
18300
18300
  */
18301
- const CLI_VERSION = "0.5.31";
18301
+ const CLI_VERSION = "0.5.32";
18302
18302
  function parseArgs(argv, onError) {
18303
18303
  const args = {
18304
18304
  target: ".",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mjolnir-qa",
3
- "version": "0.5.31",
3
+ "version": "0.5.32",
4
4
  "description": "Mjölnir — the Verification Trust Engine for QA. Audits test suites and CI pipelines, reports a worthiness score and prioritized findings.",
5
5
  "type": "module",
6
6
  "engines": {
@@ -36,6 +36,7 @@
36
36
  "corpus:sample": "tsx scripts/corpus-sample.ts",
37
37
  "fp-audit:generate": "tsx scripts/generate-fp-audit-table.ts",
38
38
  "docs:rules": "tsx scripts/generate-rule-docs.ts",
39
+ "docs:counts": "tsx scripts/generate-counts.ts",
39
40
  "docs:capability": "tsx scripts/generate-capability-matrix.ts",
40
41
  "docs:machine-contract": "tsx scripts/generate-machine-contract-doc.ts",
41
42
  "docs:hero": "tsx scripts/generate-readme-hero.ts",