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/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,155 @@ Rule behavior changes (new rules, FP-rate changes against the corpus,
|
|
|
9
9
|
severity changes) are first-class entries here — rule IDs are immutable
|
|
10
10
|
once shipped, so this file is the record of what changed between versions.
|
|
11
11
|
|
|
12
|
+
## [0.6.7] — 2026-09-09
|
|
13
|
+
|
|
14
|
+
### Changes since 0.6.6
|
|
15
|
+
|
|
16
|
+
- fix(tests): fresh-install gate asserts the Trust Report surface (WI-5 follow-through)
|
|
17
|
+
|
|
18
|
+
## [0.6.6] — 2026-09-09
|
|
19
|
+
|
|
20
|
+
### Changes since 0.6.5
|
|
21
|
+
|
|
22
|
+
- fix(release): format the collapsed CHANGELOG before the lint gate (bot fix)
|
|
23
|
+
|
|
24
|
+
## [0.6.5] — 2026-09-09
|
|
25
|
+
|
|
26
|
+
### Changes since 0.6.4
|
|
27
|
+
|
|
28
|
+
- chore(test): re-baseline the coverage ratchet for the 0.6.x line (measured 99.8/99.37/99.81/99.82; per-file pause documented)
|
|
29
|
+
|
|
30
|
+
## [0.6.4] — 2026-09-09
|
|
31
|
+
|
|
32
|
+
### Changes since 0.6.3
|
|
33
|
+
|
|
34
|
+
## [0.6.3] — 2026-09-09
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- `trust-report --from <mjolnir.json> [--stdout]` (WI-9): the Trust
|
|
39
|
+
Artifact rendered from a SAVED canonical scan result — the GitHub
|
|
40
|
+
Action's comment/annotation steps derive from the exact saved report
|
|
41
|
+
(one semantic truth, no second scan). Includes honest error paths:
|
|
42
|
+
read / parse / write failures each surface their own catch via the
|
|
43
|
+
consolidated `errorMessage` derivation in cli-io.ts.
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- Error-path hardening across the trust-report verb: read and parse
|
|
48
|
+
failures split into separate honest catches; artifact-write failures
|
|
49
|
+
(disk-full / permission) exit 20 instead of crashing; the
|
|
50
|
+
no-positional default-target arm covered.
|
|
51
|
+
|
|
52
|
+
## [0.6.2] — 2026-09-09
|
|
53
|
+
|
|
54
|
+
### Changes since 0.6.1
|
|
55
|
+
|
|
56
|
+
- Create FUNDING.yml
|
|
57
|
+
|
|
58
|
+
## [0.6.1] — 2026-09-09
|
|
59
|
+
|
|
60
|
+
### Changes since 0.6.0
|
|
61
|
+
|
|
62
|
+
## [0.6.0] — 2026-09-09
|
|
63
|
+
|
|
64
|
+
### Changed
|
|
65
|
+
|
|
66
|
+
- Version line opens: **0.6.x = Productized Core (plan §31)**. The full
|
|
67
|
+
workstream-A capability set (Trust Report hero surface, Canonical
|
|
68
|
+
Evidence Core, trustSummary metrics, machine contract extension,
|
|
69
|
+
explain v2, triage v2 guided workflow, Action Trust-Report
|
|
70
|
+
consumption, zero-config evidence discovery, CHANGELOG integrity
|
|
71
|
+
gate, mvp-demo corpus + golden harness, E-1 retirement of 21 rules —
|
|
72
|
+
active census 78 rules: 57 measured, 21 PROVISIONAL) shipped in
|
|
73
|
+
**0.5.40**, the first release produced under the active CHANGELOG
|
|
74
|
+
integrity gate. 0.6.0 establishes the 0.6.x version line; no code
|
|
75
|
+
changes in this release.
|
|
76
|
+
|
|
77
|
+
## [0.5.40] — 2026-09-09
|
|
78
|
+
|
|
79
|
+
### Added
|
|
80
|
+
|
|
81
|
+
- **Trust Report — the hero product surface (WI-5).** `mjolnir` now leads
|
|
82
|
+
with the five questions — TRUST VERDICT (trust level + headline),
|
|
83
|
+
CONFIDENCE (confidence, evidence coverage, inconclusive rate, measured-FP
|
|
84
|
+
of fired rules, tests analyzed), WHY THIS VERDICT (evidence-backed
|
|
85
|
+
reasons), TOP TRUST RISKS (corroboration-ranked), NEXT ACTION (concrete
|
|
86
|
+
command) — all rendered from the canonical scan result only (every
|
|
87
|
+
number exists in `--json`). `--classic` escapes to the previous render;
|
|
88
|
+
rendering flag only, semantics and exit codes unchanged.
|
|
89
|
+
- **`mjolnir trust-report` (WI-6).** Emits deterministic, self-contained
|
|
90
|
+
`mjolnir-trust-report.{md,json}` — no cloud/telemetry; PR-attachable,
|
|
91
|
+
agent-consumable; byte-identical for the same scan.
|
|
92
|
+
- **`trustSummary` on the scan JSON (WI-3, plan §6).** Scan-level trust
|
|
93
|
+
measurement: level, ceiling-capped confidence (partial 0.5 /
|
|
94
|
+
truncation 0.6 / rules-crashed 0.8 / framework-unknown 0.9),
|
|
95
|
+
evidenceCoverage, inconclusiveRate, measuredFpOfFiredRules with
|
|
96
|
+
PROVISIONAL disclosure of unmeasured fired rules. Formulas published in
|
|
97
|
+
`docs/SCORING.md`.
|
|
98
|
+
- **Machine contract extension (WI-4).** `buildMachineContract` now
|
|
99
|
+
carries `trustSummary` and `provenance` verbatim from the canonical
|
|
100
|
+
result, plus a reserved `forensicVerdicts` slot (unpopulated until the
|
|
101
|
+
1.1.x forensic taxonomy). `contractVersion` stays 1; additive only.
|
|
102
|
+
- **Canonical Evidence Core (WI-2).** `src/engine/evidence-core.ts` — one
|
|
103
|
+
normalized `EvidenceRecord` shape with deterministic ordering; the scan
|
|
104
|
+
pipeline fans all runtime evidence through it; stamping semantics
|
|
105
|
+
preserved byte-identically (differential preservation suite).
|
|
106
|
+
- **Explain v2 (WI-7).** `mjolnir explain` gains verdict mode
|
|
107
|
+
(`mjolnir explain verdict --json <mjolnir.json>`) and finding mode
|
|
108
|
+
(file:line delegates to `mjolnir why`); every mode now answers the §8
|
|
109
|
+
checklist including WHAT WOULD CHANGE THE VERDICT and NEXT ACTION.
|
|
110
|
+
- **Triage v2 (WI-8).** `mjolnir triage` now runs the §9 guided workflow —
|
|
111
|
+
CLASSIFY → EVIDENCE → TRUST VERDICT → NEXT ACTION per row, every row
|
|
112
|
+
ending in a concrete command; `--classic` keeps the table, `--json`
|
|
113
|
+
emits the structured twin.
|
|
114
|
+
- **Zero-config evidence discovery (WI-11).** The scan auto-discovers
|
|
115
|
+
run evidence from conventional layouts (mjolnir.report.json, PW JSON
|
|
116
|
+
reporter names, test-results/, JUnit XML) at depth ≤ 2; scans without
|
|
117
|
+
evidence state exactly what is missing and the honest trust ceiling.
|
|
118
|
+
- **Canonical MVP evidence corpus + golden harness stage 1 (WI-13A/B).**
|
|
119
|
+
`examples/mvp-demo/` covers all 12 evidence case classes (9 active / 3
|
|
120
|
+
awaiting-ingestion, trace.zip deferred to WI-17); the stage-1 harness
|
|
121
|
+
proves same-evidence → same-verdict across CLI + JSON with
|
|
122
|
+
INCONCLUSIVE-as-pass semantics.
|
|
123
|
+
- **CHANGELOG integrity gate (WI-12A).** `scripts/check-changelog.ts` is
|
|
124
|
+
release-blocking in the release workflow (before publish, before
|
|
125
|
+
Release creation) and runs on every main CI build: released version
|
|
126
|
+
must have a dated CHANGELOG section; gate-era headings strictly
|
|
127
|
+
ordered; rule changes must be documented.
|
|
128
|
+
|
|
129
|
+
### Removed
|
|
130
|
+
|
|
131
|
+
- **21 rules retired and unregistered (E-1 retirement reconciliation, owner
|
|
132
|
+
ruling 2026-09-08).** `RETIRED_RULE_IDS` (in `src/rules/index.ts`) is now the
|
|
133
|
+
canonical, auditable record of retirement: a rule explicitly marked RETIRED by
|
|
134
|
+
`docs/RULE-LIFECYCLE.md`'s Phase 2 quarantine-cluster triage no longer counts
|
|
135
|
+
toward the active registry, the census, or the measurement KPI — quarantine
|
|
136
|
+
does not equal retirement. The active registry is now **78 rules (57 measured,
|
|
137
|
+
21 author-estimated)**. Every removed rule was measured at 100% FP with zero
|
|
138
|
+
true positives (n ≥ 10 each, `docs/FP-AUDIT.md`), i.e. its premise is wrong on
|
|
139
|
+
real code, not its tuning. Behavioral impact: none on default scans (all 21
|
|
140
|
+
were quarantine-tier, which runs only under `--strict`); `--strict` scans stop
|
|
141
|
+
reporting these advisory findings. Evidence level of every removed finding was
|
|
142
|
+
E0 (observation only, never gating). Measurement status: all 21 measured at
|
|
143
|
+
1.0 FP rate (detector revision 1) — the measurements and their verdict rows
|
|
144
|
+
are preserved as history (`tests/corpus/verdicts/archive/`,
|
|
145
|
+
`docs/RULE-LIFECYCLE.md`). User-visible impact: fewer false-positive advisory
|
|
146
|
+
findings under `--strict`; the "99 rules" claim everywhere becomes the honest
|
|
147
|
+
count of active canonical rules (78). Frozen IDs are never reused; the
|
|
148
|
+
retired IDs are listed with per-rule rationale in `RETIRED_RULE_IDS`.
|
|
149
|
+
Removed IDs — Playwright TS: QA-PW-005, QA-PW-103, QA-PW-105, QA-PW-107,
|
|
150
|
+
QA-PW-108, QA-PW-112, QA-PW-114, QA-PW-118, QA-PW-119, QA-PW-120, QA-PW-145;
|
|
151
|
+
quality: QA-TQUAL-001; Python: QA-PY-006, QA-PY-008, QA-PY-010; family
|
|
152
|
+
variants: QA-JV-108, QA-CS-108 (hardcoded-URL), QA-JV-110, QA-CS-110
|
|
153
|
+
(no-a11y), QA-JV-111, QA-CS-111 (blanket-route).
|
|
154
|
+
|
|
155
|
+
## [0.5.39] — 2026-09-09
|
|
156
|
+
|
|
157
|
+
### Changes since 0
|
|
158
|
+
|
|
159
|
+
- P9: bus-factor program — MAINTAINERS ladder, OWNER-RUNBOOK, ADJUDICATION-KIT, CODEOWNERS (#69)
|
|
160
|
+
|
|
12
161
|
## [0.5.38] — 2026-09-09
|
|
13
162
|
|
|
14
163
|
### Changes since 0
|
package/README.ar.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
[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.tr.md) | [Українська](README.uk.md) | [বাংলা](README.bn.md) | [Ελληνικά](README.gr.md) | [Tiếng Việt](README.vi.md) | [עברית](README.he.md) | العربية | [Bosanski](README.bs.md)
|
|
16
16
|
|
|
17
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
17
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-08.
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
20
|
npx mjolnir-qa@latest
|
|
@@ -196,7 +196,6 @@ npx mjolnir-qa@latest --scope changed
|
|
|
196
196
|
|
|
197
197
|
| ID | القاعدة | Severity |
|
|
198
198
|
| ------------ | ------------------------- | -------- |
|
|
199
|
-
| QA-TQUAL-001 | تحقق بالمحاكاة فقط | info |
|
|
200
199
|
| QA-TQUAL-002 | تأكيد مُبرهن ذاتيًا | error |
|
|
201
200
|
| QA-TQUAL-009 | تأكيد وعد بلا await | error |
|
|
202
201
|
| QA-TQUAL-011 | اختبارات معطَّلة بالتعليق | warning |
|
|
@@ -206,15 +205,12 @@ npx mjolnir-qa@latest --scope changed
|
|
|
206
205
|
<details>
|
|
207
206
|
<summary><strong>Playwright 🎭</strong></summary>
|
|
208
207
|
|
|
209
|
-
| ID | القاعدة
|
|
210
|
-
| --------- |
|
|
211
|
-
| QA-PW-002 | تأكيد محدِّد بلا await
|
|
212
|
-
| QA-PW-003 | `page.pause()` / `test.only()` مودعة
|
|
213
|
-
| QA-PW-004 | محدِّدات CSS/XPath هشّة
|
|
214
|
-
| QA-PW-
|
|
215
|
-
| QA-PW-114 | مقابض عناصر قديمة (`page.$`) | info |
|
|
216
|
-
| QA-PW-118 | انتظارات `networkidle` (متذبذبة بطبيعتها) | info |
|
|
217
|
-
| QA-PW-123 | عناوين بيئات مضمّنة | warning |
|
|
208
|
+
| ID | القاعدة | Severity |
|
|
209
|
+
| --------- | ------------------------------------ | -------- |
|
|
210
|
+
| QA-PW-002 | تأكيد محدِّد بلا await | error |
|
|
211
|
+
| QA-PW-003 | `page.pause()` / `test.only()` مودعة | error |
|
|
212
|
+
| QA-PW-004 | محدِّدات CSS/XPath هشّة | warning |
|
|
213
|
+
| QA-PW-123 | عناوين بيئات مضمّنة | warning |
|
|
218
214
|
|
|
219
215
|
</details>
|
|
220
216
|
|
|
@@ -241,8 +237,6 @@ npx mjolnir-qa@latest --scope changed
|
|
|
241
237
|
| QA-PY-002 | اختبار متجاوز (`skip`، `xfail` غير صارم) | warning |
|
|
242
238
|
| QA-PY-003 | دالة اختبار بلا تأكيدات | 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 | تأكيد مُبرهن ذاتيًا | error |
|
|
247
241
|
|
|
248
242
|
20 قاعدة Python إجمالًا (QA-PY-001…012 نظافة pytest + QA-PY-101…108 Playwright-Python).
|
|
@@ -259,8 +253,6 @@ npx mjolnir-qa@latest --scope changed
|
|
|
259
253
|
| QA-JV-103 | طريقة اختبار بلا تأكيدات | error |
|
|
260
254
|
| QA-JV-105 | سبات صارم في Playwright `waitForTimeout()` | warning |
|
|
261
255
|
| QA-JV-106 | محدِّد هشّ بدل role locator | warning |
|
|
262
|
-
| QA-JV-108 | عنوان بيئة مضمّن في اختبار | info |
|
|
263
|
-
| QA-JV-111 | محاكاة شاملة `page.route("**")` | info |
|
|
264
256
|
|
|
265
257
|
</details>
|
|
266
258
|
|
|
@@ -274,8 +266,6 @@ npx mjolnir-qa@latest --scope changed
|
|
|
274
266
|
| QA-CS-103 | طريقة اختبار بلا تأكيدات | error |
|
|
275
267
|
| QA-CS-105 | سبات صارم `WaitForTimeoutAsync()` | warning |
|
|
276
268
|
| QA-CS-106 | محدِّد هشّ بدل role locator | warning |
|
|
277
|
-
| QA-CS-108 | عنوان بيئة مضمّن في اختبار | info |
|
|
278
|
-
| QA-CS-111 | محاكاة شاملة `page.RouteAsync("**")` | info |
|
|
279
269
|
|
|
280
270
|
</details>
|
|
281
271
|
|
|
@@ -295,7 +285,6 @@ npx mjolnir-qa@latest --scope changed
|
|
|
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
|
|
|
@@ -505,7 +494,7 @@ Mjölnir صفر إعداد. ملف `mjolnir.config.json` اختياري (أو `.
|
|
|
505
494
|
{
|
|
506
495
|
"gate": "error",
|
|
507
496
|
"exclude": ["legacy/**"],
|
|
508
|
-
"severityOverrides": { "QA-PW-
|
|
497
|
+
"severityOverrides": { "QA-PW-141": "warning" },
|
|
509
498
|
"ignore": [
|
|
510
499
|
{
|
|
511
500
|
"ruleId": "QA-TEST-004",
|
package/README.bn.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
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.tr.md) | [Українська](README.uk.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
|
|
@@ -199,7 +199,6 @@ false-positive ফায়ারওয়াল।
|
|
|
199
199
|
|
|
200
200
|
| ID | রুল | Severity |
|
|
201
201
|
| ------------ | ----------------------------- | -------- |
|
|
202
|
-
| QA-TQUAL-001 | শুধু mock-ভিত্তিক যাচাই | info |
|
|
203
202
|
| QA-TQUAL-002 | টাটলজিক্যাল assertion | error |
|
|
204
203
|
| QA-TQUAL-009 | await-বিহীন promise assertion | error |
|
|
205
204
|
| QA-TQUAL-011 | কমেন্ট-আউট করা টেস্ট | warning |
|
|
@@ -214,9 +213,6 @@ false-positive ফায়ারওয়াল।
|
|
|
214
213
|
| QA-PW-002 | await-বিহীন locator assertion | error |
|
|
215
214
|
| QA-PW-003 | কমিট করা `page.pause()` / `test.only()` | error |
|
|
216
215
|
| QA-PW-004 | ভঙ্গুর CSS/XPath selector | warning |
|
|
217
|
-
| QA-PW-005 | `page.evaluate()`-এর ভিতরে বিজনেস লজিক | info |
|
|
218
|
-
| QA-PW-114 | লিগেসি element handle (`page.$`) | info |
|
|
219
|
-
| QA-PW-118 | `networkidle` wait (flaky by design) | info |
|
|
220
216
|
| QA-PW-123 | hardcode করা পরিবেশ URL | warning |
|
|
221
217
|
|
|
222
218
|
</details>
|
|
@@ -244,8 +240,6 @@ false-positive ফায়ারওয়াল।
|
|
|
244
240
|
| QA-PY-002 | বাদ দেওয়া টেস্ট (`skip`, কঠোর-নয় এমন `xfail`) | warning |
|
|
245
241
|
| QA-PY-003 | assertion-বিহীন টেস্ট ফাংশন | error |
|
|
246
242
|
| QA-PY-005 | টেস্টে `time.sleep()` | warning |
|
|
247
|
-
| QA-PY-006 | খালি টেস্ট বডি (`pass`) | info |
|
|
248
|
-
| QA-PY-010 | freeze ছাড়া এলোমেলো/সময় নির্ভরতা | info |
|
|
249
243
|
| QA-PY-012 | টাটলজিক্যাল assertion | error |
|
|
250
244
|
|
|
251
245
|
মোট ২০টি Python রুল (QA-PY-001…012 pytest হাইজিন + QA-PY-101…108 Playwright-Python)।
|
|
@@ -262,8 +256,6 @@ false-positive ফায়ারওয়াল।
|
|
|
262
256
|
| QA-JV-103 | assertion-বিহীন টেস্ট মেথড | error |
|
|
263
257
|
| QA-JV-105 | Playwright কড়া sleep `waitForTimeout()` | warning |
|
|
264
258
|
| QA-JV-106 | role locator-এর বদলে ভঙ্গুর selector | warning |
|
|
265
|
-
| QA-JV-108 | টেস্টে hardcode করা পরিবেশ URL | info |
|
|
266
|
-
| QA-JV-111 | ছাতা-মক `page.route("**")` | info |
|
|
267
259
|
|
|
268
260
|
</details>
|
|
269
261
|
|
|
@@ -277,8 +269,6 @@ false-positive ফায়ারওয়াল।
|
|
|
277
269
|
| QA-CS-103 | assertion-বিহীন টেস্ট মেথড | error |
|
|
278
270
|
| QA-CS-105 | কড়া sleep `WaitForTimeoutAsync()` | warning |
|
|
279
271
|
| QA-CS-106 | role locator-এর বদলে ভঙ্গুর selector | warning |
|
|
280
|
-
| QA-CS-108 | টেস্টে hardcode করা পরিবেশ URL | info |
|
|
281
|
-
| QA-CS-111 | ছাতা-মক `page.RouteAsync("**")` | info |
|
|
282
272
|
|
|
283
273
|
</details>
|
|
284
274
|
|
|
@@ -299,7 +289,6 @@ false-positive ফায়ারওয়াল।
|
|
|
299
289
|
প্রতিটি স্ক্যানের ফুটার বলে দেয় _ফায়ার_ করা রুলগুলোর কতগুলো পরিমাপকৃত;
|
|
300
290
|
`mjolnir rules --unmeasured` যেগুলো নয় তা তালিকাভুক্ত করে; প্রতিটি রুলের
|
|
301
291
|
`mjolnir explain` পেজ তার অবস্থা জানায়। আমরা হারটি প্রকাশ করি — এমনকি
|
|
302
|
-
কুৎসিত হলেও — QA-PW-107 ৯৫%-এ অডিট হয় এবং এজন্যই কোয়ারেন্টাইনে। সেই
|
|
303
292
|
সংখ্যা বাড়ানোই প্রজেক্টের চলমান কাজ।
|
|
304
293
|
|
|
305
294
|
### রুল টিয়ার ও ভাষা-পরিপক্বতা
|
|
@@ -514,7 +503,7 @@ Mjölnir zero-config। রিপো রুটে ঐচ্ছিক `mjolnir.co
|
|
|
514
503
|
{
|
|
515
504
|
"gate": "error",
|
|
516
505
|
"exclude": ["legacy/**"],
|
|
517
|
-
"severityOverrides": { "QA-PW-
|
|
506
|
+
"severityOverrides": { "QA-PW-141": "warning" },
|
|
518
507
|
"ignore": [
|
|
519
508
|
{
|
|
520
509
|
"ruleId": "QA-TEST-004",
|
package/README.br.md
CHANGED
|
@@ -15,7 +15,7 @@ exatamente onde a confiança se quebra.
|
|
|
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.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
|
|
@@ -204,7 +204,6 @@ que dispara na própria fixture negativa não pode ser publicada — esse
|
|
|
204
204
|
|
|
205
205
|
| ID | Regra | Severity |
|
|
206
206
|
| ------------ | ----------------------------- | -------- |
|
|
207
|
-
| QA-TQUAL-001 | Verificação só com mocks | info |
|
|
208
207
|
| QA-TQUAL-002 | Asserção tautológica | error |
|
|
209
208
|
| QA-TQUAL-009 | Asserção de promise sem await | error |
|
|
210
209
|
| QA-TQUAL-011 | Testes comentados | warning |
|
|
@@ -214,15 +213,12 @@ que dispara na própria fixture negativa não pode ser publicada — esse
|
|
|
214
213
|
<details>
|
|
215
214
|
<summary><strong>Playwright 🎭</strong></summary>
|
|
216
215
|
|
|
217
|
-
| ID | Regra
|
|
218
|
-
| --------- |
|
|
219
|
-
| QA-PW-002 | Asserção de locator sem await
|
|
220
|
-
| QA-PW-003 | `page.pause()` / `test.only()` commitados
|
|
221
|
-
| QA-PW-004 | Seletores CSS/XPath frágeis
|
|
222
|
-
| QA-PW-
|
|
223
|
-
| QA-PW-114 | Element handles legados (`page.$`) | info |
|
|
224
|
-
| QA-PW-118 | Esperas `networkidle` (instáveis por design) | info |
|
|
225
|
-
| QA-PW-123 | URLs de ambiente fixas no código | warning |
|
|
216
|
+
| ID | Regra | Severity |
|
|
217
|
+
| --------- | ----------------------------------------- | -------- |
|
|
218
|
+
| QA-PW-002 | Asserção de locator sem await | error |
|
|
219
|
+
| QA-PW-003 | `page.pause()` / `test.only()` commitados | error |
|
|
220
|
+
| QA-PW-004 | Seletores CSS/XPath frágeis | warning |
|
|
221
|
+
| QA-PW-123 | URLs de ambiente fixas no código | warning |
|
|
226
222
|
|
|
227
223
|
</details>
|
|
228
224
|
|
|
@@ -244,14 +240,12 @@ que dispara na própria fixture negativa não pode ser publicada — esse
|
|
|
244
240
|
<details>
|
|
245
241
|
<summary><strong>Python / pytest 🐍</strong></summary>
|
|
246
242
|
|
|
247
|
-
| ID | Regra
|
|
248
|
-
| --------- |
|
|
249
|
-
| QA-PY-002 | Teste pulado (`skip`, `xfail` não estrito)
|
|
250
|
-
| QA-PY-003 | Função de teste sem asserções
|
|
251
|
-
| QA-PY-005 | `time.sleep()` em testes
|
|
252
|
-
| QA-PY-
|
|
253
|
-
| QA-PY-010 | Dependência de aleatoriedade/tempo sem freeze | info |
|
|
254
|
-
| QA-PY-012 | Asserção tautológica | error |
|
|
243
|
+
| ID | Regra | Severity |
|
|
244
|
+
| --------- | ------------------------------------------ | -------- |
|
|
245
|
+
| QA-PY-002 | Teste pulado (`skip`, `xfail` não estrito) | warning |
|
|
246
|
+
| QA-PY-003 | Função de teste sem asserções | error |
|
|
247
|
+
| QA-PY-005 | `time.sleep()` em testes | warning |
|
|
248
|
+
| QA-PY-012 | Asserção tautológica | error |
|
|
255
249
|
|
|
256
250
|
20 regras Python no total (QA-PY-001…012 higiene pytest + QA-PY-101…108 Playwright-Python).
|
|
257
251
|
|
|
@@ -267,8 +261,6 @@ que dispara na própria fixture negativa não pode ser publicada — esse
|
|
|
267
261
|
| QA-JV-103 | Método de teste sem asserções | error |
|
|
268
262
|
| QA-JV-105 | Sleep fixo do Playwright `waitForTimeout()` | warning |
|
|
269
263
|
| QA-JV-106 | Seletor frágil em vez de role locator | warning |
|
|
270
|
-
| QA-JV-108 | URL de ambiente fixa no teste | info |
|
|
271
|
-
| QA-JV-111 | Mock generalizado `page.route("**")` | info |
|
|
272
264
|
|
|
273
265
|
</details>
|
|
274
266
|
|
|
@@ -282,8 +274,6 @@ que dispara na própria fixture negativa não pode ser publicada — esse
|
|
|
282
274
|
| QA-CS-103 | Método de teste sem asserções | error |
|
|
283
275
|
| QA-CS-105 | Sleep fixo `WaitForTimeoutAsync()` | warning |
|
|
284
276
|
| QA-CS-106 | Seletor frágil em vez de role locator | warning |
|
|
285
|
-
| QA-CS-108 | URL de ambiente fixa no teste | info |
|
|
286
|
-
| QA-CS-111 | Mock generalizado `page.RouteAsync("**")` | info |
|
|
287
277
|
|
|
288
278
|
</details>
|
|
289
279
|
|
|
@@ -305,7 +295,6 @@ código OSS real** (≥ 10 findings classificados à mão cada; veja
|
|
|
305
295
|
a estimativa do autor. O rodapé de cada escaneio diz quantas das regras
|
|
306
296
|
_que dispararam_ são medidas; `mjolnir rules --unmeasured` lista as que
|
|
307
297
|
não são; a página `mjolnir explain` de cada regra declara seu status.
|
|
308
|
-
Publicamos a taxa mesmo quando ela é feia — QA-PW-107 audita em 95 % e
|
|
309
298
|
está em quarentena por isso. Fazer esse número crescer é o trabalho contínuo
|
|
310
299
|
do projeto.
|
|
311
300
|
|
|
@@ -529,7 +518,7 @@ ele nunca muda a semântica de detecção.
|
|
|
529
518
|
{
|
|
530
519
|
"gate": "error",
|
|
531
520
|
"exclude": ["legacy/**"],
|
|
532
|
-
"severityOverrides": { "QA-PW-
|
|
521
|
+
"severityOverrides": { "QA-PW-141": "warning" },
|
|
533
522
|
"ignore": [
|
|
534
523
|
{
|
|
535
524
|
"ruleId": "QA-TEST-004",
|
package/README.bs.md
CHANGED
|
@@ -15,7 +15,7 @@ povjerenje lomi.
|
|
|
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.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
|
|
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
|
|
@@ -197,7 +197,6 @@ to je vatrozid lažnih pozitiva.
|
|
|
197
197
|
|
|
198
198
|
| ID | Pravilo | Severity |
|
|
199
199
|
| ------------ | ----------------------------- | -------- |
|
|
200
|
-
| QA-TQUAL-001 | Verifikacija samo mockovima | info |
|
|
201
200
|
| QA-TQUAL-002 | Tautološka asercija | error |
|
|
202
201
|
| QA-TQUAL-009 | Asercija neawaitanog promisea | error |
|
|
203
202
|
| QA-TQUAL-011 | Komentarisani testovi | warning |
|
|
@@ -212,9 +211,6 @@ to je vatrozid lažnih pozitiva.
|
|
|
212
211
|
| QA-PW-002 | Asercija lokatora bez awaita | error |
|
|
213
212
|
| QA-PW-003 | `page.pause()` / `test.only()` commitirani | error |
|
|
214
213
|
| QA-PW-004 | Krhki CSS/XPath selektori | warning |
|
|
215
|
-
| QA-PW-005 | Poslovna logika unutar `page.evaluate()` | info |
|
|
216
|
-
| QA-PW-114 | Legacy element handleovi (`page.$`) | info |
|
|
217
|
-
| QA-PW-118 | `networkidle` čekanja (flaky po dizajnu) | info |
|
|
218
214
|
| QA-PW-123 | Ugrađeni URL-ovi okruženja | warning |
|
|
219
215
|
|
|
220
216
|
</details>
|
|
@@ -237,14 +233,12 @@ to je vatrozid lažnih pozitiva.
|
|
|
237
233
|
<details>
|
|
238
234
|
<summary><strong>Python / pytest 🐍</strong></summary>
|
|
239
235
|
|
|
240
|
-
| ID | Pravilo
|
|
241
|
-
| --------- |
|
|
242
|
-
| QA-PY-002 | Preskočen test (`skip`, nestrogi `xfail`)
|
|
243
|
-
| QA-PY-003 | Test funkcija bez asercija
|
|
244
|
-
| QA-PY-005 | `time.sleep()` u testovima
|
|
245
|
-
| QA-PY-
|
|
246
|
-
| QA-PY-010 | Ovisnost o slučajnosti/vremenu bez freezea | info |
|
|
247
|
-
| QA-PY-012 | Tautološka asercija | error |
|
|
236
|
+
| ID | Pravilo | Severity |
|
|
237
|
+
| --------- | ----------------------------------------- | -------- |
|
|
238
|
+
| QA-PY-002 | Preskočen test (`skip`, nestrogi `xfail`) | warning |
|
|
239
|
+
| QA-PY-003 | Test funkcija bez asercija | error |
|
|
240
|
+
| QA-PY-005 | `time.sleep()` u testovima | warning |
|
|
241
|
+
| QA-PY-012 | Tautološka asercija | error |
|
|
248
242
|
|
|
249
243
|
Ukupno 20 Python pravila (QA-PY-001…012 pytest higijena + QA-PY-101…108 Playwright-Python).
|
|
250
244
|
|
|
@@ -260,8 +254,6 @@ Ukupno 20 Python pravila (QA-PY-001…012 pytest higijena + QA-PY-101…108 Play
|
|
|
260
254
|
| QA-JV-103 | Test metoda bez asercija | error |
|
|
261
255
|
| QA-JV-105 | Tvrdi sleep Playwright `waitForTimeout()` | warning |
|
|
262
256
|
| QA-JV-106 | Krhki selektor umjesto role lokatora | warning |
|
|
263
|
-
| QA-JV-108 | Ugrađeni URL okruženja u testu | info |
|
|
264
|
-
| QA-JV-111 | Pokrivni mock `page.route("**")` | info |
|
|
265
257
|
|
|
266
258
|
</details>
|
|
267
259
|
|
|
@@ -275,8 +267,6 @@ Ukupno 20 Python pravila (QA-PY-001…012 pytest higijena + QA-PY-101…108 Play
|
|
|
275
267
|
| QA-CS-103 | Test metoda bez asercija | error |
|
|
276
268
|
| QA-CS-105 | Tvrdi sleep `WaitForTimeoutAsync()` | warning |
|
|
277
269
|
| QA-CS-106 | Krhki selektor umjesto role lokatora | warning |
|
|
278
|
-
| QA-CS-108 | Ugrađeni URL okruženja u testu | info |
|
|
279
|
-
| QA-CS-111 | Pokrivni mock `page.RouteAsync("**")` | info |
|
|
280
270
|
|
|
281
271
|
</details>
|
|
282
272
|
|
|
@@ -297,7 +287,6 @@ OSS kodom** (≥ 10 ručno klasificiranih nalaza svako; vidi
|
|
|
297
287
|
procjeni. Podnožje svakog skana kaže koliko od _okinutih_ pravila je
|
|
298
288
|
izmjereno; `mjolnir rules --unmeasured` izlista neizmjerena; stranica
|
|
299
289
|
`mjolnir explain` svakog pravila navodi njen status. Objavljujemo stopu
|
|
300
|
-
čak i kad je ružna — QA-PW-107 se audita na 95 % i u karanteni je radi
|
|
301
290
|
toga. Rast tog broja je neprekidni rad projekta.
|
|
302
291
|
|
|
303
292
|
### Tierovi pravila i jezična zrelost
|
|
@@ -516,7 +505,7 @@ nikad ne mijenja semantiku detekcije.
|
|
|
516
505
|
{
|
|
517
506
|
"gate": "error",
|
|
518
507
|
"exclude": ["legacy/**"],
|
|
519
|
-
"severityOverrides": { "QA-PW-
|
|
508
|
+
"severityOverrides": { "QA-PW-141": "warning" },
|
|
520
509
|
"ignore": [
|
|
521
510
|
{
|
|
522
511
|
"ruleId": "QA-TEST-004",
|
package/README.da.md
CHANGED
|
@@ -15,7 +15,7 @@ tilliden brister.
|
|
|
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.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.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
|
|
@@ -202,7 +202,6 @@ det er false-positive-firewallen.
|
|
|
202
202
|
|
|
203
203
|
| ID | Regel | Severity |
|
|
204
204
|
| ------------ | ------------------------------- | -------- |
|
|
205
|
-
| QA-TQUAL-001 | Kun-mock-verifikation | info |
|
|
206
205
|
| QA-TQUAL-002 | Tautologisk assertion | error |
|
|
207
206
|
| QA-TQUAL-009 | Assertion på promise uden await | error |
|
|
208
207
|
| QA-TQUAL-011 | Udkommenterede tests | warning |
|
|
@@ -217,9 +216,6 @@ det er false-positive-firewallen.
|
|
|
217
216
|
| QA-PW-002 | Locator-assertion uden await | error |
|
|
218
217
|
| QA-PW-003 | `page.pause()` / `test.only()` committet | error |
|
|
219
218
|
| QA-PW-004 | Skrøbelige CSS/XPath-selectors | warning |
|
|
220
|
-
| QA-PW-005 | Forretningslogik i `page.evaluate()` | info |
|
|
221
|
-
| QA-PW-114 | Legacy element handles (`page.$`) | info |
|
|
222
|
-
| QA-PW-118 | `networkidle`-venten (flaky by design) | info |
|
|
223
219
|
| QA-PW-123 | Hårdkodede miljø-URL'er | warning |
|
|
224
220
|
|
|
225
221
|
</details>
|
|
@@ -247,8 +243,6 @@ det er false-positive-firewallen.
|
|
|
247
243
|
| QA-PY-002 | Sprunget test (`skip`, ikke-strikt `xfail`) | warning |
|
|
248
244
|
| QA-PY-003 | Testfunktion uden assertions | error |
|
|
249
245
|
| QA-PY-005 | `time.sleep()` i tests | warning |
|
|
250
|
-
| QA-PY-006 | Tomt testlegeme (`pass`) | info |
|
|
251
|
-
| QA-PY-010 | Tilfældigheds-/tidsafhængighed uden freeze | info |
|
|
252
246
|
| QA-PY-012 | Tautologisk assertion | error |
|
|
253
247
|
|
|
254
248
|
20 Python-regler i alt (QA-PY-001…012 pytest-hygiejne + QA-PY-101…108 Playwright-Python).
|
|
@@ -265,8 +259,6 @@ det er false-positive-firewallen.
|
|
|
265
259
|
| QA-JV-103 | Testmetode uden assertions | error |
|
|
266
260
|
| QA-JV-105 | Playwright hårdt sleep `waitForTimeout()` | warning |
|
|
267
261
|
| QA-JV-106 | Skrøbelig selector i stedet for role-locator | warning |
|
|
268
|
-
| QA-JV-108 | Hårdkodet miljø-URL i test | info |
|
|
269
|
-
| QA-JV-111 | Blanket-mock `page.route("**")` | info |
|
|
270
262
|
|
|
271
263
|
</details>
|
|
272
264
|
|
|
@@ -280,8 +272,6 @@ det er false-positive-firewallen.
|
|
|
280
272
|
| QA-CS-103 | Testmetode uden assertions | error |
|
|
281
273
|
| QA-CS-105 | Hårdt sleep `WaitForTimeoutAsync()` | warning |
|
|
282
274
|
| QA-CS-106 | Skrøbelig selector i stedet for role-locator | warning |
|
|
283
|
-
| QA-CS-108 | Hårdkodet miljø-URL i test | info |
|
|
284
|
-
| QA-CS-111 | Blanket-mock `page.RouteAsync("**")` | info |
|
|
285
275
|
|
|
286
276
|
</details>
|
|
287
277
|
|
|
@@ -303,7 +293,6 @@ det er false-positive-firewallen.
|
|
|
303
293
|
estimat. Hver scan-fodnote fortæller, hvor mange af de _udløste_ regler,
|
|
304
294
|
der er målt; `mjolnir rules --unmeasured` lister de uregistrerede; hver
|
|
305
295
|
regels `mjolnir explain`-side angiver dens status. Vi offentliggør
|
|
306
|
-
raten, selv når den er grim — QA-PW-107 auditeres til 95 % og er sat i
|
|
307
296
|
karantæne for det. At få det tal til at vokse er projektets fortsatte
|
|
308
297
|
arbejde.
|
|
309
298
|
|
|
@@ -524,7 +513,7 @@ scope — den ændrer aldrig detektionssemantikken.
|
|
|
524
513
|
{
|
|
525
514
|
"gate": "error",
|
|
526
515
|
"exclude": ["legacy/**"],
|
|
527
|
-
"severityOverrides": { "QA-PW-
|
|
516
|
+
"severityOverrides": { "QA-PW-141": "warning" },
|
|
528
517
|
"ignore": [
|
|
529
518
|
{
|
|
530
519
|
"ruleId": "QA-TEST-004",
|
package/README.de.md
CHANGED
|
@@ -15,7 +15,7 @@ bricht.
|
|
|
15
15
|
|
|
16
16
|
[English](README.md) | [简体中文](README.zh.md) | [繁體中文](README.zht.md) | [한국어](README.ko.md) | Deutsch | [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.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
|
|
@@ -206,7 +206,6 @@ geshippt werden — das ist die False-Positive-Firewall.
|
|
|
206
206
|
|
|
207
207
|
| ID | Regel | Severity |
|
|
208
208
|
| ------------ | ----------------------------------- | -------- |
|
|
209
|
-
| QA-TQUAL-001 | Nur-Mock-Verifikation | info |
|
|
210
209
|
| QA-TQUAL-002 | Tautologische Assertion | error |
|
|
211
210
|
| QA-TQUAL-009 | Nicht abgewartete Promise-Assertion | error |
|
|
212
211
|
| QA-TQUAL-011 | Auskommentierte Tests | warning |
|
|
@@ -221,9 +220,6 @@ geshippt werden — das ist die False-Positive-Firewall.
|
|
|
221
220
|
| QA-PW-002 | Nicht abgewartete Locator-Assertion | error |
|
|
222
221
|
| QA-PW-003 | `page.pause()` / `test.only()` committed | error |
|
|
223
222
|
| QA-PW-004 | Spröde CSS/XPath-Selektoren | warning |
|
|
224
|
-
| QA-PW-005 | Business-Logik in `page.evaluate()` | info |
|
|
225
|
-
| QA-PW-114 | Legacy Element Handles (`page.$`) | info |
|
|
226
|
-
| QA-PW-118 | `networkidle`-Warten (flaky by design) | info |
|
|
227
223
|
| QA-PW-123 | Hartkodierte Umgebungs-URLs | warning |
|
|
228
224
|
|
|
229
225
|
</details>
|
|
@@ -251,8 +247,6 @@ geshippt werden — das ist die False-Positive-Firewall.
|
|
|
251
247
|
| QA-PY-002 | Übersprungener Test (`skip`, nicht-strictes `xfail`) | warning |
|
|
252
248
|
| QA-PY-003 | Testfunktion ohne Assertionen | error |
|
|
253
249
|
| QA-PY-005 | `time.sleep()` in Tests | warning |
|
|
254
|
-
| QA-PY-006 | Leerer Testkörper (`pass`) | info |
|
|
255
|
-
| QA-PY-010 | Zufalls-/Zeitabhängigkeit ohne Freeze | info |
|
|
256
250
|
| QA-PY-012 | Tautologische Assertion | error |
|
|
257
251
|
|
|
258
252
|
20 Python-Regeln insgesamt (QA-PY-001…012 pytest-Hygiene + QA-PY-101…108 Playwright-Python).
|
|
@@ -269,8 +263,6 @@ geshippt werden — das ist die False-Positive-Firewall.
|
|
|
269
263
|
| QA-JV-103 | Testmethode ohne Assertionen | error |
|
|
270
264
|
| QA-JV-105 | Playwright `waitForTimeout()`-harter Sleep | warning |
|
|
271
265
|
| QA-JV-106 | Spröder Selektor statt Role-Locator | warning |
|
|
272
|
-
| QA-JV-108 | Hartkodierte Umgebungs-URL im Test | info |
|
|
273
|
-
| QA-JV-111 | Pauschales `page.route("**")`-Mock | info |
|
|
274
266
|
|
|
275
267
|
</details>
|
|
276
268
|
|
|
@@ -284,8 +276,6 @@ geshippt werden — das ist die False-Positive-Firewall.
|
|
|
284
276
|
| QA-CS-103 | Testmethode ohne Assertionen | error |
|
|
285
277
|
| QA-CS-105 | `WaitForTimeoutAsync()`-harter Sleep | warning |
|
|
286
278
|
| QA-CS-106 | Spröder Selektor statt Role-Locator | warning |
|
|
287
|
-
| QA-CS-108 | Hartkodierte Umgebungs-URL im Test | info |
|
|
288
|
-
| QA-CS-111 | Pauschales `page.RouteAsync("**")`-Mock | info |
|
|
289
279
|
|
|
290
280
|
</details>
|
|
291
281
|
|
|
@@ -308,7 +298,6 @@ Schätzung des Autors. Jeder Scan-Footer sagt dir, wie viele der
|
|
|
308
298
|
_ausgelösten_ Regeln gemessen sind; `mjolnir rules --unmeasured` listet
|
|
309
299
|
die nicht gemessenen; die `mjolnir explain`-Seite jeder Regel nennt
|
|
310
300
|
ihren Status. Wir veröffentlichen die Rate, selbst wenn sie hässlich
|
|
311
|
-
ist — QA-PW-107 auditiert bei 95 % und ist deshalb quarantäniert. Diese
|
|
312
301
|
Zahl zu vergrößern ist die fortlaufende Arbeit des Projekts.
|
|
313
302
|
|
|
314
303
|
### Regel-Tiers und Sprachreife
|
|
@@ -533,7 +522,7 @@ sie ändert nie die Erkennungssemantik.
|
|
|
533
522
|
{
|
|
534
523
|
"gate": "error",
|
|
535
524
|
"exclude": ["legacy/**"],
|
|
536
|
-
"severityOverrides": { "QA-PW-
|
|
525
|
+
"severityOverrides": { "QA-PW-141": "warning" },
|
|
537
526
|
"ignore": [
|
|
538
527
|
{
|
|
539
528
|
"ruleId": "QA-TEST-004",
|