mjolnir-qa 0.5.38 → 0.6.7
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 +149 -0
- package/README.ar.md +8 -19
- package/README.bn.md +2 -13
- package/README.br.md +14 -25
- package/README.bs.md +8 -19
- package/README.da.md +2 -13
- package/README.de.md +2 -13
- package/README.es.md +8 -19
- package/README.fr.md +33 -44
- package/README.gr.md +8 -19
- package/README.he.md +2 -13
- package/README.it.md +14 -25
- package/README.ja.md +2 -13
- package/README.ko.md +2 -13
- package/README.md +48 -45
- package/README.no.md +8 -19
- package/README.pl.md +7 -18
- package/README.ru.md +14 -25
- package/README.th.md +2 -13
- package/README.tr.md +8 -19
- package/README.uk.md +8 -19
- package/README.vi.md +2 -13
- package/README.zh.md +2 -13
- package/README.zht.md +2 -13
- package/dist/cli.d.mts +51 -8
- package/dist/cli.mjs +9898 -10232
- package/dist/mcp/stdio.mjs +10521 -10855
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -160,6 +160,18 @@ HOW TO FIX
|
|
|
160
160
|
|
|
161
161
|
Example from this rule's own must-fire fixture: QA-CI-001/must-fire/masked.yml
|
|
162
162
|
|
|
163
|
+
WHAT WOULD CHANGE THE VERDICT
|
|
164
|
+
- a run report next to the scan target (mjolnir.report.json or test-results/)
|
|
165
|
+
corroborating this file lifts its findings to L3–L5
|
|
166
|
+
- a documented suppression (mjolnir.config.json) lowers the finding count
|
|
167
|
+
without claiming correctness
|
|
168
|
+
- quarantine findings run only under --strict and are advisory (E0) — they can
|
|
169
|
+
never gate CI
|
|
170
|
+
|
|
171
|
+
NEXT ACTION
|
|
172
|
+
Fix the first occurrence, then re-run: `mjolnir --scope changed`. Every
|
|
173
|
+
occurrence of this rule is listed in the scan output.
|
|
174
|
+
|
|
163
175
|
HOW TO VERIFY THE FIX
|
|
164
176
|
Re-run `mjolnir` on the changed file(s) — this finding should no longer
|
|
165
177
|
appear. `mjolnir --scope changed` scopes the check to just what you touched.
|
|
@@ -178,11 +190,11 @@ reporting a pass it did not earn.
|
|
|
178
190
|
npx mjolnir-qa@latest
|
|
179
191
|
```
|
|
180
192
|
|
|
181
|
-
That is the whole product: it scans the current directory
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
not drown a first PR:
|
|
193
|
+
That is the whole product: it scans the current directory and prints the
|
|
194
|
+
Trust Report — what the scan found, how much you can trust it, why, and
|
|
195
|
+
what to do next — then exits `0` if nothing at or above the gate was
|
|
196
|
+
found. **In CI, use the changed-scope form** — it attributes findings to
|
|
197
|
+
what your branch introduced, so a legacy suite does not drown a first PR:
|
|
186
198
|
|
|
187
199
|
```bash
|
|
188
200
|
npx mjolnir-qa@latest --scope changed
|
|
@@ -195,12 +207,13 @@ pinned to the `v1` major tag) by default, or plain `npx` with
|
|
|
195
207
|
|
|
196
208
|
| Command | What it does |
|
|
197
209
|
| ----------------------------------- | ------------------------------------------------ |
|
|
198
|
-
| `mjolnir` |
|
|
210
|
+
| `mjolnir` | Trust Report — verdict, confidence, next action |
|
|
199
211
|
| `mjolnir --scope changed` | Only what your branch introduced — the CI form |
|
|
200
212
|
| `mjolnir ci install` | Generate the advisory PR workflow (action-based) |
|
|
201
213
|
| `mjolnir explain QA-CI-001` | What / why / fix + measured FP rate for one rule |
|
|
202
214
|
| `mjolnir why src/a.spec.ts:42` | Why this exact line was flagged — never a gate |
|
|
203
215
|
| `mjolnir forensics ./test-results/` | Runtime evidence from a real run |
|
|
216
|
+
| `mjolnir trust-report` | Self-contained Trust Artifact (md + json) |
|
|
204
217
|
| `mjolnir handoff` | Remediation plan for a coding agent |
|
|
205
218
|
| `mjolnir --json` / `--format sarif` | Machine-readable / GitHub Code Scanning |
|
|
206
219
|
| `mjolnir --format codequality` | GitLab Code Quality report (MR widget artifact) |
|
|
@@ -209,28 +222,30 @@ pinned to the `v1` major tag) by default, or plain `npx` with
|
|
|
209
222
|
<details>
|
|
210
223
|
<summary><strong>Everything else</strong> — flake triage, reporting, governance</summary>
|
|
211
224
|
|
|
212
|
-
| Command | What it does
|
|
213
|
-
| ----------------------------------- |
|
|
214
|
-
| `mjolnir
|
|
215
|
-
| `mjolnir
|
|
216
|
-
| `mjolnir
|
|
217
|
-
| `mjolnir
|
|
218
|
-
| `mjolnir
|
|
219
|
-
| `mjolnir
|
|
220
|
-
| `mjolnir
|
|
221
|
-
| `mjolnir
|
|
222
|
-
| `mjolnir
|
|
223
|
-
| `mjolnir
|
|
224
|
-
| `mjolnir
|
|
225
|
-
| `mjolnir
|
|
226
|
-
| `mjolnir
|
|
227
|
-
| `mjolnir
|
|
228
|
-
| `mjolnir
|
|
229
|
-
| `mjolnir
|
|
230
|
-
| `mjolnir
|
|
231
|
-
| `mjolnir
|
|
232
|
-
| `mjolnir
|
|
233
|
-
| `mjolnir
|
|
225
|
+
| Command | What it does |
|
|
226
|
+
| ----------------------------------- | -------------------------------------------------------- |
|
|
227
|
+
| `mjolnir --classic` | The pre-Trust-Report score banner render |
|
|
228
|
+
| `mjolnir explain verdict` | Why the saved scan's verdict is what it is |
|
|
229
|
+
| `mjolnir triage ./test-results/` | Guided triage workflow — every row ends in a next action |
|
|
230
|
+
| `mjolnir pw-report ./test-results/` | Playwright run summary — retries / flakes / slowest |
|
|
231
|
+
| `mjolnir doctor:playwright` | Playwright-only deep scan + Selector Health Score |
|
|
232
|
+
| `mjolnir fix --dry-run` / `fix` | Safe auto-fixes, each re-scanned to prove it landed |
|
|
233
|
+
| `mjolnir baseline` / `diff` | Snapshot findings, then report only new/worsened |
|
|
234
|
+
| `mjolnir impact --since <ref>` | What a commit introduced vs resolved |
|
|
235
|
+
| `mjolnir summary` | CI annotations + step summary from a saved report |
|
|
236
|
+
| `mjolnir pr-comment` | A scoped PR comment, as Markdown |
|
|
237
|
+
| `mjolnir debt` | Test-debt register with a cost model |
|
|
238
|
+
| `mjolnir handover` | New-QA onboarding map of the suite |
|
|
239
|
+
| `mjolnir init` | Detect frameworks + setup checklist (never overwrites) |
|
|
240
|
+
| `mjolnir suppressions` | List suppressed findings — governance transparency |
|
|
241
|
+
| `mjolnir rules --unmeasured` | The rules running on assumption, not measurement |
|
|
242
|
+
| `mjolnir rules --md` | Full rule catalog (JSON or Markdown) |
|
|
243
|
+
| `mjolnir doctor` | Self-audit of Mjölnir's own rule base |
|
|
244
|
+
| `mjolnir create-rule <ID>` | Scaffold a new rule + fixtures |
|
|
245
|
+
| `mjolnir stats` | Local all-time counters of fixes seen |
|
|
246
|
+
| `mjolnir badge` | shields.io endpoint JSON + snippet |
|
|
247
|
+
| `mjolnir --cache` | Incremental re-scans via a local verdict cache |
|
|
248
|
+
| `mjolnir --format mermaid` | Test-architecture diagram for a PR comment |
|
|
234
249
|
|
|
235
250
|
`mjolnir help <command>` prints usage, examples and the next step for any
|
|
236
251
|
of them.
|
|
@@ -247,7 +262,7 @@ have no such requirement.)
|
|
|
247
262
|
|
|
248
263
|
## What Mjölnir finds
|
|
249
264
|
|
|
250
|
-
**<!-- census:total-rules -->
|
|
265
|
+
**<!-- census:total-rules -->78 rules<!-- /census:total-rules -->** in four families — **test hygiene**, **test quality**,
|
|
251
266
|
**Playwright**, **CI integrity** — over TypeScript/JavaScript, Python,
|
|
252
267
|
Java, C# and GitHub Actions YAML, covering Playwright in all four bindings
|
|
253
268
|
plus pytest, JUnit, TestNG, NUnit, xUnit, MSTest, Jest, Vitest and Mocha,
|
|
@@ -263,7 +278,6 @@ is clear:
|
|
|
263
278
|
| QA-TQUAL-009 | Unawaited promise assertion | error | quarantine |
|
|
264
279
|
| QA-PW-002 | Unawaited locator assertion | error | core |
|
|
265
280
|
| QA-PW-004 | Brittle CSS/XPath selectors | warning | quarantine |
|
|
266
|
-
| QA-PW-118 | `networkidle` waits (flaky by design) | info | quarantine |
|
|
267
281
|
| QA-PY-002 | Skipped test (`skip`, non-strict `xfail`) | warning | core |
|
|
268
282
|
| QA-CS-103 | Test method with no assertions | error | core |
|
|
269
283
|
|
|
@@ -272,7 +286,7 @@ The full catalog is generated from the registry, never hand-maintained:
|
|
|
272
286
|
[what-it-checks guide](https://sergey-bar.github.io/Mjolnir/guide/what-it-checks).
|
|
273
287
|
|
|
274
288
|
<details>
|
|
275
|
-
<summary><strong>Every rule named in this README, in one table</strong> — the
|
|
289
|
+
<summary><strong>Every rule named in this README, in one table</strong> — the rest live in <code>mjolnir rules --md</code></summary>
|
|
276
290
|
|
|
277
291
|
> `quarantine` rules run only under `--strict` and never gate (capped to
|
|
278
292
|
> info); the severity shown is the authored severity.
|
|
@@ -285,17 +299,12 @@ The full catalog is generated from the registry, never hand-maintained:
|
|
|
285
299
|
| QA-TEST-004 | Hygiene | Hard sleep (`waitForTimeout`, `sleep()`, `delay()`) | warning | extended |
|
|
286
300
|
| QA-TEST-006 | Hygiene | Retry abuse hiding flakiness | warning | quarantine |
|
|
287
301
|
| QA-TEST-010 | Hygiene | Empty test body | error | quarantine |
|
|
288
|
-
| QA-TQUAL-001 | Quality | Mock-only verification | info | quarantine |
|
|
289
302
|
| QA-TQUAL-002 | Quality | Tautological assertion | error | quarantine |
|
|
290
303
|
| QA-TQUAL-009 | Quality | Unawaited promise assertion | error | quarantine |
|
|
291
304
|
| QA-TQUAL-011 | Quality | Commented-out tests | warning | extended |
|
|
292
305
|
| QA-PW-002 | Playwright | Unawaited locator assertion | error | core |
|
|
293
306
|
| QA-PW-003 | Playwright | `page.pause()` / `test.only()` committed | error | core |
|
|
294
307
|
| QA-PW-004 | Playwright | Brittle CSS/XPath selectors | warning | quarantine |
|
|
295
|
-
| QA-PW-005 | Playwright | Business logic inside `page.evaluate()` | info | quarantine |
|
|
296
|
-
| QA-PW-107 | Playwright | `toBeVisible` where `toBeInViewport` fits better | info | quarantine |
|
|
297
|
-
| QA-PW-114 | Playwright | Legacy element handles (`page.$`) | info | quarantine |
|
|
298
|
-
| QA-PW-118 | Playwright | `networkidle` waits (flaky by design) | info | quarantine |
|
|
299
308
|
| QA-PW-123 | Playwright | Hardcoded environment URLs | warning | quarantine |
|
|
300
309
|
| QA-PW-140 | Playwright | Screenshot without `maxDiffPixelRatio` | warning | core |
|
|
301
310
|
| QA-CI-001 | CI | `continue-on-error` masks a failing gate | error | quarantine |
|
|
@@ -308,23 +317,17 @@ The full catalog is generated from the registry, never hand-maintained:
|
|
|
308
317
|
| QA-PY-002 | Python | Skipped test (`skip`, non-strict `xfail`) | warning | core |
|
|
309
318
|
| QA-PY-003 | Python | Test function with no assertions | error | quarantine |
|
|
310
319
|
| QA-PY-005 | Python | `time.sleep()` in tests | warning | extended |
|
|
311
|
-
| QA-PY-006 | Python | Empty test body (`pass`) | info | quarantine |
|
|
312
|
-
| QA-PY-010 | Python | Random/time dependence without freeze | info | quarantine |
|
|
313
320
|
| QA-PY-012 | Python | Tautological assertion | error | quarantine |
|
|
314
321
|
| QA-JV-101 | Java | Disabled test (`@Disabled`) | warning | core |
|
|
315
322
|
| QA-JV-102 | Java | Hard sleep (`Thread.sleep()`) | warning | extended |
|
|
316
323
|
| QA-JV-103 | Java | Test method with no assertions | error | extended |
|
|
317
324
|
| QA-JV-105 | Java | Playwright `waitForTimeout()` hard sleep | warning | core |
|
|
318
325
|
| QA-JV-106 | Java | Brittle selector instead of role locator | warning | quarantine |
|
|
319
|
-
| QA-JV-108 | Java | Hardcoded environment URL in test | info | quarantine |
|
|
320
|
-
| QA-JV-111 | Java | Blanket `page.route("**")` mock | info | quarantine |
|
|
321
326
|
| QA-CS-101 | C# | Skipped test (`[Ignore]`, `[Fact(Skip=)]`) | warning | core |
|
|
322
327
|
| QA-CS-102 | C# | Hard sleep (`Thread.Sleep` / `Task.Delay`) | warning | core |
|
|
323
328
|
| QA-CS-103 | C# | Test method with no assertions | error | core |
|
|
324
329
|
| QA-CS-105 | C# | `WaitForTimeoutAsync()` hard sleep | warning | extended |
|
|
325
330
|
| QA-CS-106 | C# | Brittle selector instead of role locator | warning | quarantine |
|
|
326
|
-
| QA-CS-108 | C# | Hardcoded environment URL in test | info | quarantine |
|
|
327
|
-
| QA-CS-111 | C# | Blanket `page.RouteAsync("**")` mock | info | quarantine |
|
|
328
331
|
|
|
329
332
|
Python also ships QA-PY-001…012 (pytest hygiene) and QA-PY-101…108
|
|
330
333
|
(Playwright-Python); Cypress and Selenium have starter sets of three
|
|
@@ -439,13 +442,13 @@ Rung by rung: [docs/TERMINOLOGY.md](docs/TERMINOLOGY.md).
|
|
|
439
442
|
|
|
440
443
|
### How much of this is measured
|
|
441
444
|
|
|
442
|
-
**<!-- census:measured-of-total -->
|
|
445
|
+
**<!-- census:measured-of-total -->57 of 78<!-- /census:measured-of-total --> rules carry a false-positive rate measured against real OSS code**
|
|
443
446
|
(≥ 10 hand-classified findings each — [docs/FP-AUDIT.md](docs/FP-AUDIT.md)).
|
|
444
447
|
The other <!-- census:unmeasured -->21<!-- /census:unmeasured --> ship on the author's estimate and say so, per rule, in
|
|
445
448
|
`mjolnir explain`; `mjolnir rules --unmeasured` lists them, and every scan
|
|
446
449
|
footer reports how many of the rules that actually _fired_ are measured.
|
|
447
450
|
|
|
448
|
-
The rate is published even when unflattering: QA-PW-
|
|
451
|
+
The rate is published even when unflattering: QA-PW-141 audits at 43% and
|
|
449
452
|
is quarantined for it. **Mjölnir measures its own uncertainty** — that is
|
|
450
453
|
the product, not a caveat.
|
|
451
454
|
|
|
@@ -682,7 +685,7 @@ artifacts.
|
|
|
682
685
|
product does what the requirement asked for.
|
|
683
686
|
- **A 100 is not proof of a good suite.** Whether your suite covers your
|
|
684
687
|
actual risk is a different question, and this tool does not answer it.
|
|
685
|
-
- **<!-- census:unmeasured-of-total -->21 of
|
|
688
|
+
- **<!-- census:unmeasured-of-total -->21 of 78<!-- /census:unmeasured-of-total --> rules ship on an estimate**, not a measured rate — disclosed
|
|
686
689
|
per rule, not buried here.
|
|
687
690
|
- **E1 is not E2.** Heuristic findings are worth reading, not worth
|
|
688
691
|
applying blindly.
|
package/README.no.md
CHANGED
|
@@ -15,7 +15,7 @@ tilliten bryter sammen.
|
|
|
15
15
|
|
|
16
16
|
[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)
|
|
17
17
|
|
|
18
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
18
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-08.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx mjolnir-qa@latest
|
|
@@ -201,7 +201,6 @@ det er false-positive-brannmuren.
|
|
|
201
201
|
|
|
202
202
|
| ID | Regel | Severity |
|
|
203
203
|
| ------------ | ------------------------------- | -------- |
|
|
204
|
-
| QA-TQUAL-001 | Kun-mock-verifisering | info |
|
|
205
204
|
| QA-TQUAL-002 | Tautologisk assertion | error |
|
|
206
205
|
| QA-TQUAL-009 | Assertion på promise uten await | error |
|
|
207
206
|
| QA-TQUAL-011 | Utkommenterte tester | warning |
|
|
@@ -211,15 +210,12 @@ det er false-positive-brannmuren.
|
|
|
211
210
|
<details>
|
|
212
211
|
<summary><strong>Playwright 🎭</strong></summary>
|
|
213
212
|
|
|
214
|
-
| ID | Regel
|
|
215
|
-
| --------- |
|
|
216
|
-
| QA-PW-002 | Locator-assertion uten await
|
|
217
|
-
| QA-PW-003 | `page.pause()` / `test.only()` commitet
|
|
218
|
-
| QA-PW-004 | Skjøre CSS/XPath-selektorer
|
|
219
|
-
| QA-PW-
|
|
220
|
-
| QA-PW-114 | Legacy element handles (`page.$`) | info |
|
|
221
|
-
| QA-PW-118 | `networkidle`-ventetid (flaky by design) | info |
|
|
222
|
-
| QA-PW-123 | Hardkodede miljø-URLer | warning |
|
|
213
|
+
| ID | Regel | Severity |
|
|
214
|
+
| --------- | --------------------------------------- | -------- |
|
|
215
|
+
| QA-PW-002 | Locator-assertion uten await | error |
|
|
216
|
+
| QA-PW-003 | `page.pause()` / `test.only()` commitet | error |
|
|
217
|
+
| QA-PW-004 | Skjøre CSS/XPath-selektorer | warning |
|
|
218
|
+
| QA-PW-123 | Hardkodede miljø-URLer | warning |
|
|
223
219
|
|
|
224
220
|
</details>
|
|
225
221
|
|
|
@@ -246,8 +242,6 @@ det er false-positive-brannmuren.
|
|
|
246
242
|
| QA-PY-002 | Hoppet over test (`skip`, ikke-strikt `xfail`) | warning |
|
|
247
243
|
| QA-PY-003 | Testfunksjon uten assertions | error |
|
|
248
244
|
| QA-PY-005 | `time.sleep()` i tester | warning |
|
|
249
|
-
| QA-PY-006 | Tomt testkropp (`pass`) | info |
|
|
250
|
-
| QA-PY-010 | Tilfeldighets-/tidsavhengighet uten freeze | info |
|
|
251
245
|
| QA-PY-012 | Tautologisk assertion | error |
|
|
252
246
|
|
|
253
247
|
20 Python-regler totalt (QA-PY-001…012 pytest-hygiene + QA-PY-101…108 Playwright-Python).
|
|
@@ -264,8 +258,6 @@ det er false-positive-brannmuren.
|
|
|
264
258
|
| QA-JV-103 | Testmetode uten assertions | error |
|
|
265
259
|
| QA-JV-105 | Playwright hardt sleep `waitForTimeout()` | warning |
|
|
266
260
|
| QA-JV-106 | Skjør selector i stedet for role-locator | warning |
|
|
267
|
-
| QA-JV-108 | Hardkodet miljø-URL i test | info |
|
|
268
|
-
| QA-JV-111 | Blanket-mock `page.route("**")` | info |
|
|
269
261
|
|
|
270
262
|
</details>
|
|
271
263
|
|
|
@@ -279,8 +271,6 @@ det er false-positive-brannmuren.
|
|
|
279
271
|
| QA-CS-103 | Testmetode uten assertions | error |
|
|
280
272
|
| QA-CS-105 | Hardt sleep `WaitForTimeoutAsync()` | warning |
|
|
281
273
|
| QA-CS-106 | Skjør selector i stedet for role-locator | warning |
|
|
282
|
-
| QA-CS-108 | Hardkodet miljø-URL i test | info |
|
|
283
|
-
| QA-CS-111 | Blanket-mock `page.RouteAsync("**")` | info |
|
|
284
274
|
|
|
285
275
|
</details>
|
|
286
276
|
|
|
@@ -302,7 +292,6 @@ det er false-positive-brannmuren.
|
|
|
302
292
|
forfatterens estimat. Hver skann-fotnote forteller hvor mange av de
|
|
303
293
|
_utløste_ reglene som er målt; `mjolnir rules --unmeasured` lister de
|
|
304
294
|
umålte; hver regels `mjolnir explain`-side angir statusen. Vi publiserer
|
|
305
|
-
raten selv når den er stygg — QA-PW-107 auditeres til 95 % og er satt i
|
|
306
295
|
karantene for det. Å få det tallet til å vokse er prosjektets fortsatte
|
|
307
296
|
arbeid.
|
|
308
297
|
|
|
@@ -522,7 +511,7 @@ scope — den endrer aldri deteksjonssemantikken.
|
|
|
522
511
|
{
|
|
523
512
|
"gate": "error",
|
|
524
513
|
"exclude": ["legacy/**"],
|
|
525
|
-
"severityOverrides": { "QA-PW-
|
|
514
|
+
"severityOverrides": { "QA-PW-141": "warning" },
|
|
526
515
|
"ignore": [
|
|
527
516
|
{
|
|
528
517
|
"ruleId": "QA-TEST-004",
|
package/README.pl.md
CHANGED
|
@@ -15,7 +15,7 @@ gdzie zaufanie się łamie.
|
|
|
15
15
|
|
|
16
16
|
[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)
|
|
17
17
|
|
|
18
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
18
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-08.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx mjolnir-qa@latest
|
|
@@ -200,12 +200,11 @@ nie może się wydać — to zapora na fałszywe pozytywy.
|
|
|
200
200
|
<details>
|
|
201
201
|
<summary><strong>Jakość testów</strong></summary>
|
|
202
202
|
|
|
203
|
-
| ID | Reguła
|
|
204
|
-
| ------------ |
|
|
205
|
-
| QA-TQUAL-
|
|
206
|
-
| QA-TQUAL-
|
|
207
|
-
| QA-TQUAL-
|
|
208
|
-
| QA-TQUAL-011 | Zakomentowane testy | warning |
|
|
203
|
+
| ID | Reguła | Severity |
|
|
204
|
+
| ------------ | ------------------------- | -------- |
|
|
205
|
+
| QA-TQUAL-002 | Asercja tautologiczna | error |
|
|
206
|
+
| QA-TQUAL-009 | Asercja promise bez await | error |
|
|
207
|
+
| QA-TQUAL-011 | Zakomentowane testy | warning |
|
|
209
208
|
|
|
210
209
|
</details>
|
|
211
210
|
|
|
@@ -217,9 +216,6 @@ nie może się wydać — to zapora na fałszywe pozytywy.
|
|
|
217
216
|
| QA-PW-002 | Asercja lokatora bez await | error |
|
|
218
217
|
| QA-PW-003 | `page.pause()` / `test.only()` committowane | error |
|
|
219
218
|
| QA-PW-004 | Kruche selektory CSS/XPath | warning |
|
|
220
|
-
| QA-PW-005 | Logika biznesowa wewnątrz `page.evaluate()` | info |
|
|
221
|
-
| QA-PW-114 | Legacy element handles (`page.$`) | info |
|
|
222
|
-
| QA-PW-118 | Czekanie `networkidle` (flaky by design) | info |
|
|
223
219
|
| QA-PW-123 | Zaszyte na sztywno URL-e środowisk | warning |
|
|
224
220
|
|
|
225
221
|
</details>
|
|
@@ -247,8 +243,6 @@ nie może się wydać — to zapora na fałszywe pozytywy.
|
|
|
247
243
|
| QA-PY-002 | Pominięty test (`skip`, niestrykt `xfail`) | warning |
|
|
248
244
|
| QA-PY-003 | Funkcja testowa bez asercji | error |
|
|
249
245
|
| QA-PY-005 | `time.sleep()` w testach | warning |
|
|
250
|
-
| QA-PY-006 | Puste ciało testu (`pass`) | info |
|
|
251
|
-
| QA-PY-010 | Zależność od losowości/czasu bez freeze | info |
|
|
252
246
|
| QA-PY-012 | Asercja tautologiczna | error |
|
|
253
247
|
|
|
254
248
|
Łącznie 20 reguł Pythona (QA-PY-001…012 higiena pytest + QA-PY-101…108 Playwright-Python).
|
|
@@ -265,8 +259,6 @@ nie może się wydać — to zapora na fałszywe pozytywy.
|
|
|
265
259
|
| QA-JV-103 | Metoda testowa bez asercji | error |
|
|
266
260
|
| QA-JV-105 | Twardy sleep Playwright `waitForTimeout()` | warning |
|
|
267
261
|
| QA-JV-106 | Kruchy selektor zamiast role lokatora | warning |
|
|
268
|
-
| QA-JV-108 | Zaszyty na sztywno URL środowiska w teście | info |
|
|
269
|
-
| QA-JV-111 | Blanketowy mock `page.route("**")` | info |
|
|
270
262
|
|
|
271
263
|
</details>
|
|
272
264
|
|
|
@@ -280,8 +272,6 @@ nie może się wydać — to zapora na fałszywe pozytywy.
|
|
|
280
272
|
| QA-CS-103 | Metoda testowa bez asercji | error |
|
|
281
273
|
| QA-CS-105 | Twardy sleep `WaitForTimeoutAsync()` | warning |
|
|
282
274
|
| QA-CS-106 | Kruchy selektor zamiast role lokatora | warning |
|
|
283
|
-
| QA-CS-108 | Zaszyty na sztywno URL środowiska w teście | info |
|
|
284
|
-
| QA-CS-111 | Blanketowy mock `page.RouteAsync("**")` | info |
|
|
285
275
|
|
|
286
276
|
</details>
|
|
287
277
|
|
|
@@ -303,7 +293,6 @@ zob. [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Pozostałe 21 wychodzi na
|
|
|
303
293
|
oszacowaniu autora. Stopka każdego skanu mówi, ile z _odpalonych_
|
|
304
294
|
reguł jest zmierzonych; `mjolnir rules --unmeasured` wypisuje
|
|
305
295
|
niezmierzone; strona `mjolnir explain` każdej reguły deklaruje jej
|
|
306
|
-
status. Publikujemy stopę, nawet gdy jest brzydka — QA-PW-107 audytuje
|
|
307
296
|
się na 95 % i za to trafia do kwarantanny. Powiększanie tej liczby to
|
|
308
297
|
stale trwająca praca projektu.
|
|
309
298
|
|
|
@@ -526,7 +515,7 @@ nigdy nie zmienia semantyki detekcji.
|
|
|
526
515
|
{
|
|
527
516
|
"gate": "error",
|
|
528
517
|
"exclude": ["legacy/**"],
|
|
529
|
-
"severityOverrides": { "QA-PW-
|
|
518
|
+
"severityOverrides": { "QA-PW-141": "warning" },
|
|
530
519
|
"ignore": [
|
|
531
520
|
{
|
|
532
521
|
"ruleId": "QA-TEST-004",
|
package/README.ru.md
CHANGED
|
@@ -15,7 +15,7 @@ CI-пайплайны, выдаёт показатель достойности
|
|
|
15
15
|
|
|
16
16
|
[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)
|
|
17
17
|
|
|
18
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
18
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-08.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx mjolnir-qa@latest
|
|
@@ -203,7 +203,6 @@ macOS и Linux.
|
|
|
203
203
|
|
|
204
204
|
| ID | Правило | Severity |
|
|
205
205
|
| ------------ | ----------------------------- | -------- |
|
|
206
|
-
| QA-TQUAL-001 | Верификация только моками | info |
|
|
207
206
|
| QA-TQUAL-002 | Тавтологический ассерт | error |
|
|
208
207
|
| QA-TQUAL-009 | Ассерт не-awaitнутого promise | error |
|
|
209
208
|
| QA-TQUAL-011 | Закомментированные тесты | warning |
|
|
@@ -213,15 +212,12 @@ macOS и Linux.
|
|
|
213
212
|
<details>
|
|
214
213
|
<summary><strong>Playwright 🎭</strong></summary>
|
|
215
214
|
|
|
216
|
-
| ID | Правило
|
|
217
|
-
| --------- |
|
|
218
|
-
| QA-PW-002 | Ассерт локатора без await
|
|
219
|
-
| QA-PW-003 | `page.pause()` / `test.only()` в коммите
|
|
220
|
-
| QA-PW-004 | Хрупкие CSS/XPath-селекторы
|
|
221
|
-
| QA-PW-
|
|
222
|
-
| QA-PW-114 | Легаси element handles (`page.$`) | info |
|
|
223
|
-
| QA-PW-118 | Ожидания `networkidle` (флаковые by design) | info |
|
|
224
|
-
| QA-PW-123 | Захардкоженные URL окружений | warning |
|
|
215
|
+
| ID | Правило | Severity |
|
|
216
|
+
| --------- | ---------------------------------------- | -------- |
|
|
217
|
+
| QA-PW-002 | Ассерт локатора без await | error |
|
|
218
|
+
| QA-PW-003 | `page.pause()` / `test.only()` в коммите | error |
|
|
219
|
+
| QA-PW-004 | Хрупкие CSS/XPath-селекторы | warning |
|
|
220
|
+
| QA-PW-123 | Захардкоженные URL окружений | warning |
|
|
225
221
|
|
|
226
222
|
</details>
|
|
227
223
|
|
|
@@ -243,14 +239,12 @@ macOS и Linux.
|
|
|
243
239
|
<details>
|
|
244
240
|
<summary><strong>Python / pytest 🐍</strong></summary>
|
|
245
241
|
|
|
246
|
-
| ID | Правило
|
|
247
|
-
| --------- |
|
|
248
|
-
| QA-PY-002 | Пропущенный тест (`skip`, нестрогий `xfail`)
|
|
249
|
-
| QA-PY-003 | Тестовая функция без ассертов
|
|
250
|
-
| QA-PY-005 | `time.sleep()` в тестах
|
|
251
|
-
| QA-PY-
|
|
252
|
-
| QA-PY-010 | Зависимость от случайности/времени без freeze | info |
|
|
253
|
-
| QA-PY-012 | Тавтологический ассерт | error |
|
|
242
|
+
| ID | Правило | Severity |
|
|
243
|
+
| --------- | -------------------------------------------- | -------- |
|
|
244
|
+
| QA-PY-002 | Пропущенный тест (`skip`, нестрогий `xfail`) | warning |
|
|
245
|
+
| QA-PY-003 | Тестовая функция без ассертов | error |
|
|
246
|
+
| QA-PY-005 | `time.sleep()` в тестах | warning |
|
|
247
|
+
| QA-PY-012 | Тавтологический ассерт | error |
|
|
254
248
|
|
|
255
249
|
Всего 20 Python-правил (QA-PY-001…012 гигиена pytest + QA-PY-101…108 Playwright-Python).
|
|
256
250
|
|
|
@@ -266,8 +260,6 @@ macOS и Linux.
|
|
|
266
260
|
| QA-JV-103 | Тестовый метод без ассертов | error |
|
|
267
261
|
| QA-JV-105 | Жёсткий sleep Playwright `waitForTimeout()` | warning |
|
|
268
262
|
| QA-JV-106 | Хрупкий селектор вместо role-локатора | warning |
|
|
269
|
-
| QA-JV-108 | Захардкоженный URL окружения в тесте | info |
|
|
270
|
-
| QA-JV-111 | Бланкетный мок `page.route("**")` | info |
|
|
271
263
|
|
|
272
264
|
</details>
|
|
273
265
|
|
|
@@ -281,8 +273,6 @@ macOS и Linux.
|
|
|
281
273
|
| QA-CS-103 | Тестовый метод без ассертов | error |
|
|
282
274
|
| QA-CS-105 | Жёсткий sleep `WaitForTimeoutAsync()` | warning |
|
|
283
275
|
| QA-CS-106 | Хрупкий селектор вместо role-локатора | warning |
|
|
284
|
-
| QA-CS-108 | Захардкоженный URL окружения в тесте | info |
|
|
285
|
-
| QA-CS-111 | Бланкетный мок `page.RouteAsync("**")` | info |
|
|
286
276
|
|
|
287
277
|
</details>
|
|
288
278
|
|
|
@@ -304,7 +294,6 @@ macOS и Linux.
|
|
|
304
294
|
выходят на оценке автора. Футер каждого скана говорит, сколько из
|
|
305
295
|
_сработавших_ правил измерены; `mjolnir rules --unmeasured` перечисляет
|
|
306
296
|
неизмеренные; страница `mjolnir explain` каждого правила указывает её
|
|
307
|
-
статус. Мы публикуем частоту, даже когда она уродлива — QA-PW-107
|
|
308
297
|
аудируется на 95 % и за это отправлен в карантин. Увеличивать это
|
|
309
298
|
число — постоянная работа проекта.
|
|
310
299
|
|
|
@@ -526,7 +515,7 @@ Mjölnir — zero-config. Опциональный `mjolnir.config.json` (или
|
|
|
526
515
|
{
|
|
527
516
|
"gate": "error",
|
|
528
517
|
"exclude": ["legacy/**"],
|
|
529
|
-
"severityOverrides": { "QA-PW-
|
|
518
|
+
"severityOverrides": { "QA-PW-141": "warning" },
|
|
530
519
|
"ignore": [
|
|
531
520
|
{
|
|
532
521
|
"ruleId": "QA-TEST-004",
|
package/README.th.md
CHANGED
|
@@ -15,7 +15,7 @@ CI pipelines รายงานคะแนนความน่าเชื่
|
|
|
15
15
|
|
|
16
16
|
[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](README.no.md) | [Português (Brasil)](README.br.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)
|
|
17
17
|
|
|
18
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
18
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-08.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx mjolnir-qa@latest
|
|
@@ -196,7 +196,6 @@ fixture ลบของตัวเองจะปล่อยไม่ได้
|
|
|
196
196
|
|
|
197
197
|
| ID | กฎ | Severity |
|
|
198
198
|
| ------------ | -------------------------------------- | -------- |
|
|
199
|
-
| QA-TQUAL-001 | ตรวจยืนยันด้วย mock เท่านั้น | info |
|
|
200
199
|
| QA-TQUAL-002 | assertion พรรคพวกตัวเอง (tautological) | error |
|
|
201
200
|
| QA-TQUAL-009 | assertion ของ promise ที่ไม่ await | error |
|
|
202
201
|
| QA-TQUAL-011 | ทดสอบที่ถูกคอมเมนต์ทิ้งไว้ | warning |
|
|
@@ -211,9 +210,6 @@ fixture ลบของตัวเองจะปล่อยไม่ได้
|
|
|
211
210
|
| QA-PW-002 | assertion ของ locator ที่ไม่ await | error |
|
|
212
211
|
| QA-PW-003 | `page.pause()` / `test.only()` ถูก commit | error |
|
|
213
212
|
| QA-PW-004 | selector CSS/XPath เปราะ | warning |
|
|
214
|
-
| QA-PW-005 | ตรรกะธุรกิจใน `page.evaluate()` | info |
|
|
215
|
-
| QA-PW-114 | element handles รุ่นเก่า (`page.$`) | info |
|
|
216
|
-
| QA-PW-118 | การรอ `networkidle` (flaky by design) | info |
|
|
217
213
|
| QA-PW-123 | URL สภาพแวดล้อมฝังตาย | warning |
|
|
218
214
|
|
|
219
215
|
</details>
|
|
@@ -241,8 +237,6 @@ fixture ลบของตัวเองจะปล่อยไม่ได้
|
|
|
241
237
|
| QA-PY-002 | ทดสอบถูกข้าม (`skip`, `xfail` ไม่เข้มงวด) | warning |
|
|
242
238
|
| QA-PY-003 | ฟังก์ชันทดสอบไม่มี assertion | error |
|
|
243
239
|
| QA-PY-005 | `time.sleep()` ในการทดสอบ | warning |
|
|
244
|
-
| QA-PY-006 | เนื้อความทดสอบว่าง (`pass`) | info |
|
|
245
|
-
| QA-PY-010 | พึ่งพาความสุ่ม/เวลาโดยไม่ freeze | info |
|
|
246
240
|
| QA-PY-012 | assertion พรรคพวกตัวเอง | error |
|
|
247
241
|
|
|
248
242
|
กฎ Python รวม 20 ข้อ (QA-PY-001…012 สุขอนามัย pytest + QA-PY-101…108 Playwright-Python)
|
|
@@ -259,8 +253,6 @@ fixture ลบของตัวเองจะปล่อยไม่ได้
|
|
|
259
253
|
| QA-JV-103 | วิธีทดสอบไม่มี assertion | error |
|
|
260
254
|
| QA-JV-105 | hard sleep Playwright `waitForTimeout()` | warning |
|
|
261
255
|
| QA-JV-106 | selector เปราะแทน role locator | warning |
|
|
262
|
-
| QA-JV-108 | URL สภาพแวดล้อมฝังตายในทดสอบ | info |
|
|
263
|
-
| QA-JV-111 | mock ครอบคลุมหมด `page.route("**")` | info |
|
|
264
256
|
|
|
265
257
|
</details>
|
|
266
258
|
|
|
@@ -274,8 +266,6 @@ fixture ลบของตัวเองจะปล่อยไม่ได้
|
|
|
274
266
|
| QA-CS-103 | วิธีทดสอบไม่มี assertion | error |
|
|
275
267
|
| QA-CS-105 | hard sleep `WaitForTimeoutAsync()` | warning |
|
|
276
268
|
| QA-CS-106 | selector เปราะแทน role locator | warning |
|
|
277
|
-
| QA-CS-108 | URL สภาพแวดล้อมฝังตายในทดสอบ | info |
|
|
278
|
-
| QA-CS-111 | mock ครอบคลุมหมด `page.RouteAsync("**")` | info |
|
|
279
269
|
|
|
280
270
|
</details>
|
|
281
271
|
|
|
@@ -295,7 +285,6 @@ fixture ลบของตัวเองจะปล่อยไม่ได้
|
|
|
295
285
|
[docs/FP-AUDIT.md](docs/FP-AUDIT.md)) อีก 21 กฎออกมาบนการประเมินของผู้เขียน
|
|
296
286
|
ส่วนท้ายของทุกการสแกนบอกว่ากฎที่ _ยิง_ มีกี่กฎที่วัดแล้ว;
|
|
297
287
|
`mjolnir rules --unmeasured` แสดงกฎที่ยังไม่วัด; หน้า `mjolnir explain`
|
|
298
|
-
ของทุกกฎระบุสถานะ เราเผยแพร่อัตรานี้แม้มันจะน่าเกลียด — QA-PW-107 ตรวจได้
|
|
299
288
|
ที่ 95 % และถูกส่งไปกักกันเพราะเหตุนี้ การทำให้ตัวเลขนั้นโตขึ้นคืองาน
|
|
300
289
|
ต่อเนื่องของโปรเจกต์
|
|
301
290
|
|
|
@@ -510,7 +499,7 @@ Mjölnir เป็น zero-config `mjolnir.config.json` (หรือ `.mjolnir.
|
|
|
510
499
|
{
|
|
511
500
|
"gate": "error",
|
|
512
501
|
"exclude": ["legacy/**"],
|
|
513
|
-
"severityOverrides": { "QA-PW-
|
|
502
|
+
"severityOverrides": { "QA-PW-141": "warning" },
|
|
514
503
|
"ignore": [
|
|
515
504
|
{
|
|
516
505
|
"ruleId": "QA-TEST-004",
|
package/README.tr.md
CHANGED
|
@@ -15,7 +15,7 @@ olarak nerede kırıldığını gösterir.
|
|
|
15
15
|
|
|
16
16
|
[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](README.no.md) | [Português (Brasil)](README.br.md) | [ไทย](README.th.md) | Türkçe | [Українська](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)
|
|
17
17
|
|
|
18
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
18
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-08.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx mjolnir-qa@latest
|
|
@@ -200,7 +200,6 @@ yanlış pozitif duvarıdır.
|
|
|
200
200
|
|
|
201
201
|
| ID | Kural | Severity |
|
|
202
202
|
| ------------ | ----------------------------------- | -------- |
|
|
203
|
-
| QA-TQUAL-001 | Yalnızca mock ile doğrulama | info |
|
|
204
203
|
| QA-TQUAL-002 | Totolojik assertion | error |
|
|
205
204
|
| QA-TQUAL-009 | Await edilmemiş promise assertion'ı | error |
|
|
206
205
|
| QA-TQUAL-011 | Yorum satırına çevrilmiş testler | warning |
|
|
@@ -215,9 +214,6 @@ yanlış pozitif duvarıdır.
|
|
|
215
214
|
| QA-PW-002 | Await edilmemiş locator assertion'ı | error |
|
|
216
215
|
| QA-PW-003 | Commit edilmiş `page.pause()` / `test.only()` | error |
|
|
217
216
|
| QA-PW-004 | Kırılgan CSS/XPath seçicileri | warning |
|
|
218
|
-
| QA-PW-005 | `page.evaluate()` içinde iş mantığı | info |
|
|
219
|
-
| QA-PW-114 | Eski element handle'ları (`page.$`) | info |
|
|
220
|
-
| QA-PW-118 | `networkidle` beklemeleri (flaky by design) | info |
|
|
221
217
|
| QA-PW-123 | Sabitlenmiş ortam URL'leri | warning |
|
|
222
218
|
|
|
223
219
|
</details>
|
|
@@ -240,14 +236,12 @@ yanlış pozitif duvarıdır.
|
|
|
240
236
|
<details>
|
|
241
237
|
<summary><strong>Python / pytest 🐍</strong></summary>
|
|
242
238
|
|
|
243
|
-
| ID | Kural
|
|
244
|
-
| --------- |
|
|
245
|
-
| QA-PY-002 | Atlanan test (`skip`, katı olmayan `xfail`)
|
|
246
|
-
| QA-PY-003 | Assertion içermeyen test fonksiyonu
|
|
247
|
-
| QA-PY-005 | Testlerde `time.sleep()`
|
|
248
|
-
| QA-PY-
|
|
249
|
-
| QA-PY-010 | Freeze olmadan rastgelelik/zaman bağımlılığı | info |
|
|
250
|
-
| QA-PY-012 | Totolojik assertion | error |
|
|
239
|
+
| ID | Kural | Severity |
|
|
240
|
+
| --------- | ------------------------------------------- | -------- |
|
|
241
|
+
| QA-PY-002 | Atlanan test (`skip`, katı olmayan `xfail`) | warning |
|
|
242
|
+
| QA-PY-003 | Assertion içermeyen test fonksiyonu | error |
|
|
243
|
+
| QA-PY-005 | Testlerde `time.sleep()` | warning |
|
|
244
|
+
| QA-PY-012 | Totolojik assertion | error |
|
|
251
245
|
|
|
252
246
|
Toplam 20 Python kuralı (QA-PY-001…012 pytest hijyeni + QA-PY-101…108 Playwright-Python).
|
|
253
247
|
|
|
@@ -263,8 +257,6 @@ Toplam 20 Python kuralı (QA-PY-001…012 pytest hijyeni + QA-PY-101…108 Playw
|
|
|
263
257
|
| QA-JV-103 | Assertion içermeyen test yöntemi | error |
|
|
264
258
|
| QA-JV-105 | Playwright katı sleep `waitForTimeout()` | warning |
|
|
265
259
|
| QA-JV-106 | Role locator yerine kırılgan seçici | warning |
|
|
266
|
-
| QA-JV-108 | Testte sabitlenmiş ortam URL'si | info |
|
|
267
|
-
| QA-JV-111 | Kapsayıcı mock `page.route("**")` | info |
|
|
268
260
|
|
|
269
261
|
</details>
|
|
270
262
|
|
|
@@ -278,8 +270,6 @@ Toplam 20 Python kuralı (QA-PY-001…012 pytest hijyeni + QA-PY-101…108 Playw
|
|
|
278
270
|
| QA-CS-103 | Assertion içermeyen test yöntemi | error |
|
|
279
271
|
| QA-CS-105 | Katı sleep `WaitForTimeoutAsync()` | warning |
|
|
280
272
|
| QA-CS-106 | Role locator yerine kırılgan seçici | warning |
|
|
281
|
-
| QA-CS-108 | Testte sabitlenmiş ortam URL'si | info |
|
|
282
|
-
| QA-CS-111 | Kapsayıcı mock `page.RouteAsync("**")` | info |
|
|
283
273
|
|
|
284
274
|
</details>
|
|
285
275
|
|
|
@@ -300,7 +290,6 @@ oranı taşıyor** (her biri için ≥ 10 elle sınıflandırılmış bulgu; bkz
|
|
|
300
290
|
yayına giriyor. Her tarama alt bilgisi, _tetiklenen_ kuralların kaçının
|
|
301
291
|
ölçüldüğünü söyler; `mjolnir rules --unmeasured` ölçülmeyenleri listeler;
|
|
302
292
|
her kuralın `mjolnir explain` sayfası durumunu belirtir. Oranı çirkin
|
|
303
|
-
olduğunda bile yayımlarız — QA-PW-107 %95 ile denetleniyor ve bu yüzden
|
|
304
293
|
karantinada. O sayıyı büyütmek, projenin süregelen işidir.
|
|
305
294
|
|
|
306
295
|
### Kural katmanları ve dil olgunluğu
|
|
@@ -522,7 +511,7 @@ ayarlar — algılama anlamını asla değiştirmez.
|
|
|
522
511
|
{
|
|
523
512
|
"gate": "error",
|
|
524
513
|
"exclude": ["legacy/**"],
|
|
525
|
-
"severityOverrides": { "QA-PW-
|
|
514
|
+
"severityOverrides": { "QA-PW-141": "warning" },
|
|
526
515
|
"ignore": [
|
|
527
516
|
{
|
|
528
517
|
"ruleId": "QA-TEST-004",
|