mjolnir-qa 0.5.2 → 0.5.3

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,131 @@ 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.3] — 2026-09-05
13
+
14
+ ### Terminal + CI UX Overhaul (plan 1788579907109)
15
+
16
+ ### Added
17
+
18
+ - **Design-system core** (`src/reporter/ui.ts`): one canonical visual
19
+ language — `▚ TITLE` section headers (ASCII fallback `= TITLE`),
20
+ `✗/⚠/ℹ` severity icons (ASCII `X/!/i`), rounded panels, 58-glyph
21
+ dividers, and a dim `$ command` next-step affordance. All
22
+ subcommand renderers (`baseline`, `debt`, `init`, `doctor`, `fix`,
23
+ `impact`, `stats`, `handover`, `triage`, `pw-report`, `explain`,
24
+ `rules-catalog`, `create-rule`, `suppressions`, forensics,
25
+ selector-health) now render through it; per-renderer `▚▞`/`🔨`/`╔══╗`
26
+ headers and `╞══╡` tables are gone. `FORCE_COLOR` is honored
27
+ (chalk convention: `0`/`false`/empty = plain, other values force
28
+ color even piped, winning over `NO_COLOR`).
29
+ - **`mjolnir help` + per-command help** (`src/commands/help.ts`): the
30
+ grouped overview (Scan · CI & PRs · Forensics · Maintenance · Meta,
31
+ copy-pasteable starts, exit-code table, docs link) and
32
+ `mjolnir help <verb>` / `mjolnir <verb> --help` pages for every
33
+ registered verb. **Behavior call-out:** `help` now dispatches as a
34
+ verb BEFORE the scan fall-through — bare `mjolnir help` no longer
35
+ scans the CWD (it never was a documented behavior); a folder named
36
+ `help/` is still scanned via `mjolnir ./help`. `--help`/`-h` on the
37
+ root scan still print usage and exit 10 (frozen contract).
38
+ - **Friendly usage errors** (exit 10 preserved): unknown flags name
39
+ themselves on stderr, suggest up to three nearest real flags
40
+ (hand-rolled Levenshtein ≤ 2 — no new dependencies), and point at
41
+ `mjolnir --help`. The exit-20 crash path says "this is a bug in
42
+ Mjölnir, not your repo", carries the message, and prints the stack
43
+ trace only under `--debug`.
44
+ - **Live scan progress** (`src/reporter/progress.ts`): an event-driven
45
+ stderr line (`Discovering files… → Parsing frameworks… → Running
46
+ rules… → Scoring…`) fed by the new additive `ScanHooks.onProgress`.
47
+ Render-on-event only — no timers, deterministic under a fake stream.
48
+ Auto-off when stderr is not a TTY, in machine formats, under
49
+ `GITHUB_ACTIONS=true`/`CI=true`, or with the new additive
50
+ `--no-progress` flag. stdout purity and `--json` byte-identity are
51
+ unchanged.
52
+ - **`mjolnir summary [mjolnir.json]`** (`src/commands/summary.ts` +
53
+ `src/reporter/github.ts`): reads a saved `--json` report and emits
54
+ GitHub annotations (only when `GITHUB_ACTIONS=true`, per-finding
55
+ `::error|warning|notice` with spec-exact `%25/%0D/%0A/%3A/%2C`
56
+ escaping, messages truncated at ~250 chars) and a step-summary
57
+ markdown document (score + band, text score bar, dimensions table,
58
+ collapsible per-severity `<details>` with `Fix:` lines, honesty
59
+ notice for `partial`/`score:null` reports). `--stdout` forces
60
+ stdout; `--path-prefix <dir>` re-scopes paths for subdirectory
61
+ scans. Exit `0` on success — the gate step decides; `10` missing
62
+ file; `2` invalid JSON.
63
+ - **CI template v2** (`ci install`): the inline `SUMMARY_SCRIPT` step
64
+ is replaced by `mjolnir summary mjolnir.json`; the gate script is
65
+ unchanged. v1-generated workflows are still recognized on
66
+ overwrite-refusal, so `ci install` upgrades stay frictionless. The
67
+ dogfooded `.github/workflows/mjolnir.yml` and `ci.yml` self-scan use
68
+ the same command.
69
+ - **PR comment redesign** (`pr-comment`): header
70
+ `### 🔨 Mjölnir — Verification Trust` with score + band + verdict
71
+ headline, dimensions mini-table, findings grouped in collapsible
72
+ `<details>` (errors open, warnings/infos collapsed) with explicit
73
+ `Fix:` lines and evidence tags, a "what to run next" footer with the
74
+ pinned `npx mjolnir-qa@<ver>` commands, and the
75
+ `✨ N pre-existing findings fixed in this PR` callout. Same
76
+ idempotency marker; same markdown escaping.
77
+ - **Site**: new `site/reference/cli.md` (help, usage errors, summary,
78
+ progress, `FORCE_COLOR`) in the Reference sidebar.
79
+
80
+ ### Changed
81
+
82
+ - README output examples and all 22 translations: the `▚▞` header
83
+ glyph in rendered-output samples is now `▚` (the design-system
84
+ token). English README is canonical; translation sync dates unchanged
85
+ (glyph-only diff, advisory parity script).
86
+ - Regenerated committed assets: `assets/readme/terminal-hero.svg`,
87
+ `demo.svg` (`docs:hero`, `docs:demo`), and the forensics/selector
88
+ samples (`docs:forensics-samples`).
89
+
90
+ ### Removed
91
+
92
+ - The hand-rolled `╔══╗`/`▚▞`/`🔨` per-command header styles and the
93
+ `╞══╡` ASCII tables they wrapped (replaced by the shared `ui.ts`
94
+ primitives; no CLI surface change).
95
+
96
+ ### Fixed — review hardening (post-implementation audit)
97
+
98
+ - **`ci install` v1 recognition actually works now:** the v1 inline
99
+ summary script is matched in its INDENTED form (`indentBlock(…, 10)`)
100
+ — the raw unindented needle never appeared in a real v1 workflow, so
101
+ the first cut of the recognition would have refused every genuine v1
102
+ file despite the "frictionless upgrade" promise. Spec reconstructs
103
+ the embedded form from the real v1 output and pins that
104
+ hand-customized files are still refused.
105
+ - **Advisory template stays green on a crashed scan:** the generated
106
+ "Annotations + Job Summary" step is now `continue-on-error: true` —
107
+ a crashed scan leaves `mjolnir.json` empty and `summary` exits 2,
108
+ which must not turn the advisory job red (v1's inline script never
109
+ did). The gate step still owns the verdict.
110
+ - **Step summary escapes hostile finding metadata:** `ruleId`, `file`,
111
+ `message` and `fix` are markdown-escaped before `$GITHUB_STEP_SUMMARY`
112
+ (GitHub renders HTML there) — a hostile report can no longer break
113
+ out of the `<details>` structure. Annotations additionally sanitize
114
+ `file`/`ruleId`/`message` through the same `sanitizeData` layer the
115
+ terminal uses (OSC/C0 bytes), closing the gap its own docs assumed.
116
+ - **Progress line sanitizes the detail path** through `sanitizeData` —
117
+ a filename with ANSI/OSC bytes can no longer hijack the terminal.
118
+ - **PR comment overflow counts are honest:** the "...and N more
119
+ overall" line now subtracts the actually rendered count
120
+ (Σ min(group, 25)) instead of a flat 25 — no more phantom hidden
121
+ findings, and per-group overflow lines name their group
122
+ ("...and 5 more errors").
123
+ - **Usage-error contract completed:** the 8 scan-backed subcommands
124
+ (badge, debt, fix, impact, baseline, diff, pr-comment, handover) no
125
+ longer print the full usage wall after the friendly stderr error;
126
+ `mjolnir summary` rejects unknown flags with the shared
127
+ did-you-mean machinery (exit 10) instead of silently swallowing a
128
+ typo'd `--stdout`; `mjolnir ci --help` / `mjolnir help ci install` /
129
+ `mjolnir ci install --help` now reach the `ci install` help page
130
+ (two-word verb lookup).
131
+ - **Dead surface removed:** `theme.severityTag` (byte-identical twin of
132
+ `ui.severityIcon`, test-only) deleted with the two plugin specs
133
+ re-pointed; the new-module exports nothing without a caller
134
+ (`severityGlyph`, `wrapFor`, `centerIn` dropped; `keyValue` and
135
+ `bullet` remain — the plan's primitive list mandates them).
136
+
12
137
  ## [0.5.2] — 2026-09-05
13
138
 
14
139
  ### 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
 
package/README.th.md CHANGED
@@ -61,7 +61,7 @@ npx mjolnir-qa@latest
61
61
  รัน `mjolnir explain QA-CI-001` กับ finding แรกด้านบน แล้วคุณจะได้:
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
@@ -370,7 +370,7 @@ repo ว่างจะได้คะแนน `null` ไม่ใช่เล
370
370
  ตัวชี้วัดพาดหัวสำหรับชุด Playwright — locator ของคุณทนทานแค่ไหน:
371
371
 
372
372
  ```text
373
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
373
+ SELECTOR HEALTH — e2e/checkout.spec.ts
374
374
 
375
375
  [█████████████████░░░] 83 / 100
376
376
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -391,7 +391,7 @@ mjolnir forensics ./test-results/
391
391
  ```
392
392
 
393
393
  ```text
394
- ▚▞ FLAKINESS LEADERBOARD
394
+ FLAKINESS LEADERBOARD
395
395
 
396
396
  3 tests · 1 failed · 1 flaky · 1 retried
397
397
 
package/README.tr.md CHANGED
@@ -64,7 +64,7 @@ Yukarıdaki ilk bulgu için `mjolnir explain QA-CI-001` komutunu çalıştırın
64
64
  elde edeceğiniz:
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
@@ -377,7 +377,7 @@ Playwright takımları için başlık metriği — locator'larınız ne kadar
377
377
  dayanıklı:
378
378
 
379
379
  ```text
380
- ▚▞ SELECTOR HEALTH — e2e/checkout.spec.ts
380
+ SELECTOR HEALTH — e2e/checkout.spec.ts
381
381
 
382
382
  [█████████████████░░░] 83 / 100
383
383
  role/text: 2 · testid: 1 · css-chains: 1 ⚠ · xpath: 0
@@ -400,7 +400,7 @@ mjolnir forensics ./test-results/
400
400
  ```
401
401
 
402
402
  ```text
403
- ▚▞ FLAKINESS LEADERBOARD
403
+ FLAKINESS LEADERBOARD
404
404
 
405
405
  3 tests · 1 failed · 1 flaky · 1 retried
406
406