mjolnir-qa 0.5.39 → 0.6.13

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/README.es.md CHANGED
@@ -15,7 +15,7 @@ exactamente dónde se rompe la confianza.
15
15
 
16
16
  [English](README.md) | [简体中文](README.zh.md) | [繁體中文](README.zht.md) | [한국어](README.ko.md) | [Deutsch](README.de.md) | Español | [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-07.
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 @@ ese es el cortafuegos de falsos positivos.
204
204
 
205
205
  | ID | Regla | Severity |
206
206
  | ------------ | ----------------------------- | -------- |
207
- | QA-TQUAL-001 | Verificación solo con mocks | info |
208
207
  | QA-TQUAL-002 | Aserción tautológica | error |
209
208
  | QA-TQUAL-009 | Aserción de promesa sin await | error |
210
209
  | QA-TQUAL-011 | Tests comentados | warning |
@@ -214,15 +213,12 @@ ese es el cortafuegos de falsos positivos.
214
213
  <details>
215
214
  <summary><strong>Playwright 🎭</strong></summary>
216
215
 
217
- | ID | Regla | Severity |
218
- | --------- | --------------------------------------------- | -------- |
219
- | QA-PW-002 | Aserción de locator sin await | error |
220
- | QA-PW-003 | `page.pause()` / `test.only()` committeados | error |
221
- | QA-PW-004 | Selectores CSS/XPath frágiles | warning |
222
- | QA-PW-005 | Lógica de negocio dentro de `page.evaluate()` | info |
223
- | QA-PW-114 | Element handles heredados (`page.$`) | info |
224
- | QA-PW-118 | Esperas `networkidle` (inestables por diseño) | info |
225
- | QA-PW-123 | URLs de entorno hardcodeadas | warning |
216
+ | ID | Regla | Severity |
217
+ | --------- | ------------------------------------------- | -------- |
218
+ | QA-PW-002 | Aserción de locator sin await | error |
219
+ | QA-PW-003 | `page.pause()` / `test.only()` committeados | error |
220
+ | QA-PW-004 | Selectores CSS/XPath frágiles | warning |
221
+ | QA-PW-123 | URLs de entorno hardcodeadas | warning |
226
222
 
227
223
  </details>
228
224
 
@@ -249,8 +245,6 @@ ese es el cortafuegos de falsos positivos.
249
245
  | QA-PY-002 | Test saltado (`skip`, `xfail` no estricto) | warning |
250
246
  | QA-PY-003 | Función de test sin aserciones | error |
251
247
  | QA-PY-005 | `time.sleep()` en tests | warning |
252
- | QA-PY-006 | Cuerpo de test vacío (`pass`) | info |
253
- | QA-PY-010 | Dependencia de azar/tiempo sin freeze | info |
254
248
  | QA-PY-012 | Aserción tautológica | error |
255
249
 
256
250
  20 reglas de Python en total (QA-PY-001…012 higiene pytest + QA-PY-101…108 Playwright-Python).
@@ -267,8 +261,6 @@ ese es el cortafuegos de falsos positivos.
267
261
  | QA-JV-103 | Método de test sin aserciones | error |
268
262
  | QA-JV-105 | Sleep en duro de Playwright `waitForTimeout()` | warning |
269
263
  | QA-JV-106 | Selector frágil en vez de role locator | warning |
270
- | QA-JV-108 | URL de entorno hardcodeada en el test | info |
271
- | QA-JV-111 | Mock en blanquete `page.route("**")` | info |
272
264
 
273
265
  </details>
274
266
 
@@ -282,8 +274,6 @@ ese es el cortafuegos de falsos positivos.
282
274
  | QA-CS-103 | Método de test sin aserciones | error |
283
275
  | QA-CS-105 | Sleep en duro `WaitForTimeoutAsync()` | warning |
284
276
  | QA-CS-106 | Selector frágil en vez de role locator | warning |
285
- | QA-CS-108 | URL de entorno hardcodeada en el test | info |
286
- | QA-CS-111 | Mock en blanquete `page.RouteAsync("**")` | info |
287
277
 
288
278
  </details>
289
279
 
@@ -305,7 +295,6 @@ código OSS real** (≥ 10 hallazgos clasificados a mano cada una; ver
305
295
  estimación del autor. Cada pie de escaneo te dice cuántas de las reglas
306
296
  _que se dispararon_ están medidas; `mjolnir rules --unmeasured` lista
307
297
  las que no; la página `mjolnir explain` de cada regla declara su
308
- estado. Publicamos la tasa aunque sea fea — QA-PW-107 audita al 95 % y
309
298
  está en cuarentena por ello. Hacer crecer esa cifra es el trabajo continuo
310
299
  del proyecto.
311
300
 
@@ -531,7 +520,7 @@ nunca cambia la semántica de detección.
531
520
  {
532
521
  "gate": "error",
533
522
  "exclude": ["legacy/**"],
534
- "severityOverrides": { "QA-PW-118": "warning" },
523
+ "severityOverrides": { "QA-PW-141": "warning" },
535
524
  "ignore": [
536
525
  {
537
526
  "ruleId": "QA-TEST-004",
package/README.fr.md CHANGED
@@ -15,7 +15,7 @@ exactement où la confiance se brise.
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 | [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-07.
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,27 +203,23 @@ sortir — c'est le pare-feu anti faux positifs.
203
203
  <details>
204
204
  <summary><strong>Qualité des tests</strong></summary>
205
205
 
206
- | ID | Règle | Severity |
207
- | ------------ | --------------------------------- | -------- |
208
- | QA-TQUAL-001 | Vérification par mocks uniquement | info |
209
- | QA-TQUAL-002 | Assertion tautologique | error |
210
- | QA-TQUAL-009 | Assertion de promise non awaitée | error |
211
- | QA-TQUAL-011 | Tests commentés | warning |
206
+ | ID | Règle | Severity |
207
+ | ------------ | -------------------------------- | -------- |
208
+ | QA-TQUAL-002 | Assertion tautologique | error |
209
+ | QA-TQUAL-009 | Assertion de promise non awaitée | error |
210
+ | QA-TQUAL-011 | Tests commentés | warning |
212
211
 
213
212
  </details>
214
213
 
215
214
  <details>
216
215
  <summary><strong>Playwright 🎭</strong></summary>
217
216
 
218
- | ID | Règle | Severity |
219
- | --------- | ------------------------------------------------ | -------- |
220
- | QA-PW-002 | Assertion de locator non awaitée | error |
221
- | QA-PW-003 | `page.pause()` / `test.only()` commités | error |
222
- | QA-PW-004 | Sélecteurs CSS/XPath fragiles | warning |
223
- | QA-PW-005 | Logique métier dans `page.evaluate()` | info |
224
- | QA-PW-114 | Element handles historiques (`page.$`) | info |
225
- | QA-PW-118 | Attentes `networkidle` (instables de conception) | info |
226
- | QA-PW-123 | URLs d'environnement codées en dur | warning |
217
+ | ID | Règle | Severity |
218
+ | --------- | --------------------------------------- | -------- |
219
+ | QA-PW-002 | Assertion de locator non awaitée | error |
220
+ | QA-PW-003 | `page.pause()` / `test.only()` commités | error |
221
+ | QA-PW-004 | Sélecteurs CSS/XPath fragiles | warning |
222
+ | QA-PW-123 | URLs d'environnement codées en dur | warning |
227
223
 
228
224
  </details>
229
225
 
@@ -245,14 +241,12 @@ sortir — c'est le pare-feu anti faux positifs.
245
241
  <details>
246
242
  <summary><strong>Python / pytest 🐍</strong></summary>
247
243
 
248
- | ID | Règle | Severity |
249
- | --------- | ----------------------------------------- | -------- |
250
- | QA-PY-002 | Test sauté (`skip`, `xfail` non strict) | warning |
251
- | QA-PY-003 | Fonction de test sans assertion | error |
252
- | QA-PY-005 | `time.sleep()` dans les tests | warning |
253
- | QA-PY-006 | Corps de test vide (`pass`) | info |
254
- | QA-PY-010 | Dépendance au hasard/au temps sans freeze | info |
255
- | QA-PY-012 | Assertion tautologique | error |
244
+ | ID | Règle | Severity |
245
+ | --------- | --------------------------------------- | -------- |
246
+ | QA-PY-002 | Test sauté (`skip`, `xfail` non strict) | warning |
247
+ | QA-PY-003 | Fonction de test sans assertion | error |
248
+ | QA-PY-005 | `time.sleep()` dans les tests | warning |
249
+ | QA-PY-012 | Assertion tautologique | error |
256
250
 
257
251
  20 règles Python au total (QA-PY-001…012 hygiène pytest + QA-PY-101…108 Playwright-Python).
258
252
 
@@ -261,30 +255,26 @@ sortir — c'est le pare-feu anti faux positifs.
261
255
  <details>
262
256
  <summary><strong>Java / JUnit · TestNG ☕</strong></summary>
263
257
 
264
- | ID | Règle | Severity |
265
- | --------- | --------------------------------------------- | -------- |
266
- | QA-JV-101 | Test désactivé (`@Disabled`) | warning |
267
- | QA-JV-102 | Sleep en dur (`Thread.sleep()`) | warning |
268
- | QA-JV-103 | Méthode de test sans assertion | error |
269
- | QA-JV-105 | Sleep en dur Playwright `waitForTimeout()` | warning |
270
- | QA-JV-106 | Sélecteur fragile au lieu d'un role locator | warning |
271
- | QA-JV-108 | URL d'environnement codée en dur dans le test | info |
272
- | QA-JV-111 | Mock blanket `page.route("**")` | info |
258
+ | ID | Règle | Severity |
259
+ | --------- | ------------------------------------------- | -------- |
260
+ | QA-JV-101 | Test désactivé (`@Disabled`) | warning |
261
+ | QA-JV-102 | Sleep en dur (`Thread.sleep()`) | warning |
262
+ | QA-JV-103 | Méthode de test sans assertion | error |
263
+ | QA-JV-105 | Sleep en dur Playwright `waitForTimeout()` | warning |
264
+ | QA-JV-106 | Sélecteur fragile au lieu d'un role locator | warning |
273
265
 
274
266
  </details>
275
267
 
276
268
  <details>
277
269
  <summary><strong>C# / .NET — NUnit · xUnit · MSTest 🟣</strong></summary>
278
270
 
279
- | ID | Règle | Severity |
280
- | --------- | --------------------------------------------- | -------- |
281
- | QA-CS-101 | Test sauté (`[Ignore]`, `[Fact(Skip=)]`) | warning |
282
- | QA-CS-102 | Sleep en dur (`Thread.Sleep` / `Task.Delay`) | warning |
283
- | QA-CS-103 | Méthode de test sans assertion | error |
284
- | QA-CS-105 | Sleep en dur `WaitForTimeoutAsync()` | warning |
285
- | QA-CS-106 | Sélecteur fragile au lieu d'un role locator | warning |
286
- | QA-CS-108 | URL d'environnement codée en dur dans le test | info |
287
- | QA-CS-111 | Mock blanket `page.RouteAsync("**")` | info |
271
+ | ID | Règle | Severity |
272
+ | --------- | -------------------------------------------- | -------- |
273
+ | QA-CS-101 | Test sauté (`[Ignore]`, `[Fact(Skip=)]`) | warning |
274
+ | QA-CS-102 | Sleep en dur (`Thread.Sleep` / `Task.Delay`) | warning |
275
+ | QA-CS-103 | Méthode de test sans assertion | error |
276
+ | QA-CS-105 | Sleep en dur `WaitForTimeoutAsync()` | warning |
277
+ | QA-CS-106 | Sélecteur fragile au lieu d'un role locator | warning |
288
278
 
289
279
  </details>
290
280
 
@@ -307,7 +297,6 @@ l'estimation de l'auteur. Chaque pied de scan vous dit combien des
307
297
  règles _déclenchées_ sont mesurées ; `mjolnir rules --unmeasured` liste
308
298
  celles qui ne le sont pas ; la page `mjolnir explain` de chaque règle
309
299
  énonce son statut. Nous publions le taux même quand il est laid —
310
- QA-PW-107 s'audite à 95 % et est mis en quarantaine pour ça. Faire
311
300
  grandir ce chiffre est le travail continu du projet.
312
301
 
313
302
  ### Tiers de règles et maturité par langage
@@ -534,7 +523,7 @@ périmètre — il ne change jamais la sémantique de détection.
534
523
  {
535
524
  "gate": "error",
536
525
  "exclude": ["legacy/**"],
537
- "severityOverrides": { "QA-PW-118": "warning" },
526
+ "severityOverrides": { "QA-PW-141": "warning" },
538
527
  "ignore": [
539
528
  {
540
529
  "ruleId": "QA-TEST-004",
package/README.gr.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) | [ไทย](README.th.md) | [Türkçe](README.tr.md) | [Українська](README.uk.md) | [বাংলা](README.bn.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-07.
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 @@ npx mjolnir-qa@latest --scope changed
201
201
 
202
202
  | ID | Κανόνας | Severity |
203
203
  | ------------ | ----------------------------- | -------- |
204
- | QA-TQUAL-001 | Επαλήθευση μόνο με mocks | info |
205
204
  | QA-TQUAL-002 | Ταυτολογική assertion | error |
206
205
  | QA-TQUAL-009 | Assertion promise χωρίς await | error |
207
206
  | QA-TQUAL-011 | Σχολιασμένα τεστ | warning |
@@ -211,15 +210,12 @@ npx mjolnir-qa@latest --scope changed
211
210
  <details>
212
211
  <summary><strong>Playwright 🎭</strong></summary>
213
212
 
214
- | ID | Κανόνας | Severity |
215
- | --------- | ---------------------------------------------- | -------- |
216
- | QA-PW-002 | Assertion locator χωρίς await | error |
217
- | QA-PW-003 | `page.pause()` / `test.only()` στο commit | error |
218
- | QA-PW-004 | Εύθραυστοι CSS/XPath selectors | warning |
219
- | QA-PW-005 | Επιχειρησιακή λογική μέσα σε `page.evaluate()` | info |
220
- | QA-PW-114 | Legacy element handles (`page.$`) | info |
221
- | QA-PW-118 | Αναμονές `networkidle` (flaky by design) | info |
222
- | QA-PW-123 | Σκληρά URL περιβάλλοντος | warning |
213
+ | ID | Κανόνας | Severity |
214
+ | --------- | ----------------------------------------- | -------- |
215
+ | QA-PW-002 | Assertion locator χωρίς await | error |
216
+ | QA-PW-003 | `page.pause()` / `test.only()` στο commit | error |
217
+ | QA-PW-004 | Εύθραυστοι CSS/XPath selectors | warning |
218
+ | QA-PW-123 | Σκληρά URL περιβάλλοντος | warning |
223
219
 
224
220
  </details>
225
221
 
@@ -246,8 +242,6 @@ npx mjolnir-qa@latest --scope changed
246
242
  | QA-PY-002 | Παραλειμένο τεστ (`skip`, μη αυστηρό `xfail`) | warning |
247
243
  | QA-PY-003 | Συνάρτηση τεστ χωρίς assertions | error |
248
244
  | QA-PY-005 | `time.sleep()` σε τεστ | warning |
249
- | QA-PY-006 | Κενό σώμα τεστ (`pass`) | info |
250
- | QA-PY-010 | Εξάρτηση από τύχη/χρόνο χωρίς freeze | info |
251
245
  | QA-PY-012 | Ταυτολογική assertion | error |
252
246
 
253
247
  Συνολικά 20 κανόνες Python (QA-PY-001…012 υγιεινή pytest + QA-PY-101…108 Playwright-Python).
@@ -264,8 +258,6 @@ npx mjolnir-qa@latest --scope changed
264
258
  | QA-JV-103 | Μέθοδος τεστ χωρίς assertions | error |
265
259
  | QA-JV-105 | Σκληρό sleep Playwright `waitForTimeout()` | warning |
266
260
  | QA-JV-106 | Εύθραυστος selector αντί για role locator | warning |
267
- | QA-JV-108 | Σκληρό URL περιβάλλοντος στο τεστ | info |
268
- | QA-JV-111 | Μαζικό mock `page.route("**")` | info |
269
261
 
270
262
  </details>
271
263
 
@@ -279,8 +271,6 @@ npx mjolnir-qa@latest --scope changed
279
271
  | QA-CS-103 | Μέθοδος τεστ χωρίς assertions | error |
280
272
  | QA-CS-105 | Σκληρό sleep `WaitForTimeoutAsync()` | warning |
281
273
  | QA-CS-106 | Εύθραυστος selector αντί για role locator | warning |
282
- | QA-CS-108 | Σκληρό URL περιβάλλοντος στο τεστ | info |
283
- | QA-CS-111 | Μαζικό mock `page.RouteAsync("**")` | info |
284
274
 
285
275
  </details>
286
276
 
@@ -303,7 +293,6 @@ npx mjolnir-qa@latest --scope changed
303
293
  _ενεργούς_ κανόνες είναι μετρημένοι· `mjolnir rules --unmeasured`
304
294
  παραθέτει τους άμετρητους· η σελίδα `mjolnir explain` κάθε κανόνα
305
295
  δηλώνει την κατάστασή του. Δημοσιεύουμε το ποσοστό ακόμα κι όταν είναι
306
- άσχημο — ο QA-PW-107 αυτοελέγχεται στο 95 % και είναι σε καραντίνα γι'
307
296
  αυτό. Να μεγαλώσει αυτός ο αριθμός είναι η συνεχιζόμενη δουλειά του έργου.
308
297
 
309
298
  ### Tiers κανόνων και ωριμότητα γλωσσών
@@ -528,7 +517,7 @@ detached HEAD, μη-git στόχος, διαφορετικό default branch —
528
517
  {
529
518
  "gate": "error",
530
519
  "exclude": ["legacy/**"],
531
- "severityOverrides": { "QA-PW-118": "warning" },
520
+ "severityOverrides": { "QA-PW-141": "warning" },
532
521
  "ignore": [
533
522
  {
534
523
  "ruleId": "QA-TEST-004",
package/README.he.md CHANGED
@@ -14,7 +14,7 @@ CI, מדווח ציון הגינות ומציג בדיוק היכן האמון
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.ar.md) | [Bosanski](README.bs.md)
16
16
 
17
- > 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-07.
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
@@ -194,7 +194,6 @@ npx mjolnir-qa@latest --scope changed
194
194
 
195
195
  | ID | כלל | Severity |
196
196
  | ------------ | ------------------------------ | -------- |
197
- | QA-TQUAL-001 | אימות ב‑mocks בלבד | info |
198
197
  | QA-TQUAL-002 | assertion טאוטולוגי | error |
199
198
  | QA-TQUAL-009 | assertion של promise ללא await | error |
200
199
  | QA-TQUAL-011 | בדיקות שהועברו להערה | warning |
@@ -209,9 +208,6 @@ npx mjolnir-qa@latest --scope changed
209
208
  | QA-PW-002 | assertion של locator ללא await | error |
210
209
  | QA-PW-003 | `page.pause()` / `test.only()` עם commit | error |
211
210
  | QA-PW-004 | selectors שבירים של CSS/XPath | warning |
212
- | QA-PW-005 | לוגיקה עסקית בתוך `page.evaluate()` | info |
213
- | QA-PW-114 | element handles ישנים (`page.$`) | info |
214
- | QA-PW-118 | המתנות `networkidle` (flaky by design) | info |
215
211
  | QA-PW-123 | כתובות סביבה מקודדות מראש | warning |
216
212
 
217
213
  </details>
@@ -239,8 +235,6 @@ npx mjolnir-qa@latest --scope changed
239
235
  | QA-PY-002 | בדיקה מדולגת (`skip`, `xfail` לא קפדני) | warning |
240
236
  | QA-PY-003 | פונקציית בדיקה ללא assertions | error |
241
237
  | QA-PY-005 | `time.sleep()` בבדיקות | warning |
242
- | QA-PY-006 | גוף בדיקה ריק (`pass`) | info |
243
- | QA-PY-010 | תלות באקראי/זמן ללא freeze | info |
244
238
  | QA-PY-012 | assertion טאוטולוגי | error |
245
239
 
246
240
  סה״כ 20 כללי Python (QA-PY-001…012 היגיינת pytest + QA-PY-101…108 Playwright-Python).
@@ -257,8 +251,6 @@ npx mjolnir-qa@latest --scope changed
257
251
  | QA-JV-103 | מתודת בדיקה ללא assertions | error |
258
252
  | QA-JV-105 | שינה קבועה של Playwright `waitForTimeout()` | warning |
259
253
  | QA-JV-106 | selector שביר במקום role locator | warning |
260
- | QA-JV-108 | כתובת סביבה מקודדת מראש בבדיקה | info |
261
- | QA-JV-111 | mock כוללני `page.route("**")` | info |
262
254
 
263
255
  </details>
264
256
 
@@ -272,8 +264,6 @@ npx mjolnir-qa@latest --scope changed
272
264
  | QA-CS-103 | מתודת בדיקה ללא assertions | error |
273
265
  | QA-CS-105 | שינה קבועה `WaitForTimeoutAsync()` | warning |
274
266
  | QA-CS-106 | selector שביר במקום role locator | warning |
275
- | QA-CS-108 | כתובת סביבה מקודדת מראש בבדיקה | info |
276
- | QA-CS-111 | mock כוללני `page.RouteAsync("**")` | info |
277
267
 
278
268
  </details>
279
269
 
@@ -294,7 +284,6 @@ npx mjolnir-qa@latest --scope changed
294
284
  המחבר. התחתית של כל סריקה אומרת כמה מהכללים ש_ירו_ נמדדו;
295
285
  `mjolnir rules --unmeasured` מפרט את אלה שלא; עמוד `mjolnir explain`
296
286
  של כל כלל מצהיר על מעמדו. אנחנו מפרסמים את השיעור גם כשהוא מכוער —
297
- QA-PW-107 נבדק ב‑95% ומצוי בהסגר בגין זה. להגדיל את המספר הזה הוא
298
287
  העבודה המתמשכת של הפרויקט.
299
288
 
300
289
  ### רמות (tiers) של כללים ובשלות לפי שפה
@@ -503,7 +492,7 @@ Mjölnir הוא zero-config. `mjolnir.config.json` אופציונלי (או
503
492
  {
504
493
  "gate": "error",
505
494
  "exclude": ["legacy/**"],
506
- "severityOverrides": { "QA-PW-118": "warning" },
495
+ "severityOverrides": { "QA-PW-141": "warning" },
507
496
  "ignore": [
508
497
  {
509
498
  "ruleId": "QA-TEST-004",
package/README.it.md CHANGED
@@ -15,7 +15,7 @@ dove la fiducia si rompe.
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 | [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-07.
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 @@ pubblicata — quello è il firewall dei falsi positivi.
203
203
 
204
204
  | ID | Regla | Severity |
205
205
  | ------------ | --------------------------------- | -------- |
206
- | QA-TQUAL-001 | Verifica solo con mock | info |
207
206
  | QA-TQUAL-002 | Asserzione tautologica | error |
208
207
  | QA-TQUAL-009 | Asserzione di promise senza await | error |
209
208
  | QA-TQUAL-011 | Test commentati | warning |
@@ -213,15 +212,12 @@ pubblicata — quello è il firewall dei falsi positivi.
213
212
  <details>
214
213
  <summary><strong>Playwright 🎭</strong></summary>
215
214
 
216
- | ID | Regla | Severity |
217
- | --------- | --------------------------------------------- | -------- |
218
- | QA-PW-002 | Asserzione di locator senza await | error |
219
- | QA-PW-003 | `page.pause()` / `test.only()` committati | error |
220
- | QA-PW-004 | Selettori CSS/XPath fragili | warning |
221
- | QA-PW-005 | Logica di business dentro `page.evaluate()` | info |
222
- | QA-PW-114 | Element handle legacy (`page.$`) | info |
223
- | QA-PW-118 | Attese `networkidle` (instabili per progetto) | info |
224
- | QA-PW-123 | URL di ambiente hardcoded | warning |
215
+ | ID | Regla | Severity |
216
+ | --------- | ----------------------------------------- | -------- |
217
+ | QA-PW-002 | Asserzione di locator senza await | error |
218
+ | QA-PW-003 | `page.pause()` / `test.only()` committati | error |
219
+ | QA-PW-004 | Selettori CSS/XPath fragili | warning |
220
+ | QA-PW-123 | URL di ambiente hardcoded | warning |
225
221
 
226
222
  </details>
227
223
 
@@ -243,14 +239,12 @@ pubblicata — quello è il firewall dei falsi positivi.
243
239
  <details>
244
240
  <summary><strong>Python / pytest 🐍</strong></summary>
245
241
 
246
- | ID | Regla | Severity |
247
- | --------- | ------------------------------------------ | -------- |
248
- | QA-PY-002 | Test saltato (`skip`, `xfail` non strict) | warning |
249
- | QA-PY-003 | Funzione di test senza asserzioni | error |
250
- | QA-PY-005 | `time.sleep()` nei test | warning |
251
- | QA-PY-006 | Corpo del test vuoto (`pass`) | info |
252
- | QA-PY-010 | Dipendenza da casualità/tempo senza freeze | info |
253
- | QA-PY-012 | Asserzione tautologica | error |
242
+ | ID | Regla | Severity |
243
+ | --------- | ----------------------------------------- | -------- |
244
+ | QA-PY-002 | Test saltato (`skip`, `xfail` non strict) | warning |
245
+ | QA-PY-003 | Funzione di test senza asserzioni | error |
246
+ | QA-PY-005 | `time.sleep()` nei test | warning |
247
+ | QA-PY-012 | Asserzione tautologica | error |
254
248
 
255
249
  20 regole Python in totale (QA-PY-001…012 igiene pytest + QA-PY-101…108 Playwright-Python).
256
250
 
@@ -266,8 +260,6 @@ pubblicata — quello è il firewall dei falsi positivi.
266
260
  | QA-JV-103 | Metodo di test senza asserzioni | error |
267
261
  | QA-JV-105 | Sleep hardcoded Playwright `waitForTimeout()` | warning |
268
262
  | QA-JV-106 | Selettore fragile invece di un role locator | warning |
269
- | QA-JV-108 | URL di ambiente hardcoded nel test | info |
270
- | QA-JV-111 | Mock blanket `page.route("**")` | info |
271
263
 
272
264
  </details>
273
265
 
@@ -281,8 +273,6 @@ pubblicata — quello è il firewall dei falsi positivi.
281
273
  | QA-CS-103 | Metodo di test senza asserzioni | error |
282
274
  | QA-CS-105 | Sleep hardcoded `WaitForTimeoutAsync()` | warning |
283
275
  | QA-CS-106 | Selettore fragile invece di un role locator | warning |
284
- | QA-CS-108 | URL di ambiente hardcoded nel test | info |
285
- | QA-CS-111 | Mock blanket `page.RouteAsync("**")` | info |
286
276
 
287
277
  </details>
288
278
 
@@ -304,7 +294,6 @@ codice OSS** (≥ 10 riscontri classificati a mano ciascuna; vedi
304
294
  dell'autore. Ogni footer di scansione dice quante delle regole
305
295
  _scattate_ sono misurate; `mjolnir rules --unmeasured` elenca quelle
306
296
  che non lo sono; la pagina `mjolnir explain` di ogni regola dichiara il
307
- suo stato. Pubblichiamo il tasso anche quando è brutto — QA-PW-107 si
308
297
  audita al 95 % ed è in quarantena per questo. Far crescere quel numero è il
309
298
  lavoro continuo del progetto.
310
299
 
@@ -531,7 +520,7 @@ perimetro — non cambia mai la semantica di rilevamento.
531
520
  {
532
521
  "gate": "error",
533
522
  "exclude": ["legacy/**"],
534
- "severityOverrides": { "QA-PW-118": "warning" },
523
+ "severityOverrides": { "QA-PW-141": "warning" },
535
524
  "ignore": [
536
525
  {
537
526
  "ruleId": "QA-TEST-004",
package/README.ja.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) | 日本語 | [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-07.
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 @@ Linux で動作します。
200
200
 
201
201
  | ID | ルール | Severity |
202
202
  | ------------ | --------------------------------------- | -------- |
203
- | QA-TQUAL-001 | モックのみの検証 | info |
204
203
  | QA-TQUAL-002 | トートロジカルなアサーション | error |
205
204
  | QA-TQUAL-009 | await されていない promise アサーション | error |
206
205
  | QA-TQUAL-011 | コメントアウトされたテスト | warning |
@@ -215,9 +214,6 @@ Linux で動作します。
215
214
  | QA-PW-002 | await されていないロケータアサーション | error |
216
215
  | QA-PW-003 | コミットされた `page.pause()` / `test.only()` | error |
217
216
  | QA-PW-004 | 脆弱な CSS/XPath セレクタ | warning |
218
- | QA-PW-005 | `page.evaluate()` 内のビジネスロジック | info |
219
- | QA-PW-114 | レガシーな要素ハンドル(`page.$`) | info |
220
- | QA-PW-118 | `networkidle` 待ち(設計上 flaky) | info |
221
217
  | QA-PW-123 | ハードコードされた環境 URL | warning |
222
218
 
223
219
  </details>
@@ -245,8 +241,6 @@ Linux で動作します。
245
241
  | QA-PY-002 | スキップされたテスト(`skip`、非厳格な `xfail`) | warning |
246
242
  | QA-PY-003 | アサーションのないテスト関数 | error |
247
243
  | QA-PY-005 | テスト内の `time.sleep()` | warning |
248
- | QA-PY-006 | 空のテスト本体(`pass`) | info |
249
- | QA-PY-010 | freeze なしのランダム/時刻依存 | info |
250
244
  | QA-PY-012 | トートロジカルなアサーション | error |
251
245
 
252
246
  Python ルールは合計 20 本(QA-PY-001…012 pytest 衛生 + QA-PY-101…108 Playwright-Python)。
@@ -263,8 +257,6 @@ Python ルールは合計 20 本(QA-PY-001…012 pytest 衛生 + QA-PY-101…1
263
257
  | QA-JV-103 | アサーションのないテストメソッド | error |
264
258
  | QA-JV-105 | Playwright のハードな sleep `waitForTimeout()` | warning |
265
259
  | QA-JV-106 | role ロケータの代わりの脆弱なセレクタ | warning |
266
- | QA-JV-108 | テストにハードコードされた環境 URL | info |
267
- | QA-JV-111 | 全域モック `page.route("**")` | info |
268
260
 
269
261
  </details>
270
262
 
@@ -278,8 +270,6 @@ Python ルールは合計 20 本(QA-PY-001…012 pytest 衛生 + QA-PY-101…1
278
270
  | QA-CS-103 | アサーションのないテストメソッド | error |
279
271
  | QA-CS-105 | ハードな sleep `WaitForTimeoutAsync()` | warning |
280
272
  | QA-CS-106 | role ロケータの代わりの脆弱なセレクタ | warning |
281
- | QA-CS-108 | テストにハードコードされた環境 URL | info |
282
- | QA-CS-111 | 全域モック `page.RouteAsync("**")` | info |
283
273
 
284
274
  </details>
285
275
 
@@ -300,7 +290,6 @@ false-positive 率を備えています**(各ルールにつき手作業で分
300
290
  は作者の推定で出荷されます。すべてのスキャンのフッターは、_発火した_
301
291
  ルールのうちいくつが測定済みかを教えてくれます。`mjolnir rules --unmeasured`
302
292
  は未測定のものを列挙します。各ルールの `mjolnir explain` ページはその
303
- 状態を明言します。率は醜くても公開します——QA-PW-107 は 95% で監査され、
304
293
  それゆえ隔離されています。この数字を増やすことが、プロジェクトの継続的
305
294
  な仕事です。
306
295
 
@@ -520,7 +509,7 @@ Mjölnir はゼロ設定です。リポジトリルートの任意の `mjolnir.c
520
509
  {
521
510
  "gate": "error",
522
511
  "exclude": ["legacy/**"],
523
- "severityOverrides": { "QA-PW-118": "warning" },
512
+ "severityOverrides": { "QA-PW-141": "warning" },
524
513
  "ignore": [
525
514
  {
526
515
  "ruleId": "QA-TEST-004",
package/README.ko.md CHANGED
@@ -15,7 +15,7 @@
15
15
 
16
16
  [English](README.md) | [简体中文](README.zh.md) | [繁體中文](README.zht.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](README.bs.md)
17
17
 
18
- > 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-07.
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
@@ -198,7 +198,6 @@ npx mjolnir-qa@latest --scope changed
198
198
 
199
199
  | ID | 규칙 | Severity |
200
200
  | ------------ | ----------------------------- | -------- |
201
- | QA-TQUAL-001 | 모크(mock)만으로 검증 | info |
202
201
  | QA-TQUAL-002 | 동어반복적 어설션 | error |
203
202
  | QA-TQUAL-009 | await되지 않은 promise 어설션 | error |
204
203
  | QA-TQUAL-011 | 주석 처리된 테스트 | warning |
@@ -213,9 +212,6 @@ npx mjolnir-qa@latest --scope changed
213
212
  | QA-PW-002 | await되지 않은 로케이터 어설션 | error |
214
213
  | QA-PW-003 | 커밋된 `page.pause()` / `test.only()` | error |
215
214
  | QA-PW-004 | 취약한 CSS/XPath 선택자 | warning |
216
- | QA-PW-005 | `page.evaluate()` 안의 비즈니스 로직 | info |
217
- | QA-PW-114 | 레거시 요소 핸들 (`page.$`) | info |
218
- | QA-PW-118 | `networkidle` 대기 (설계상 flaky) | info |
219
215
  | QA-PW-123 | 하드코딩된 환경 URL | warning |
220
216
 
221
217
  </details>
@@ -243,8 +239,6 @@ npx mjolnir-qa@latest --scope changed
243
239
  | QA-PY-002 | 건너뛴 테스트 (`skip`, 비엄격 `xfail`) | warning |
244
240
  | QA-PY-003 | 어설션이 없는 테스트 함수 | error |
245
241
  | QA-PY-005 | 테스트 안의 `time.sleep()` | warning |
246
- | QA-PY-006 | 빈 테스트 본문 (`pass`) | info |
247
- | QA-PY-010 | freeze 없는 무작위성/시간 의존 | info |
248
242
  | QA-PY-012 | 동어반복적 어설션 | error |
249
243
 
250
244
  총 20개의 Python 규칙 (QA-PY-001…012 pytest 위생 + QA-PY-101…108 Playwright-Python).
@@ -261,8 +255,6 @@ npx mjolnir-qa@latest --scope changed
261
255
  | QA-JV-103 | 어설션이 없는 테스트 메서드 | error |
262
256
  | QA-JV-105 | Playwright 하드 sleep `waitForTimeout()` | warning |
263
257
  | QA-JV-106 | role 로케이터 대신 취약한 선택자 | warning |
264
- | QA-JV-108 | 테스트에 하드코딩된 환경 URL | info |
265
- | QA-JV-111 | 전면 모크 `page.route("**")` | info |
266
258
 
267
259
  </details>
268
260
 
@@ -276,8 +268,6 @@ npx mjolnir-qa@latest --scope changed
276
268
  | QA-CS-103 | 어설션이 없는 테스트 메서드 | error |
277
269
  | QA-CS-105 | 하드 sleep `WaitForTimeoutAsync()` | warning |
278
270
  | QA-CS-106 | role 로케이터 대신 취약한 선택자 | warning |
279
- | QA-CS-108 | 테스트에 하드코딩된 환경 URL | info |
280
- | QA-CS-111 | 전면 모크 `page.RouteAsync("**")` | info |
281
271
 
282
272
  </details>
283
273
 
@@ -298,7 +288,6 @@ npx mjolnir-qa@latest --scope changed
298
288
  출시됩니다. 모든 스캔의 바닥글은 _발화한_ 규칙 중 몇 개가 측정되었는지
299
289
  말해줍니다; `mjolnir rules --unmeasured`는 측정되지 않은 것들을 나열합니다;
300
290
  각 규칙의 `mjolnir explain` 페이지는 그 상태를 명시합니다. 수치가 흉해도
301
- 우리는 비율을 공개합니다 — QA-PW-107은 95%로 감사되었고 그래서 격리
302
291
  계층에 있습니다. 그 숫자를 늘려가는 것이 프로젝트의 지속적인 작업입니다.
303
292
 
304
293
  ### 규칙 계층과 언어 성숙도
@@ -515,7 +504,7 @@ Mjölnir는 제로 설정입니다. 리포지터리 루트의 선택적 `mjolnir
515
504
  {
516
505
  "gate": "error",
517
506
  "exclude": ["legacy/**"],
518
- "severityOverrides": { "QA-PW-118": "warning" },
507
+ "severityOverrides": { "QA-PW-141": "warning" },
519
508
  "ignore": [
520
509
  {
521
510
  "ruleId": "QA-TEST-004",