mjolnir-qa 0.5.2 → 0.5.4

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,196 @@ 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.4] — 2026-09-06
13
+
14
+ ### Agent Handoff + Minimized Reporting (plan 1788599400000)
15
+
16
+ ### Added
17
+
18
+ - **`mjolnir why <file>:<line>`** — occurrence-level evidence query
19
+ (informational, NOT a gate): exact file+line match, severity icon,
20
+ message/why/fix, evidence level, trust level, measured FP rate
21
+ (or the honest "ships on assumption"), runtime corroboration when
22
+ present, and the suppression contract (reason required, 90-day
23
+ expiry). Saved-report mode (`--json <mjolnir.json>`) is
24
+ authoritative; live scan runs otherwise. Exit 0 match / 1 no match.
25
+ - **`mjolnir handoff [mjolnir.json]`** — the deterministic fix-handoff
26
+ artifact: per-rule remediation sections (what is wrong / why
27
+ Mjölnir believes it / evidence boundary by level / occurrences
28
+ capped at 25 / fix / constraints / occurrences list), a per-rule
29
+ fenced copy block and a one-shot handoff prompt, and the formal
30
+ verification contract (TARGET_RESOLVED / TARGET_REMAINS /
31
+ NEW_FINDINGS_INTRODUCED / VERIFICATION_NOT_RUN, correlated by the
32
+ fingerprint ruleId+file+message; the standing caveat that a clean
33
+ `--scope changed` run verifies the changed surface only). Generated
34
+ solely from Mjölnir's own rule metadata — offline, deterministic,
35
+ escapeMarkdown'd. Zero findings → exit 0, non-actionable clean
36
+ artifact with no prompt. `--category`/`--rules` are presentation
37
+ filters.
38
+ - **`mjolnir install`** — installs the agent instruction surfaces
39
+ (`.claude/commands/mjolnir.md`, `.kilo/command/mjolnir.md`,
40
+ `.cursor/rules/mjolnir.mdc`, marker-appended `AGENTS.md`): the
41
+ version-pinned trust loop brief (scan `--scope changed` before
42
+ finishing, never suppress to green, report files changed and checks
43
+ not run). `--staged-hook` adds a NON-BLOCKING pre-commit hook
44
+ (`mjolnir --staged --blocking warning`, reusing `.husky`/
45
+ `core.hooksPath` when present). Marker-based idempotency;
46
+ `--dry-run` writes nothing; refusal (exit 10) before overwriting
47
+ any non-Mjölnir file; `--force` overwrites only Mjölnir-marked
48
+ files; never @latest.
49
+ - **`--score`** — prints only the numeric score (`unknown` when no
50
+ tests exist — never a fake 0); pure rendering flag, exit code
51
+ unchanged; stderr note when --json was also requested.
52
+ - **`--category <cat>`** (repeatable) — presentation filter on the
53
+ terminal findings display (and handoff/why): NEVER filters the
54
+ scan, the JSON/SARIF output, or the score; the terminal prints
55
+ `filtered view: N of M findings shown; score reflects the full
56
+ scan`. Unknown categories are a usage error (exit 10).
57
+ - **`--staged`** — scan-surface restriction: intersects discovered
58
+ test files with the git staged list; score reflects the staged
59
+ surface and is labeled as such (`staged surface: N file(s)`); not a
60
+ git repo → honest degraded fallback; empty staged set → exit 0.
61
+ - **`--blocking error|warning|none`** — exit-status override only:
62
+ maps onto the existing gate model (none→advisory, error→errors
63
+ block, warning→errors+warnings block). Detection and rendering are
64
+ identical under all three values; E0 findings never block; partial
65
+ scans stay exit 2.
66
+ - **`fixGroupId`** (additive JSON field): the stable semantic identity
67
+ of a remediation group — intentionally distinct from `ruleId`
68
+ (which identifies the detector). Current strategy: one rule = one
69
+ group, so fixGroupId equals ruleId today; consumers must not rely
70
+ on that permanently.
71
+
72
+ ### Changed
73
+
74
+ - help registry gained `why`, `handoff`, `install` and the new flags;
75
+ site/reference/cli.md documents the handoff trust model.
76
+
77
+ ## [0.5.3] — 2026-09-05
78
+
79
+ ### Terminal + CI UX Overhaul (plan 1788579907109)
80
+
81
+ ### Added
82
+
83
+ - **Design-system core** (`src/reporter/ui.ts`): one canonical visual
84
+ language — `▚ TITLE` section headers (ASCII fallback `= TITLE`),
85
+ `✗/⚠/ℹ` severity icons (ASCII `X/!/i`), rounded panels, 58-glyph
86
+ dividers, and a dim `$ command` next-step affordance. All
87
+ subcommand renderers (`baseline`, `debt`, `init`, `doctor`, `fix`,
88
+ `impact`, `stats`, `handover`, `triage`, `pw-report`, `explain`,
89
+ `rules-catalog`, `create-rule`, `suppressions`, forensics,
90
+ selector-health) now render through it; per-renderer `▚▞`/`🔨`/`╔══╗`
91
+ headers and `╞══╡` tables are gone. `FORCE_COLOR` is honored
92
+ (chalk convention: `0`/`false`/empty = plain, other values force
93
+ color even piped, winning over `NO_COLOR`).
94
+ - **`mjolnir help` + per-command help** (`src/commands/help.ts`): the
95
+ grouped overview (Scan · CI & PRs · Forensics · Maintenance · Meta,
96
+ copy-pasteable starts, exit-code table, docs link) and
97
+ `mjolnir help <verb>` / `mjolnir <verb> --help` pages for every
98
+ registered verb. **Behavior call-out:** `help` now dispatches as a
99
+ verb BEFORE the scan fall-through — bare `mjolnir help` no longer
100
+ scans the CWD (it never was a documented behavior); a folder named
101
+ `help/` is still scanned via `mjolnir ./help`. `--help`/`-h` on the
102
+ root scan still print usage and exit 10 (frozen contract).
103
+ - **Friendly usage errors** (exit 10 preserved): unknown flags name
104
+ themselves on stderr, suggest up to three nearest real flags
105
+ (hand-rolled Levenshtein ≤ 2 — no new dependencies), and point at
106
+ `mjolnir --help`. The exit-20 crash path says "this is a bug in
107
+ Mjölnir, not your repo", carries the message, and prints the stack
108
+ trace only under `--debug`.
109
+ - **Live scan progress** (`src/reporter/progress.ts`): an event-driven
110
+ stderr line (`Discovering files… → Parsing frameworks… → Running
111
+ rules… → Scoring…`) fed by the new additive `ScanHooks.onProgress`.
112
+ Render-on-event only — no timers, deterministic under a fake stream.
113
+ Auto-off when stderr is not a TTY, in machine formats, under
114
+ `GITHUB_ACTIONS=true`/`CI=true`, or with the new additive
115
+ `--no-progress` flag. stdout purity and `--json` byte-identity are
116
+ unchanged.
117
+ - **`mjolnir summary [mjolnir.json]`** (`src/commands/summary.ts` +
118
+ `src/reporter/github.ts`): reads a saved `--json` report and emits
119
+ GitHub annotations (only when `GITHUB_ACTIONS=true`, per-finding
120
+ `::error|warning|notice` with spec-exact `%25/%0D/%0A/%3A/%2C`
121
+ escaping, messages truncated at ~250 chars) and a step-summary
122
+ markdown document (score + band, text score bar, dimensions table,
123
+ collapsible per-severity `<details>` with `Fix:` lines, honesty
124
+ notice for `partial`/`score:null` reports). `--stdout` forces
125
+ stdout; `--path-prefix <dir>` re-scopes paths for subdirectory
126
+ scans. Exit `0` on success — the gate step decides; `10` missing
127
+ file; `2` invalid JSON.
128
+ - **CI template v2** (`ci install`): the inline `SUMMARY_SCRIPT` step
129
+ is replaced by `mjolnir summary mjolnir.json`; the gate script is
130
+ unchanged. v1-generated workflows are still recognized on
131
+ overwrite-refusal, so `ci install` upgrades stay frictionless. The
132
+ dogfooded `.github/workflows/mjolnir.yml` and `ci.yml` self-scan use
133
+ the same command.
134
+ - **PR comment redesign** (`pr-comment`): header
135
+ `### 🔨 Mjölnir — Verification Trust` with score + band + verdict
136
+ headline, dimensions mini-table, findings grouped in collapsible
137
+ `<details>` (errors open, warnings/infos collapsed) with explicit
138
+ `Fix:` lines and evidence tags, a "what to run next" footer with the
139
+ pinned `npx mjolnir-qa@<ver>` commands, and the
140
+ `✨ N pre-existing findings fixed in this PR` callout. Same
141
+ idempotency marker; same markdown escaping.
142
+ - **Site**: new `site/reference/cli.md` (help, usage errors, summary,
143
+ progress, `FORCE_COLOR`) in the Reference sidebar.
144
+
145
+ ### Changed
146
+
147
+ - README output examples and all 22 translations: the `▚▞` header
148
+ glyph in rendered-output samples is now `▚` (the design-system
149
+ token). English README is canonical; translation sync dates unchanged
150
+ (glyph-only diff, advisory parity script).
151
+ - Regenerated committed assets: `assets/readme/terminal-hero.svg`,
152
+ `demo.svg` (`docs:hero`, `docs:demo`), and the forensics/selector
153
+ samples (`docs:forensics-samples`).
154
+
155
+ ### Removed
156
+
157
+ - The hand-rolled `╔══╗`/`▚▞`/`🔨` per-command header styles and the
158
+ `╞══╡` ASCII tables they wrapped (replaced by the shared `ui.ts`
159
+ primitives; no CLI surface change).
160
+
161
+ ### Fixed — review hardening (post-implementation audit)
162
+
163
+ - **`ci install` v1 recognition actually works now:** the v1 inline
164
+ summary script is matched in its INDENTED form (`indentBlock(…, 10)`)
165
+ — the raw unindented needle never appeared in a real v1 workflow, so
166
+ the first cut of the recognition would have refused every genuine v1
167
+ file despite the "frictionless upgrade" promise. Spec reconstructs
168
+ the embedded form from the real v1 output and pins that
169
+ hand-customized files are still refused.
170
+ - **Advisory template stays green on a crashed scan:** the generated
171
+ "Annotations + Job Summary" step is now `continue-on-error: true` —
172
+ a crashed scan leaves `mjolnir.json` empty and `summary` exits 2,
173
+ which must not turn the advisory job red (v1's inline script never
174
+ did). The gate step still owns the verdict.
175
+ - **Step summary escapes hostile finding metadata:** `ruleId`, `file`,
176
+ `message` and `fix` are markdown-escaped before `$GITHUB_STEP_SUMMARY`
177
+ (GitHub renders HTML there) — a hostile report can no longer break
178
+ out of the `<details>` structure. Annotations additionally sanitize
179
+ `file`/`ruleId`/`message` through the same `sanitizeData` layer the
180
+ terminal uses (OSC/C0 bytes), closing the gap its own docs assumed.
181
+ - **Progress line sanitizes the detail path** through `sanitizeData` —
182
+ a filename with ANSI/OSC bytes can no longer hijack the terminal.
183
+ - **PR comment overflow counts are honest:** the "...and N more
184
+ overall" line now subtracts the actually rendered count
185
+ (Σ min(group, 25)) instead of a flat 25 — no more phantom hidden
186
+ findings, and per-group overflow lines name their group
187
+ ("...and 5 more errors").
188
+ - **Usage-error contract completed:** the 8 scan-backed subcommands
189
+ (badge, debt, fix, impact, baseline, diff, pr-comment, handover) no
190
+ longer print the full usage wall after the friendly stderr error;
191
+ `mjolnir summary` rejects unknown flags with the shared
192
+ did-you-mean machinery (exit 10) instead of silently swallowing a
193
+ typo'd `--stdout`; `mjolnir ci --help` / `mjolnir help ci install` /
194
+ `mjolnir ci install --help` now reach the `ci install` help page
195
+ (two-word verb lookup).
196
+ - **Dead surface removed:** `theme.severityTag` (byte-identical twin of
197
+ `ui.severityIcon`, test-only) deleted with the two plugin specs
198
+ re-pointed; the new-module exports nothing without a caller
199
+ (`severityGlyph`, `wrapFor`, `centerIn` dropped; `keyValue` and
200
+ `bullet` remain — the plan's primitive list mandates them).
201
+
12
202
  ## [0.5.2] — 2026-09-05
13
203
 
14
204
  ### npm 12 pack-shape repair of the release pipeline
package/README.ar.md CHANGED
@@ -60,7 +60,7 @@ npx mjolnir-qa@latest
60
60
  شغّل `mjolnir explain QA-CI-001` على الاكتشاف الأول أعلاه وستحصل على:
61
61
 
62
62
  ```text
63
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
63
+ QA-CI-001 — continue-on-error masks a failing verification gate
64
64
 
65
65
  Severity: error
66
66
  Confidence: high
@@ -368,7 +368,7 @@ E2 إثبات بنيوي؛ واكتشافات E1 تحذيرات موزونة ا
368
368
  المقياس الرئيسي لأطقم Playwright — ما مدى صمود محدِّداتك:
369
369
 
370
370
  ```text
371
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
371
+ SELECTOR HEALTH — e2e/checkout.spec.ts
372
372
 
373
373
  [█████████████████░░░] 83 / 100
374
374
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -389,7 +389,7 @@ mjolnir forensics ./test-results/
389
389
  ```
390
390
 
391
391
  ```text
392
- ▚▞ FLAKINESS LEADERBOARD
392
+ FLAKINESS LEADERBOARD
393
393
 
394
394
  3 tests · 1 failed · 1 flaky · 1 retried
395
395
 
package/README.bn.md CHANGED
@@ -62,7 +62,7 @@ npx mjolnir-qa@latest
62
62
  পাবেন:
63
63
 
64
64
  ```text
65
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
65
+ QA-CI-001 — continue-on-error masks a failing verification gate
66
66
 
67
67
  Severity: error
68
68
  Confidence: high
@@ -373,7 +373,7 @@ finding কাঠামোগত প্রমাণ; E1 finding সঠিকভ
373
373
  Playwright সুইটের হেডলাইন মেট্রিক — আপনার locator কতটা টেকসই:
374
374
 
375
375
  ```text
376
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
376
+ SELECTOR HEALTH — e2e/checkout.spec.ts
377
377
 
378
378
  [█████████████████░░░] 83 / 100
379
379
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -395,7 +395,7 @@ mjolnir forensics ./test-results/
395
395
  ```
396
396
 
397
397
  ```text
398
- ▚▞ FLAKINESS LEADERBOARD
398
+ FLAKINESS LEADERBOARD
399
399
 
400
400
  3 tests · 1 failed · 1 flaky · 1 retried
401
401
 
package/README.br.md CHANGED
@@ -65,7 +65,7 @@ Execute `mjolnir explain QA-CI-001` no primeiro finding acima e você
65
65
  recebe:
66
66
 
67
67
  ```text
68
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
68
+ QA-CI-001 — continue-on-error masks a failing verification gate
69
69
 
70
70
  Severity: error
71
71
  Confidence: high
@@ -383,7 +383,7 @@ A métrica de destaque para suítes Playwright — quão resilientes são os
383
383
  seus locators:
384
384
 
385
385
  ```text
386
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
386
+ SELECTOR HEALTH — e2e/checkout.spec.ts
387
387
 
388
388
  [█████████████████░░░] 83 / 100
389
389
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -406,7 +406,7 @@ mjolnir forensics ./test-results/
406
406
  ```
407
407
 
408
408
  ```text
409
- ▚▞ FLAKINESS LEADERBOARD
409
+ FLAKINESS LEADERBOARD
410
410
 
411
411
  3 tests · 1 failed · 1 flaky · 1 retried
412
412
 
package/README.bs.md CHANGED
@@ -61,7 +61,7 @@ obara CI ako artefakt odskoči od onoga što alat ispisuje.</sub>
61
61
  Pokreni `mjolnir explain QA-CI-001` na prvom nalaženom iznad i dobiješ:
62
62
 
63
63
  ```text
64
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
64
+ QA-CI-001 — continue-on-error masks a failing verification gate
65
65
 
66
66
  Severity: error
67
67
  Confidence: high
@@ -372,7 +372,7 @@ Vodeća metrika za Playwright suiteove — koliko su otporni tvoji
372
372
  lokatori:
373
373
 
374
374
  ```text
375
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
375
+ SELECTOR HEALTH — e2e/checkout.spec.ts
376
376
 
377
377
  [█████████████████░░░] 83 / 100
378
378
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -395,7 +395,7 @@ mjolnir forensics ./test-results/
395
395
  ```
396
396
 
397
397
  ```text
398
- ▚▞ FLAKINESS LEADERBOARD
398
+ FLAKINESS LEADERBOARD
399
399
 
400
400
  3 tests · 1 failed · 1 flaky · 1 retried
401
401
 
package/README.da.md CHANGED
@@ -64,7 +64,7 @@ printer.</sub>
64
64
  Kør `mjolnir explain QA-CI-001` på det første fund ovenfor, og du får:
65
65
 
66
66
  ```text
67
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
67
+ QA-CI-001 — continue-on-error masks a failing verification gate
68
68
 
69
69
  Severity: error
70
70
  Confidence: high
@@ -380,7 +380,7 @@ Et tomt repo scorer `null`, aldrig en falsk 100 — se
380
380
  Hovedmetrikken for Playwright-suiter — hvor robuste dine locators er:
381
381
 
382
382
  ```text
383
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
383
+ SELECTOR HEALTH — e2e/checkout.spec.ts
384
384
 
385
385
  [█████████████████░░░] 83 / 100
386
386
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -403,7 +403,7 @@ mjolnir forensics ./test-results/
403
403
  ```
404
404
 
405
405
  ```text
406
- ▚▞ FLAKINESS LEADERBOARD
406
+ FLAKINESS LEADERBOARD
407
407
 
408
408
  3 tests · 1 failed · 1 flaky · 1 retried
409
409
 
package/README.de.md CHANGED
@@ -65,7 +65,7 @@ Führe `mjolnir explain QA-CI-001` für den ersten Befund oben aus, und du
65
65
  erhältst:
66
66
 
67
67
  ```text
68
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
68
+ QA-CI-001 — continue-on-error masks a failing verification gate
69
69
 
70
70
  Severity: error
71
71
  Confidence: high
@@ -385,7 +385,7 @@ Die Headline-Metrik für Playwright-Suiten — wie belastbar deine
385
385
  Locators sind:
386
386
 
387
387
  ```text
388
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
388
+ SELECTOR HEALTH — e2e/checkout.spec.ts
389
389
 
390
390
  [█████████████████░░░] 83 / 100
391
391
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -408,7 +408,7 @@ mjolnir forensics ./test-results/
408
408
  ```
409
409
 
410
410
  ```text
411
- ▚▞ FLAKINESS LEADERBOARD
411
+ FLAKINESS LEADERBOARD
412
412
 
413
413
  3 tests · 1 failed · 1 flaky · 1 retried
414
414
 
package/README.es.md CHANGED
@@ -65,7 +65,7 @@ Ejecuta `mjolnir explain QA-CI-001` sobre el primer hallazgo de arriba
65
65
  y obtienes:
66
66
 
67
67
  ```text
68
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
68
+ QA-CI-001 — continue-on-error masks a failing verification gate
69
69
 
70
70
  Severity: error
71
71
  Confidence: high
@@ -383,7 +383,7 @@ La métrica titular para suites de Playwright — qué tan resilientes son
383
383
  tus locators:
384
384
 
385
385
  ```text
386
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
386
+ SELECTOR HEALTH — e2e/checkout.spec.ts
387
387
 
388
388
  [█████████████████░░░] 83 / 100
389
389
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -406,7 +406,7 @@ mjolnir forensics ./test-results/
406
406
  ```
407
407
 
408
408
  ```text
409
- ▚▞ FLAKINESS LEADERBOARD
409
+ FLAKINESS LEADERBOARD
410
410
 
411
411
  3 tests · 1 failed · 1 flaky · 1 retried
412
412
 
package/README.fr.md CHANGED
@@ -64,7 +64,7 @@ Exécutez `mjolnir explain QA-CI-001` sur le premier constat ci-dessus
64
64
  et vous obtenez :
65
65
 
66
66
  ```text
67
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
67
+ QA-CI-001 — continue-on-error masks a failing verification gate
68
68
 
69
69
  Severity: error
70
70
  Confidence: high
@@ -386,7 +386,7 @@ La métrique vedette pour les suites Playwright — la résilience de vos
386
386
  locators :
387
387
 
388
388
  ```text
389
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
389
+ SELECTOR HEALTH — e2e/checkout.spec.ts
390
390
 
391
391
  [█████████████████░░░] 83 / 100
392
392
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -409,7 +409,7 @@ mjolnir forensics ./test-results/
409
409
  ```
410
410
 
411
411
  ```text
412
- ▚▞ FLAKINESS LEADERBOARD
412
+ FLAKINESS LEADERBOARD
413
413
 
414
414
  3 tests · 1 failed · 1 flaky · 1 retried
415
415
 
package/README.gr.md CHANGED
@@ -64,7 +64,7 @@ npx mjolnir-qa@latest
64
64
  πάρεις:
65
65
 
66
66
  ```text
67
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
67
+ QA-CI-001 — continue-on-error masks a failing verification gate
68
68
 
69
69
  Severity: error
70
70
  Confidence: high
@@ -381,7 +381,7 @@ C# κυκλοφορούν, είναι τεκμηριωμένες και μένο
381
381
  locators σου:
382
382
 
383
383
  ```text
384
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
384
+ SELECTOR HEALTH — e2e/checkout.spec.ts
385
385
 
386
386
  [█████████████████░░░] 83 / 100
387
387
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -404,7 +404,7 @@ mjolnir forensics ./test-results/
404
404
  ```
405
405
 
406
406
  ```text
407
- ▚▞ FLAKINESS LEADERBOARD
407
+ FLAKINESS LEADERBOARD
408
408
 
409
409
  3 tests · 1 failed · 1 flaky · 1 retried
410
410
 
package/README.he.md CHANGED
@@ -60,7 +60,7 @@ npx mjolnir-qa@latest
60
60
  הריצו `mjolnir explain QA-CI-001` על הממצא הראשון למעלה ותקבלו:
61
61
 
62
62
  ```text
63
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
63
+ QA-CI-001 — continue-on-error masks a failing verification gate
64
64
 
65
65
  Severity: error
66
66
  Confidence: high
@@ -366,7 +366,7 @@ repo ריק מקבל `null`, לעולם לא 100 מזויף — ראו
366
366
  המדד הראשי לחבילות Playwright — עד כמה ה‑locators שלך עמידים:
367
367
 
368
368
  ```text
369
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
369
+ SELECTOR HEALTH — e2e/checkout.spec.ts
370
370
 
371
371
  [█████████████████░░░] 83 / 100
372
372
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -388,7 +388,7 @@ mjolnir forensics ./test-results/
388
388
  ```
389
389
 
390
390
  ```text
391
- ▚▞ FLAKINESS LEADERBOARD
391
+ FLAKINESS LEADERBOARD
392
392
 
393
393
  3 tests · 1 failed · 1 flaky · 1 retried
394
394
 
package/README.it.md CHANGED
@@ -64,7 +64,7 @@ Esegui `mjolnir explain QA-CI-001` sul primo riscontro qui sopra e
64
64
  ottieni:
65
65
 
66
66
  ```text
67
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
67
+ QA-CI-001 — continue-on-error masks a failing verification gate
68
68
 
69
69
  Severity: error
70
70
  Confidence: high
@@ -383,7 +383,7 @@ La metrica di testa per le suite Playwright — quanto sono resilienti
383
383
  i tuoi locator:
384
384
 
385
385
  ```text
386
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
386
+ SELECTOR HEALTH — e2e/checkout.spec.ts
387
387
 
388
388
  [█████████████████░░░] 83 / 100
389
389
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -406,7 +406,7 @@ mjolnir forensics ./test-results/
406
406
  ```
407
407
 
408
408
  ```text
409
- ▚▞ FLAKINESS LEADERBOARD
409
+ FLAKINESS LEADERBOARD
410
410
 
411
411
  3 tests · 1 failed · 1 flaky · 1 retried
412
412
 
package/README.ja.md CHANGED
@@ -63,7 +63,7 @@ npx mjolnir-qa@latest
63
63
  上の最初の検出に対して `mjolnir explain QA-CI-001` を実行すると:
64
64
 
65
65
  ```text
66
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
66
+ QA-CI-001 — continue-on-error masks a failing verification gate
67
67
 
68
68
  Severity: error
69
69
  Confidence: high
@@ -376,7 +376,7 @@ C# は出荷済みでドキュメントもあり、実際のコンシューマ
376
376
  Playwright スイート向けの看板指標——あなたのロケータはどれだけ丈夫か:
377
377
 
378
378
  ```text
379
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
379
+ SELECTOR HEALTH — e2e/checkout.spec.ts
380
380
 
381
381
  [█████████████████░░░] 83 / 100
382
382
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -399,7 +399,7 @@ mjolnir forensics ./test-results/
399
399
  ```
400
400
 
401
401
  ```text
402
- ▚▞ FLAKINESS LEADERBOARD
402
+ FLAKINESS LEADERBOARD
403
403
 
404
404
  3 tests · 1 failed · 1 flaky · 1 retried
405
405
 
package/README.ko.md CHANGED
@@ -61,7 +61,7 @@ docs:demo`로 재생성합니다.
61
61
  위의 첫 번째 발견에 대해 `mjolnir explain QA-CI-001`을 실행하면:
62
62
 
63
63
  ```text
64
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
64
+ QA-CI-001 — continue-on-error masks a failing verification gate
65
65
 
66
66
  Severity: error
67
67
  Confidence: high
@@ -372,7 +372,7 @@ TypeScript와 Python이 가장 넓은 측정된 커버리지를 갖습니다. Ja
372
372
  Playwright 스위트의 대표 지표 — 당신의 로케이터는 얼마나 튼튼한가:
373
373
 
374
374
  ```text
375
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
375
+ SELECTOR HEALTH — e2e/checkout.spec.ts
376
376
 
377
377
  [█████████████████░░░] 83 / 100
378
378
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -394,7 +394,7 @@ mjolnir forensics ./test-results/
394
394
  ```
395
395
 
396
396
  ```text
397
- ▚▞ FLAKINESS LEADERBOARD
397
+ FLAKINESS LEADERBOARD
398
398
 
399
399
  3 tests · 1 failed · 1 flaky · 1 retried
400
400
 
package/README.md CHANGED
@@ -53,7 +53,7 @@ fails CI if it drifts from what the tool prints.</sub>
53
53
  Run `mjolnir explain QA-CI-001` on the first finding above and you get:
54
54
 
55
55
  ```text
56
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
56
+ QA-CI-001 — continue-on-error masks a failing verification gate
57
57
 
58
58
  Severity: error
59
59
  Confidence: high
@@ -362,7 +362,7 @@ An empty repo scores `null`, never a fake 100 — see [Trust model](#trust-model
362
362
  The headline metric for Playwright suites — how resilient your locators are:
363
363
 
364
364
  ```text
365
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
365
+ SELECTOR HEALTH — e2e/checkout.spec.ts
366
366
 
367
367
  [█████████████████░░░] 83 / 100
368
368
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -384,7 +384,7 @@ mjolnir forensics ./test-results/
384
384
  ```
385
385
 
386
386
  ```text
387
- ▚▞ FLAKINESS LEADERBOARD
387
+ FLAKINESS LEADERBOARD
388
388
 
389
389
  3 tests · 1 failed · 1 flaky · 1 retried
390
390
 
package/README.no.md CHANGED
@@ -63,7 +63,7 @@ ut.</sub>
63
63
  Kjør `mjolnir explain QA-CI-001` på det første funnet over, og du får:
64
64
 
65
65
  ```text
66
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
66
+ QA-CI-001 — continue-on-error masks a failing verification gate
67
67
 
68
68
  Severity: error
69
69
  Confidence: high
@@ -378,7 +378,7 @@ Et tomt repo scorer `null`, aldri en falsk 100 — se
378
378
  Hovedmetrikken for Playwright-suiter — hvor robuste locatorene dine er:
379
379
 
380
380
  ```text
381
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
381
+ SELECTOR HEALTH — e2e/checkout.spec.ts
382
382
 
383
383
  [█████████████████░░░] 83 / 100
384
384
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -401,7 +401,7 @@ mjolnir forensics ./test-results/
401
401
  ```
402
402
 
403
403
  ```text
404
- ▚▞ FLAKINESS LEADERBOARD
404
+ FLAKINESS LEADERBOARD
405
405
 
406
406
  3 tests · 1 failed · 1 flaky · 1 retried
407
407
 
package/README.pl.md CHANGED
@@ -64,7 +64,7 @@ Uruchom `mjolnir explain QA-CI-001` na pierwszym znalezisku powyżej, a
64
64
  otrzymasz:
65
65
 
66
66
  ```text
67
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
67
+ QA-CI-001 — continue-on-error masks a failing verification gate
68
68
 
69
69
  Severity: error
70
70
  Confidence: high
@@ -382,7 +382,7 @@ Flagowa metryka dla suite'ów Playwright — jak odporne są twoje
382
382
  lokatory:
383
383
 
384
384
  ```text
385
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
385
+ SELECTOR HEALTH — e2e/checkout.spec.ts
386
386
 
387
387
  [█████████████████░░░] 83 / 100
388
388
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -405,7 +405,7 @@ mjolnir forensics ./test-results/
405
405
  ```
406
406
 
407
407
  ```text
408
- ▚▞ FLAKINESS LEADERBOARD
408
+ FLAKINESS LEADERBOARD
409
409
 
410
410
  3 tests · 1 failed · 1 flaky · 1 retried
411
411
 
package/README.ru.md CHANGED
@@ -63,7 +63,7 @@ npx mjolnir-qa@latest
63
63
  получите:
64
64
 
65
65
  ```text
66
- ▚▞ QA-CI-001 — continue-on-error masks a failing verification gate
66
+ QA-CI-001 — continue-on-error masks a failing verification gate
67
67
 
68
68
  Severity: error
69
69
  Confidence: high
@@ -381,7 +381,7 @@ _сработавших_ правил измерены; `mjolnir rules --unmeasu
381
381
  локаторы:
382
382
 
383
383
  ```text
384
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
384
+ SELECTOR HEALTH — e2e/checkout.spec.ts
385
385
 
386
386
  [█████████████████░░░] 83 / 100
387
387
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -404,7 +404,7 @@ mjolnir forensics ./test-results/
404
404
  ```
405
405
 
406
406
  ```text
407
- ▚▞ FLAKINESS LEADERBOARD
407
+ FLAKINESS LEADERBOARD
408
408
 
409
409
  3 tests · 1 failed · 1 flaky · 1 retried
410
410