mjolnir-qa 2.0.0 → 2.1.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/CHANGELOG.md +95 -2
- package/README.ar.md +3 -3
- package/README.bn.md +3 -3
- package/README.br.md +3 -3
- package/README.bs.md +3 -3
- package/README.da.md +3 -3
- package/README.de.md +3 -3
- package/README.es.md +3 -3
- package/README.fr.md +3 -3
- package/README.gr.md +3 -3
- package/README.he.md +3 -3
- package/README.it.md +3 -3
- package/README.ja.md +3 -3
- package/README.ko.md +3 -3
- package/README.md +106 -69
- package/README.no.md +3 -3
- package/README.pl.md +3 -3
- package/README.ru.md +3 -3
- package/README.th.md +3 -3
- package/README.tr.md +3 -3
- package/README.uk.md +3 -3
- package/README.vi.md +3 -3
- package/README.zh.md +3 -3
- package/README.zht.md +3 -3
- package/dist/cli.d.mts +169 -10
- package/dist/cli.mjs +11128 -20815
- package/dist/mcp/stdio.mjs +346 -153
- package/dist/scan-pipeline-C_Rs4u8N.mjs +2 -0
- package/dist/scan-pipeline-MQGUSey3.mjs +15332 -0
- package/package.json +18 -6
package/README.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
<img src="assets/readme/hero.svg" alt="Mjölnir.
|
|
3
|
+
<img src="assets/readme/hero.svg" alt="Mjölnir. Prevents release-blocking false-green." width="100%" />
|
|
4
4
|
|
|
5
5
|
<br />
|
|
6
6
|
|
|
7
|
-
Mjölnir
|
|
8
|
-
|
|
7
|
+
Mjölnir quantifies how much you can trust your CI — and blocks releases
|
|
8
|
+
when verification isn't earning its keep.
|
|
9
9
|
|
|
10
10
|
<br />
|
|
11
11
|
|
|
@@ -39,8 +39,9 @@ it; `npm run docs:translations` reports how far.
|
|
|
39
39
|
|
|
40
40
|
## A green check is a claim, not a proof
|
|
41
41
|
|
|
42
|
-
A green check means the pipeline did not fail. It does not mean
|
|
43
|
-
ran, or that they could have failed. Every one of these
|
|
42
|
+
A green check means the pipeline did not fail. It does not mean
|
|
43
|
+
the tests ran, or that they could have failed. Every one of these
|
|
44
|
+
ships green — and every one of them makes your release untrustworthy:
|
|
44
45
|
|
|
45
46
|
- a committed `.only` that ran 3 tests instead of 900
|
|
46
47
|
- `continue-on-error: true` on the job that was supposed to gate
|
|
@@ -50,8 +51,10 @@ ran, or that they could have failed. Every one of these ships green:
|
|
|
50
51
|
- a report the workflow uploads but never generated
|
|
51
52
|
- a hard sleep holding a race condition together
|
|
52
53
|
|
|
53
|
-
None of them turns the pipeline red, and each one looks deliberate
|
|
54
|
-
review. That is why they survive.
|
|
54
|
+
None of them turns the pipeline red, and each one looks deliberate
|
|
55
|
+
in review. That is why they survive. **They are the reason releases ship bugs.**
|
|
56
|
+
|
|
57
|
+
Here is Mjölnir reading a real one:
|
|
55
58
|
|
|
56
59
|
<p align="center">
|
|
57
60
|
<img src="assets/readme/scan.svg" alt="The demo repository's CI workflow, read line by line. Mjölnir flags each finding at the line it reported, with its rule, what is wrong, its evidence level and its measured false-positive rate." width="800" />
|
|
@@ -98,7 +101,7 @@ A real scan of [`examples/demo-repo`](examples/demo-repo), a small
|
|
|
98
101
|
Playwright suite with a CI workflow. This is where its points went:
|
|
99
102
|
|
|
100
103
|
<p align="center">
|
|
101
|
-
<img src="assets/readme/terminal-hero.svg" alt="Mjölnir's deduction breakdown: WORTHINESS
|
|
104
|
+
<img src="assets/readme/terminal-hero.svg" alt="Mjölnir's deduction breakdown: WORTHINESS 80/100 WORTHY, the score by category, the per-severity deduction box, and a FIX THIS FIRST list" width="520" />
|
|
102
105
|
</p>
|
|
103
106
|
|
|
104
107
|
<sub>Generated by `npm run docs:hero` from a real scan and drift-locked in
|
|
@@ -147,6 +150,17 @@ FP risk: low (author estimate)
|
|
|
147
150
|
Languages: yaml
|
|
148
151
|
Frameworks: github-actions, azure-pipelines
|
|
149
152
|
|
|
153
|
+
COPY-READY REVIEW COMMENT
|
|
154
|
+
Advisory finding — this does not block merging: Job `security-scan` runs a
|
|
155
|
+
verification gate under `continue-on-error: true`.
|
|
156
|
+
Why it weakens verification: This job can fail every day and CI will still
|
|
157
|
+
show green. The checkmark on this workflow cannot be trusted.
|
|
158
|
+
Confidence: high, evidence E2, tier quarantine; measured FP 11% (19 verdicts).
|
|
159
|
+
Suggested fix: Remove continue-on-error, or scope it to individual
|
|
160
|
+
non-blocking steps only.
|
|
161
|
+
Verify with: mjolnir --scope changed, then mjolnir explain QA-CI-001 if the
|
|
162
|
+
finding still appears.
|
|
163
|
+
|
|
150
164
|
WHAT WAS FOUND (real detector output, not a mockup)
|
|
151
165
|
Job `security-scan` runs a verification gate under `continue-on-error: true`.
|
|
152
166
|
|
|
@@ -188,65 +202,78 @@ That is the unit of value: one place where CI reports a pass it did not earn.
|
|
|
188
202
|
npx mjolnir-qa@latest
|
|
189
203
|
```
|
|
190
204
|
|
|
191
|
-
|
|
192
|
-
how far you can trust it, why, and what to do next. It exits `0` when
|
|
193
|
-
nothing at or above the gate was found.
|
|
205
|
+
Three steps to trust your release pipeline:
|
|
194
206
|
|
|
195
|
-
|
|
196
|
-
|
|
207
|
+
1. **Scan** — `npx mjolnir-qa@latest` — scans the current directory, prints the Trust Report, exits `1` if findings at the gate
|
|
208
|
+
2. **Block in CI** — `npx mjolnir-qa@latest --scope changed` — scans only changed lines, blocks PRs with error findings
|
|
209
|
+
3. **Fix and re-verify** — `mjolnir fix` applies safe auto-fixes, then re-scans to prove each one landed
|
|
210
|
+
|
|
211
|
+
Install the advisory PR workflow first, so existing trust debt cannot break
|
|
212
|
+
CI on day one:
|
|
197
213
|
|
|
198
214
|
```bash
|
|
199
|
-
|
|
215
|
+
mjolnir ci install
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
After reviewing the findings or baselining existing debt, opt into blocking:
|
|
219
|
+
|
|
220
|
+
```bash
|
|
221
|
+
mjolnir ci install --gate error
|
|
200
222
|
```
|
|
201
223
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
|
208
|
-
|
|
|
209
|
-
| `mjolnir`
|
|
210
|
-
| `mjolnir
|
|
211
|
-
| `mjolnir
|
|
212
|
-
| `mjolnir
|
|
213
|
-
| `mjolnir
|
|
214
|
-
| `mjolnir
|
|
215
|
-
| `mjolnir
|
|
216
|
-
| `mjolnir
|
|
217
|
-
| `mjolnir --
|
|
218
|
-
| `mjolnir --format codequality` | GitLab Code Quality report (MR widget artifact) |
|
|
219
|
-
| `mjolnir --strict` | Also run quarantine-tier rules (higher FP risk) |
|
|
224
|
+
| Command | What it does |
|
|
225
|
+
| ----------------------------------- | ----------------------------------------------- |
|
|
226
|
+
| `mjolnir` | Trust Report: verdict, confidence, next action |
|
|
227
|
+
| `mjolnir --scope changed` | Only what your branch introduced (CI form) |
|
|
228
|
+
| `mjolnir --blocking error` | Exit 1 on error findings — gate releases |
|
|
229
|
+
| `mjolnir ci install` | Write the advisory PR workflow (default) |
|
|
230
|
+
| `mjolnir ci install --gate error` | Opt into the blocking PR workflow |
|
|
231
|
+
| `mjolnir business-case` | ROI estimate: projected savings per finding |
|
|
232
|
+
| `mjolnir explain QA-CI-001` | What, why and fix, plus the measured FP rate |
|
|
233
|
+
| `mjolnir why src/a.spec.ts:42` | Why this exact line was flagged. Never gates. |
|
|
234
|
+
| `mjolnir forensics ./test-results/` | Runtime evidence from a real run |
|
|
235
|
+
| `mjolnir trust-report` | Self-contained Trust Artifact (md + json) |
|
|
236
|
+
| `mjolnir handoff` | Remediation plan for a coding agent |
|
|
237
|
+
| `mjolnir --json` / `--format sarif` | Machine-readable output, GitHub Code Scanning |
|
|
238
|
+
| `mjolnir --format codequality` | GitLab Code Quality report (MR widget artifact) |
|
|
239
|
+
| `mjolnir --strict` | Also run quarantine-tier rules (higher FP risk) |
|
|
220
240
|
|
|
221
241
|
<details>
|
|
222
242
|
<summary><strong>Every other command</strong> — flake triage, reporting, governance</summary>
|
|
223
243
|
|
|
224
244
|
<br />
|
|
225
245
|
|
|
226
|
-
| Command | What it does
|
|
227
|
-
| ----------------------------------- |
|
|
228
|
-
| `mjolnir --classic` | The pre-Trust-Report score banner render
|
|
229
|
-
| `mjolnir explain verdict` | Why the saved scan's verdict is what it is
|
|
230
|
-
| `mjolnir triage ./test-results/` | Guided triage. Every row ends in a next action.
|
|
231
|
-
| `mjolnir pw-report ./test-results/` | Playwright run summary: retries, flakes, slowest
|
|
232
|
-
| `mjolnir doctor:playwright` | Playwright-only deep scan plus Selector Health Score
|
|
233
|
-
| `mjolnir fix --dry-run` / `fix` | Safe auto-fixes, each re-scanned to prove it landed
|
|
234
|
-
| `mjolnir baseline` / `diff` | Snapshot findings, then report only new or worse
|
|
235
|
-
| `mjolnir impact --since <ref>` | What a commit introduced and resolved
|
|
236
|
-
| `mjolnir summary` | CI annotations and a step summary from a report
|
|
237
|
-
| `mjolnir pr-comment` | A scoped PR comment, as Markdown
|
|
238
|
-
| `mjolnir debt` | Test-debt register with a cost model
|
|
239
|
-
| `mjolnir handover` | Onboarding map of the suite for a new QA engineer
|
|
240
|
-
| `mjolnir init` | Detect frameworks, print a setup checklist
|
|
241
|
-
| `mjolnir suppressions` | List suppressed findings, for governance
|
|
242
|
-
| `mjolnir
|
|
243
|
-
| `mjolnir
|
|
244
|
-
| `mjolnir
|
|
245
|
-
| `mjolnir
|
|
246
|
-
| `mjolnir
|
|
247
|
-
| `mjolnir
|
|
248
|
-
| `mjolnir
|
|
249
|
-
| `mjolnir --
|
|
246
|
+
| Command | What it does |
|
|
247
|
+
| ----------------------------------- | ----------------------------------------------------- |
|
|
248
|
+
| `mjolnir --classic` | The pre-Trust-Report score banner render |
|
|
249
|
+
| `mjolnir explain verdict` | Why the saved scan's verdict is what it is |
|
|
250
|
+
| `mjolnir triage ./test-results/` | Guided triage. Every row ends in a next action. |
|
|
251
|
+
| `mjolnir pw-report ./test-results/` | Playwright run summary: retries, flakes, slowest |
|
|
252
|
+
| `mjolnir doctor:playwright` | Playwright-only deep scan plus Selector Health Score |
|
|
253
|
+
| `mjolnir fix --dry-run` / `fix` | Safe auto-fixes, each re-scanned to prove it landed |
|
|
254
|
+
| `mjolnir baseline` / `diff` | Snapshot findings, then report only new or worse |
|
|
255
|
+
| `mjolnir impact --since <ref>` | What a commit introduced and resolved |
|
|
256
|
+
| `mjolnir summary` | CI annotations and a step summary from a report |
|
|
257
|
+
| `mjolnir pr-comment` | A scoped PR comment, as Markdown |
|
|
258
|
+
| `mjolnir debt` | Test-debt register with a cost model |
|
|
259
|
+
| `mjolnir handover` | Onboarding map of the suite for a new QA engineer |
|
|
260
|
+
| `mjolnir init` | Detect frameworks, print a setup checklist |
|
|
261
|
+
| `mjolnir suppressions` | List suppressed findings, for governance |
|
|
262
|
+
| `mjolnir ci-integrity` | Verify blocking CI scans and suppression policy |
|
|
263
|
+
| `mjolnir framework-maturity` | Inspect bounded maturity with human calibration |
|
|
264
|
+
| `mjolnir suppression-gate` | Enforce expiry, allowlist, and mass-suppression rules |
|
|
265
|
+
| `mjolnir cross-file` | Analyze duplicate, shared, and circular test signals |
|
|
266
|
+
| `mjolnir contract-verify` | Verify a persisted machine contract artifact |
|
|
267
|
+
| `mjolnir trust-trend` | Persist and compare trust snapshots over time |
|
|
268
|
+
| `mjolnir evidence-graph` | Build or query the verification evidence graph |
|
|
269
|
+
| `mjolnir rules --unmeasured` | The rules running on assumption, not measurement |
|
|
270
|
+
| `mjolnir rules --md` | Full rule catalog (JSON or Markdown) |
|
|
271
|
+
| `mjolnir doctor` | Self-audit of Mjölnir's own rule base |
|
|
272
|
+
| `mjolnir create-rule <ID>` | Scaffold a new rule and its fixtures |
|
|
273
|
+
| `mjolnir stats` | Local all-time counters of fixes seen |
|
|
274
|
+
| `mjolnir badge` | shields.io endpoint JSON and snippet |
|
|
275
|
+
| `mjolnir --cache` | Incremental re-scans via a local verdict cache |
|
|
276
|
+
| `mjolnir --format mermaid` | Test-architecture diagram for a PR comment |
|
|
250
277
|
|
|
251
278
|
`mjolnir help <command>` prints usage, examples and the next step for any
|
|
252
279
|
of them.
|
|
@@ -360,8 +387,8 @@ e2e/login.spec.ts
|
|
|
360
387
|
role/text: 1 · testid: 0 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
361
388
|
|
|
362
389
|
e2e/checkout.spec.ts
|
|
363
|
-
[
|
|
364
|
-
role/text:
|
|
390
|
+
[██████████████████░░] 88 / 100
|
|
391
|
+
role/text: 4 · testid: 1 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
365
392
|
```
|
|
366
393
|
|
|
367
394
|
This measures **resilience, not correctness**.
|
|
@@ -543,24 +570,33 @@ propagate, always-success steps, reports consumed but never generated, and
|
|
|
543
570
|
gates skipped on the events that should block. Each finding names the job,
|
|
544
571
|
the step and the line, and carries its own evidence level.
|
|
545
572
|
|
|
546
|
-
Generate
|
|
573
|
+
Generate an advisory PR workflow first. It reports findings without blocking
|
|
574
|
+
and is pinned to this version, so adopting it cannot change gate semantics:
|
|
547
575
|
|
|
548
576
|
```bash
|
|
549
577
|
mjolnir ci install
|
|
550
578
|
```
|
|
551
579
|
|
|
552
|
-
|
|
580
|
+
After reviewing existing debt, opt into an enforcing gate:
|
|
581
|
+
|
|
582
|
+
```bash
|
|
583
|
+
mjolnir ci install --gate error
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
In your existing workflow, pin the action and explicitly opt into an error gate:
|
|
553
587
|
|
|
554
588
|
```yaml
|
|
555
|
-
- uses: Sergey-Bar/Mjolnir@
|
|
589
|
+
- uses: Sergey-Bar/Mjolnir@4a588bc62d517bc85fc44c0eae64c6587d3bf70b0
|
|
556
590
|
with:
|
|
557
591
|
scope: changed
|
|
558
592
|
fail-on: error
|
|
559
593
|
```
|
|
560
594
|
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
595
|
+
The `--blocking error` flag does the same in any CI pipeline:
|
|
596
|
+
|
|
597
|
+
```bash
|
|
598
|
+
npx mjolnir-qa@latest --scope changed --blocking error
|
|
599
|
+
```
|
|
564
600
|
|
|
565
601
|
To put findings in GitHub Code Scanning, upload SARIF (requires
|
|
566
602
|
`security-events: write` at workflow or job scope):
|
|
@@ -610,11 +646,11 @@ SCAN → EVIDENCE → HANDOFF → AGENT → RE-SCAN → PROOF
|
|
|
610
646
|
**AI writes the fix. Mjölnir verifies it.** The proof comes from the
|
|
611
647
|
re-scan, never from the agent's own report of success.
|
|
612
648
|
|
|
613
|
-
| Command | What the agent gets
|
|
614
|
-
| ----------------- |
|
|
615
|
-
| `mjolnir mcp` | An [MCP](https://modelcontextprotocol.io) server over stdio. `scan`, `explain` and `
|
|
616
|
-
| `mjolnir handoff` | A saved `--json` report becomes a deterministic Markdown plan: what was detected, the evidence boundary per finding, what must **not** change, how to verify.
|
|
617
|
-
| `mjolnir install` | Writes into the agent surfaces your repo already has (`.claude/`, `.cursor/`, `.kilo/`, `AGENTS.md`) so the agent re-scans before it claims it is done.
|
|
649
|
+
| Command | What the agent gets |
|
|
650
|
+
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
651
|
+
| `mjolnir mcp` | An [MCP](https://modelcontextprotocol.io) server over stdio. `scan`, `explain`, `diff`, `verify`, `forensics`, `triage`, and `pw-report` are read-only callable tools. |
|
|
652
|
+
| `mjolnir handoff` | A saved `--json` report becomes a deterministic Markdown plan: what was detected, the evidence boundary per finding, what must **not** change, how to verify. |
|
|
653
|
+
| `mjolnir install` | Writes into the agent surfaces your repo already has (`.claude/`, `.cursor/`, `.kilo/`, `AGENTS.md`) so the agent re-scans before it claims it is done. |
|
|
618
654
|
|
|
619
655
|
Add it to a client that ships its own CLI:
|
|
620
656
|
|
|
@@ -719,6 +755,7 @@ The full docs site is at <https://sergey-bar.github.io/Mjolnir/>.
|
|
|
719
755
|
|
|
720
756
|
| Document | What's in it |
|
|
721
757
|
| ------------------------------------------------------ | ------------------------------------------------- |
|
|
758
|
+
| [docs/EXECUTIVE-ROI.md](docs/EXECUTIVE-ROI.md) | Business case for decision-makers |
|
|
722
759
|
| [docs/SCORING.md](docs/SCORING.md) | Score normalization and evidence weighting |
|
|
723
760
|
| [docs/TERMINOLOGY.md](docs/TERMINOLOGY.md) | Canonical vocabulary: one word per concept |
|
|
724
761
|
| [docs/FP-AUDIT.md](docs/FP-AUDIT.md) | Measured false-positive rates and the method |
|
package/README.no.md
CHANGED
|
@@ -81,7 +81,7 @@ Mjölnir leser testsuiten, CI-workflowene og, hvis du har en, rapporten fra en e
|
|
|
81
81
|
En ekte skanning av [`examples/demo-repo`](examples/demo-repo), en liten Playwright-suite med en CI-workflow. Her er hvor poengene ble av:
|
|
82
82
|
|
|
83
83
|
<p align="center">
|
|
84
|
-
<img src="assets/readme/terminal-hero.svg" alt="Mjölnirs oversikt over trekk: WORTHINESS
|
|
84
|
+
<img src="assets/readme/terminal-hero.svg" alt="Mjölnirs oversikt over trekk: WORTHINESS 80/100 WORTHY, scoren per kategori, trekkboksen per alvorlighetsgrad og en FIX THIS FIRST-liste" width="520" />
|
|
85
85
|
</p>
|
|
86
86
|
|
|
87
87
|
<sub>Generert av `npm run docs:hero` fra en ekte skanning og låst mot avvik i CI. Den fullstendige `--verbose`-rapporten fra samme skanning er [`demo.svg`](assets/readme/demo.svg) (`npm run docs:demo`).</sub>
|
|
@@ -312,8 +312,8 @@ e2e/login.spec.ts
|
|
|
312
312
|
role/text: 1 · testid: 0 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
313
313
|
|
|
314
314
|
e2e/checkout.spec.ts
|
|
315
|
-
[
|
|
316
|
-
role/text:
|
|
315
|
+
[██████████████████░░] 88 / 100
|
|
316
|
+
role/text: 4 · testid: 1 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
317
317
|
```
|
|
318
318
|
|
|
319
319
|
Dette måler **robusthet, ikke korrekthet**. `.btn.btn-primary > div:nth-child(2)` består i dag og fortsetter å bestå til noen rører markupen. En lav score påstår aldri at testen er ødelagt, bare at den avhenger av markup ingen har lovet å beholde.
|
package/README.pl.md
CHANGED
|
@@ -81,7 +81,7 @@ Mjölnir czyta zestaw testów, workflow CI oraz, jeśli go masz, raport z prawdz
|
|
|
81
81
|
Prawdziwy skan [`examples/demo-repo`](examples/demo-repo), małego zestawu Playwright z workflow CI. Oto, gdzie poszły jego punkty:
|
|
82
82
|
|
|
83
83
|
<p align="center">
|
|
84
|
-
<img src="assets/readme/terminal-hero.svg" alt="Rozbicie potrąceń Mjölnira: WORTHINESS
|
|
84
|
+
<img src="assets/readme/terminal-hero.svg" alt="Rozbicie potrąceń Mjölnira: WORTHINESS 80/100 WORTHY, wynik według kategorii, ramka potrąceń według ważności i lista FIX THIS FIRST" width="520" />
|
|
85
85
|
</p>
|
|
86
86
|
|
|
87
87
|
<sub>Wygenerowane przez `npm run docs:hero` z prawdziwego skanu i zabezpieczone w CI przed rozjazdem. Pełny raport `--verbose` z tego samego skanu to [`demo.svg`](assets/readme/demo.svg) (`npm run docs:demo`).</sub>
|
|
@@ -312,8 +312,8 @@ e2e/login.spec.ts
|
|
|
312
312
|
role/text: 1 · testid: 0 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
313
313
|
|
|
314
314
|
e2e/checkout.spec.ts
|
|
315
|
-
[
|
|
316
|
-
role/text:
|
|
315
|
+
[██████████████████░░] 88 / 100
|
|
316
|
+
role/text: 4 · testid: 1 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
317
317
|
```
|
|
318
318
|
|
|
319
319
|
To mierzy **odporność, a nie poprawność**. `.btn.btn-primary > div:nth-child(2)` przechodzi dziś i będzie przechodzić, dopóki ktoś nie ruszy znaczników. Niski wynik nigdy nie twierdzi, że test jest zepsuty, tylko że zależy od znaczników, których nikt nie obiecał zachować.
|
package/README.ru.md
CHANGED
|
@@ -81,7 +81,7 @@ Mjölnir читает набор тестов, CI-workflow и, если он е
|
|
|
81
81
|
Реальное сканирование [`examples/demo-repo`](examples/demo-repo), небольшого набора тестов Playwright с CI-workflow. Вот куда ушли его баллы:
|
|
82
82
|
|
|
83
83
|
<p align="center">
|
|
84
|
-
<img src="assets/readme/terminal-hero.svg" alt="Разбивка вычетов Mjölnir: WORTHINESS
|
|
84
|
+
<img src="assets/readme/terminal-hero.svg" alt="Разбивка вычетов Mjölnir: WORTHINESS 80/100 WORTHY, оценка по категориям, блок вычетов по серьёзности и список FIX THIS FIRST" width="520" />
|
|
85
85
|
</p>
|
|
86
86
|
|
|
87
87
|
<sub>Сгенерировано командой `npm run docs:hero` из реального сканирования и защищено от расхождений в CI. Полный отчёт `--verbose` того же сканирования — [`demo.svg`](assets/readme/demo.svg) (`npm run docs:demo`).</sub>
|
|
@@ -312,8 +312,8 @@ e2e/login.spec.ts
|
|
|
312
312
|
role/text: 1 · testid: 0 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
313
313
|
|
|
314
314
|
e2e/checkout.spec.ts
|
|
315
|
-
[
|
|
316
|
-
role/text:
|
|
315
|
+
[██████████████████░░] 88 / 100
|
|
316
|
+
role/text: 4 · testid: 1 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
317
317
|
```
|
|
318
318
|
|
|
319
319
|
Это измеряет **устойчивость, а не корректность**. `.btn.btn-primary > div:nth-child(2)` проходит сегодня и будет проходить, пока кто-нибудь не тронет разметку. Низкая оценка никогда не утверждает, что тест сломан, — только что он зависит от разметки, сохранять которую никто не обещал.
|
package/README.th.md
CHANGED
|
@@ -81,7 +81,7 @@ Mjölnir อ่านชุดเทสต์ CI workflow และรายง
|
|
|
81
81
|
การสแกนจริงของ [`examples/demo-repo`](examples/demo-repo) ซึ่งเป็นชุดเทสต์ Playwright ขนาดเล็กที่มี CI workflow คะแนนของมันหายไปตรงนี้:
|
|
82
82
|
|
|
83
83
|
<p align="center">
|
|
84
|
-
<img src="assets/readme/terminal-hero.svg" alt="รายละเอียดการหักคะแนนของ Mjölnir: WORTHINESS
|
|
84
|
+
<img src="assets/readme/terminal-hero.svg" alt="รายละเอียดการหักคะแนนของ Mjölnir: WORTHINESS 80/100 WORTHY คะแนนแยกตามหมวดหมู่ กล่องการหักคะแนนตามความรุนแรง และรายการ FIX THIS FIRST" width="520" />
|
|
85
85
|
</p>
|
|
86
86
|
|
|
87
87
|
<sub>สร้างโดย `npm run docs:hero` จากการสแกนจริง และถูกล็อกไม่ให้คลาดเคลื่อนใน CI รายงาน `--verbose` ฉบับเต็มของการสแกนเดียวกันคือ [`demo.svg`](assets/readme/demo.svg) (`npm run docs:demo`)</sub>
|
|
@@ -312,8 +312,8 @@ e2e/login.spec.ts
|
|
|
312
312
|
role/text: 1 · testid: 0 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
313
313
|
|
|
314
314
|
e2e/checkout.spec.ts
|
|
315
|
-
[
|
|
316
|
-
role/text:
|
|
315
|
+
[██████████████████░░] 88 / 100
|
|
316
|
+
role/text: 4 · testid: 1 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
317
317
|
```
|
|
318
318
|
|
|
319
319
|
สิ่งนี้วัด **ความทนทาน ไม่ใช่ความถูกต้อง** `.btn.btn-primary > div:nth-child(2)` ผ่านในวันนี้ และจะผ่านต่อไปจนกว่าจะมีคนแตะ markup คะแนนต่ำไม่เคยอ้างว่าเทสต์พัง เพียงบอกว่ามันพึ่งพา markup ที่ไม่มีใครสัญญาว่าจะคงไว้
|
package/README.tr.md
CHANGED
|
@@ -81,7 +81,7 @@ Mjölnir test paketini, CI workflow'larını ve varsa gerçek bir çalıştırma
|
|
|
81
81
|
CI workflow'u olan küçük bir Playwright paketi olan [`examples/demo-repo`](examples/demo-repo) üzerinde gerçek bir tarama. Puanlarının nereye gittiği burada:
|
|
82
82
|
|
|
83
83
|
<p align="center">
|
|
84
|
-
<img src="assets/readme/terminal-hero.svg" alt="Mjölnir'in kesinti dökümü: WORTHINESS
|
|
84
|
+
<img src="assets/readme/terminal-hero.svg" alt="Mjölnir'in kesinti dökümü: WORTHINESS 80/100 WORTHY, kategoriye göre puan, önem derecesine göre kesinti kutusu ve bir FIX THIS FIRST listesi" width="520" />
|
|
85
85
|
</p>
|
|
86
86
|
|
|
87
87
|
<sub>`npm run docs:hero` ile gerçek bir taramadan üretilir ve CI'da sapmaya karşı kilitlenir. Aynı taramanın tam `--verbose` raporu [`demo.svg`](assets/readme/demo.svg) dosyasıdır (`npm run docs:demo`).</sub>
|
|
@@ -312,8 +312,8 @@ e2e/login.spec.ts
|
|
|
312
312
|
role/text: 1 · testid: 0 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
313
313
|
|
|
314
314
|
e2e/checkout.spec.ts
|
|
315
|
-
[
|
|
316
|
-
role/text:
|
|
315
|
+
[██████████████████░░] 88 / 100
|
|
316
|
+
role/text: 4 · testid: 1 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
317
317
|
```
|
|
318
318
|
|
|
319
319
|
Bu, **doğruluğu değil dayanıklılığı** ölçer. `.btn.btn-primary > div:nth-child(2)` bugün geçer ve biri işaretlemeye dokunana kadar geçmeye devam eder. Düşük bir puan asla testin bozuk olduğunu iddia etmez; yalnızca kimsenin korumayı vaat etmediği işaretlemeye bağlı olduğunu söyler.
|
package/README.uk.md
CHANGED
|
@@ -81,7 +81,7 @@ Mjölnir читає набір тестів, CI-workflow і, якщо він є,
|
|
|
81
81
|
Реальне сканування [`examples/demo-repo`](examples/demo-repo), невеликого набору тестів Playwright із CI-workflow. Ось куди пішли його бали:
|
|
82
82
|
|
|
83
83
|
<p align="center">
|
|
84
|
-
<img src="assets/readme/terminal-hero.svg" alt="Розбивка вирахувань Mjölnir: WORTHINESS
|
|
84
|
+
<img src="assets/readme/terminal-hero.svg" alt="Розбивка вирахувань Mjölnir: WORTHINESS 80/100 WORTHY, оцінка за категоріями, блок вирахувань за серйозністю та список FIX THIS FIRST" width="520" />
|
|
85
85
|
</p>
|
|
86
86
|
|
|
87
87
|
<sub>Згенеровано командою `npm run docs:hero` з реального сканування і захищено від розбіжностей у CI. Повний звіт `--verbose` того самого сканування — [`demo.svg`](assets/readme/demo.svg) (`npm run docs:demo`).</sub>
|
|
@@ -312,8 +312,8 @@ e2e/login.spec.ts
|
|
|
312
312
|
role/text: 1 · testid: 0 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
313
313
|
|
|
314
314
|
e2e/checkout.spec.ts
|
|
315
|
-
[
|
|
316
|
-
role/text:
|
|
315
|
+
[██████████████████░░] 88 / 100
|
|
316
|
+
role/text: 4 · testid: 1 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
317
317
|
```
|
|
318
318
|
|
|
319
319
|
Це вимірює **стійкість, а не коректність**. `.btn.btn-primary > div:nth-child(2)` проходить сьогодні й проходитиме, доки хтось не торкнеться розмітки. Низька оцінка ніколи не стверджує, що тест зламаний, — лише що він залежить від розмітки, яку ніхто не обіцяв зберігати.
|
package/README.vi.md
CHANGED
|
@@ -81,7 +81,7 @@ Mjölnir đọc bộ test, các workflow CI và, nếu bạn có, báo cáo củ
|
|
|
81
81
|
Một lần quét thật trên [`examples/demo-repo`](examples/demo-repo), một bộ test Playwright nhỏ có workflow CI. Đây là nơi điểm của nó bị trừ:
|
|
82
82
|
|
|
83
83
|
<p align="center">
|
|
84
|
-
<img src="assets/readme/terminal-hero.svg" alt="Bảng phân tích trừ điểm của Mjölnir: WORTHINESS
|
|
84
|
+
<img src="assets/readme/terminal-hero.svg" alt="Bảng phân tích trừ điểm của Mjölnir: WORTHINESS 80/100 WORTHY, điểm theo từng hạng mục, ô trừ điểm theo mức nghiêm trọng và danh sách FIX THIS FIRST" width="520" />
|
|
85
85
|
</p>
|
|
86
86
|
|
|
87
87
|
<sub>Được tạo bởi `npm run docs:hero` từ một lần quét thật và được khóa chống sai lệch trong CI. Báo cáo `--verbose` đầy đủ của cùng lần quét là [`demo.svg`](assets/readme/demo.svg) (`npm run docs:demo`).</sub>
|
|
@@ -312,8 +312,8 @@ e2e/login.spec.ts
|
|
|
312
312
|
role/text: 1 · testid: 0 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
313
313
|
|
|
314
314
|
e2e/checkout.spec.ts
|
|
315
|
-
[
|
|
316
|
-
role/text:
|
|
315
|
+
[██████████████████░░] 88 / 100
|
|
316
|
+
role/text: 4 · testid: 1 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
317
317
|
```
|
|
318
318
|
|
|
319
319
|
Điều này đo **độ bền, không phải độ đúng**. `.btn.btn-primary > div:nth-child(2)` qua hôm nay và sẽ tiếp tục qua cho đến khi ai đó động vào markup. Điểm thấp không bao giờ khẳng định test bị hỏng, chỉ nói rằng nó phụ thuộc vào markup mà không ai hứa giữ nguyên.
|
package/README.zh.md
CHANGED
|
@@ -81,7 +81,7 @@ Mjölnir 读取测试套件、CI workflow,以及(如果有的话)一次真
|
|
|
81
81
|
对 [`examples/demo-repo`](examples/demo-repo) 的一次真实扫描,这是一个带 CI workflow 的小型 Playwright 套件。它的分数都扣在了这里:
|
|
82
82
|
|
|
83
83
|
<p align="center">
|
|
84
|
-
<img src="assets/readme/terminal-hero.svg" alt="Mjölnir 的扣分明细:WORTHINESS
|
|
84
|
+
<img src="assets/readme/terminal-hero.svg" alt="Mjölnir 的扣分明细:WORTHINESS 80/100 WORTHY、按类别的评分、按严重级别的扣分框,以及 FIX THIS FIRST 列表" width="520" />
|
|
85
85
|
</p>
|
|
86
86
|
|
|
87
87
|
<sub>由 `npm run docs:hero` 根据一次真实扫描生成,并在 CI 中锁定以防漂移。同一次扫描的完整 `--verbose` 报告是 [`demo.svg`](assets/readme/demo.svg)(`npm run docs:demo`)。</sub>
|
|
@@ -312,8 +312,8 @@ e2e/login.spec.ts
|
|
|
312
312
|
role/text: 1 · testid: 0 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
313
313
|
|
|
314
314
|
e2e/checkout.spec.ts
|
|
315
|
-
[
|
|
316
|
-
role/text:
|
|
315
|
+
[██████████████████░░] 88 / 100
|
|
316
|
+
role/text: 4 · testid: 1 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
317
317
|
```
|
|
318
318
|
|
|
319
319
|
这衡量的是**韧性,而非正确性**。`.btn.btn-primary > div:nth-child(2)` 今天能通过,并会一直通过,直到有人改动标记结构。低分从不声称测试坏了,只说明它依赖于没有人承诺保留的标记结构。
|
package/README.zht.md
CHANGED
|
@@ -81,7 +81,7 @@ Mjölnir 讀取測試套件、CI workflow,以及(如果有的話)一次真
|
|
|
81
81
|
對 [`examples/demo-repo`](examples/demo-repo) 的一次真實掃描,這是一個附帶 CI workflow 的小型 Playwright 套件。它的分數都扣在了這裡:
|
|
82
82
|
|
|
83
83
|
<p align="center">
|
|
84
|
-
<img src="assets/readme/terminal-hero.svg" alt="Mjölnir 的扣分明細:WORTHINESS
|
|
84
|
+
<img src="assets/readme/terminal-hero.svg" alt="Mjölnir 的扣分明細:WORTHINESS 80/100 WORTHY、依類別的評分、依嚴重程度的扣分框,以及 FIX THIS FIRST 清單" width="520" />
|
|
85
85
|
</p>
|
|
86
86
|
|
|
87
87
|
<sub>由 `npm run docs:hero` 根據一次真實掃描產生,並在 CI 中鎖定以防漂移。同一次掃描的完整 `--verbose` 報告是 [`demo.svg`](assets/readme/demo.svg)(`npm run docs:demo`)。</sub>
|
|
@@ -312,8 +312,8 @@ e2e/login.spec.ts
|
|
|
312
312
|
role/text: 1 · testid: 0 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
313
313
|
|
|
314
314
|
e2e/checkout.spec.ts
|
|
315
|
-
[
|
|
316
|
-
role/text:
|
|
315
|
+
[██████████████████░░] 88 / 100
|
|
316
|
+
role/text: 4 · testid: 1 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
317
317
|
```
|
|
318
318
|
|
|
319
319
|
這衡量的是**韌性,而非正確性**。`.btn.btn-primary > div:nth-child(2)` 今天能通過,並會一直通過,直到有人改動標記結構。低分從不聲稱測試壞了,只說明它依賴於沒有人承諾保留的標記結構。
|