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/CHANGELOG.md +32 -0
- package/README.ar.md +21 -15
- package/README.bn.md +17 -9
- package/README.br.md +25 -16
- package/README.bs.md +23 -15
- package/README.da.md +23 -16
- package/README.de.md +24 -16
- package/README.es.md +25 -16
- package/README.fr.md +25 -16
- package/README.gr.md +24 -16
- package/README.he.md +22 -15
- package/README.it.md +25 -16
- package/README.ja.md +16 -9
- package/README.ko.md +23 -15
- package/README.md +124 -225
- package/README.no.md +23 -16
- package/README.pl.md +17 -9
- package/README.ru.md +26 -17
- package/README.th.md +16 -9
- package/README.tr.md +23 -16
- package/README.uk.md +24 -16
- package/README.vi.md +22 -15
- package/README.zh.md +21 -15
- package/README.zht.md +21 -15
- package/dist/cli.d.mts +1 -1
- package/dist/cli.mjs +84 -40
- package/dist/mcp/stdio.mjs +84 -40
- package/package.json +6 -1
package/README.ru.md
CHANGED
|
@@ -15,7 +15,7 @@ CI-пайплайны, выдаёт показатель достойности
|
|
|
15
15
|
|
|
16
16
|
[English](README.md) | [简体中文](README.zh.md) | [繁體中文](README.zht.md) | [한국어](README.ko.md) | [Deutsch](README.de.md) | [Español](README.es.md) | [Français](README.fr.md) | [Italiano](README.it.md) | [Dansk](README.da.md) | [日本語](README.ja.md) | [Polski](README.pl.md) | Русский | [Norsk](README.no.md) | [Português (Brasil)](README.br.md) | [ไทย](README.th.md) | [Türkçe](README.tr.md) | [Українська](README.uk.md) | [বাংলা](README.bn.md) | [Ελληνικά](README.gr.md) | [Tiếng Việt](README.vi.md) | [עברית](README.he.md) | [العربية](README.ar.md) | [Bosanski](README.bs.md)
|
|
17
17
|
|
|
18
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
18
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-07.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx mjolnir-qa@latest
|
|
@@ -298,15 +298,15 @@ macOS и Linux.
|
|
|
298
298
|
|
|
299
299
|
### Сколько из этого измерено
|
|
300
300
|
|
|
301
|
-
**
|
|
301
|
+
**78 из 99 правил несут ложную положительную частоту, измеренную на
|
|
302
302
|
реальном OSS-коде** (по ≥ 10 вручную классифицированных находок на
|
|
303
|
-
правило; см. [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Остальные
|
|
303
|
+
правило; см. [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Остальные 21
|
|
304
304
|
выходят на оценке автора. Футер каждого скана говорит, сколько из
|
|
305
305
|
_сработавших_ правил измерены; `mjolnir rules --unmeasured` перечисляет
|
|
306
306
|
неизмеренные; страница `mjolnir explain` каждого правила указывает её
|
|
307
307
|
статус. Мы публикуем частоту, даже когда она уродлива — QA-CS-103
|
|
308
|
-
аудируется на 95 % и за это отправлен в карантин. Увеличивать
|
|
309
|
-
постоянная работа проекта.
|
|
308
|
+
аудируется на 95 % и за это отправлен в карантин. Увеличивать это
|
|
309
|
+
число — постоянная работа проекта.
|
|
310
310
|
|
|
311
311
|
### Тиры правил и зрелость языков
|
|
312
312
|
|
|
@@ -457,14 +457,14 @@ FAILING declines an expired card (e2e/checkout.spec.ts)
|
|
|
457
457
|
изменение теста в диффе; оно не доказывает, что система верификации в
|
|
458
458
|
целом заслуживает доверия — и видит только показанный ему дифф.
|
|
459
459
|
|
|
460
|
-
| | AI-код-ревью (Copilot и пр.) |
|
|
461
|
-
| ------------------------------------------- | :------------------------------: |
|
|
462
|
-
| Цена за скан | Токены (растут с размером диффа) |
|
|
463
|
-
| Видит весь сьют + все CI-конфиги | Только PR-дифф, показанный ему |
|
|
464
|
-
| Детерминирован (тот же вход → тот же выход) | ❌ (недетерминирован) |
|
|
465
|
-
| Ловит паттерны, дремлющие месяцами | Только если в контексте |
|
|
466
|
-
| Помнит находки между запусками | ❌ (нет памяти между сессиями) |
|
|
467
|
-
| Запускается без человека | Нужен PR или промпт |
|
|
460
|
+
| | AI-код-ревью (Copilot и пр.) | **Mjölnir** |
|
|
461
|
+
| ------------------------------------------- | :------------------------------: | :-------------------------------------: |
|
|
462
|
+
| Цена за скан | Токены (растут с размером диффа) | **Ноль** (локально, установлен) |
|
|
463
|
+
| Видит весь сьют + все CI-конфиги | Только PR-дифф, показанный ему | **Всё, каждый раз** |
|
|
464
|
+
| Детерминирован (тот же вход → тот же выход) | ❌ (недетерминирован) | **✅** |
|
|
465
|
+
| Ловит паттерны, дремлющие месяцами | Только если в контексте | **✅** (сканирует все файлы) |
|
|
466
|
+
| Помнит находки между запусками | ❌ (нет памяти между сессиями) | **✅** (baseline + diff) |
|
|
467
|
+
| Запускается без человека | Нужен PR или промпт | **✅** (CI-хук, выполняется за секунды) |
|
|
468
468
|
|
|
469
469
|
**Используйте оба.** AI ловит нюанс, замысел и дизайнерские изъяны,
|
|
470
470
|
которые не найдёт ни один regex. Mjölnir ловит структурные паттерны,
|
|
@@ -589,11 +589,20 @@ JSON/SARIF-отчёт — `schemaVersion: 1`. ID правил
|
|
|
589
589
|
с частотой ложных срабатываний из реального OSS-кода (см.
|
|
590
590
|
[Сколько из этого измерено](#сколько-из-этого-измерено)); футер скана
|
|
591
591
|
и `mjolnir rules --unmeasured` скажут, какие какие.
|
|
592
|
-
- **Доверие к
|
|
593
|
-
|
|
592
|
+
- **Доверие к плагинам и ворота исполнения** — плагины — это npm-пакеты,
|
|
593
|
+
объявленные в
|
|
594
|
+
`"plugins"`; JS-модули живут в `mjolnir-rules/*.mjs`.
|
|
595
|
+
**Песочницы нет**: код плагина работает с полными
|
|
594
596
|
привилегиями Node, та же модель доверия, что у плагинов ESLint или
|
|
595
|
-
Vitest.
|
|
596
|
-
|
|
597
|
+
Vitest. Именно поэтому исполнение кода — **opt-in при каждом скане**:
|
|
598
|
+
передайте `--enable-plugins` (или задайте
|
|
599
|
+
`MJOLNIR_ENABLE_PLUGINS=1`), иначе источники НЕ загружаются —
|
|
600
|
+
громкое уведомление в stderr точно перечисляет пропущенное. Сканирование
|
|
601
|
+
недоверенного кода никогда его не исполняет. JSON-манифесты правил
|
|
602
|
+
(`mjolnir-rules/*.json`) не затронуты: они декларируют regex-паттерны
|
|
603
|
+
и по конструкции не исполняют код. Префиксы ID основных правил
|
|
604
|
+
зарезервированы и отвергаются от
|
|
605
|
+
плагинов и внешних правил против подмены.
|
|
597
606
|
- **Workspace-локальные внешние правила** (фолдерные, ноль сети) —
|
|
598
607
|
каталог `mjolnir-rules/` рядом с целью скана загружает собственные
|
|
599
608
|
правила: JSON-файлы декларируют regex-паттерны (код не исполняется),
|
package/README.th.md
CHANGED
|
@@ -15,7 +15,7 @@ CI pipelines รายงานคะแนนความน่าเชื่
|
|
|
15
15
|
|
|
16
16
|
[English](README.md) | [简体中文](README.zh.md) | [繁體中文](README.zht.md) | [한국어](README.ko.md) | [Deutsch](README.de.md) | [Español](README.es.md) | [Français](README.fr.md) | [Italiano](README.it.md) | [Dansk](README.da.md) | [日本語](README.ja.md) | [Polski](README.pl.md) | [Русский](README.ru.md) | [Norsk](README.no.md) | [Português (Brasil)](README.br.md) | ไทย | [Türkçe](README.tr.md) | [Українська](README.uk.md) | [বাংলা](README.bn.md) | [Ελληνικά](README.gr.md) | [Tiếng Việt](README.vi.md) | [עברית](README.he.md) | [العربية](README.ar.md) | [Bosanski](README.bs.md)
|
|
17
17
|
|
|
18
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
18
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-07.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx mjolnir-qa@latest
|
|
@@ -290,13 +290,13 @@ fixture ลบของตัวเองจะปล่อยไม่ได้
|
|
|
290
290
|
|
|
291
291
|
### วัดไปแล้วเท่าไร
|
|
292
292
|
|
|
293
|
-
**
|
|
293
|
+
**78 จาก 99 กฎ มีอัตรา false positive ที่วัดกับโค้ด OSS จริง** (อย่างน้อย
|
|
294
294
|
10 findings ที่จัดหมวดด้วยมือต่อกฎ; ดู
|
|
295
|
-
[docs/FP-AUDIT.md](docs/FP-AUDIT.md)) อีก
|
|
295
|
+
[docs/FP-AUDIT.md](docs/FP-AUDIT.md)) อีก 21 กฎออกมาบนการประเมินของผู้เขียน
|
|
296
296
|
ส่วนท้ายของทุกการสแกนบอกว่ากฎที่ _ยิง_ มีกี่กฎที่วัดแล้ว;
|
|
297
297
|
`mjolnir rules --unmeasured` แสดงกฎที่ยังไม่วัด; หน้า `mjolnir explain`
|
|
298
298
|
ของทุกกฎระบุสถานะ เราเผยแพร่อัตรานี้แม้มันจะน่าเกลียด — QA-CS-103 ตรวจได้
|
|
299
|
-
ที่ 95 % และถูกส่งไปกักกันเพราะเหตุนี้
|
|
299
|
+
ที่ 95 % และถูกส่งไปกักกันเพราะเหตุนี้ การทำให้ตัวเลขนั้นโตขึ้นคืองาน
|
|
300
300
|
ต่อเนื่องของโปรเจกต์
|
|
301
301
|
|
|
302
302
|
### Tier ของกฎและความสุกงอมของภาษา
|
|
@@ -451,7 +451,7 @@ diff ได้ แต่มันไม่พิสูจน์ว่าระ
|
|
|
451
451
|
| กำหนดตาย (input เดียวกัน → output เดียวกัน) | ❌ (ไม่กำหนดตาย) | **✅** |
|
|
452
452
|
| จับรูปแบบที่หลับมาหลายเดือน | เฉพาะถ้าอยู่ในบริบท | **✅** (สแกนทุกไฟล์) |
|
|
453
453
|
| จำ finding ข้ามการรัน | ❌ (ไม่มีความจำข้ามเซสชัน) | **✅** (baseline + diff) |
|
|
454
|
-
| รันโดยไม่ต้องมีคนสั่ง | ต้องมี PR หรือ prompt |
|
|
454
|
+
| รันโดยไม่ต้องมีคนสั่ง | ต้องมี PR หรือ prompt | **✅** (hook CI, รันในไม่กี่วินาที) |
|
|
455
455
|
|
|
456
456
|
**ใช้ทั้งสอง** AI เก็บรายละเอียดปลีกย่อย เจตนา และข้อบกพร่องเชิงออกแบบ
|
|
457
457
|
ที่ regex หาไม่เจอ Mjölnir เก็บรูปแบบเชิงโครงสร้างที่ AI มองข้ามเพราะ
|
|
@@ -566,10 +566,17 @@ Mjölnir เป็น zero-config `mjolnir.config.json` (หรือ `.mjolnir.
|
|
|
566
566
|
- **วัด ไม่ใช่อ้าง** — เฉพาะกฎที่มีอัตรา false positive จากโค้ด OSS จริง
|
|
567
567
|
จึงอยู่ใน tier พาดหัว (ดู [วัดไปแล้วเท่าไร](#วัดไปแล้วเท่าไร));
|
|
568
568
|
ส่วนท้ายการสแกนและ `mjolnir rules --unmeasured` บอกว่ากฎไหนสถานะไหน
|
|
569
|
-
-
|
|
570
|
-
`"plugins"
|
|
571
|
-
|
|
572
|
-
|
|
569
|
+
- **ความไว้วางใจต่อปลั๊กอินและประตูการรันโค้ด** — ปลั๊กอินคือแพ็กเกจ npm ประกาศใต้
|
|
570
|
+
`"plugins"`; โมดูล JS อยู่ใน `mjolnir-rules/*.mjs`
|
|
571
|
+
**ไม่มี sandbox**: โค้ดปลั๊กอินรันด้วยสิทธิ์ Node เต็ม
|
|
572
|
+
โมเดลความไว้วางใจเดียวกับปลั๊กอิน ESLint หรือ Vitest ด้วยเหตุนี้
|
|
573
|
+
การรันโค้ดจึงเป็น **opt-in ในทุกการสแกน**: ส่ง `--enable-plugins`
|
|
574
|
+
(หรือตั้ง `MJOLNIR_ENABLE_PLUGINS=1`) ไม่งั้นซอร์สจะไม่ถูกโหลด —
|
|
575
|
+
แจ้งเตือนบน stderr อย่างชัดเจนว่าข้ามอะไรไปบ้าง การสแกนโค้ดที่ไม่
|
|
576
|
+
น่าเชื่อถือไม่เคยรันมัน ไฟล์ JSON rule manifest (`mjolnir-rules/*.json`)
|
|
577
|
+
ไม่ได้รับผลกระทบ: ประกาศ regex pattern และไม่รันโค้ดโดยการออกแบบ
|
|
578
|
+
คำนำหน้า rule ID ของ core สงวนไว้และถูกปฏิเสธจากปลั๊กอินและกฎภายนอก
|
|
579
|
+
เพื่อกันการอ้างปลอม
|
|
573
580
|
- **กฎภายนอกประจำ workspace** (อิงโฟลเดอร์ ศูนย์เครือข่าย) — ไดเรกทอรี
|
|
574
581
|
`mjolnir-rules/` ติดกับเป้าสแกนโหลดกฎกำหนดเอง: ไฟล์ JSON ประกาศรูปแบบ
|
|
575
582
|
regex (ไม่รันโค้ด) โมดูล `.mjs`/`.js` export `rules` (ความไว้วางใจ
|
package/README.tr.md
CHANGED
|
@@ -15,7 +15,7 @@ olarak nerede kırıldığını gösterir.
|
|
|
15
15
|
|
|
16
16
|
[English](README.md) | [简体中文](README.zh.md) | [繁體中文](README.zht.md) | [한국어](README.ko.md) | [Deutsch](README.de.md) | [Español](README.es.md) | [Français](README.fr.md) | [Italiano](README.it.md) | [Dansk](README.da.md) | [日本語](README.ja.md) | [Polski](README.pl.md) | [Русский](README.ru.md) | [Norsk](README.no.md) | [Português (Brasil)](README.br.md) | [ไทย](README.th.md) | Türkçe | [Українська](README.uk.md) | [বাংলা](README.bn.md) | [Ελληνικά](README.gr.md) | [Tiếng Việt](README.vi.md) | [עברית](README.he.md) | [العربية](README.ar.md) | [Bosanski](README.bs.md)
|
|
17
17
|
|
|
18
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-
|
|
18
|
+
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-07.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx mjolnir-qa@latest
|
|
@@ -294,14 +294,14 @@ Toplam 20 Python kuralı (QA-PY-001…012 pytest hijyeni + QA-PY-101…108 Playw
|
|
|
294
294
|
|
|
295
295
|
### Ne kadarı ölçülmüş
|
|
296
296
|
|
|
297
|
-
**99 kuraldan
|
|
297
|
+
**99 kuraldan 78'sı, gerçek OSS koduna karşı ölçülmüş bir yanlış pozitif
|
|
298
298
|
oranı taşıyor** (her biri için ≥ 10 elle sınıflandırılmış bulgu; bkz.
|
|
299
|
-
[docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Diğer
|
|
299
|
+
[docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Diğer 21'i yazarın tahminine göre
|
|
300
300
|
yayına giriyor. Her tarama alt bilgisi, _tetiklenen_ kuralların kaçının
|
|
301
301
|
ölçüldüğünü söyler; `mjolnir rules --unmeasured` ölçülmeyenleri listeler;
|
|
302
302
|
her kuralın `mjolnir explain` sayfası durumunu belirtir. Oranı çirkin
|
|
303
303
|
olduğunda bile yayımlarız — QA-CS-103 %95 ile denetleniyor ve bu yüzden
|
|
304
|
-
karantinada. O
|
|
304
|
+
karantinada. O sayıyı büyütmek, projenin süregelen işidir.
|
|
305
305
|
|
|
306
306
|
### Kural katmanları ve dil olgunluğu
|
|
307
307
|
|
|
@@ -454,14 +454,14 @@ Farklı sorun, farklı katman. AI incelemesi bir diff'teki şüpheli test
|
|
|
454
454
|
değişikliğini fark edebilir; doğrulama sisteminin bütünüyle güvenilir
|
|
455
455
|
olduğunu kanıtlamaz — ve yalnızca ona gösterdiğiniz diff'i görür.
|
|
456
456
|
|
|
457
|
-
| | AI kod incelemesi (Copilot vb.) |
|
|
458
|
-
| -------------------------------------------- | :-------------------------------: |
|
|
459
|
-
| Tarama başına maliyet | Token (diff boyutuyla ölçeklenir) |
|
|
460
|
-
| Tüm takımı + tüm CI yapılandırmalarını görür | Yalnızca gösterdiğiniz PR diff'i |
|
|
461
|
-
| Belirleyici (aynı girdi → aynı çıktı) | ❌ (belirsiz) |
|
|
462
|
-
| Aylardır uyuyan örüntüleri yakalar | Yalnızca bağlamdaysa |
|
|
463
|
-
| Çalıştırmalar arasında bulguları hatırlar | ❌ (oturumlar arası bellek yok) |
|
|
464
|
-
| İnsan tetiklemesi olmadan çalışır | PR veya prompt gerekir | **✅** (CI kancası,
|
|
457
|
+
| | AI kod incelemesi (Copilot vb.) | **Mjölnir** |
|
|
458
|
+
| -------------------------------------------- | :-------------------------------: | :-------------------------------------------: |
|
|
459
|
+
| Tarama başına maliyet | Token (diff boyutuyla ölçeklenir) | **Sıfır** (yerel, kurulu) |
|
|
460
|
+
| Tüm takımı + tüm CI yapılandırmalarını görür | Yalnızca gösterdiğiniz PR diff'i | **Her şey, her seferinde** |
|
|
461
|
+
| Belirleyici (aynı girdi → aynı çıktı) | ❌ (belirsiz) | **✅** |
|
|
462
|
+
| Aylardır uyuyan örüntüleri yakalar | Yalnızca bağlamdaysa | **✅** (tüm dosyaları tarar) |
|
|
463
|
+
| Çalıştırmalar arasında bulguları hatırlar | ❌ (oturumlar arası bellek yok) | **✅** (baseline + diff) |
|
|
464
|
+
| İnsan tetiklemesi olmadan çalışır | PR veya prompt gerekir | **✅** (CI kancası, saniyeler içinde çalışır) |
|
|
465
465
|
|
|
466
466
|
**İkisini de kullanın.** AI, hiçbir regex'in bulamayacağı nüansı, niyeti
|
|
467
467
|
ve tasarım kusurlarını yakalar. Mjölnir, AI'nın «kasıtlı» göründükleri
|
|
@@ -585,11 +585,18 @@ kullanılmaz.
|
|
|
585
585
|
yanlış pozitif oranı olan kurallar başlık katmanlarına girer (bkz.
|
|
586
586
|
[Ne kadarı ölçülmüş](#ne-kadarı-ölçülmüş)); tarama alt bilgisi ve
|
|
587
587
|
`mjolnir rules --unmeasured` hangisinin ne olduğunu söyler.
|
|
588
|
-
- **Eklenti güveni
|
|
589
|
-
|
|
590
|
-
|
|
588
|
+
- **Eklenti güveni ve yürütme kapısı** — eklentiler `"plugins"` altında
|
|
589
|
+
bildirilen npm paketleridir; JS modülleri `mjolnir-rules/*.mjs`
|
|
590
|
+
içinde yaşar. **Sandbox yok**: eklenti kodu tam Node ayrıcalıklarıyla
|
|
591
|
+
çalışır; ESLint veya Vitest eklentileriyle aynı güven modeli. Bu
|
|
592
|
+
yüzden kod yürütme **her taramada opt-in**'dir: `--enable-plugins`
|
|
593
|
+
geçirin (veya `MJOLNIR_ENABLE_PLUGINS=1` ayarlayın), yoksa kaynaklar
|
|
594
|
+
YÜKLENMEZ — gürültülü bir stderr bildirimi atlananları tam olarak
|
|
595
|
+
listeler. Güvenilmeyen kodu taramak onu asla çalıştırmaz. JSON kural
|
|
596
|
+
bildirimleri (`mjolnir-rules/*.json`) etkilenmez: regex desenleri
|
|
597
|
+
bildirirler ve tasarımları gereği hiçbir kod çalıştırmazlar. Çekirdek
|
|
591
598
|
kural kimliği önekleri rezerve edilmiştir ve kimlik taklidini önlemek
|
|
592
|
-
için eklentilerden reddedilir.
|
|
599
|
+
için eklentilerden ve dış kurallardan reddedilir.
|
|
593
600
|
- **Workspace-yerel dış kurallar** (klasör tabanlı, sıfır ağ) — tarama
|
|
594
601
|
hedefinin yanındaki bir `mjolnir-rules/` dizini özel kurallar yükler:
|
|
595
602
|
JSON dosyaları regex örüntüleri bildirir (kod yürütülmez),
|
package/README.uk.md
CHANGED
|
@@ -15,7 +15,7 @@ CI-пайплайни, видає показник гідності й пока
|
|
|
15
15
|
|
|
16
16
|
[English](README.md) | [简体中文](README.zh.md) | [繁體中文](README.zht.md) | [한국어](README.ko.md) | [Deutsch](README.de.md) | [Español](README.es.md) | [Français](README.fr.md) | [Italiano](README.it.md) | [Dansk](README.da.md) | [日本語](README.ja.md) | [Polski](README.pl.md) | [Русский](README.ru.md) | [Norsk](README.no.md) | [Português (Brasil)](README.br.md) | [ไทย](README.th.md) | [Türkçe](README.tr.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-07.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx mjolnir-qa@latest
|
|
@@ -296,14 +296,14 @@ macOS і Linux.
|
|
|
296
296
|
|
|
297
297
|
### Скільки з цього виміряно
|
|
298
298
|
|
|
299
|
-
**
|
|
299
|
+
**78 з 99 правил несуть хибнопозитивну частоту, виміряну на реальному
|
|
300
300
|
OSS-коді** (по ≥ 10 вручну класифікованих знахідок на правило; див.
|
|
301
|
-
[docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Інші
|
|
301
|
+
[docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Інші 21 виходять на оцінці
|
|
302
302
|
автора. Футер кожного скана каже, скільки із _спрацьованих_ правил
|
|
303
303
|
виміряно; `mjolnir rules --unmeasured` перелічує невиміряні; сторінка
|
|
304
304
|
`mjolnir explain` кожного правила вказує її статус. Ми публікуємо
|
|
305
305
|
частоту, навіть коли вона негарна — QA-CS-103 аудитується на 95 % і за
|
|
306
|
-
це відправлено в карантин. Збільшувати
|
|
306
|
+
це відправлено в карантин. Збільшувати це число — постійна робота проєкту.
|
|
307
307
|
|
|
308
308
|
### Тіри правил і зрілість мов
|
|
309
309
|
|
|
@@ -452,14 +452,14 @@ FAILING declines an expired card (e2e/checkout.spec.ts)
|
|
|
452
452
|
в дифі; воно не доводить, що система верифікації в цілому заслуговує
|
|
453
453
|
довіри — і бачить лише показаний йому диф.
|
|
454
454
|
|
|
455
|
-
| | AI-код-рев'ю (Copilot тощо) |
|
|
456
|
-
| ------------------------------------------------- | :------------------------------: |
|
|
457
|
-
| Ціна за скан | Токени (ростуть з розміром дифа) |
|
|
458
|
-
| Бачить увесь с'ют + усі CI-конфіги | Лише PR-диф, показаний йому |
|
|
459
|
-
| Детермінований (той самий вхід → той самий вихід) | ❌ (недетермінований) |
|
|
460
|
-
| Ловить патерни, що дрімають місяцями | Лише якщо в контексті |
|
|
461
|
-
| Пам'ятає знахідки між запусками | ❌ (немає пам'яті між сесіями) |
|
|
462
|
-
| Запускається без людини | Потрібен PR чи промпт |
|
|
455
|
+
| | AI-код-рев'ю (Copilot тощо) | **Mjölnir** |
|
|
456
|
+
| ------------------------------------------------- | :------------------------------: | :-------------------------------------: |
|
|
457
|
+
| Ціна за скан | Токени (ростуть з розміром дифа) | **Нуль** (локально, встановлений) |
|
|
458
|
+
| Бачить увесь с'ют + усі CI-конфіги | Лише PR-диф, показаний йому | **Все, щоразу** |
|
|
459
|
+
| Детермінований (той самий вхід → той самий вихід) | ❌ (недетермінований) | **✅** |
|
|
460
|
+
| Ловить патерни, що дрімають місяцями | Лише якщо в контексті | **✅** (сканує всі файли) |
|
|
461
|
+
| Пам'ятає знахідки між запусками | ❌ (немає пам'яті між сесіями) | **✅** (baseline + diff) |
|
|
462
|
+
| Запускається без людини | Потрібен PR чи промпт | **✅** (CI-хук, виконується за секунди) |
|
|
463
463
|
|
|
464
464
|
**Використовуйте обидва.** AI ловить нюанс, задум і дизайнерські вади,
|
|
465
465
|
яких не знайде жоден regex. Mjölnir ловить структурні патерни, які AI
|
|
@@ -582,11 +582,19 @@ JSON/SARIF-звіт — `schemaVersion: 1`. ID правил (`QA-<FAMILY>-NNN`)
|
|
|
582
582
|
частотою хибних спрацювань з реального OSS-коду (див.
|
|
583
583
|
[Скільки з цього виміряно](#скільки-з-цього-виміряно)); футер скана і
|
|
584
584
|
`mjolnir rules --unmeasured` скажуть, які які.
|
|
585
|
-
- **Довіра до
|
|
586
|
-
|
|
585
|
+
- **Довіра до плагінів і ворота виконання** — плагіни — це npm-пакети,
|
|
586
|
+
оголошені у
|
|
587
|
+
`"plugins"`; JS-модулі живуть у `mjolnir-rules/*.mjs`.
|
|
588
|
+
**Пісочниці немає**: код плагіна працює з повними
|
|
587
589
|
привілеями Node, та сама модель довіри, що в плагінів ESLint чи
|
|
588
|
-
Vitest.
|
|
589
|
-
|
|
590
|
+
Vitest. Саме тому виконання коду — **opt-in при кожному скані**:
|
|
591
|
+
передайте `--enable-plugins` (або задайте `MJOLNIR_ENABLE_PLUGINS=1`),
|
|
592
|
+
інакше джерела НЕ завантажуються — гучне повідомлення у stderr точно
|
|
593
|
+
перелічує пропущене. Сканування недовіреного коду ніколи його не
|
|
594
|
+
виконує. JSON-маніфести правил (`mjolnir-rules/*.json`) не зачеплені:
|
|
595
|
+
вони декларують regex-патерни й за конструкцією не виконують код.
|
|
596
|
+
Префікси ID основних правил зарезервовані й відкидаються від
|
|
597
|
+
плагінів і зовнішніх правил проти підміни.
|
|
590
598
|
- **Workspace-локальні зовнішні правила** (фолдерні, нуль мережі) —
|
|
591
599
|
каталог `mjolnir-rules/` поруч із ціллю скана завантажує власні
|
|
592
600
|
правила: JSON-файли декларують regex-патерни (код не виконується),
|
package/README.vi.md
CHANGED
|
@@ -15,7 +15,7 @@ niềm tin gãy.
|
|
|
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.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-07.
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
npx mjolnir-qa@latest
|
|
@@ -292,14 +292,14 @@ Tổng cộng 20 quy tắc Python (QA-PY-001…012 vệ sinh pytest + QA-PY-101
|
|
|
292
292
|
|
|
293
293
|
### Bao nhiêu đã được đo
|
|
294
294
|
|
|
295
|
-
**
|
|
295
|
+
**78 trong 99 quy tắc mang tỷ lệ false positive được đo trên mã OSS
|
|
296
296
|
thật** (≥ 10 finding được phân loại tay mỗi quy tắc; xem
|
|
297
|
-
[docs/FP-AUDIT.md](docs/FP-AUDIT.md)).
|
|
297
|
+
[docs/FP-AUDIT.md](docs/FP-AUDIT.md)). 21 quy tắc còn lại ra mắt trên
|
|
298
298
|
ước lượng của tác giả. Chân mỗi bản quét cho biết bao nhiêu quy tắc
|
|
299
299
|
_đã bắn_ được đo; `mjolnir rules --unmeasured` liệt kê những quy tắc
|
|
300
300
|
chưa đo; trang `mjolnir explain` của từng quy tắc nêu trạng thái. Chúng
|
|
301
301
|
tôi công bố tỷ lệ kể cả khi nó xấu xí — QA-CS-103 kiểm toán ở mức 95 %
|
|
302
|
-
và bị cách ly vì thế. Mở rộng con số
|
|
302
|
+
và bị cách ly vì thế. Mở rộng con số đó là công việc liên tục của
|
|
303
303
|
dự án.
|
|
304
304
|
|
|
305
305
|
### Tier quy tắc và độ trưởng thành theo ngôn ngữ
|
|
@@ -448,14 +448,14 @@ Vấn đề khác, tầng khác. AI review có thể phát hiện thay đổi ki
|
|
|
448
448
|
nghi ngờ trong diff; nó không chứng minh hệ thống kiểm chứng như một
|
|
449
449
|
toàn thể đáng tin — và nó chỉ thấy diff bạn cho nó xem.
|
|
450
450
|
|
|
451
|
-
| | AI code review (Copilot v.v.) |
|
|
452
|
-
| ----------------------------------- | :--------------------------------: |
|
|
453
|
-
| Chi phí mỗi lần quét | Token (scale theo kích thước diff) |
|
|
454
|
-
| Thấy cả suite + mọi cấu hình CI | Chỉ diff PR bạn cho xem |
|
|
455
|
-
| Tất định (cùng input → cùng output) | ❌ (không tất định) |
|
|
456
|
-
| Bắt mẫu nằm im hàng tháng | Chỉ khi có trong ngữ cảnh |
|
|
457
|
-
| Nhớ finding giữa các lần chạy | ❌ (không trí nhớ giữa các phiên) |
|
|
458
|
-
| Chạy không cần người kích hoạt | Cần PR hoặc prompt | **✅** (hook CI,
|
|
451
|
+
| | AI code review (Copilot v.v.) | **Mjölnir** |
|
|
452
|
+
| ----------------------------------- | :--------------------------------: | :-----------------------------------: |
|
|
453
|
+
| Chi phí mỗi lần quét | Token (scale theo kích thước diff) | **Zero** (cục bộ, đã cài) |
|
|
454
|
+
| Thấy cả suite + mọi cấu hình CI | Chỉ diff PR bạn cho xem | **Mọi thứ, mỗi lần** |
|
|
455
|
+
| Tất định (cùng input → cùng output) | ❌ (không tất định) | **✅** |
|
|
456
|
+
| Bắt mẫu nằm im hàng tháng | Chỉ khi có trong ngữ cảnh | **✅** (quét mọi file) |
|
|
457
|
+
| Nhớ finding giữa các lần chạy | ❌ (không trí nhớ giữa các phiên) | **✅** (baseline + diff) |
|
|
458
|
+
| Chạy không cần người kích hoạt | Cần PR hoặc prompt | **✅** (hook CI, chạy trong vài giây) |
|
|
459
459
|
|
|
460
460
|
**Dùng cả hai.** AI bắt được sắc thái, ý đồ và lỗi thiết kế không regex
|
|
461
461
|
nào tìm ra. Mjölnir bắt các mẫu cấu trúc AI bỏ sót vì chúng trông
|
|
@@ -573,10 +573,17 @@ bất biến sau khi ra mắt và không bao giờ tái sử dụng.
|
|
|
573
573
|
từ mã OSS thật mới ra tier tiêu đề (xem
|
|
574
574
|
[Bao nhiêu đã được đo](#bao-nhiêu-đã-được-đo)); chân bản quét và
|
|
575
575
|
`mjolnir rules --unmeasured` cho biết cái nào là cái nào.
|
|
576
|
-
- **Niềm tin plugin** — plugin là gói npm khai báo trong
|
|
576
|
+
- **Niềm tin plugin và cổng thực thi** — plugin là gói npm khai báo trong
|
|
577
|
+
`"plugins"`; module JS nằm trong `mjolnir-rules/*.mjs`.
|
|
577
578
|
**Không sandbox**: mã plugin chạy với đầy đủ đặc quyền Node, cùng mô
|
|
578
|
-
hình tin cậy như plugin ESLint hay Vitest.
|
|
579
|
-
|
|
579
|
+
hình tin cậy như plugin ESLint hay Vitest. Vì vậy việc thực thi mã là
|
|
580
|
+
**opt-in trong mỗi lần quét**: truyền `--enable-plugins` (hoặc đặt
|
|
581
|
+
`MJOLNIR_ENABLE_PLUGINS=1`), nếu không nguồn sẽ KHÔNG được nạp — một
|
|
582
|
+
thông báo stderr rõ ràng liệt kê chính xác điều gì bị bỏ qua. Quét mã
|
|
583
|
+
không đáng tin cậy không bao giờ chạy nó. JSON rule manifest
|
|
584
|
+
(`mjolnir-rules/*.json`) không bị ảnh hưởng: khai báo regex pattern và
|
|
585
|
+
không thực thi mã theo thiết kế. Tiền tố rule ID core được
|
|
586
|
+
bảo lưu và từ chối khỏi plugin và quy tắc ngoài để chống giả danh.
|
|
580
587
|
- **Quy tắc ngoài cục bộ theo workspace** (theo thư mục, 0 mạng) — một
|
|
581
588
|
thư mục `mjolnir-rules/` cạnh đích quét nạp quy tắc riêng: file JSON
|
|
582
589
|
khai báo mẫu regex (không chạy mã), module `.mjs`/`.js` export
|
package/README.zh.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
[English](README.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](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-07.
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
20
|
npx mjolnir-qa@latest
|
|
@@ -287,12 +287,12 @@ npx mjolnir-qa@latest --scope changed
|
|
|
287
287
|
|
|
288
288
|
### 这些规则中有多少经过测量
|
|
289
289
|
|
|
290
|
-
**99 条规则中有
|
|
291
|
-
人工分类的发现;见 [docs/FP-AUDIT.md](docs/FP-AUDIT.md))。其余
|
|
290
|
+
**99 条规则中有 78 条携带在真实 OSS 代码上测得的假阳性率**(每条 ≥ 10 个
|
|
291
|
+
人工分类的发现;见 [docs/FP-AUDIT.md](docs/FP-AUDIT.md))。其余 21 条按
|
|
292
292
|
作者的估计发布。每次扫描的页脚都会告诉你,_触发过的_ 规则中有多少经过
|
|
293
293
|
测量;`mjolnir rules --unmeasured` 列出未测量的;每条规则的
|
|
294
294
|
`mjolnir explain` 页面都声明其状态。即使数字难看我们也照样公布——
|
|
295
|
-
QA-CS-103 的实测假阳性率是 95
|
|
295
|
+
QA-CS-103 的实测假阳性率是 95%,因此被隔离。把这个数字扩大,是项目的
|
|
296
296
|
持续性工作。
|
|
297
297
|
|
|
298
298
|
### 规则层级与语言成熟度
|
|
@@ -433,14 +433,14 @@ Linter 告诉你代码是否守规矩。Mjölnir 告诉你你的验证能不能
|
|
|
433
433
|
问题不同、层面不同。AI 评审能在 diff 里发现可疑的测试改动;但它无法
|
|
434
434
|
证明整个验证系统值得信任——而且它只看到你展示给它的 diff。
|
|
435
435
|
|
|
436
|
-
| | AI 代码评审(Copilot 等) |
|
|
437
|
-
| ----------------------------- | :-----------------------: |
|
|
438
|
-
| 每次扫描成本 | Token(随 diff 大小增长) |
|
|
439
|
-
| 看到整个套件 + 所有 CI 配置 | 只有你展示的 PR diff |
|
|
440
|
-
| 确定性(相同输入 → 相同输出) | ❌(非确定性) |
|
|
441
|
-
| 抓出沉睡数月的模式 | 只在其进入上下文时 |
|
|
442
|
-
| 跨运行记住发现 | ❌(会话间没有记忆) |
|
|
443
|
-
| 无人触发也能运行 | 需要 PR 或提示词 |
|
|
436
|
+
| | AI 代码评审(Copilot 等) | **Mjölnir** |
|
|
437
|
+
| ----------------------------- | :-----------------------: | :-------------------------------: |
|
|
438
|
+
| 每次扫描成本 | Token(随 diff 大小增长) | **零**(本地、已安装) |
|
|
439
|
+
| 看到整个套件 + 所有 CI 配置 | 只有你展示的 PR diff | **每次都是全部** |
|
|
440
|
+
| 确定性(相同输入 → 相同输出) | ❌(非确定性) | **✅** |
|
|
441
|
+
| 抓出沉睡数月的模式 | 只在其进入上下文时 | **✅**(扫描所有文件) |
|
|
442
|
+
| 跨运行记住发现 | ❌(会话间没有记忆) | **✅**(baseline + diff) |
|
|
443
|
+
| 无人触发也能运行 | 需要 PR 或提示词 | **✅**(CI 钩子,数秒内运行完成) |
|
|
444
444
|
|
|
445
445
|
**两者都用。** AI 能捕捉任何正则都找不到的细微差别、意图与设计缺陷。
|
|
446
446
|
Mjölnir 捕捉 AI 因其看起来「像是有意为之」而放过的结构模式——提交进
|
|
@@ -550,9 +550,15 @@ JSON/SARIF 报告为 `schemaVersion: 1`。规则 ID(`QA-<FAMILY>-NNN`)一经
|
|
|
550
550
|
- **测量,而非断言**——只有具有来自真实 OSS 代码的假阳性率的规则才
|
|
551
551
|
进入主打层级(见[这些规则中有多少经过测量](#这些规则中有多少经过测量));
|
|
552
552
|
扫描页脚和 `mjolnir rules --unmeasured` 会告诉你哪条是哪条。
|
|
553
|
-
-
|
|
554
|
-
|
|
555
|
-
|
|
553
|
+
- **插件信任与执行闸门**——插件是在 `"plugins"` 下声明的 npm 包;
|
|
554
|
+
JS 模块位于 `mjolnir-rules/*.mjs`。**没有沙箱**:插件代码以完整
|
|
555
|
+
Node 特权运行,与 ESLint 或 Vitest 插件相同的信任模型。正因如此,
|
|
556
|
+
代码执行**在每次扫描时都是选择性的**:传入 `--enable-plugins`(或
|
|
557
|
+
设置 `MJOLNIR_ENABLE_PLUGINS=1`),否则这些来源不会被加载——一条
|
|
558
|
+
醒目的 stderr 提示会准确列出被跳过的内容。扫描不可信的代码绝不会
|
|
559
|
+
执行它。JSON 规则清单(`mjolnir-rules/*.json`)不受影响:它们声明
|
|
560
|
+
正则模式,按设计不执行任何代码。核心规则 ID 前缀是保留的,插件与
|
|
561
|
+
外部规则若使用将被拒绝以防伪装。
|
|
556
562
|
- **工作区本地外部规则**(基于文件夹、零网络)——扫描目标旁的
|
|
557
563
|
`mjolnir-rules/` 目录可加载自定义规则:JSON 文件声明正则模式(不执行
|
|
558
564
|
代码),`.mjs`/`.js` 模块导出 `rules`(完整 Node 信任,同插件)。外部
|
package/README.zht.md
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
[English](README.md) | [简体中文](README.zh.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](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-07.
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
20
|
npx mjolnir-qa@latest
|
|
@@ -287,12 +287,12 @@ npx mjolnir-qa@latest --scope changed
|
|
|
287
287
|
|
|
288
288
|
### 這些規則中有多少經過測量
|
|
289
289
|
|
|
290
|
-
**99 條規則中有
|
|
291
|
-
人工分類的發現;見 [docs/FP-AUDIT.md](docs/FP-AUDIT.md))。其餘
|
|
290
|
+
**99 條規則中有 78 條攜帶在真實 OSS 程式碼上測得的假陽性率**(每條 ≥ 10 個
|
|
291
|
+
人工分類的發現;見 [docs/FP-AUDIT.md](docs/FP-AUDIT.md))。其餘 21 條按
|
|
292
292
|
作者的估計發布。每次掃描的頁尾都會告訴你,_觸發過的_ 規則中有多少經過
|
|
293
293
|
測量;`mjolnir rules --unmeasured` 列出未測量的;每條規則的
|
|
294
294
|
`mjolnir explain` 頁面都聲明其狀態。即使數字難看我們也照樣公布——
|
|
295
|
-
QA-CS-103 的實測假陽性率是 95
|
|
295
|
+
QA-CS-103 的實測假陽性率是 95%,因此被隔離。把這個數字擴大,是專案的
|
|
296
296
|
持續性工作。
|
|
297
297
|
|
|
298
298
|
### 規則層級與語言成熟度
|
|
@@ -433,14 +433,14 @@ Linter 告訴你程式碼是否守規矩。Mjölnir 告訴你你的驗證能不
|
|
|
433
433
|
問題不同、層面不同。AI 審查能在 diff 裡發現可疑的測試改動;但它無法
|
|
434
434
|
證明整個驗證系統值得信任——而且它只看到你展示給它的 diff。
|
|
435
435
|
|
|
436
|
-
| | AI 程式碼審查(Copilot 等) |
|
|
437
|
-
| ----------------------------- | :-------------------------: |
|
|
438
|
-
| 每次掃描成本 | Token(隨 diff 大小成長) |
|
|
439
|
-
| 看到整個套件 + 所有 CI 設定 | 只有你展示的 PR diff |
|
|
440
|
-
| 確定性(相同輸入 → 相同輸出) | ❌(非確定性) |
|
|
441
|
-
| 抓出沉睡數月的模式 | 只在其進入上下文時 |
|
|
442
|
-
| 跨執行記住發現 | ❌(工作階段之間沒有記憶) |
|
|
443
|
-
| 無人觸發也能執行 | 需要 PR 或提示詞 |
|
|
436
|
+
| | AI 程式碼審查(Copilot 等) | **Mjölnir** |
|
|
437
|
+
| ----------------------------- | :-------------------------: | :-------------------------------: |
|
|
438
|
+
| 每次掃描成本 | Token(隨 diff 大小成長) | **零**(本機、已安裝) |
|
|
439
|
+
| 看到整個套件 + 所有 CI 設定 | 只有你展示的 PR diff | **每次都是全部** |
|
|
440
|
+
| 確定性(相同輸入 → 相同輸出) | ❌(非確定性) | **✅** |
|
|
441
|
+
| 抓出沉睡數月的模式 | 只在其進入上下文時 | **✅**(掃描所有檔案) |
|
|
442
|
+
| 跨執行記住發現 | ❌(工作階段之間沒有記憶) | **✅**(baseline + diff) |
|
|
443
|
+
| 無人觸發也能執行 | 需要 PR 或提示詞 | **✅**(CI 掛鉤,數秒內執行完成) |
|
|
444
444
|
|
|
445
445
|
**兩者都用。** AI 能捕捉任何正規表達式都找不到的細微差異、意圖與設計
|
|
446
446
|
缺陷。Mjölnir 捕捉 AI 因其看起來「像是有意為之」而放過的結構模式——提交
|
|
@@ -550,9 +550,15 @@ JSON/SARIF 報告為 `schemaVersion: 1`。規則 ID(`QA-<FAMILY>-NNN`)一經
|
|
|
550
550
|
- **測量,而非斷言**——只有具有來自真實 OSS 程式碼的假陽性率的規則才
|
|
551
551
|
進入主打層級(見[這些規則中有多少經過測量](#這些規則中有多少經過測量));
|
|
552
552
|
掃描頁尾與 `mjolnir rules --unmeasured` 會告訴你哪條是哪條。
|
|
553
|
-
-
|
|
554
|
-
|
|
555
|
-
|
|
553
|
+
- **外掛信任與執行閘門**——外掛是在 `"plugins"` 下宣告的 npm 套件;
|
|
554
|
+
JS 模組位於 `mjolnir-rules/*.mjs`。**沒有沙箱**:外掛程式碼以完整
|
|
555
|
+
Node 權限執行,與 ESLint 或 Vitest 外掛相同的信任模型。正因如此,
|
|
556
|
+
程式碼執行**在每次掃描時都是選擇性的**:傳入 `--enable-plugins`(或
|
|
557
|
+
設定 `MJOLNIR_ENABLE_PLUGINS=1`),否則這些來源不會被載入——一條
|
|
558
|
+
醒目的 stderr 提示會準確列出被跳過的內容。掃描不可信的程式碼絕不會
|
|
559
|
+
執行它。JSON 規則清單(`mjolnir-rules/*.json`)不受影響:它們宣告
|
|
560
|
+
正規表示式模式,按設計不執行任何程式碼。核心規則 ID 前綴是保留的,
|
|
561
|
+
外掛與外部規則若使用將被拒絕以防偽冒。
|
|
556
562
|
- **工作區本機外部規則**(基於資料夾、零網路)——掃描目標旁的
|
|
557
563
|
`mjolnir-rules/` 目錄可載入自訂規則:JSON 檔宣告正規表達式模式(不執行
|
|
558
564
|
程式碼),`.mjs`/`.js` 模組匯出 `rules`(完整 Node 信任,同外掛)。外部
|
package/dist/cli.d.mts
CHANGED
|
@@ -699,7 +699,7 @@ declare const runScan: typeof runScan$1, buildUniversalRules: typeof buildUniver
|
|
|
699
699
|
* `scripts/sync-sarif-version.cjs` on release and guarded by
|
|
700
700
|
* `tests/version-consistency.spec.ts` locally.
|
|
701
701
|
*/
|
|
702
|
-
declare const CLI_VERSION = "0.5.
|
|
702
|
+
declare const CLI_VERSION = "0.5.13";
|
|
703
703
|
/** A usage-error detail: the offending token, when one exists. */
|
|
704
704
|
interface UsageErrorDetail {
|
|
705
705
|
/** The unknown flag or rejected value (e.g. `--nope`, `loud`). */
|