mjolnir-qa 0.5.11 → 0.5.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.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-04.
18
+ > 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-07.
19
19
 
20
20
  ```bash
21
21
  npx mjolnir-qa@latest
@@ -300,15 +300,15 @@ sortir — c'est le pare-feu anti faux positifs.
300
300
 
301
301
  ### Quelle part est mesurée
302
302
 
303
- **74 des 99 règles portent un taux de faux positifs mesuré sur du vrai
303
+ **78 des 99 règles portent un taux de faux positifs mesuré sur du vrai
304
304
  code OSS** (≥ 10 constats classés à la main chacun ; voir
305
- [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Les 19 autres sortent sur
305
+ [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Les 21 autres sortent sur
306
306
  l'estimation de l'auteur. Chaque pied de scan vous dit combien des
307
307
  règles _déclenchées_ sont mesurées ; `mjolnir rules --unmeasured` liste
308
308
  celles qui ne le sont pas ; la page `mjolnir explain` de chaque règle
309
309
  énonce son statut. Nous publions le taux même quand il est laid —
310
310
  QA-CS-103 s'audite à 95 % et est mis en quarantaine pour ça. Faire
311
- grandir ce 78 est le travail continu du projet.
311
+ grandir ce chiffre est le travail continu du projet.
312
312
 
313
313
  ### Tiers de règles et maturité par langage
314
314
 
@@ -464,14 +464,14 @@ changement de test suspect dans un diff ; elle ne prouve pas que le
464
464
  système de vérification dans son ensemble est digne de confiance — et
465
465
  elle ne voit que le diff que vous lui montrez.
466
466
 
467
- | | Revue de code IA (Copilot, etc.) | **Mjölnir** |
468
- | ------------------------------------------- | :------------------------------------: | :-------------------------------: |
469
- | Coût par scan | Tokens (évolue avec la taille du diff) | **Zéro** (local, installé) |
470
- | Voit toute la suite + toutes les configs CI | Seulement le diff de PR montré | **Tout, à chaque fois** |
471
- | Déterministe (même entrée → même sortie) | ❌ (non déterministe) | **✅** |
472
- | Détecte des motifs dormants depuis des mois | Seulement s'il est dans le contexte | **✅** (scanne tous les fichiers) |
473
- | Se souvient des constats entre les runs | ❌ (aucune mémoire entre sessions) | **✅** (baseline + diff) |
474
- | Tourne sans déclencheur humain | Nécessite une PR ou un prompt | **✅** (hook CI, 3 secondes) |
467
+ | | Revue de code IA (Copilot, etc.) | **Mjölnir** |
468
+ | ------------------------------------------- | :------------------------------------: | :---------------------------------: |
469
+ | Coût par scan | Tokens (évolue avec la taille du diff) | **Zéro** (local, installé) |
470
+ | Voit toute la suite + toutes les configs CI | Seulement le diff de PR montré | **Tout, à chaque fois** |
471
+ | Déterministe (même entrée → même sortie) | ❌ (non déterministe) | **✅** |
472
+ | Détecte des motifs dormants depuis des mois | Seulement s'il est dans le contexte | **✅** (scanne tous les fichiers) |
473
+ | Se souvient des constats entre les runs | ❌ (aucune mémoire entre sessions) | **✅** (baseline + diff) |
474
+ | Tourne sans déclencheur humain | Nécessite une PR ou un prompt | **✅** (hook CI, quelques secondes) |
475
475
 
476
476
  **Utilisez les deux.** L'IA attrape la nuance, l'intention et les
477
477
  défauts de conception qu'aucune regex ne trouve. Mjölnir attrape les
@@ -597,11 +597,20 @@ réutilisés.
597
597
  positifs issu de vrai code OSS sortent dans les tiers vedettes (voir
598
598
  [Quelle part est mesurée](#quelle-part-est-mesurée)) ; le pied de scan
599
599
  et `mjolnir rules --unmeasured` vous disent lesquels.
600
- - **Confiance plugins** — les plugins sont des paquets npm déclarés
601
- sous `"plugins"`. Il n'y a **pas de sandbox** : le code d'un plugin
600
+ - **Confiance plugins & porte d'exécution** — les plugins sont des paquets npm déclarés
601
+ sous `"plugins"` ; les modules JS vivent dans `mjolnir-rules/*.mjs`.
602
+ Il n'y a **pas de sandbox** : le code d'un plugin
602
603
  tourne avec tous les privilèges Node, le même modèle de confiance que
603
- les plugins ESLint ou Vitest. Les préfixes d'ID de règles core sont
604
- réservés et refusés aux plugins pour empêcher l'usurpation.
604
+ les plugins ESLint ou Vitest. Pour cette raison, l'exécution de code est
605
+ **opt-in à chaque scan** : passez `--enable-plugins` (ou définissez
606
+ `MJOLNIR_ENABLE_PLUGINS=1`), sinon les sources ne sont PAS chargées — une
607
+ notification stderr bruyante liste exactement ce qui a été ignoré.
608
+ Scanner du code non fiable ne l'exécute jamais. Les manifestes de règles
609
+ JSON (`mjolnir-rules/*.json`) ne sont pas concernés : ils déclarent des
610
+ motifs regex et n'exécutent aucun code par conception. Les préfixes
611
+ d'ID de règles core sont
612
+ réservés et refusés aux plugins et règles externes pour empêcher
613
+ l'usurpation.
605
614
  - **Règles externes locales au workspace** (par dossier, zéro réseau) —
606
615
  un répertoire `mjolnir-rules/` à côté de la cible du scan charge des
607
616
  règles personnalisées : des fichiers JSON déclarent des motifs regex
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-04.
18
+ > 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-07.
19
19
 
20
20
  ```bash
21
21
  npx mjolnir-qa@latest
@@ -296,15 +296,15 @@ npx mjolnir-qa@latest --scope changed
296
296
 
297
297
  ### Πόσο από αυτό είναι μετρημένο
298
298
 
299
- **74 από 99 κανόνες φέρουν ποσοστό false positive μετρημένο σε πραγματικό
299
+ **78 από 99 κανόνες φέρουν ποσοστό false positive μετρημένο σε πραγματικό
300
300
  κώδικα OSS** (≥ 10 χειροκίνητα ταξινομημένα ευρήματα ο καθένας· βλ.
301
- [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Οι άλλοι 19 κυκλοφορούν πάνω στην
301
+ [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Οι άλλοι 21 κυκλοφορούν πάνω στην
302
302
  εκτίμηση του συγγραφέα. Το υποσέλιδο κάθε σκαν σου λέει πόσοι από τους
303
303
  _ενεργούς_ κανόνες είναι μετρημένοι· `mjolnir rules --unmeasured`
304
304
  παραθέτει τους άμετρητους· η σελίδα `mjolnir explain` κάθε κανόνα
305
305
  δηλώνει την κατάστασή του. Δημοσιεύουμε το ποσοστό ακόμα κι όταν είναι
306
306
  άσχημο — ο QA-CS-103 αυτοελέγχεται στο 95 % και είναι σε καραντίνα γι'
307
- αυτό. Να μεγαλώσει αυτό το 78 είναι η συνεχιζόμενη δουλειά του έργου.
307
+ αυτό. Να μεγαλώσει αυτός ο αριθμός είναι η συνεχιζόμενη δουλειά του έργου.
308
308
 
309
309
  ### Tiers κανόνων και ωριμότητα γλωσσών
310
310
 
@@ -459,14 +459,14 @@ linting:
459
459
  επαλήθευσης συνολικά αξίζει εμπιστοσύνη — και βλέπει μόνο το diff που
460
460
  του δείχνεις.
461
461
 
462
- | | AI code review (Copilot κ.λπ.) | **Mjölnir** |
463
- | -------------------------------------------- | :--------------------------------------: | :-------------------------------: |
464
- | Κόστος ανά σκαν | Tokens (κλιμακώνεται με το μέγεθος diff) | **Μηδέν** (τοπικό, εγκατεστημένο) |
465
- | Βλέπει όλη τη σουίτα + όλες τις ρυθμίσεις CI | Μόνο το PR diff που δείχνεις | **Όλα, κάθε φορά** |
466
- | Καθοριστικό (ίδιο input → ίδιο output) | ❌ (μη καθοριστικό) | **✅** |
467
- | Πιάνει μοτίβα που κοιμούνται μήνες | Μόνο αν είναι στο context | **✅** (σκανάρει όλα τα αρχεία) |
468
- | Θυμάται ευρήματα μεταξύ runs | ❌ (καμία μνήμη μεταξύ συνεδριών) | **✅** (baseline + diff) |
469
- | Τρέχει χωρίς ανθρώπινο έναυσμα | Χρειάζεται PR ή prompt | **✅** (CI hook, 3 δευτερόλεπτα) |
462
+ | | AI code review (Copilot κ.λπ.) | **Mjölnir** |
463
+ | -------------------------------------------- | :--------------------------------------: | :--------------------------------------: |
464
+ | Κόστος ανά σκαν | Tokens (κλιμακώνεται με το μέγεθος diff) | **Μηδέν** (τοπικό, εγκατεστημένο) |
465
+ | Βλέπει όλη τη σουίτα + όλες τις ρυθμίσεις CI | Μόνο το PR diff που δείχνεις | **Όλα, κάθε φορά** |
466
+ | Καθοριστικό (ίδιο input → ίδιο output) | ❌ (μη καθοριστικό) | **✅** |
467
+ | Πιάνει μοτίβα που κοιμούνται μήνες | Μόνο αν είναι στο context | **✅** (σκανάρει όλα τα αρχεία) |
468
+ | Θυμάται ευρήματα μεταξύ runs | ❌ (καμία μνήμη μεταξύ συνεδριών) | **✅** (baseline + diff) |
469
+ | Τρέχει χωρίς ανθρώπινο έναυσμα | Χρειάζεται PR ή prompt | **✅** (CI hook, τρέχει σε δευτερόλεπτα) |
470
470
 
471
471
  **Χρησιμοποίησέ τα και τα δύο.** Το AI πιάνει νύαντσε, πρόθεση και
472
472
  σχεδιαστικά ελαττώματα που καμία regex δεν βρίσκει. Το Mjölnir πιάνει
@@ -592,11 +592,19 @@ detached HEAD, μη-git στόχος, διαφορετικό default branch —
592
592
  [Πόσο από αυτό είναι μετρημένο](#πόσο-από-αυτό-είναι-μετρημένο)); το
593
593
  υποσέλιδο σκαν και το `mjolnir rules --unmeasured` σου λένε ποιος
594
594
  ποιος.
595
- - **Εμπιστοσύνη plugins** — τα plugins είναι πακέτα npm δηλωμένα κάτω
596
- από `"plugins"`. **Δεν υπάρχει sandbox**: ο κώδικας plugin τρέχει με
595
+ - **Εμπιστοσύνη plugins και πύλη εκτέλεσης** — τα plugins είναι πακέτα npm
596
+ δηλωμένα κάτω
597
+ από `"plugins"`· τα JS modules ζουν στο `mjolnir-rules/*.mjs`.
598
+ **Δεν υπάρχει sandbox**: ο κώδικας plugin τρέχει με
597
599
  πλήρη δικαιώματα Node, το ίδιο μοντέλο εμπιστοσύνης με plugins ESLint
598
- ή Vitest. Core προθέματα rule-ID είναι δεσμευμένα και απορρίπτονται
599
- από plugins κατά της πλαστοπροσωπίας.
600
+ ή Vitest. Γι' αυτό η εκτέλεση κώδικα είναι **opt-in σε κάθε σκαν**:
601
+ δώστε `--enable-plugins` (ή ορίστε `MJOLNIR_ENABLE_PLUGINS=1`),
602
+ αλλιώς οι πηγές ΔΕΝ φορτώνονται — μια δυνατή ειδοποίηση stderr
603
+ παραθέτει ακριβώς τι παραλείφθηκε. Το σκανάρει αν αξιόπιστο κώδικα
604
+ δεν τον εκτελεί ποτέ. Τα JSON rule manifests (`mjolnir-rules/*.json`)
605
+ δεν επηρεάζονται: δηλώνουν regex μοτίβα και δεν εκτελούν κώδικα εκ
606
+ σχεδίασης. Core προθέματα rule-ID είναι δεσμευμένα και απορρίπτονται
607
+ από plugins και εξωτερικούς κανόνες κατά της πλαστοπροσωπίας.
600
608
  - **Εξωτερικοί κανόνες τοπικοί στο workspace** (φάκελος, μηδέν δίκτυο) —
601
609
  ένας φάκελος `mjolnir-rules/` δίπλα στον στόχο σκαν φορτώνει custom
602
610
  κανόνες: JSON αρχεία δηλώνουν regex μοτίβα (κανένας κώδικας δεν
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-04.
17
+ > 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-07.
18
18
 
19
19
  ```bash
20
20
  npx mjolnir-qa@latest
@@ -288,13 +288,13 @@ npx mjolnir-qa@latest --scope changed
288
288
 
289
289
  ### כמה מזה נמדד
290
290
 
291
- **74 מתוך 99 כללים נושאים שיעור false positives שנמדד מול קוד OSS אמיתי**
291
+ **78 מתוך 99 כללים נושאים שיעור false positives שנמדד מול קוד OSS אמיתי**
292
292
  (≥ 10 ממצאים שסווגו ידנית כל אחד; ראו
293
- [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). ה‑19 האחרים יוצאים על הערכת
293
+ [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). ה‑21 האחרים יוצאים על הערכת
294
294
  המחבר. התחתית של כל סריקה אומרת כמה מהכללים ש_ירו_ נמדדו;
295
295
  `mjolnir rules --unmeasured` מפרט את אלה שלא; עמוד `mjolnir explain`
296
296
  של כל כלל מצהיר על מעמדו. אנחנו מפרסמים את השיעור גם כשהוא מכוער —
297
- QA-CS-103 נבדק ב‑95% ומצוי בהסגר בגין זה. להגדיל את ה‑78 הזה הוא
297
+ QA-CS-103 נבדק ב‑95% ומצוי בהסגר בגין זה. להגדיל את המספר הזה הוא
298
298
  העבודה המתמשכת של הפרויקט.
299
299
 
300
300
  ### רמות (tiers) של כללים ובשלות לפי שפה
@@ -439,14 +439,14 @@ Linters אומרים לך אם הקוד מציית לכללים. Mjölnir אומ
439
439
  אינה מוכיחה שמערכת האימות כולה ראויה לאמון — והיא רואה רק את ה‑diff
440
440
  שמציגים לה.
441
441
 
442
- | | סקירת קוד AI (Copilot וכד') | **Mjölnir** |
443
- | -------------------------------- | :--------------------------: | :--------------------------: |
444
- | עלות לסריקה | Token (מתרחב עם גודל ה‑diff) | **אפס** (מקומי, מותקן) |
445
- | רואה את כל החבילה + כל תצורות CI | רק את ה‑diff שמציגים לו | **הכול, בכל פעם** |
446
- | דטרמיניסטי (אותו קלט → אותו פלט) | ❌ (לא דטרמיניסטי) | **✅** |
447
- | תופס תבניות שישנות חודשים | רק אם הן בהקשר | **✅** (סורק את כל הקבצים) |
448
- | זוכר ממצאים בין ריצות | ❌ (אין זיכרון בין הפעלות) | **✅** (baseline + diff) |
449
- | רץ ללא הדק אנושי | דרוש PR או prompt | **✅** (hook של CI, 3 שניות) |
442
+ | | סקירת קוד AI (Copilot וכד') | **Mjölnir** |
443
+ | -------------------------------- | :--------------------------: | :----------------------------: |
444
+ | עלות לסריקה | Token (מתרחב עם גודל ה‑diff) | **אפס** (מקומי, מותקן) |
445
+ | רואה את כל החבילה + כל תצורות CI | רק את ה‑diff שמציגים לו | **הכול, בכל פעם** |
446
+ | דטרמיניסטי (אותו קלט → אותו פלט) | ❌ (לא דטרמיניסטי) | **✅** |
447
+ | תופס תבניות שישנות חודשים | רק אם הן בהקשר | **✅** (סורק את כל הקבצים) |
448
+ | זוכר ממצאים בין ריצות | ❌ (אין זיכרון בין הפעלות) | **✅** (baseline + diff) |
449
+ | רץ ללא הדק אנושי | דרוש PR או prompt | **✅** (hook של CI, רץ בשניות) |
450
450
 
451
451
  **השתמשו בשניהם.** AI תופס ניואנס, כוונה ופגמי עיצוב שאין regex
452
452
  מוצא. Mjölnir תופס את התבניות המבניות ש‑AI מפספס כי הן נראות
@@ -558,10 +558,17 @@ Mjölnir הוא zero-config. `mjolnir.config.json` אופציונלי (או
558
558
  - **נמדד, לא נטען** — רק כללים עם שיעור false positives מקוד OSS אמיתי
559
559
  יוצאים ב‑tiers הכותרת (ראו [כמה מזה נמדד](#כמה-מזה-נמדד)); תחתית הסריקה
560
560
  ו‑`mjolnir rules --unmeasured` אומרים לך מי מי.
561
- - **אמון ב‑plugins** — plugins הם חבילות npm המוצהרות תחת `"plugins"`.
561
+ - **אמון ב‑plugins ושער הרצת הקוד** — plugins הם חבילות npm המוצהרות תחת
562
+ `"plugins"`; מודולי JS חיים ב‑`mjolnir-rules/*.mjs`.
562
563
  **אין sandbox**: קוד plugin רץ בהרשאות Node מלאות, אותו מודל אמון
563
- כמו plugins של ESLint או Vitest. קידומות מזהי כללים core שמורות
564
- ונדחות מ‑plugins למניעת התחזות.
564
+ כמו plugins של ESLint או Vitest. בגלל זה, הרצת קוד היא **opt‑in בכל
565
+ סריקה**: העבירו `--enable-plugins` (או הגדירו
566
+ `MJOLNIR_ENABLE_PLUGINS=1`), אחרת המקורות לא נטענים — הודעת stderr
567
+ רועשת מפרטת בדיוק מה דולג. סריקת קוד לא מהימן לא מריצה אותו לעולם.
568
+ מניפסטי כללים ב‑JSON (`mjolnir-rules/*.json`) אינם מושפעים: הם
569
+ מצהירים תבניות regex ולא מריצים קוד כלל בעיצובם. קידומות מזהי
570
+ כללים core שמורות
571
+ ונדחות מ‑plugins ומכללים חיצוניים למניעת התחזות.
565
572
  - **כללים חיצוניים מקומיים ל‑workspace** (מבוססי תיקייה, אפס רשת) —
566
573
  תיקיית `mjolnir-rules/` ליד יעד הסריקה טוענת כללים מותאמים: קבצי JSON
567
574
  מצהירים תבניות regex (שום קוד לא מורץ), מודולי `.mjs`/`.js` מייצאים
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-04.
18
+ > 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-07.
19
19
 
20
20
  ```bash
21
21
  npx mjolnir-qa@latest
@@ -298,14 +298,14 @@ pubblicata — quello è il firewall dei falsi positivi.
298
298
 
299
299
  ### Quanto è misurato
300
300
 
301
- **74 regole su 99 portano un tasso di falsi positivi misurato su vero
301
+ **78 regole su 99 portano un tasso di falsi positivi misurato su vero
302
302
  codice OSS** (≥ 10 riscontri classificati a mano ciascuna; vedi
303
- [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Le altre 19 escono sulla stima
303
+ [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Le altre 21 escono sulla stima
304
304
  dell'autore. Ogni footer di scansione dice quante delle regole
305
305
  _scattate_ sono misurate; `mjolnir rules --unmeasured` elenca quelle
306
306
  che non lo sono; la pagina `mjolnir explain` di ogni regola dichiara il
307
307
  suo stato. Pubblichiamo il tasso anche quando è brutto — QA-CS-103 si
308
- audita al 95 % ed è in quarantena per questo. Far crescere quel 78 è il
308
+ audita al 95 % ed è in quarantena per questo. Far crescere quel numero è il
309
309
  lavoro continuo del progetto.
310
310
 
311
311
  ### Tier delle regole e maturità per linguaggio
@@ -461,14 +461,14 @@ modifica sospetta a un test in un diff; non dimostra che il sistema di
461
461
  verifica nel suo insieme sia affidabile — e vede solo il diff che gli
462
462
  mostri.
463
463
 
464
- | | Code review IA (Copilot, ecc.) | **Mjölnir** |
465
- | --------------------------------------------- | :--------------------------------------: | :-----------------------------: |
466
- | Costo per scansione | Token (scala con la dimensione del diff) | **Zero** (locale, installato) |
467
- | Vede tutta la suite + tutte le config CI | Solo il diff di PR che mostri | **Tutto, ogni volta** |
468
- | Deterministico (stesso input → stesso output) | ❌ (non deterministico) | **✅** |
469
- | Becca pattern dormienti da mesi | Solo se è nel contesto | **✅** (scansiona tutti i file) |
470
- | Ricorda i riscontri tra le esecuzioni | ❌ (nessuna memoria tra sessioni) | **✅** (baseline + diff) |
471
- | Gira senza innesco umano | Serve una PR o un prompt | **✅** (hook CI, 3 secondi) |
464
+ | | Code review IA (Copilot, ecc.) | **Mjölnir** |
465
+ | --------------------------------------------- | :--------------------------------------: | :-------------------------------------: |
466
+ | Costo per scansione | Token (scala con la dimensione del diff) | **Zero** (locale, installato) |
467
+ | Vede tutta la suite + tutte le config CI | Solo il diff di PR che mostri | **Tutto, ogni volta** |
468
+ | Deterministico (stesso input → stesso output) | ❌ (non deterministico) | **✅** |
469
+ | Becca pattern dormienti da mesi | Solo se è nel contesto | **✅** (scansiona tutti i file) |
470
+ | Ricorda i riscontri tra le esecuzioni | ❌ (nessuna memoria tra sessioni) | **✅** (baseline + diff) |
471
+ | Gira senza innesco umano | Serve una PR o un prompt | **✅** (hook CI, gira in pochi secondi) |
472
472
 
473
473
  **Usali entrambi.** L'IA becca la sfumatura, l'intento e i difetti di
474
474
  design che nessuna regex trova. Mjölnir becca i pattern strutturali che
@@ -594,11 +594,20 @@ riusati.
594
594
  positivi da vero codice OSS escono nei tier di testa (vedi
595
595
  [Quanto è misurato](#quanto-è-misurato)); il footer della scansione e
596
596
  `mjolnir rules --unmeasured` ti dicono quale è quale.
597
- - **Fiducia nei plugin** — i plugin sono pacchetti npm dichiarati sotto
598
- `"plugins"`. **Non c'è sandbox**: il codice del plugin gira con tutti
597
+ - **Fiducia nei plugin e cancelletto di esecuzione** — i plugin sono
598
+ pacchetti npm dichiarati sotto
599
+ `"plugins"`; i moduli JS vivono in `mjolnir-rules/*.mjs`.
600
+ **Non c'è sandbox**: il codice del plugin gira con tutti
599
601
  i privilegi Node, lo stesso modello di fiducia dei plugin ESLint o
600
- Vitest. I prefissi di ID delle regole core sono riservati e rifiutati
601
- dai plugin per evitare spoofing.
602
+ Vitest. Per questo, l'esecuzione di codice è **opt-in a ogni
603
+ scansione**: passa `--enable-plugins` (o imposta
604
+ `MJOLNIR_ENABLE_PLUGINS=1`), altrimenti le sorgenti NON vengono
605
+ caricate — un avviso chiassoso su stderr elenca esattamente cosa è
606
+ stato saltato. Scansionare codice non affidabile non lo esegue mai.
607
+ I manifest di regole JSON (`mjolnir-rules/*.json`) non sono toccati:
608
+ dichiarano pattern regex e per progetto non eseguono codice.
609
+ I prefissi di ID delle regole core sono riservati e rifiutati
610
+ da plugin e regole esterne per evitare spoofing.
602
611
  - **Regole esterne locali al workspace** (basate su cartella, zero
603
612
  rete) — una directory `mjolnir-rules/` accanto al target della
604
613
  scansione carica regole personalizzate: i file JSON dichiarano
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-04.
18
+ > 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-07.
19
19
 
20
20
  ```bash
21
21
  npx mjolnir-qa@latest
@@ -294,14 +294,14 @@ Python ルールは合計 20 本(QA-PY-001…012 pytest 衛生 + QA-PY-101…1
294
294
 
295
295
  ### どれだけが測定されているか
296
296
 
297
- **99 ルールのうち 74 ルールが、実際の OSS コードに対して測定された
297
+ **99 ルールのうち 78 ルールが、実際の OSS コードに対して測定された
298
298
  false-positive 率を備えています**(各ルールにつき手作業で分類された
299
- 検出 ≥ 10 件。[docs/FP-AUDIT.md](docs/FP-AUDIT.md) 参照)。残り 19 ルール
299
+ 検出 ≥ 10 件。[docs/FP-AUDIT.md](docs/FP-AUDIT.md) 参照)。残り 21 ルール
300
300
  は作者の推定で出荷されます。すべてのスキャンのフッターは、_発火した_
301
301
  ルールのうちいくつが測定済みかを教えてくれます。`mjolnir rules --unmeasured`
302
302
  は未測定のものを列挙します。各ルールの `mjolnir explain` ページはその
303
303
  状態を明言します。率は醜くても公開します——QA-CS-103 は 95% で監査され、
304
- それゆえ隔離されています。この 78 を増やすことが、プロジェクトの継続的
304
+ それゆえ隔離されています。この数字を増やすことが、プロジェクトの継続的
305
305
  な仕事です。
306
306
 
307
307
  ### ルールのティアと言語ごとの成熟度
@@ -459,7 +459,7 @@ flakiness レポートは生成しません。
459
459
  | 決定論的(同じ入力 → 同じ出力) | ❌(非決定論的) | **✅** |
460
460
  | 数か月眠っていたパターンを検出 | コンテキストにある場合のみ | **✅**(全ファイルをスキャン) |
461
461
  | 実行間で検出を記憶 | ❌(セッション間の記憶なし) | **✅**(baseline + diff) |
462
- | 人間のトリガーなしで動く | PR またはプロンプトが必要 | **✅**(CI フック、3 秒) |
462
+ | 人間のトリガーなしで動く | PR またはプロンプトが必要 | **✅**(CI フック、数秒で実行) |
463
463
 
464
464
  **両方使いましょう。** AI は、どんな正規表現も見つけられないニュアンス、
465
465
  意図、設計上の欠陥を捉えます。Mjölnir は、「意図的」に見えるがゆえに
@@ -581,11 +581,18 @@ JSON/SARIF レポートは `schemaVersion: 1` です。ルール ID
581
581
  ([どれだけが測定されているか](#どれだけが測定されているか) 参照)。
582
582
  スキャンのフッターと `mjolnir rules --unmeasured` がどれがどれかを
583
583
  教えます。
584
- - **プラグインの信頼** — プラグインは `"plugins"` の下で宣言された npm
585
- パッケージです。**サンドボックスはありません**: プラグインコードは
584
+ - **プラグインの信頼と実行ゲート** — プラグインは `"plugins"` の下で宣言された npm
585
+ パッケージです; JS モジュールは `mjolnir-rules/*.mjs` に置かれます。
586
+ **サンドボックスはありません**: プラグインコードは
586
587
  完全な Node 権限で動作し、ESLint や Vitest のプラグインと同じ信頼
587
- モデルです。コアルール ID の接頭辞は予約されており、なりすまし防止の
588
- ためプラグインからは拒否されます。
588
+ モデルです。そのため、コード実行は**スキャンごとにオプトイン**です:
589
+ `--enable-plugins` を渡すか(`MJOLNIR_ENABLE_PLUGINS=1` を設定するか)、
590
+ そうでなければソースはロードされません — 目立つ stderr の通知が、
591
+ スキップされたものを正確に列挙します。信頼できないコードをスキャンしても、
592
+ それが実行されることはありません。JSON ルールマニフェスト
593
+ (`mjolnir-rules/*.json`)は影響を受けません: 正規表現パターンを宣言し、
594
+ 設計上コードを一切実行しません。コアルール ID の接頭辞は予約されており、
595
+ なりすまし防止のためプラグインおよび外部ルールからは拒否されます。
589
596
  - **ワークスペースローカルの外部ルール**(フォルダベース、ネットワーク
590
597
  ゼロ)— スキャン対象の隣にある `mjolnir-rules/` ディレクトリがカスタム
591
598
  ルールを読み込みます: JSON ファイルは正規表現パターンを宣言し(コードは
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-04.
18
+ > 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-07.
19
19
 
20
20
  ```bash
21
21
  npx mjolnir-qa@latest
@@ -292,14 +292,14 @@ npx mjolnir-qa@latest --scope changed
292
292
 
293
293
  ### 이 중 얼마나가 측정되었나
294
294
 
295
- **99개 규칙 중 74개가 실제 OSS 코드에 대해 측정된 거짓 양성 비율을
295
+ **99개 규칙 중 78개가 실제 OSS 코드에 대해 측정된 거짓 양성 비율을
296
296
  갖습니다** (각 규칙당 손으로 분류된 발견 ≥ 10건;
297
- [docs/FP-AUDIT.md](docs/FP-AUDIT.md) 참조). 나머지 19개는 저자의 추정으로
297
+ [docs/FP-AUDIT.md](docs/FP-AUDIT.md) 참조). 나머지 21개는 저자의 추정으로
298
298
  출시됩니다. 모든 스캔의 바닥글은 _발화한_ 규칙 중 몇 개가 측정되었는지
299
299
  말해줍니다; `mjolnir rules --unmeasured`는 측정되지 않은 것들을 나열합니다;
300
300
  각 규칙의 `mjolnir explain` 페이지는 그 상태를 명시합니다. 수치가 흉해도
301
301
  우리는 비율을 공개합니다 — QA-CS-103은 95%로 감사되었고 그래서 격리
302
- 계층에 있습니다. 그 78을 늘려가는 것이 프로젝트의 지속적인 작업입니다.
302
+ 계층에 있습니다. 그 숫자를 늘려가는 것이 프로젝트의 지속적인 작업입니다.
303
303
 
304
304
  ### 규칙 계층과 언어 성숙도
305
305
 
@@ -447,14 +447,14 @@ flakiness 보고서를 만들지는 않습니다.
447
447
  발견할 수 있습니다; 그러나 검증 시스템 전체가 신뢰할 만하다는 증명은
448
448
  하지 못합니다 — 그리고 보여주는 diff만 볼 뿐입니다.
449
449
 
450
- | | AI 코드 리뷰 (Copilot 등) | **Mjölnir** |
451
- | -------------------------------- | :----------------------------: | :-----------------------: |
452
- | 스캔당 비용 | 토큰 (diff 크기에 비례해 증가) | **제로** (로컬, 설치됨) |
453
- | 전체 스위트 + 모든 CI 설정을 봄 | 당신이 보여준 PR diff만 | **매번 모든 것** |
454
- | 결정론적 (같은 입력 → 같은 출력) | ❌ (비결정론적) | **✅** |
455
- | 수개월 잠들어 있던 패턴을 잡음 | 컨텍스트에 있을 때만 | **✅** (모든 파일을 스캔) |
456
- | 실행 사이에 발견을 기억 | ❌ (세션 간 기억 없음) | **✅** (baseline + diff) |
457
- | 사람의 트리거 없이 실행 | PR이나 프롬프트가 필요 | **✅** (CI 훅, 3초) |
450
+ | | AI 코드 리뷰 (Copilot 등) | **Mjölnir** |
451
+ | -------------------------------- | :----------------------------: | :---------------------------: |
452
+ | 스캔당 비용 | 토큰 (diff 크기에 비례해 증가) | **제로** (로컬, 설치됨) |
453
+ | 전체 스위트 + 모든 CI 설정을 봄 | 당신이 보여준 PR diff만 | **매번 모든 것** |
454
+ | 결정론적 (같은 입력 → 같은 출력) | ❌ (비결정론적) | **✅** |
455
+ | 수개월 잠들어 있던 패턴을 잡음 | 컨텍스트에 있을 때만 | **✅** (모든 파일을 스캔) |
456
+ | 실행 사이에 발견을 기억 | ❌ (세션 간 기억 없음) | **✅** (baseline + diff) |
457
+ | 사람의 트리거 없이 실행 | PR이나 프롬프트가 필요 | **✅** (CI 훅, 몇 초 내 실행) |
458
458
 
459
459
  **둘 다 사용하세요.** AI는 어떤 정규식도 찾을 수 없는 뉘앙스, 의도,
460
460
  설계 결함을 잡아냅니다. Mjölnir는 "의도적인" 것처럼 보여서 AI가 놓치는
@@ -573,10 +573,18 @@ JSON/SARIF 보고서는 `schemaVersion: 1`입니다. 규칙 ID (`QA-<FAMILY>-NNN
573
573
  규칙만이 헤드라인 계층에 출시됩니다 ([이 중 얼마나가 측정되었나](#이-중-얼마나가-측정되었나)
574
574
  참조); 스캔 바닥글과 `mjolnir rules --unmeasured`가 어느 것이 어느 것인지
575
575
  알려줍니다.
576
- - **플러그인 신뢰** — 플러그인은 `"plugins"` 아래 선언된 npm 패키지입니다.
576
+ - **플러그인 신뢰 및 실행 게이트** — 플러그인은 `"plugins"` 아래 선언된
577
+ npm 패키지입니다; JS 모듈은 `mjolnir-rules/*.mjs`에 위치합니다.
577
578
  **샌드박스가 없습니다**: 플러그인 코드는 완전한 Node 권한으로
578
- 실행되며, ESLint나 Vitest 플러그인과 같은 신뢰 모델입니다. 코어 규칙 ID
579
- 접두사는 예약되어 있고 사칭 방지를 위해 플러그인으로부터 거부됩니다.
579
+ 실행되며, ESLint나 Vitest 플러그인과 같은 신뢰 모델입니다. 그렇기
580
+ 때문에 코드 실행은 **매 스캔마다 옵트인**입니다: `--enable-plugins`를
581
+ 전달하거나(`MJOLNIR_ENABLE_PLUGINS=1` 설정) 그렇지 않으면 해당 소스는
582
+ 로드되지 않습니다 — 시끄러운 stderr 알림이 건너뛴 항목을 정확히
583
+ 나열합니다. 신뢰할 수 없는 코드를 스캔하는 것이 그 코드를 실행하지는
584
+ 않습니다. JSON 규칙 매니페스트(`mjolnir-rules/*.json`)는 영향을 받지
585
+ 않습니다: 정규식 패턴을 선언하며 설계상 코드를 실행하지 않습니다.
586
+ 코어 규칙 ID 접두사는 예약되어 있고 사칭 방지를 위해 플러그인과 외부
587
+ 규칙으로부터 거부됩니다.
580
588
  - **워크스페이스 로컬 외부 규칙** (폴더 기반, 네트워크 제로) — 스캔 대상
581
589
  옆의 `mjolnir-rules/` 디렉터리가 사용자 정의 규칙을 로드합니다: JSON
582
590
  파일은 정규식 패턴을 선언하고 (코드는 실행되지 않음), `.mjs`/`.js`