mjolnir-qa 3.0.0 → 5.0.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 +628 -6
- package/README.ar.md +58 -29
- package/README.bn.md +58 -29
- package/README.br.md +58 -29
- package/README.bs.md +58 -29
- package/README.da.md +59 -30
- package/README.de.md +59 -30
- package/README.es.md +58 -29
- package/README.fr.md +59 -30
- package/README.gr.md +58 -29
- package/README.he.md +58 -29
- package/README.it.md +58 -29
- package/README.ja.md +58 -29
- package/README.ko.md +58 -29
- package/README.md +95 -56
- package/README.no.md +58 -29
- package/README.pl.md +58 -29
- package/README.ru.md +58 -29
- package/README.th.md +58 -29
- package/README.tr.md +58 -29
- package/README.uk.md +58 -29
- package/README.vi.md +58 -29
- package/README.zh.md +58 -29
- package/README.zht.md +58 -29
- package/dist/cli.d.mts +398 -17
- package/dist/cli.mjs +2893 -1005
- package/dist/mcp/stdio.mjs +1576 -715
- package/dist/scan-pipeline-DNYbnWjE.mjs +2 -0
- package/dist/{scan-pipeline-CAH9_Qgh.mjs → scan-pipeline-DT8DWAMl.mjs} +1777 -978
- package/package.json +70 -9
- package/dist/scan-pipeline-CRe7-MQn.mjs +0 -2
package/README.no.md
CHANGED
|
@@ -18,7 +18,7 @@ og vurderer deretter hvor langt resultatet er til å stole på, med beviset for
|
|
|
18
18
|
[](https://nodejs.org)
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
npx mjolnir-qa@
|
|
21
|
+
npx mjolnir-qa@3.0.0
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
[Se det i aksjon](#se-det-i-aksjon) · [Kom raskt i gang](#kom-raskt-i-gang) · [Hva det finner](#hva-mjölnir-finner) · [Score](#worthiness-scoren) · [Evidens](#evidensmodellen) · [Kjøringsanalyse](#kjøringsanalyse) · [CI](#ci-integritet) · [Agenter](#ai-agenter) · [Sikkerhet](#tillit-og-sikkerhet) · [Begrensninger](#hva-mjölnir-ikke-kan-fortelle-deg) · [Dokumentasjon](#dokumentasjon)
|
|
@@ -28,9 +28,9 @@ npx mjolnir-qa@latest
|
|
|
28
28
|
|
|
29
29
|
[English](README.md) | [简体中文](README.zh.md) | [繁體中文](README.zht.md) | [한국어](README.ko.md) | [Deutsch](README.de.md) | [Español](README.es.md) | [Français](README.fr.md) | [Italiano](README.it.md) | [Dansk](README.da.md) | [日本語](README.ja.md) | [Polski](README.pl.md) | [Русский](README.ru.md) | Norsk | [Português (Brasil)](README.br.md) | [ไทย](README.th.md) | [Türkçe](README.tr.md) | [Українська](README.uk.md) | [বাংলা](README.bn.md) | [Ελληνικά](README.gr.md) | [Tiếng Việt](README.vi.md) | [עברית](README.he.md) | [العربية](README.ar.md) | [Bosanski](README.bs.md)
|
|
30
30
|
|
|
31
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
31
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-26.
|
|
32
32
|
|
|
33
|
-
<!-- Source hash:
|
|
33
|
+
<!-- Source hash: `de04dfb1677b` -->
|
|
34
34
|
|
|
35
35
|
</details>
|
|
36
36
|
|
|
@@ -38,6 +38,20 @@ npx mjolnir-qa@latest
|
|
|
38
38
|
|
|
39
39
|
<br />
|
|
40
40
|
|
|
41
|
+
## Release status (English canonical)
|
|
42
|
+
|
|
43
|
+
The published line is `3.0.0`; this working tree is the `4.0.0-rc.1`
|
|
44
|
+
candidate. `3.0.0` must not be republished or retagged. The M26–M50 program is
|
|
45
|
+
tracked in
|
|
46
|
+
[`docs/ROADMAP.yaml`](docs/ROADMAP.yaml); provisional capability contracts
|
|
47
|
+
are not automatically enabled or certified. Repository-owned checks pass, but
|
|
48
|
+
Trust certification remains `NOT_CERTIFIED` until the protected holdout,
|
|
49
|
+
real-world, platform/consumer, remote-workflow, support-matrix, and corpus
|
|
50
|
+
evidence gates pass. Run `npm run m26:readiness` before treating any candidate
|
|
51
|
+
as releasable. This document does not publish a tag or authorize a release.
|
|
52
|
+
|
|
53
|
+
> Machine-assisted canonical text. Translate this block before treating it as localized copy.
|
|
54
|
+
|
|
41
55
|
## En grønn hake er en påstand, ikke et bevis
|
|
42
56
|
|
|
43
57
|
En grønn hake betyr at pipelinen ikke feilet. Den betyr ikke at testene kjørte, eller at de kunne ha feilet. Hver eneste av disse går grønt gjennom:
|
|
@@ -58,7 +72,7 @@ Ingen av dem gjør pipelinen rød, og hver av dem ser tilsiktet ut i review. Der
|
|
|
58
72
|
|
|
59
73
|
<sub>Hvert funn demoskanningen rapporterte for denne workflowen, på linjen det ble rapportert. Generert av `npm run docs:readme-brand` fra [`demo-report.json`](assets/readme/demo-report.json) og låst mot avvik i CI.</sub>
|
|
60
74
|
|
|
61
|
-
**Streng modus.** De mest aggressive deteksjonene — `.only`, `continue-on-error`, tomme tester, misbruk av omkjøringer — lever i karantenenivået. De kjører bare under `--strict` og er begrenset til `info`-alvorlighetsgrad: de flagger, de blokkerer aldri. Standardskanningen (`npx mjolnir-qa@
|
|
75
|
+
**Streng modus.** De mest aggressive deteksjonene — `.only`, `continue-on-error`, tomme tester, misbruk av omkjøringer — lever i karantenenivået. De kjører bare under `--strict` og er begrenset til `info`-alvorlighetsgrad: de flagger, de blokkerer aldri. Standardskanningen (`npx mjolnir-qa@3.0.0` uten `--strict`) dekker bare kjerne- og utvidede regler. Legg til `--strict` når du også vil ha rådgivningslaget.
|
|
62
76
|
|
|
63
77
|
Mjölnir leser testsuiten, CI-workflowene og, hvis du har en, rapporten fra en ekte kjøring. Det kjører ikke testene dine, installerer ikke avhengighetene dine og kjører ikke koden det skanner. Og når det mangler evidens, sier det det i stedet for å finne på tillit:
|
|
64
78
|
|
|
@@ -93,7 +107,7 @@ En ekte skanning av [`examples/demo-repo`](examples/demo-repo), en liten Playwri
|
|
|
93
107
|
|
|
94
108
|
<p align="center">
|
|
95
109
|
<a href="assets/video/mjolnir-demo.mp4">
|
|
96
|
-
<img src="assets/video/mjolnir-demo-poster.png" alt="Et bilde fra demoopptaket: npx mjolnir-qa@
|
|
110
|
+
<img src="assets/video/mjolnir-demo-poster.png" alt="Et bilde fra demoopptaket: npx mjolnir-qa@3.0.0 skanner demo-repositoriet i et terminalvindu" width="900" />
|
|
97
111
|
</a>
|
|
98
112
|
</p>
|
|
99
113
|
|
|
@@ -162,7 +176,7 @@ Det er verdienheten: ett sted der CI rapporterer en bestått den ikke har gjort
|
|
|
162
176
|
## Kom raskt i gang
|
|
163
177
|
|
|
164
178
|
```bash
|
|
165
|
-
npx mjolnir-qa@
|
|
179
|
+
npx mjolnir-qa@3.0.0
|
|
166
180
|
```
|
|
167
181
|
|
|
168
182
|
Det skanner gjeldende mappe og skriver ut Trust Report: hva det fant, hvor langt du kan stole på det, hvorfor, og hva du bør gjøre videre. Det avslutter med `0` når ingenting på eller over gaten ble funnet.
|
|
@@ -170,24 +184,39 @@ Det skanner gjeldende mappe og skriver ut Trust Report: hva det fant, hvor langt
|
|
|
170
184
|
I CI bør du bare skanne det grenen har introdusert, så en eldre testsuite ikke drukner din første pull request:
|
|
171
185
|
|
|
172
186
|
```bash
|
|
173
|
-
npx mjolnir-qa@
|
|
187
|
+
npx mjolnir-qa@3.0.0 --scope changed
|
|
174
188
|
```
|
|
175
189
|
|
|
176
|
-
`mjolnir ci install` skriver det som en GitHub Actions-workflow med [action-en](https://github.com/Sergey-Bar/Mjolnir#readme) festet til major-taggen `
|
|
177
|
-
|
|
178
|
-
| Kommando
|
|
179
|
-
|
|
|
180
|
-
| `mjolnir`
|
|
181
|
-
| `mjolnir --scope changed`
|
|
182
|
-
| `mjolnir ci install`
|
|
183
|
-
| `mjolnir
|
|
184
|
-
| `mjolnir
|
|
185
|
-
| `mjolnir
|
|
186
|
-
| `mjolnir
|
|
187
|
-
| `mjolnir
|
|
188
|
-
| `mjolnir
|
|
189
|
-
| `mjolnir
|
|
190
|
-
| `mjolnir --
|
|
190
|
+
`mjolnir ci install` skriver det som en GitHub Actions-workflow med [action-en](https://github.com/Sergey-Bar/Mjolnir#readme) festet til major-taggen `v3` (eller vanlig `npx` med `--no-action`). Den forblir rådgivende til du bestemmer at den skal blokkere.
|
|
191
|
+
|
|
192
|
+
| Kommando | Hva den gjør |
|
|
193
|
+
| --------------------------------------------- | ---------------------------------------------------------- |
|
|
194
|
+
| `mjolnir` | Trust Report: dom, sikkerhet, neste handling |
|
|
195
|
+
| `mjolnir --scope changed` | Bare det grenen din har introdusert (CI-formen) |
|
|
196
|
+
| `mjolnir ci install` | Generer den rådgivende PR-workflowen (action-basert) |
|
|
197
|
+
| `mjolnir business-case` | ROI estimate: projected savings per finding |
|
|
198
|
+
| `mjolnir release-report` | Release readiness: GO, CONDITIONAL GO, or NO-GO |
|
|
199
|
+
| `mjolnir release-trust` | 12-dimension release assurance verdict |
|
|
200
|
+
| `mjolnir report` | Generate a Playwright-compatible report |
|
|
201
|
+
| `mjolnir trend` | Record, show, or diff local quality snapshots |
|
|
202
|
+
| `mjolnir policy` | Initialize, validate, or check policy gates |
|
|
203
|
+
| `mjolnir quarantine` | Review deterministic proposals (prototype) |
|
|
204
|
+
| `mjolnir analyze --cross-file` | Bounded cross-file analysis |
|
|
205
|
+
| `mjolnir ci-adapter github .` | Generate CI templates for supported providers |
|
|
206
|
+
| `mjolnir dashboard` | Generate a self-contained quality dashboard |
|
|
207
|
+
| `mjolnir exec-report` | Executive KPIs and recommendations (advisory) |
|
|
208
|
+
| `mjolnir enterprise` | Self-hosted templates (prototype) |
|
|
209
|
+
| `mjolnir maturity` | Assess maturity or display maturity levels |
|
|
210
|
+
| `mjolnir mutation tests/mutation-report.json` | Analyze mutation reports; never promotes trust |
|
|
211
|
+
| `mjolnir mcp` | Read-only MCP tools over stdio |
|
|
212
|
+
| `mjolnir explain QA-CI-001` | Hva, hvorfor og rettelse, pluss den målte FP-raten |
|
|
213
|
+
| `mjolnir why src/a.spec.ts:42` | Hvorfor akkurat denne linjen ble markert. Blokkerer aldri. |
|
|
214
|
+
| `mjolnir forensics ./test-results/` | Kjøringsevidens fra en ekte kjøring |
|
|
215
|
+
| `mjolnir trust-report` | Selvstendig Trust-artefakt (md + json) |
|
|
216
|
+
| `mjolnir handoff` | Utbedringsplan for en kodeagent |
|
|
217
|
+
| `mjolnir --json` / `--format sarif` | Maskinlesbar utdata, GitHub Code Scanning |
|
|
218
|
+
| `mjolnir --format codequality` | GitLab Code Quality-rapport (MR-widget-artefakt) |
|
|
219
|
+
| `mjolnir --strict` | Kjør også regler på quarantine-nivå (høyere FP-risiko) |
|
|
191
220
|
|
|
192
221
|
<details>
|
|
193
222
|
<summary><strong>Alle andre kommandoer</strong> — triage av ustabile tester, rapportering, styring</summary>
|
|
@@ -452,18 +481,18 @@ mjolnir ci install
|
|
|
452
481
|
Eller legg Marketplace-action-en til en workflow du allerede har:
|
|
453
482
|
|
|
454
483
|
```yaml
|
|
455
|
-
- uses: Sergey-Bar/Mjolnir@
|
|
484
|
+
- uses: Sergey-Bar/Mjolnir@v3
|
|
456
485
|
with:
|
|
457
486
|
scope: changed
|
|
458
487
|
fail-on: error
|
|
459
488
|
```
|
|
460
489
|
|
|
461
|
-
Fest `@
|
|
490
|
+
Fest `@v3` for å følge major-linjen, eller en eksakt tagg (`@v0.5.32`) for en reproduserbar gate. [docs/DISTRIBUTION-KIT.md](docs/DISTRIBUTION-KIT.md) dekker Marketplace, Smithery og MCP-registrene.
|
|
462
491
|
|
|
463
492
|
For å få funn inn i GitHub Code Scanning, last opp SARIF (krever `security-events: write` på workflow- eller job-nivå):
|
|
464
493
|
|
|
465
494
|
```yaml
|
|
466
|
-
- run: npx mjolnir-qa@
|
|
495
|
+
- run: npx mjolnir-qa@3.0.0 --format sarif > mjolnir.sarif
|
|
467
496
|
continue-on-error: true
|
|
468
497
|
- uses: github/codeql-action/upload-sarif@v3
|
|
469
498
|
if: ${{ !cancelled() }}
|
|
@@ -476,7 +505,7 @@ På GitLab skriver `--format codequality` Code Quality-rapporten som MR-widgeten
|
|
|
476
505
|
### Tilordning i endret omfang
|
|
477
506
|
|
|
478
507
|
```bash
|
|
479
|
-
npx mjolnir-qa@
|
|
508
|
+
npx mjolnir-qa@3.0.0 --scope changed
|
|
480
509
|
```
|
|
481
510
|
|
|
482
511
|
Funn tilordnes linjene grenen din har lagt til, målt mot **merge-base**. Omfanget er det samme filsettet en full skanning finner (TS/JS-specs og adapterkonfigurasjoner, `test_*.py`, `*Test.java`, `*Tests.cs`, `.github/workflows/*.yml`), pluss ikke-committede og usporede endringer, så det fungerer før du committer. Basen løses i rekkefølgen `main → master → origin/main → origin/master → origin/HEAD`; overstyr den med `--base <ref>`.
|
|
@@ -504,7 +533,7 @@ SCAN → EVIDENCE → HANDOFF → AGENT → RE-SCAN → PROOF
|
|
|
504
533
|
Legg det til i en klient som har sin egen CLI:
|
|
505
534
|
|
|
506
535
|
```bash
|
|
507
|
-
claude mcp add mjolnir -- npx -y mjolnir-qa@
|
|
536
|
+
claude mcp add mjolnir -- npx -y mjolnir-qa@3.0.0 mcp
|
|
508
537
|
```
|
|
509
538
|
|
|
510
539
|
Eller i en hvilken som helst klient som tar en `mcpServers`-blokk:
|
|
@@ -512,7 +541,7 @@ Eller i en hvilken som helst klient som tar en `mcpServers`-blokk:
|
|
|
512
541
|
```json
|
|
513
542
|
{
|
|
514
543
|
"mcpServers": {
|
|
515
|
-
"mjolnir": { "command": "npx", "args": ["-y", "mjolnir-qa@
|
|
544
|
+
"mjolnir": { "command": "npx", "args": ["-y", "mjolnir-qa@3.0.0", "mcp"] }
|
|
516
545
|
}
|
|
517
546
|
}
|
|
518
547
|
```
|
|
@@ -603,7 +632,7 @@ Utviklingsmiljøet, kommandoene for de faste gatene og anti-creep- og fixture-br
|
|
|
603
632
|
<img src="assets/readme/closing.svg" alt="Kjør det på repoet ditt." width="100%" />
|
|
604
633
|
|
|
605
634
|
```bash
|
|
606
|
-
npx mjolnir-qa@
|
|
635
|
+
npx mjolnir-qa@3.0.0
|
|
607
636
|
```
|
|
608
637
|
|
|
609
638
|
[Les veiledningen](https://sergey-bar.github.io/Mjolnir/guide/getting-started) · [Dokumentasjonsnettsted](https://sergey-bar.github.io/Mjolnir/) · [npm](https://www.npmjs.com/package/mjolnir-qa)
|
package/README.pl.md
CHANGED
|
@@ -18,7 +18,7 @@ a potem ocenia, na ile można ufać wynikowi, podając dowód dla każdego punkt
|
|
|
18
18
|
[](https://nodejs.org)
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
npx mjolnir-qa@
|
|
21
|
+
npx mjolnir-qa@3.0.0
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
[Zobacz w działaniu](#zobacz-w-działaniu) · [Szybki start](#szybki-start) · [Co znajduje](#co-znajduje-mjölnir) · [Wynik](#wynik-wiarygodności) · [Dowody](#model-dowodów) · [Analiza przebiegów](#analiza-przebiegów-testów) · [CI](#integralność-ci) · [Agenci](#agenci-ai) · [Bezpieczeństwo](#zaufanie-i-bezpieczeństwo) · [Ograniczenia](#czego-mjölnir-nie-może-ci-powiedzieć) · [Dokumentacja](#dokumentacja)
|
|
@@ -28,9 +28,9 @@ npx mjolnir-qa@latest
|
|
|
28
28
|
|
|
29
29
|
[English](README.md) | [简体中文](README.zh.md) | [繁體中文](README.zht.md) | [한국어](README.ko.md) | [Deutsch](README.de.md) | [Español](README.es.md) | [Français](README.fr.md) | [Italiano](README.it.md) | [Dansk](README.da.md) | [日本語](README.ja.md) | Polski | [Русский](README.ru.md) | [Norsk](README.no.md) | [Português (Brasil)](README.br.md) | [ไทย](README.th.md) | [Türkçe](README.tr.md) | [Українська](README.uk.md) | [বাংলা](README.bn.md) | [Ελληνικά](README.gr.md) | [Tiếng Việt](README.vi.md) | [עברית](README.he.md) | [العربية](README.ar.md) | [Bosanski](README.bs.md)
|
|
30
30
|
|
|
31
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
31
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-26.
|
|
32
32
|
|
|
33
|
-
<!-- Source hash:
|
|
33
|
+
<!-- Source hash: `de04dfb1677b` -->
|
|
34
34
|
|
|
35
35
|
</details>
|
|
36
36
|
|
|
@@ -38,6 +38,20 @@ npx mjolnir-qa@latest
|
|
|
38
38
|
|
|
39
39
|
<br />
|
|
40
40
|
|
|
41
|
+
## Release status (English canonical)
|
|
42
|
+
|
|
43
|
+
The published line is `3.0.0`; this working tree is the `4.0.0-rc.1`
|
|
44
|
+
candidate. `3.0.0` must not be republished or retagged. The M26–M50 program is
|
|
45
|
+
tracked in
|
|
46
|
+
[`docs/ROADMAP.yaml`](docs/ROADMAP.yaml); provisional capability contracts
|
|
47
|
+
are not automatically enabled or certified. Repository-owned checks pass, but
|
|
48
|
+
Trust certification remains `NOT_CERTIFIED` until the protected holdout,
|
|
49
|
+
real-world, platform/consumer, remote-workflow, support-matrix, and corpus
|
|
50
|
+
evidence gates pass. Run `npm run m26:readiness` before treating any candidate
|
|
51
|
+
as releasable. This document does not publish a tag or authorize a release.
|
|
52
|
+
|
|
53
|
+
> Machine-assisted canonical text. Translate this block before treating it as localized copy.
|
|
54
|
+
|
|
41
55
|
## Zielony znacznik to deklaracja, a nie dowód
|
|
42
56
|
|
|
43
57
|
Zielony znacznik oznacza, że pipeline nie zawiódł. Nie oznacza, że testy się wykonały ani że mogły zawieść. Każdy z tych przypadków przechodzi na zielono:
|
|
@@ -58,7 +72,7 @@ Zielony znacznik oznacza, że pipeline nie zawiódł. Nie oznacza, że testy si
|
|
|
58
72
|
|
|
59
73
|
<sub>Każde znalezisko, które skan demonstracyjny zgłosił dla tego workflow, w zgłoszonym wierszu. Wygenerowane przez `npm run docs:readme-brand` z [`demo-report.json`](assets/readme/demo-report.json) i zabezpieczone w CI przed rozjazdem.</sub>
|
|
60
74
|
|
|
61
|
-
**Tryb ścisły.** Najbardziej agresywne wykrycia — `.only`, `continue-on-error`, puste testy, nadużywanie ponownych prób — żyją w poziomie kwarantanny. Działają tylko z `--strict` i są ograniczone do ważności `info`: oznaczają, ale nigdy nie blokują. Domyślne skanowanie (`npx mjolnir-qa@
|
|
75
|
+
**Tryb ścisły.** Najbardziej agresywne wykrycia — `.only`, `continue-on-error`, puste testy, nadużywanie ponownych prób — żyją w poziomie kwarantanny. Działają tylko z `--strict` i są ograniczone do ważności `info`: oznaczają, ale nigdy nie blokują. Domyślne skanowanie (`npx mjolnir-qa@3.0.0` bez `--strict`) obejmuje tylko reguły rdzeniowe i rozszerzone. Dodaj `--strict`, gdy chcesz też warstwę doradczą.
|
|
62
76
|
|
|
63
77
|
Mjölnir czyta zestaw testów, workflow CI oraz, jeśli go masz, raport z prawdziwego przebiegu. Nie uruchamia twoich testów, nie instaluje zależności ani nie wykonuje skanowanego kodu. A gdy nie ma dowodów, mówi to wprost, zamiast wymyślać pewność:
|
|
64
78
|
|
|
@@ -93,7 +107,7 @@ Prawdziwy skan [`examples/demo-repo`](examples/demo-repo), małego zestawu Playw
|
|
|
93
107
|
|
|
94
108
|
<p align="center">
|
|
95
109
|
<a href="assets/video/mjolnir-demo.mp4">
|
|
96
|
-
<img src="assets/video/mjolnir-demo-poster.png" alt="Klatka nagrania demonstracyjnego: npx mjolnir-qa@
|
|
110
|
+
<img src="assets/video/mjolnir-demo-poster.png" alt="Klatka nagrania demonstracyjnego: npx mjolnir-qa@3.0.0 skanuje repozytorium demonstracyjne w oknie terminala" width="900" />
|
|
97
111
|
</a>
|
|
98
112
|
</p>
|
|
99
113
|
|
|
@@ -162,7 +176,7 @@ To jest jednostka wartości: jedno miejsce, w którym CI zgłasza przejście, na
|
|
|
162
176
|
## Szybki start
|
|
163
177
|
|
|
164
178
|
```bash
|
|
165
|
-
npx mjolnir-qa@
|
|
179
|
+
npx mjolnir-qa@3.0.0
|
|
166
180
|
```
|
|
167
181
|
|
|
168
182
|
Skanuje bieżący katalog i wypisuje Trust Report: co znalazł, na ile możesz temu ufać, dlaczego i co zrobić dalej. Kończy się kodem `0`, gdy nie znaleziono niczego na poziomie bramki lub powyżej.
|
|
@@ -170,24 +184,39 @@ Skanuje bieżący katalog i wypisuje Trust Report: co znalazł, na ile możesz t
|
|
|
170
184
|
W CI skanuj tylko to, co wprowadziła gałąź, aby stary zestaw testów nie zatopił twojego pierwszego pull requesta:
|
|
171
185
|
|
|
172
186
|
```bash
|
|
173
|
-
npx mjolnir-qa@
|
|
187
|
+
npx mjolnir-qa@3.0.0 --scope changed
|
|
174
188
|
```
|
|
175
189
|
|
|
176
|
-
`mjolnir ci install` zapisuje to jako workflow GitHub Actions, używając [akcji](https://github.com/Sergey-Bar/Mjolnir#readme) przypiętej do głównego tagu `
|
|
177
|
-
|
|
178
|
-
| Polecenie
|
|
179
|
-
|
|
|
180
|
-
| `mjolnir`
|
|
181
|
-
| `mjolnir --scope changed`
|
|
182
|
-
| `mjolnir ci install`
|
|
183
|
-
| `mjolnir
|
|
184
|
-
| `mjolnir
|
|
185
|
-
| `mjolnir
|
|
186
|
-
| `mjolnir
|
|
187
|
-
| `mjolnir
|
|
188
|
-
| `mjolnir
|
|
189
|
-
| `mjolnir
|
|
190
|
-
| `mjolnir --
|
|
190
|
+
`mjolnir ci install` zapisuje to jako workflow GitHub Actions, używając [akcji](https://github.com/Sergey-Bar/Mjolnir#readme) przypiętej do głównego tagu `v3` (albo zwykłego `npx` z `--no-action`). Pozostaje doradczy, dopóki nie zdecydujesz, że ma blokować.
|
|
191
|
+
|
|
192
|
+
| Polecenie | Co robi |
|
|
193
|
+
| --------------------------------------------- | ----------------------------------------------------------- |
|
|
194
|
+
| `mjolnir` | Trust Report: werdykt, pewność, następny krok |
|
|
195
|
+
| `mjolnir --scope changed` | Tylko to, co wprowadziła twoja gałąź (forma dla CI) |
|
|
196
|
+
| `mjolnir ci install` | Generuje doradczy workflow dla PR (oparty na akcji) |
|
|
197
|
+
| `mjolnir business-case` | ROI estimate: projected savings per finding |
|
|
198
|
+
| `mjolnir release-report` | Release readiness: GO, CONDITIONAL GO, or NO-GO |
|
|
199
|
+
| `mjolnir release-trust` | 12-dimension release assurance verdict |
|
|
200
|
+
| `mjolnir report` | Generate a Playwright-compatible report |
|
|
201
|
+
| `mjolnir trend` | Record, show, or diff local quality snapshots |
|
|
202
|
+
| `mjolnir policy` | Initialize, validate, or check policy gates |
|
|
203
|
+
| `mjolnir quarantine` | Review deterministic proposals (prototype) |
|
|
204
|
+
| `mjolnir analyze --cross-file` | Bounded cross-file analysis |
|
|
205
|
+
| `mjolnir ci-adapter github .` | Generate CI templates for supported providers |
|
|
206
|
+
| `mjolnir dashboard` | Generate a self-contained quality dashboard |
|
|
207
|
+
| `mjolnir exec-report` | Executive KPIs and recommendations (advisory) |
|
|
208
|
+
| `mjolnir enterprise` | Self-hosted templates (prototype) |
|
|
209
|
+
| `mjolnir maturity` | Assess maturity or display maturity levels |
|
|
210
|
+
| `mjolnir mutation tests/mutation-report.json` | Analyze mutation reports; never promotes trust |
|
|
211
|
+
| `mjolnir mcp` | Read-only MCP tools over stdio |
|
|
212
|
+
| `mjolnir explain QA-CI-001` | Co, dlaczego i jak naprawić, plus zmierzony odsetek FP |
|
|
213
|
+
| `mjolnir why src/a.spec.ts:42` | Dlaczego oznaczono dokładnie ten wiersz. Nigdy nie blokuje. |
|
|
214
|
+
| `mjolnir forensics ./test-results/` | Dowody z prawdziwego przebiegu |
|
|
215
|
+
| `mjolnir trust-report` | Samodzielny Trust Artifact (md + json) |
|
|
216
|
+
| `mjolnir handoff` | Plan naprawy dla agenta kodującego |
|
|
217
|
+
| `mjolnir --json` / `--format sarif` | Wyjście czytelne maszynowo, GitHub Code Scanning |
|
|
218
|
+
| `mjolnir --format codequality` | Raport GitLab Code Quality (artefakt widżetu MR) |
|
|
219
|
+
| `mjolnir --strict` | Uruchamia też reguły poziomu quarantine (wyższe ryzyko FP) |
|
|
191
220
|
|
|
192
221
|
<details>
|
|
193
222
|
<summary><strong>Wszystkie pozostałe polecenia</strong> — triaż niestabilnych testów, raportowanie, nadzór</summary>
|
|
@@ -452,18 +481,18 @@ mjolnir ci install
|
|
|
452
481
|
Albo dodaj akcję z Marketplace do workflow, który już masz:
|
|
453
482
|
|
|
454
483
|
```yaml
|
|
455
|
-
- uses: Sergey-Bar/Mjolnir@
|
|
484
|
+
- uses: Sergey-Bar/Mjolnir@v3
|
|
456
485
|
with:
|
|
457
486
|
scope: changed
|
|
458
487
|
fail-on: error
|
|
459
488
|
```
|
|
460
489
|
|
|
461
|
-
Przypnij `@
|
|
490
|
+
Przypnij `@v3`, aby podążać za główną linią, albo dokładny tag (`@v0.5.32`) dla powtarzalnej bramki. [docs/DISTRIBUTION-KIT.md](docs/DISTRIBUTION-KIT.md) opisuje Marketplace, Smithery i rejestry MCP.
|
|
462
491
|
|
|
463
492
|
Aby umieścić znaleziska w GitHub Code Scanning, wyślij SARIF (wymaga `security-events: write` na poziomie workflow lub job):
|
|
464
493
|
|
|
465
494
|
```yaml
|
|
466
|
-
- run: npx mjolnir-qa@
|
|
495
|
+
- run: npx mjolnir-qa@3.0.0 --format sarif > mjolnir.sarif
|
|
467
496
|
continue-on-error: true
|
|
468
497
|
- uses: github/codeql-action/upload-sarif@v3
|
|
469
498
|
if: ${{ !cancelled() }}
|
|
@@ -476,7 +505,7 @@ W GitLab `--format codequality` zapisuje raport Code Quality, który czytają wi
|
|
|
476
505
|
### Przypisanie w zakresie zmian
|
|
477
506
|
|
|
478
507
|
```bash
|
|
479
|
-
npx mjolnir-qa@
|
|
508
|
+
npx mjolnir-qa@3.0.0 --scope changed
|
|
480
509
|
```
|
|
481
510
|
|
|
482
511
|
Znaleziska są przypisywane do wierszy dodanych przez twoją gałąź, liczonych względem **merge-base**. Zakres to ten sam zbiór plików, który odkrywa pełny skan (specyfikacje TS/JS i konfiguracje adapterów, `test_*.py`, `*Test.java`, `*Tests.cs`, `.github/workflows/*.yml`), plus niezacommitowane i nieśledzone zmiany, więc działa jeszcze przed commitem. Baza jest rozwiązywana w kolejności `main → master → origin/main → origin/master → origin/HEAD`; możesz ją nadpisać przez `--base <ref>`.
|
|
@@ -504,7 +533,7 @@ SCAN → EVIDENCE → HANDOFF → AGENT → RE-SCAN → PROOF
|
|
|
504
533
|
Dodaj go do klienta, który ma własne CLI:
|
|
505
534
|
|
|
506
535
|
```bash
|
|
507
|
-
claude mcp add mjolnir -- npx -y mjolnir-qa@
|
|
536
|
+
claude mcp add mjolnir -- npx -y mjolnir-qa@3.0.0 mcp
|
|
508
537
|
```
|
|
509
538
|
|
|
510
539
|
Albo do dowolnego klienta, który przyjmuje blok `mcpServers`:
|
|
@@ -512,7 +541,7 @@ Albo do dowolnego klienta, który przyjmuje blok `mcpServers`:
|
|
|
512
541
|
```json
|
|
513
542
|
{
|
|
514
543
|
"mcpServers": {
|
|
515
|
-
"mjolnir": { "command": "npx", "args": ["-y", "mjolnir-qa@
|
|
544
|
+
"mjolnir": { "command": "npx", "args": ["-y", "mjolnir-qa@3.0.0", "mcp"] }
|
|
516
545
|
}
|
|
517
546
|
}
|
|
518
547
|
```
|
|
@@ -603,7 +632,7 @@ mjolnir create-rule QA-PW-140 --title "Screenshot without diff bound"
|
|
|
603
632
|
<img src="assets/readme/closing.svg" alt="Uruchom go na swoim repo." width="100%" />
|
|
604
633
|
|
|
605
634
|
```bash
|
|
606
|
-
npx mjolnir-qa@
|
|
635
|
+
npx mjolnir-qa@3.0.0
|
|
607
636
|
```
|
|
608
637
|
|
|
609
638
|
[Przeczytaj przewodnik](https://sergey-bar.github.io/Mjolnir/guide/getting-started) · [Strona dokumentacji](https://sergey-bar.github.io/Mjolnir/) · [npm](https://www.npmjs.com/package/mjolnir-qa)
|
package/README.ru.md
CHANGED
|
@@ -18,7 +18,7 @@ Mjölnir находит тесты, которые не могут упасть,
|
|
|
18
18
|
[](https://nodejs.org)
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
npx mjolnir-qa@
|
|
21
|
+
npx mjolnir-qa@3.0.0
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
[Посмотреть в работе](#посмотреть-в-работе) · [Быстрый старт](#быстрый-старт) · [Что находит](#что-находит-mjölnir) · [Оценка](#оценка-надёжности) · [Доказательства](#модель-доказательств) · [Анализ прогонов](#анализ-прогонов-тестов) · [CI](#целостность-ci) · [Агенты](#ии-агенты) · [Безопасность](#доверие-и-безопасность) · [Ограничения](#чего-mjölnir-сказать-не-может) · [Документация](#документация)
|
|
@@ -28,9 +28,9 @@ npx mjolnir-qa@latest
|
|
|
28
28
|
|
|
29
29
|
[English](README.md) | [简体中文](README.zh.md) | [繁體中文](README.zht.md) | [한국어](README.ko.md) | [Deutsch](README.de.md) | [Español](README.es.md) | [Français](README.fr.md) | [Italiano](README.it.md) | [Dansk](README.da.md) | [日本語](README.ja.md) | [Polski](README.pl.md) | Русский | [Norsk](README.no.md) | [Português (Brasil)](README.br.md) | [ไทย](README.th.md) | [Türkçe](README.tr.md) | [Українська](README.uk.md) | [বাংলা](README.bn.md) | [Ελληνικά](README.gr.md) | [Tiếng Việt](README.vi.md) | [עברית](README.he.md) | [العربية](README.ar.md) | [Bosanski](README.bs.md)
|
|
30
30
|
|
|
31
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
31
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-26.
|
|
32
32
|
|
|
33
|
-
<!-- Source hash:
|
|
33
|
+
<!-- Source hash: `de04dfb1677b` -->
|
|
34
34
|
|
|
35
35
|
</details>
|
|
36
36
|
|
|
@@ -38,6 +38,20 @@ npx mjolnir-qa@latest
|
|
|
38
38
|
|
|
39
39
|
<br />
|
|
40
40
|
|
|
41
|
+
## Release status (English canonical)
|
|
42
|
+
|
|
43
|
+
The published line is `3.0.0`; this working tree is the `4.0.0-rc.1`
|
|
44
|
+
candidate. `3.0.0` must not be republished or retagged. The M26–M50 program is
|
|
45
|
+
tracked in
|
|
46
|
+
[`docs/ROADMAP.yaml`](docs/ROADMAP.yaml); provisional capability contracts
|
|
47
|
+
are not automatically enabled or certified. Repository-owned checks pass, but
|
|
48
|
+
Trust certification remains `NOT_CERTIFIED` until the protected holdout,
|
|
49
|
+
real-world, platform/consumer, remote-workflow, support-matrix, and corpus
|
|
50
|
+
evidence gates pass. Run `npm run m26:readiness` before treating any candidate
|
|
51
|
+
as releasable. This document does not publish a tag or authorize a release.
|
|
52
|
+
|
|
53
|
+
> Machine-assisted canonical text. Translate this block before treating it as localized copy.
|
|
54
|
+
|
|
41
55
|
## Зелёная галочка — это заявление, а не доказательство
|
|
42
56
|
|
|
43
57
|
Зелёная галочка означает, что пайплайн не упал. Она не означает, что тесты запускались или что они могли упасть. Каждый из этих случаев проходит зелёным:
|
|
@@ -58,7 +72,7 @@ npx mjolnir-qa@latest
|
|
|
58
72
|
|
|
59
73
|
<sub>Каждая находка, которую демонстрационное сканирование выдало для этого workflow, на указанной строке. Сгенерировано командой `npm run docs:readme-brand` из [`demo-report.json`](assets/readme/demo-report.json) и защищено от расхождений в CI.</sub>
|
|
60
74
|
|
|
61
|
-
**Строгий режим.** Самые агрессивные детекции — `.only`, `continue-on-error`, пустые тесты, злоупотребление повторами — живут в карантинном ярусе. Они запускаются только с `--strict` и ограничены серьёзностью `info`: помечают, но никогда не блокируют. Сканирование по умолчанию (`npx mjolnir-qa@
|
|
75
|
+
**Строгий режим.** Самые агрессивные детекции — `.only`, `continue-on-error`, пустые тесты, злоупотребление повторами — живут в карантинном ярусе. Они запускаются только с `--strict` и ограничены серьёзностью `info`: помечают, но никогда не блокируют. Сканирование по умолчанию (`npx mjolnir-qa@3.0.0` без `--strict`) покрывает только основные и расширенные правила. Добавьте `--strict`, когда хотите и консультативный слой.
|
|
62
76
|
|
|
63
77
|
Mjölnir читает набор тестов, CI-workflow и, если он есть, отчёт реального прогона. Он не запускает ваши тесты, не устанавливает зависимости и не выполняет сканируемый код. А когда доказательств нет, он так и говорит, вместо того чтобы выдумывать уверенность:
|
|
64
78
|
|
|
@@ -93,7 +107,7 @@ Mjölnir читает набор тестов, CI-workflow и, если он е
|
|
|
93
107
|
|
|
94
108
|
<p align="center">
|
|
95
109
|
<a href="assets/video/mjolnir-demo.mp4">
|
|
96
|
-
<img src="assets/video/mjolnir-demo-poster.png" alt="Кадр демонстрационной записи: npx mjolnir-qa@
|
|
110
|
+
<img src="assets/video/mjolnir-demo-poster.png" alt="Кадр демонстрационной записи: npx mjolnir-qa@3.0.0 сканирует демонстрационный репозиторий в окне терминала" width="900" />
|
|
97
111
|
</a>
|
|
98
112
|
</p>
|
|
99
113
|
|
|
@@ -162,7 +176,7 @@ Docs: mjolnir rules --md (full catalog, this rule included)
|
|
|
162
176
|
## Быстрый старт
|
|
163
177
|
|
|
164
178
|
```bash
|
|
165
|
-
npx mjolnir-qa@
|
|
179
|
+
npx mjolnir-qa@3.0.0
|
|
166
180
|
```
|
|
167
181
|
|
|
168
182
|
Он сканирует текущий каталог и выводит Trust Report: что найдено, насколько этому можно доверять, почему и что делать дальше. Он завершается с кодом `0`, если на уровне гейта или выше ничего не найдено.
|
|
@@ -170,24 +184,39 @@ npx mjolnir-qa@latest
|
|
|
170
184
|
В CI сканируйте только то, что внесла ветка, чтобы унаследованный набор тестов не утопил ваш первый pull request:
|
|
171
185
|
|
|
172
186
|
```bash
|
|
173
|
-
npx mjolnir-qa@
|
|
187
|
+
npx mjolnir-qa@3.0.0 --scope changed
|
|
174
188
|
```
|
|
175
189
|
|
|
176
|
-
`mjolnir ci install` записывает это как workflow GitHub Actions с [action](https://github.com/Sergey-Bar/Mjolnir#readme), закреплённым на мажорном теге `
|
|
177
|
-
|
|
178
|
-
| Команда
|
|
179
|
-
|
|
|
180
|
-
| `mjolnir`
|
|
181
|
-
| `mjolnir --scope changed`
|
|
182
|
-
| `mjolnir ci install`
|
|
183
|
-
| `mjolnir
|
|
184
|
-
| `mjolnir
|
|
185
|
-
| `mjolnir
|
|
186
|
-
| `mjolnir
|
|
187
|
-
| `mjolnir
|
|
188
|
-
| `mjolnir
|
|
189
|
-
| `mjolnir
|
|
190
|
-
| `mjolnir --
|
|
190
|
+
`mjolnir ci install` записывает это как workflow GitHub Actions с [action](https://github.com/Sergey-Bar/Mjolnir#readme), закреплённым на мажорном теге `v3` (или просто `npx` с `--no-action`). Он остаётся рекомендательным, пока вы не решите, что он должен блокировать.
|
|
191
|
+
|
|
192
|
+
| Команда | Что делает |
|
|
193
|
+
| --------------------------------------------- | ----------------------------------------------------------- |
|
|
194
|
+
| `mjolnir` | Trust Report: вердикт, уверенность, следующее действие |
|
|
195
|
+
| `mjolnir --scope changed` | Только то, что внесла ваша ветка (вариант для CI) |
|
|
196
|
+
| `mjolnir ci install` | Создаёт рекомендательный workflow для PR (на основе action) |
|
|
197
|
+
| `mjolnir business-case` | ROI estimate: projected savings per finding |
|
|
198
|
+
| `mjolnir release-report` | Release readiness: GO, CONDITIONAL GO, or NO-GO |
|
|
199
|
+
| `mjolnir release-trust` | 12-dimension release assurance verdict |
|
|
200
|
+
| `mjolnir report` | Generate a Playwright-compatible report |
|
|
201
|
+
| `mjolnir trend` | Record, show, or diff local quality snapshots |
|
|
202
|
+
| `mjolnir policy` | Initialize, validate, or check policy gates |
|
|
203
|
+
| `mjolnir quarantine` | Review deterministic proposals (prototype) |
|
|
204
|
+
| `mjolnir analyze --cross-file` | Bounded cross-file analysis |
|
|
205
|
+
| `mjolnir ci-adapter github .` | Generate CI templates for supported providers |
|
|
206
|
+
| `mjolnir dashboard` | Generate a self-contained quality dashboard |
|
|
207
|
+
| `mjolnir exec-report` | Executive KPIs and recommendations (advisory) |
|
|
208
|
+
| `mjolnir enterprise` | Self-hosted templates (prototype) |
|
|
209
|
+
| `mjolnir maturity` | Assess maturity or display maturity levels |
|
|
210
|
+
| `mjolnir mutation tests/mutation-report.json` | Analyze mutation reports; never promotes trust |
|
|
211
|
+
| `mjolnir mcp` | Read-only MCP tools over stdio |
|
|
212
|
+
| `mjolnir explain QA-CI-001` | Что, почему и как исправить, плюс измеренная доля FP |
|
|
213
|
+
| `mjolnir why src/a.spec.ts:42` | Почему отмечена именно эта строка. Никогда не блокирует. |
|
|
214
|
+
| `mjolnir forensics ./test-results/` | Доказательства из реального прогона |
|
|
215
|
+
| `mjolnir trust-report` | Самодостаточный Trust Artifact (md + json) |
|
|
216
|
+
| `mjolnir handoff` | План исправлений для агента-программиста |
|
|
217
|
+
| `mjolnir --json` / `--format sarif` | Машиночитаемый вывод, GitHub Code Scanning |
|
|
218
|
+
| `mjolnir --format codequality` | Отчёт GitLab Code Quality (артефакт виджета MR) |
|
|
219
|
+
| `mjolnir --strict` | Также запускает правила уровня quarantine (выше риск FP) |
|
|
191
220
|
|
|
192
221
|
<details>
|
|
193
222
|
<summary><strong>Все остальные команды</strong> — разбор нестабильных тестов, отчёты, контроль</summary>
|
|
@@ -452,18 +481,18 @@ mjolnir ci install
|
|
|
452
481
|
Или добавьте action из Marketplace в уже существующий workflow:
|
|
453
482
|
|
|
454
483
|
```yaml
|
|
455
|
-
- uses: Sergey-Bar/Mjolnir@
|
|
484
|
+
- uses: Sergey-Bar/Mjolnir@v3
|
|
456
485
|
with:
|
|
457
486
|
scope: changed
|
|
458
487
|
fail-on: error
|
|
459
488
|
```
|
|
460
489
|
|
|
461
|
-
Закрепите `@
|
|
490
|
+
Закрепите `@v3`, чтобы следовать мажорной линии, или точный тег (`@v0.5.32`) для воспроизводимого гейта. [docs/DISTRIBUTION-KIT.md](docs/DISTRIBUTION-KIT.md) описывает Marketplace, Smithery и реестры MCP.
|
|
462
491
|
|
|
463
492
|
Чтобы отправить находки в GitHub Code Scanning, загрузите SARIF (требуется `security-events: write` на уровне workflow или job):
|
|
464
493
|
|
|
465
494
|
```yaml
|
|
466
|
-
- run: npx mjolnir-qa@
|
|
495
|
+
- run: npx mjolnir-qa@3.0.0 --format sarif > mjolnir.sarif
|
|
467
496
|
continue-on-error: true
|
|
468
497
|
- uses: github/codeql-action/upload-sarif@v3
|
|
469
498
|
if: ${{ !cancelled() }}
|
|
@@ -476,7 +505,7 @@ mjolnir ci install
|
|
|
476
505
|
### Привязка к изменениям ветки
|
|
477
506
|
|
|
478
507
|
```bash
|
|
479
|
-
npx mjolnir-qa@
|
|
508
|
+
npx mjolnir-qa@3.0.0 --scope changed
|
|
480
509
|
```
|
|
481
510
|
|
|
482
511
|
Находки привязываются к строкам, добавленным вашей веткой, относительно **merge-base**. Область — тот же набор файлов, что находит полное сканирование (спецификации TS/JS и конфигурации адаптеров, `test_*.py`, `*Test.java`, `*Tests.cs`, `.github/workflows/*.yml`), плюс незакоммиченные и неотслеживаемые изменения, поэтому это работает ещё до коммита. База определяется в порядке `main → master → origin/main → origin/master → origin/HEAD`; её можно переопределить через `--base <ref>`.
|
|
@@ -504,7 +533,7 @@ SCAN → EVIDENCE → HANDOFF → AGENT → RE-SCAN → PROOF
|
|
|
504
533
|
Добавьте его в клиент, у которого есть собственный CLI:
|
|
505
534
|
|
|
506
535
|
```bash
|
|
507
|
-
claude mcp add mjolnir -- npx -y mjolnir-qa@
|
|
536
|
+
claude mcp add mjolnir -- npx -y mjolnir-qa@3.0.0 mcp
|
|
508
537
|
```
|
|
509
538
|
|
|
510
539
|
Или в любой клиент, принимающий блок `mcpServers`:
|
|
@@ -512,7 +541,7 @@ claude mcp add mjolnir -- npx -y mjolnir-qa@latest mcp
|
|
|
512
541
|
```json
|
|
513
542
|
{
|
|
514
543
|
"mcpServers": {
|
|
515
|
-
"mjolnir": { "command": "npx", "args": ["-y", "mjolnir-qa@
|
|
544
|
+
"mjolnir": { "command": "npx", "args": ["-y", "mjolnir-qa@3.0.0", "mcp"] }
|
|
516
545
|
}
|
|
517
546
|
}
|
|
518
547
|
```
|
|
@@ -603,7 +632,7 @@ mjolnir create-rule QA-PW-140 --title "Screenshot without diff bound"
|
|
|
603
632
|
<img src="assets/readme/closing.svg" alt="Запустите его на своём репозитории." width="100%" />
|
|
604
633
|
|
|
605
634
|
```bash
|
|
606
|
-
npx mjolnir-qa@
|
|
635
|
+
npx mjolnir-qa@3.0.0
|
|
607
636
|
```
|
|
608
637
|
|
|
609
638
|
[Читать руководство](https://sergey-bar.github.io/Mjolnir/guide/getting-started) · [Сайт документации](https://sergey-bar.github.io/Mjolnir/) · [npm](https://www.npmjs.com/package/mjolnir-qa)
|