mjolnir-qa 4.0.0 → 6.0.0
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 +3178 -16
- package/README.md +81 -760
- package/dist/cli.d.mts +552 -206
- package/dist/cli.mjs +31409 -13990
- package/dist/mcp/stdio.mjs +1290 -405
- package/package.json +76 -32
- package/README.ar.md +0 -647
- package/README.bn.md +0 -647
- package/README.br.md +0 -647
- package/README.bs.md +0 -647
- package/README.da.md +0 -647
- package/README.de.md +0 -647
- package/README.es.md +0 -647
- package/README.fr.md +0 -647
- package/README.gr.md +0 -647
- package/README.he.md +0 -647
- package/README.it.md +0 -647
- package/README.ja.md +0 -647
- package/README.ko.md +0 -647
- package/README.no.md +0 -647
- package/README.pl.md +0 -647
- package/README.ru.md +0 -647
- package/README.th.md +0 -647
- package/README.tr.md +0 -647
- package/README.uk.md +0 -647
- package/README.vi.md +0 -647
- package/README.zh.md +0 -647
- package/README.zht.md +0 -647
- package/dist/scan-pipeline-Bg-46cLS.mjs +0 -2
- package/dist/scan-pipeline-CCJdEKNa.mjs +0 -16336
package/README.tr.md
DELETED
|
@@ -1,647 +0,0 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
|
|
3
|
-
<img src="assets/readme/hero.svg" alt="Mjölnir. Testler neyin geçtiğini söyler. Mjölnir neye güvenebileceğinizi söyler." width="100%" />
|
|
4
|
-
|
|
5
|
-
<br />
|
|
6
|
-
|
|
7
|
-
Mjölnir başarısız olamayan testleri ve kırmızıya dönemeyen pipeline'ları bulur,<br />
|
|
8
|
-
ardından sonuca ne kadar güvenilebileceğini, her puanın kanıtıyla birlikte puanlar.
|
|
9
|
-
|
|
10
|
-
<br />
|
|
11
|
-
|
|
12
|
-
[](https://www.npmjs.com/package/mjolnir-qa)
|
|
13
|
-
[](https://www.npmjs.com/package/mjolnir-qa)
|
|
14
|
-
[](https://github.com/Sergey-Bar/Mjolnir/actions/workflows/ci.yml)
|
|
15
|
-
[](https://codecov.io/gh/Sergey-Bar/Mjolnir)
|
|
16
|
-
[](https://scorecard.dev/viewer/?uri=github.com/Sergey-Bar/Mjolnir)
|
|
17
|
-
[](LICENSE)
|
|
18
|
-
[](https://nodejs.org)
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
npx mjolnir-qa@3.0.0
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
[Çalışırken görün](#çalışırken-görün) · [Hızlı başlangıç](#hızlı-başlangıç) · [Neler bulur](#mjölnir-neler-bulur) · [Puan](#güvenilirlik-puanı) · [Kanıt](#kanıt-modeli) · [Çalıştırma analizi](#test-çalıştırma-analizi) · [CI](#ci-bütünlüğü) · [Ajanlar](#yapay-zekâ-ajanları) · [Güvenlik](#güven-ve-güvenlik) · [Sınırlar](#mjölnirin-size-söyleyemedikleri) · [Belgeler](#belgeler)
|
|
25
|
-
|
|
26
|
-
<details>
|
|
27
|
-
<summary>Başka bir dilde okuyun — 22 çeviri</summary>
|
|
28
|
-
|
|
29
|
-
[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)
|
|
30
|
-
|
|
31
|
-
> 🤖 Machine-assisted translation. The [English README](README.md) is canonical. Last synced: 2026-09-26.
|
|
32
|
-
|
|
33
|
-
<!-- Source hash: `de04dfb1677b` -->
|
|
34
|
-
|
|
35
|
-
</details>
|
|
36
|
-
|
|
37
|
-
</div>
|
|
38
|
-
|
|
39
|
-
<br />
|
|
40
|
-
|
|
41
|
-
## Release status (English canonical)
|
|
42
|
-
|
|
43
|
-
The published line is `3.0.0`; this working tree is the `4.0.0-rc.1`
|
|
44
|
-
candidate. `3.0.0` must not be republished or retagged. The M26–M50 program is
|
|
45
|
-
tracked in
|
|
46
|
-
[`docs/ROADMAP.yaml`](docs/ROADMAP.yaml); provisional capability contracts
|
|
47
|
-
are not automatically enabled or certified. Repository-owned checks pass, but
|
|
48
|
-
Trust certification remains `NOT_CERTIFIED` until the protected holdout,
|
|
49
|
-
real-world, platform/consumer, remote-workflow, support-matrix, and corpus
|
|
50
|
-
evidence gates pass. Run `npm run m26:readiness` before treating any candidate
|
|
51
|
-
as releasable. This document does not publish a tag or authorize a release.
|
|
52
|
-
|
|
53
|
-
> Machine-assisted canonical text. Translate this block before treating it as localized copy.
|
|
54
|
-
|
|
55
|
-
## Yeşil onay işareti bir iddiadır, kanıt değil
|
|
56
|
-
|
|
57
|
-
Yeşil onay işareti pipeline'ın başarısız olmadığı anlamına gelir. Testlerin çalıştığı ya da başarısız olabilecekleri anlamına gelmez. Bunların her biri yeşil geçer:
|
|
58
|
-
|
|
59
|
-
- 900 yerine 3 test çalıştıran, commit edilmiş bir `.only`
|
|
60
|
-
- engellemesi gereken job üzerinde `continue-on-error: true`
|
|
61
|
-
- test komutundan sonra `|| true`
|
|
62
|
-
- hiçbir şeyi doğrulamayan ya da gövdesi boş olan bir test
|
|
63
|
-
- gerçek bir başarısızlığı şanslı bir geçişe çeviren bir retry sarmalayıcısı
|
|
64
|
-
- workflow'un yüklediği ama hiç üretmediği bir rapor
|
|
65
|
-
- bir yarış durumunu ayakta tutan sabit bir sleep
|
|
66
|
-
|
|
67
|
-
Hiçbiri pipeline'ı kırmızıya çevirmez ve her biri incelemede kasıtlı görünür. Bu yüzden hayatta kalırlar. İşte Mjölnir'in gerçek bir örneği okuması:
|
|
68
|
-
|
|
69
|
-
<p align="center">
|
|
70
|
-
<img src="assets/readme/scan.svg" alt="Demo deposunun CI workflow'u, satır satır okunmuş hâli. Mjölnir her bulguyu raporladığı satırda işaretler; kuralını, neyin yanlış olduğunu, kanıt düzeyini ve ölçülmüş yanlış pozitif oranını gösterir." width="800" />
|
|
71
|
-
</p>
|
|
72
|
-
|
|
73
|
-
<sub>Demo taramasının bu workflow için raporladığı her bulgu, raporlandığı satırda. `npm run docs:readme-brand` ile [`demo-report.json`](assets/readme/demo-report.json) kaynağından üretilir ve CI'da sapmaya karşı kilitlenir.</sub>
|
|
74
|
-
|
|
75
|
-
**Katı mod.** En agresif tespitler — `.only`, `continue-on-error`, boş testler, tekrar kötüye kullanımı — karantina katında yaşar. Yalnızca `--strict` altında çalışır ve `info` şiddetindedir: işaretlerler, asla engellemezler. Varsayılan tarama (`--strict` olmayan `npx mjolnir-qa@3.0.0`) yalnızca çekirdek ve genişletilmiş kuralları kapsar. Danışmanlık katmanını da istediğinizde `--strict` ekleyin.
|
|
76
|
-
|
|
77
|
-
Mjölnir test paketini, CI workflow'larını ve varsa gerçek bir çalıştırmanın raporunu okur. Testlerinizi çalıştırmaz, bağımlılıklarınızı kurmaz ve taradığı kodu yürütmez. Kanıtı olmadığında da güven uydurmak yerine bunu açıkça söyler:
|
|
78
|
-
|
|
79
|
-
| Durum | Mjölnir'in raporladığı |
|
|
80
|
-
| ---------------------------------------------------------- | ----------------------------------------------------------------------- |
|
|
81
|
-
| Test bildirimi bulunamadı | Puan `null`, **UNKNOWN** olarak gösterilir. Asla uydurma bir 100 değil. |
|
|
82
|
-
| Baseline ya da karşılaştırılabilir revizyon yok | **UNKNOWN**, nedeni belirtilerek. Asla varsayılmış bir 0 değil. |
|
|
83
|
-
| Tarama yarıda kesildi (zaman bütçesi, okunamayan dosyalar) | **PARTIAL**, çıkış `2`. Asla temiz olarak sunulmaz. |
|
|
84
|
-
|
|
85
|
-
<p align="center">
|
|
86
|
-
<img src="assets/readme/how-it-works.svg" alt="Mjölnir nasıl çalışır. Test paketini ve CI pipeline'ını statik olarak, varsa gerçek bir çalıştırmanın raporunu da okur. Her bulguyu kanıt düzeyine ve güven düzeyine göre ağırlıklandırır; L3 ile L5 arasına yalnızca gerçek bir çalıştırma ulaşabilir. Sonuç olarak bulgular, bir güvenilirlik puanı ve donmuş çıkış kodlarıyla bir CI kapısı üretir. Ajan döngüsünde yapay zekâ düzeltmeyi yazar, Mjölnir de kanıtlamak için yeniden tarar." width="880" />
|
|
87
|
-
</p>
|
|
88
|
-
|
|
89
|
-
<sub>Bu sayfa için tasarlandı ve 1:1 gösteriliyor. `npm run docs:readme-brand` ile üretilir ve CI'da sapmaya karşı kilitlenir; puan, sayılar ve kural kimliği [`script.demo.json`](assets/video/script.demo.json), [`demo-report.json`](assets/readme/demo-report.json) ve kural kaydından gelir, asla elle yazılmaz. Aynı görselin poster hâli: [`architecture.svg`](assets/readme/architecture.svg).</sub>
|
|
90
|
-
|
|
91
|
-
<br />
|
|
92
|
-
|
|
93
|
-
## Çalışırken görün
|
|
94
|
-
|
|
95
|
-
CI workflow'u olan küçük bir Playwright paketi olan [`examples/demo-repo`](examples/demo-repo) üzerinde gerçek bir tarama. Puanlarının nereye gittiği burada:
|
|
96
|
-
|
|
97
|
-
<p align="center">
|
|
98
|
-
<img src="assets/readme/terminal-hero.svg" alt="Mjölnir'in kesinti dökümü: WORTHINESS 80/100 WORTHY, kategoriye göre puan, önem derecesine göre kesinti kutusu ve bir FIX THIS FIRST listesi" width="520" />
|
|
99
|
-
</p>
|
|
100
|
-
|
|
101
|
-
<sub>`npm run docs:hero` ile gerçek bir taramadan üretilir ve CI'da sapmaya karşı kilitlenir. Aynı taramanın tam `--verbose` raporu [`demo.svg`](assets/readme/demo.svg) dosyasıdır (`npm run docs:demo`).</sub>
|
|
102
|
-
|
|
103
|
-
<details>
|
|
104
|
-
<summary><strong>İzleyin</strong> — bir tarama, yazdırdığı düzeltme ve bunu kanıtlayan yeniden tarama</summary>
|
|
105
|
-
|
|
106
|
-
<br />
|
|
107
|
-
|
|
108
|
-
<p align="center">
|
|
109
|
-
<a href="assets/video/mjolnir-demo.mp4">
|
|
110
|
-
<img src="assets/video/mjolnir-demo-poster.png" alt="Demo kaydından bir kare: npx mjolnir-qa@3.0.0 bir terminal penceresinde demo deposunu tarıyor" width="900" />
|
|
111
|
-
</a>
|
|
112
|
-
</p>
|
|
113
|
-
|
|
114
|
-
<sub>`npm run docs:video` ile gerçek bir taramadan kare kare işlendi; asla ekran kaydı alınmadı. [`mjolnir-demo.mp4`](assets/video/mjolnir-demo.mp4) dosyasını açmak için kareyi seçin.</sub>
|
|
115
|
-
|
|
116
|
-
</details>
|
|
117
|
-
|
|
118
|
-
### Tek bir bulguya yakından bakış
|
|
119
|
-
|
|
120
|
-
Her bulgu dört soruyu yanıtlar: nerede olduğu, Mjölnir'in ne kadar emin olduğu, kuralın ne sıklıkla yanıldığı ve nasıl düzeltileceği.
|
|
121
|
-
|
|
122
|
-
<p align="center">
|
|
123
|
-
<img src="assets/readme/finding-anatomy.svg" alt="Demo taramasının ilk bulgusu, terminalin yazdırdığı hâliyle birebir, dört bölümü işaretlenmiş olarak: nerede, ne kadar emin, kural ne sıklıkla yanılıyor ve düzeltme." width="100%" />
|
|
124
|
-
</p>
|
|
125
|
-
|
|
126
|
-
`mjolnir explain QA-CI-001` bir kuralın tüm güven kaydını yazdırır; ölçülmüş yanlış pozitif oranı ve bu oranın ona kazandırdığı düzey de dahil:
|
|
127
|
-
|
|
128
|
-
```text
|
|
129
|
-
▍ QA-CI-001 — continue-on-error masks a failing verification gate
|
|
130
|
-
|
|
131
|
-
Severity: error
|
|
132
|
-
Confidence: high
|
|
133
|
-
Tier: quarantine
|
|
134
|
-
Evidence: E2
|
|
135
|
-
QA impact: False-green risk (FALSE-GREEN)
|
|
136
|
-
Measured FP: 11% (19 hand-classified corpus verdicts)
|
|
137
|
-
FP risk: low (author estimate)
|
|
138
|
-
Languages: yaml
|
|
139
|
-
Frameworks: github-actions, azure-pipelines
|
|
140
|
-
|
|
141
|
-
WHAT WAS FOUND (real detector output, not a mockup)
|
|
142
|
-
Job `security-scan` runs a verification gate under `continue-on-error: true`.
|
|
143
|
-
|
|
144
|
-
WHY IT MATTERS
|
|
145
|
-
This job can fail every day and CI will still show green. The checkmark on
|
|
146
|
-
this workflow cannot be trusted.
|
|
147
|
-
|
|
148
|
-
HOW TO FIX
|
|
149
|
-
Remove continue-on-error, or scope it to individual non-blocking steps only.
|
|
150
|
-
|
|
151
|
-
Example from this rule's own must-fire fixture: QA-CI-001/must-fire/masked.yml
|
|
152
|
-
|
|
153
|
-
WHAT WOULD CHANGE THE VERDICT
|
|
154
|
-
- a run report next to the scan target (mjolnir.report.json or test-results/)
|
|
155
|
-
corroborating this file lifts its findings to L3–L5
|
|
156
|
-
- a documented suppression (mjolnir.config.json) lowers the finding count
|
|
157
|
-
without claiming correctness
|
|
158
|
-
- quarantine findings run only under --strict and are advisory (E0) — they can
|
|
159
|
-
never gate CI
|
|
160
|
-
|
|
161
|
-
NEXT ACTION
|
|
162
|
-
Fix the first occurrence, then re-run: `mjolnir --scope changed`. Every
|
|
163
|
-
occurrence of this rule is listed in the scan output.
|
|
164
|
-
|
|
165
|
-
HOW TO VERIFY THE FIX
|
|
166
|
-
Re-run `mjolnir` on the changed file(s) — this finding should no longer
|
|
167
|
-
appear. `mjolnir --scope changed` scopes the check to just what you touched.
|
|
168
|
-
|
|
169
|
-
Docs: mjolnir rules --md (full catalog, this rule included)
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
Değer birimi budur: CI'ın hak etmediği bir geçişi raporladığı tek bir yer.
|
|
173
|
-
|
|
174
|
-
<br />
|
|
175
|
-
|
|
176
|
-
## Hızlı başlangıç
|
|
177
|
-
|
|
178
|
-
```bash
|
|
179
|
-
npx mjolnir-qa@3.0.0
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
Geçerli dizini tarar ve Trust Report'u yazdırır: ne bulduğunu, ne kadar güvenebileceğinizi, nedenini ve sırada ne yapmanız gerektiğini. Kapı düzeyinde ya da üstünde hiçbir şey bulunmazsa `0` ile çıkar.
|
|
183
|
-
|
|
184
|
-
CI'da yalnızca dalın getirdiklerini tarayın; böylece eski bir test paketi ilk pull request'inizi boğmaz:
|
|
185
|
-
|
|
186
|
-
```bash
|
|
187
|
-
npx mjolnir-qa@3.0.0 --scope changed
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
`mjolnir ci install` bunu, ana `v3` etiketine sabitlenmiş [action](https://github.com/Sergey-Bar/Mjolnir#readme) ile bir GitHub Actions workflow'u olarak yazar (ya da `--no-action` ile düz `npx`). Siz engellemesi gerektiğine karar verene kadar tavsiye niteliğinde kalır.
|
|
191
|
-
|
|
192
|
-
| Komut | Ne yapar |
|
|
193
|
-
| --------------------------------------------- | --------------------------------------------------------------------- |
|
|
194
|
-
| `mjolnir` | Trust Report: karar, güven düzeyi, sonraki adım |
|
|
195
|
-
| `mjolnir --scope changed` | Yalnızca dalınızın getirdikleri (CI biçimi) |
|
|
196
|
-
| `mjolnir ci install` | Tavsiye niteliğindeki PR workflow'unu üretir (action tabanlı) |
|
|
197
|
-
| `mjolnir business-case` | ROI estimate: projected savings per finding |
|
|
198
|
-
| `mjolnir release-report` | Release readiness: GO, CONDITIONAL GO, or NO-GO |
|
|
199
|
-
| `mjolnir release-trust` | 12-dimension release assurance verdict |
|
|
200
|
-
| `mjolnir report` | Generate a Playwright-compatible report |
|
|
201
|
-
| `mjolnir trend` | Record, show, or diff local quality snapshots |
|
|
202
|
-
| `mjolnir policy` | Initialize, validate, or check policy gates |
|
|
203
|
-
| `mjolnir quarantine` | Review deterministic proposals (prototype) |
|
|
204
|
-
| `mjolnir analyze --cross-file` | Bounded cross-file analysis |
|
|
205
|
-
| `mjolnir ci-adapter github .` | Generate CI templates for supported providers |
|
|
206
|
-
| `mjolnir dashboard` | Generate a self-contained quality dashboard |
|
|
207
|
-
| `mjolnir exec-report` | Executive KPIs and recommendations (advisory) |
|
|
208
|
-
| `mjolnir enterprise` | Self-hosted templates (prototype) |
|
|
209
|
-
| `mjolnir maturity` | Assess maturity or display maturity levels |
|
|
210
|
-
| `mjolnir mutation tests/mutation-report.json` | Analyze mutation reports; never promotes trust |
|
|
211
|
-
| `mjolnir mcp` | Read-only MCP tools over stdio |
|
|
212
|
-
| `mjolnir explain QA-CI-001` | Ne, neden ve düzeltme; ayrıca ölçülmüş FP oranı |
|
|
213
|
-
| `mjolnir why src/a.spec.ts:42` | Tam olarak bu satırın neden işaretlendiği. Asla engellemez. |
|
|
214
|
-
| `mjolnir forensics ./test-results/` | Gerçek bir çalıştırmadan çalışma zamanı kanıtı |
|
|
215
|
-
| `mjolnir trust-report` | Kendi içinde bütün Trust Artifact (md + json) |
|
|
216
|
-
| `mjolnir handoff` | Kodlama ajanı için iyileştirme planı |
|
|
217
|
-
| `mjolnir --json` / `--format sarif` | Makine tarafından okunabilir çıktı, GitHub Code Scanning |
|
|
218
|
-
| `mjolnir --format codequality` | GitLab Code Quality raporu (MR widget'ı artefaktı) |
|
|
219
|
-
| `mjolnir --strict` | quarantine düzeyindeki kuralları da çalıştırır (daha yüksek FP riski) |
|
|
220
|
-
|
|
221
|
-
<details>
|
|
222
|
-
<summary><strong>Diğer tüm komutlar</strong> — kararsız test triyajı, raporlama, yönetişim</summary>
|
|
223
|
-
|
|
224
|
-
<br />
|
|
225
|
-
|
|
226
|
-
| Komut | Ne yapar |
|
|
227
|
-
| ----------------------------------- | ----------------------------------------------------------------------------------- |
|
|
228
|
-
| `mjolnir --classic` | Trust Report öncesi puan başlığı görünümü |
|
|
229
|
-
| `mjolnir explain verdict` | Kaydedilmiş taramanın kararının neden öyle olduğu |
|
|
230
|
-
| `mjolnir triage ./test-results/` | Rehberli triyaj. Her satır bir sonraki adımla biter. |
|
|
231
|
-
| `mjolnir pw-report ./test-results/` | Playwright çalıştırma özeti: yeniden denemeler, kararsız testler, en yavaşlar |
|
|
232
|
-
| `mjolnir doctor:playwright` | Yalnızca Playwright için derin tarama ve Selector Health Score |
|
|
233
|
-
| `mjolnir fix --dry-run` / `fix` | Güvenli otomatik düzeltmeler; her biri tuttuğunu kanıtlamak için yeniden taranır |
|
|
234
|
-
| `mjolnir baseline` / `diff` | Bulguların anlık görüntüsünü alır, sonra yalnızca yeni ya da kötüleşenleri raporlar |
|
|
235
|
-
| `mjolnir impact --since <ref>` | Bir commit'in getirdikleri ve çözdükleri |
|
|
236
|
-
| `mjolnir summary` | Bir rapordan CI açıklamaları ve step özeti |
|
|
237
|
-
| `mjolnir pr-comment` | Kapsamı sınırlı bir PR yorumu, Markdown olarak |
|
|
238
|
-
| `mjolnir debt` | Maliyet modelli test borcu kaydı |
|
|
239
|
-
| `mjolnir handover` | Yeni bir QA mühendisi için paketin tanıtım haritası |
|
|
240
|
-
| `mjolnir init` | Framework'leri algılar, bir kurulum kontrol listesi yazdırır |
|
|
241
|
-
| `mjolnir suppressions` | Bastırılmış bulguları listeler, yönetişim için |
|
|
242
|
-
| `mjolnir rules --unmeasured` | Ölçüme değil varsayıma dayanarak çalışan kurallar |
|
|
243
|
-
| `mjolnir rules --md` | Tam kural kataloğu (JSON veya Markdown) |
|
|
244
|
-
| `mjolnir doctor` | Mjölnir'in kendi kural tabanının öz denetimi |
|
|
245
|
-
| `mjolnir create-rule <ID>` | Yeni bir kural ve fixture'ları için iskelet oluşturur |
|
|
246
|
-
| `mjolnir stats` | Görülen düzeltmelerin yerel, tüm zamanlar sayaçları |
|
|
247
|
-
| `mjolnir badge` | shields.io uç noktası JSON'u ve kod parçası |
|
|
248
|
-
| `mjolnir --cache` | Yerel bir karar önbelleğiyle artımlı yeniden taramalar |
|
|
249
|
-
| `mjolnir --format mermaid` | PR yorumu için test mimarisi diyagramı |
|
|
250
|
-
|
|
251
|
-
`mjolnir help <command>` her biri için kullanım, örnekler ve sonraki adımı yazdırır.
|
|
252
|
-
|
|
253
|
-
</details>
|
|
254
|
-
|
|
255
|
-
Windows, macOS veya Linux üzerinde **Node.js ≥ 22.18** gerektirir. Global kurulumu mu tercih edersiniz? `npm i -g mjolnir-qa`. Bu alt sınır derleme araç zincirinden gelir (tsdown onu hedefler ve sürüm pipeline'ı ona karşı duman testi yapar); çalışma zamanı bağımlılıkları bundan fazlasını gerektirmez.
|
|
256
|
-
|
|
257
|
-
<br />
|
|
258
|
-
|
|
259
|
-
## Mjölnir neler bulur
|
|
260
|
-
|
|
261
|
-
<p align="center">
|
|
262
|
-
<img src="assets/readme/stack.svg" alt="Yığınınızla çalışır: kurallarının kapsadığı diller, test framework'leri ve CI sistemleri, kural kaydından." width="100%" />
|
|
263
|
-
</p>
|
|
264
|
-
|
|
265
|
-
Dört ailede **79 kural** — test hijyeni, test kalitesi, Playwright ve CI bütünlüğü — TypeScript ve JavaScript, Python, Java, C# ve GitHub Actions YAML genelinde. Playwright'ı dört bağlamasının tamamında, ayrıca pytest, JUnit, TestNG, NUnit, xUnit, MSTest, Jest, Vitest ve Mocha'yı kapsarlar; Cypress ve Selenium için başlangıç düzeyinde kapsam vardır. Biçimi göstermek için dokuzu:
|
|
266
|
-
|
|
267
|
-
| ID | Kural | Önem | Düzey |
|
|
268
|
-
| ------------ | -------------------------------------------------------------------- | ------- | ---------- |
|
|
269
|
-
| QA-CI-001 | `continue-on-error` başarısız bir doğrulama kapısını maskeler | error | quarantine |
|
|
270
|
-
| QA-CI-009 | Test çıkış kodu aktarılmıyor (pipefail olmadan `\|`, `;` zincirleri) | error | extended |
|
|
271
|
-
| QA-TEST-001 | Odaklanmış test commit edildi (`.only`, `fit`) | error | quarantine |
|
|
272
|
-
| QA-TEST-003 | Doğrulamasız test | error | quarantine |
|
|
273
|
-
| QA-TQUAL-009 | await edilmemiş promise doğrulaması | error | quarantine |
|
|
274
|
-
| QA-PW-002 | await edilmemiş locator doğrulaması | error | core |
|
|
275
|
-
| QA-PW-004 | Kırılgan CSS/XPath seçicileri | warning | quarantine |
|
|
276
|
-
| QA-PY-002 | Atlanan test (`skip`, katı olmayan `xfail`) | warning | core |
|
|
277
|
-
| QA-CS-103 | Doğrulamasız test metodu | error | core |
|
|
278
|
-
|
|
279
|
-
Tam katalog kayıttan üretilir, asla elle tutulmaz: `mjolnir rules --md`, [`docs/rules/`](docs/rules/) ya da [neleri denetlediği rehberi](https://sergey-bar.github.io/Mjolnir/guide/what-it-checks).
|
|
280
|
-
|
|
281
|
-
<details>
|
|
282
|
-
<summary><strong>Bu README'de adı geçen tüm kurallar</strong>, tek bir tabloda</summary>
|
|
283
|
-
|
|
284
|
-
<br />
|
|
285
|
-
|
|
286
|
-
> `quarantine` kuralları yalnızca `--strict` altında çalışır ve asla engellemez (info düzeyiyle sınırlıdır). Gösterilen önem, yazarın belirlediği önemdir.
|
|
287
|
-
|
|
288
|
-
| ID | Aile | Kural | Önem | Düzey |
|
|
289
|
-
| ------------ | ---------- | -------------------------------------------------------------------- | ------- | ---------- |
|
|
290
|
-
| QA-TEST-001 | Hijyen | Odaklanmış test commit edildi (`.only`, `fit`) | error | quarantine |
|
|
291
|
-
| QA-TEST-002 | Hijyen | Atlanan test. İzlenen bir gerekçe olmadan `error` düzeyine yükselir. | warning | quarantine |
|
|
292
|
-
| QA-TEST-003 | Hijyen | Doğrulamasız test | error | quarantine |
|
|
293
|
-
| QA-TEST-004 | Hijyen | Sabit sleep (`waitForTimeout`, `sleep()`, `delay()`) | warning | extended |
|
|
294
|
-
| QA-TEST-006 | Hijyen | Kararsızlığı gizleyen retry kötüye kullanımı | warning | quarantine |
|
|
295
|
-
| QA-TEST-010 | Hijyen | Boş test gövdesi | error | quarantine |
|
|
296
|
-
| QA-TQUAL-002 | Kalite | Totolojik doğrulama | error | quarantine |
|
|
297
|
-
| QA-TQUAL-009 | Kalite | await edilmemiş promise doğrulaması | error | quarantine |
|
|
298
|
-
| QA-TQUAL-011 | Kalite | Yorum satırına alınmış testler | warning | extended |
|
|
299
|
-
| QA-PW-002 | Playwright | await edilmemiş locator doğrulaması | error | core |
|
|
300
|
-
| QA-PW-003 | Playwright | `page.pause()` / `test.only()` commit edildi | error | core |
|
|
301
|
-
| QA-PW-004 | Playwright | Kırılgan CSS/XPath seçicileri | warning | quarantine |
|
|
302
|
-
| QA-PW-123 | Playwright | Koda gömülü ortam URL'leri | warning | quarantine |
|
|
303
|
-
| QA-PW-140 | Playwright | `maxDiffPixelRatio` olmadan ekran görüntüsü | warning | core |
|
|
304
|
-
| QA-CI-001 | CI | `continue-on-error` başarısız bir kapıyı maskeler | error | quarantine |
|
|
305
|
-
| QA-CI-002 | CI | `\|\| true` çıkış kodlarını yutar | error | extended |
|
|
306
|
-
| QA-CI-005 | CI | Rapor kullanılıyor ama hiç üretilmiyor | error | quarantine |
|
|
307
|
-
| QA-CI-007 | CI | Testlerin etrafında retry sarmalayıcıları | warning | extended |
|
|
308
|
-
| QA-CI-008 | CI | Her zaman başarılı olan step hataları maskeler | error | quarantine |
|
|
309
|
-
| QA-CI-009 | CI | Çıkış kodu aktarılmıyor (pipefail olmadan `\|`, `;` zincirleri) | error | extended |
|
|
310
|
-
| QA-CI-010 | CI | Engellemeleri gereken yerde atlanan testler | error | quarantine |
|
|
311
|
-
| QA-PY-002 | Python | Atlanan test (`skip`, katı olmayan `xfail`) | warning | core |
|
|
312
|
-
| QA-PY-003 | Python | Doğrulamasız test fonksiyonu | error | quarantine |
|
|
313
|
-
| QA-PY-005 | Python | Testlerde `time.sleep()` | warning | extended |
|
|
314
|
-
| QA-PY-012 | Python | Totolojik doğrulama | error | quarantine |
|
|
315
|
-
| QA-JV-101 | Java | Devre dışı bırakılmış test (`@Disabled`) | warning | core |
|
|
316
|
-
| QA-JV-102 | Java | Sabit sleep (`Thread.sleep()`) | warning | extended |
|
|
317
|
-
| QA-JV-103 | Java | Doğrulamasız test metodu | error | extended |
|
|
318
|
-
| QA-JV-105 | Java | Playwright `waitForTimeout()` ile sabit sleep | warning | core |
|
|
319
|
-
| QA-JV-106 | Java | Rol tabanlı locator yerine kırılgan seçici | warning | quarantine |
|
|
320
|
-
| QA-CS-101 | C# | Atlanan test (`[Ignore]`, `[Fact(Skip=)]`) | warning | core |
|
|
321
|
-
| QA-CS-102 | C# | Sabit sleep (`Thread.Sleep` / `Task.Delay`) | warning | core |
|
|
322
|
-
| QA-CS-103 | C# | Doğrulamasız test metodu | error | core |
|
|
323
|
-
| QA-CS-105 | C# | `WaitForTimeoutAsync()` ile sabit sleep | warning | extended |
|
|
324
|
-
| QA-CS-106 | C# | Rol tabanlı locator yerine kırılgan seçici | warning | quarantine |
|
|
325
|
-
|
|
326
|
-
Python ayrıca QA-PY-001…012 (pytest hijyeni) ve QA-PY-101…108 (Python için Playwright) ile gelir. Cypress ve Selenium'un üçer kurallık başlangıç setleri vardır.
|
|
327
|
-
|
|
328
|
-
</details>
|
|
329
|
-
|
|
330
|
-
Her kural bir must-fire **ve** bir must-not-fire fixture'ı ile yayımlanır ve kendi negatif fixture'ında tetiklenen bir kural yayımlanamaz. Bu, yanlış pozitif güvenlik duvarıdır; `mjolnir doctor` bunu bu deponun kendi CI'ında uygular.
|
|
331
|
-
|
|
332
|
-
### Selector Health Score
|
|
333
|
-
|
|
334
|
-
`mjolnir doctor:playwright` her locator'ı bir öğeyi nasıl bulduğuna göre derecelendirir: bir kullanıcının yapacağı gibi (rol, etiket, metin), açık bir sözleşmeyle (`data-testid`) ya da yapısal bir tesadüfle (CSS zincirleri, XPath). Her dosya 0 ile 100 arasında bir puan alır:
|
|
335
|
-
|
|
336
|
-
```text
|
|
337
|
-
▍ SELECTOR HEALTH
|
|
338
|
-
|
|
339
|
-
e2e/login.spec.ts
|
|
340
|
-
[█████████████░░░░░░░] 65 / 100
|
|
341
|
-
role/text: 1 · testid: 0 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
342
|
-
|
|
343
|
-
e2e/checkout.spec.ts
|
|
344
|
-
[██████████████████░░] 88 / 100
|
|
345
|
-
role/text: 4 · testid: 1 · plain-css: 0 · css-chains: 1 ⚠ · xpath: 0
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
Bu, **doğruluğu değil dayanıklılığı** ölçer. `.btn.btn-primary > div:nth-child(2)` bugün geçer ve biri işaretlemeye dokunana kadar geçmeye devam eder. Düşük bir puan asla testin bozuk olduğunu iddia etmez; yalnızca kimsenin korumayı vaat etmediği işaretlemeye bağlı olduğunu söyler.
|
|
349
|
-
|
|
350
|
-
<br />
|
|
351
|
-
|
|
352
|
-
## Güvenilirlik puanı
|
|
353
|
-
|
|
354
|
-
<p align="center">
|
|
355
|
-
<img src="assets/readme/score-gauge.svg" alt="0'dan 100'e güvenilirlik ölçeği, her puanı dolaşan bir işaretçiyle: 50'nin altı UNWORTHY, 50–79 NEEDS WORK, 80–99 WORTHY, 100 FORGED" width="720" />
|
|
356
|
-
</p>
|
|
357
|
-
|
|
358
|
-
<sub>0'dan 100'e her puan, gerçek `deriveScoreState` tarafından yerleştirildi. `npm run docs:gauge` ile üretilir ve CI'da sapmaya karşı kilitlenir.</sub>
|
|
359
|
-
|
|
360
|
-
| Puan | Karar |
|
|
361
|
-
| --------- | -------------------------------------- |
|
|
362
|
-
| `0 – 49` | **UNWORTHY** |
|
|
363
|
-
| `50 – 79` | **NEEDS WORK** |
|
|
364
|
-
| `80 – 99` | **WORTHY** |
|
|
365
|
-
| `100` | **FORGED** |
|
|
366
|
-
| `null` | **UNKNOWN**: test bildirimi bulunamadı |
|
|
367
|
-
|
|
368
|
-
**Nasıl hesaplanır.** Önem bir temel kesinti belirler (`error −8`, `warning −3`, `info −1`) ve kanıt düzeyi bunu indirir: E2 tam, E1 yarım (aşağı yuvarlanarak), E0 hiç sayılmaz. Toplam, paketin maruziyetine göre normalleştirilir; yani dosya başına değil test bildirimi başına kesinti. Terminal, puanın kullandığı indirilmiş sayıların aynısını yazdırır; gizli ikinci bir model yoktur. Ayrıntılar: [docs/SCORING.md](docs/SCORING.md) ve [puanlama rehberi](https://sergey-bar.github.io/Mjolnir/guide/scoring).
|
|
369
|
-
|
|
370
|
-
**100'ün anlamadığı şey.** Yazılımın doğru, paketin yeterli ya da ürünün hatasız olduğu anlamına gelmez. Tek bir anlamı vardır: **Mjölnir'in değerlendirdiği kuralların hiçbiri bu taramada ve bu kanıt modelinde kesinti üretmedi.**
|
|
371
|
-
|
|
372
|
-
<br />
|
|
373
|
-
|
|
374
|
-
## Kanıt modeli
|
|
375
|
-
|
|
376
|
-
Her bulgu iki etiket taşır: Mjölnir'in ne kadar emin olduğu ve bulgunun ne kadar denetlendiği. Kalıp raporlayan bir araçla bir sürümü kapıya bağlayabileceğiniz bir araç arasındaki fark budur.
|
|
377
|
-
|
|
378
|
-
**Ne kadar emin — kanıt düzeyi.**
|
|
379
|
-
|
|
380
|
-
| Düzey | Ad | Anlamı | Kesinti |
|
|
381
|
-
| ------ | ------------------- | ----------------------------------------------------- | ------- |
|
|
382
|
-
| **E2** | Deterministik kanıt | Kusur, kodda yazıldığı hâliyle mevcut | Tam |
|
|
383
|
-
| **E1** | Kalıp kanıtı | Kusurla güçlü biçimde bağlantılı bir kalıp eşleşti | Yarım |
|
|
384
|
-
| **E0** | Gözlem | Bilmeye değer. Bir şeyin yanlış olduğu iddiası değil. | Sıfır |
|
|
385
|
-
|
|
386
|
-
Bir tespitteki güven, kanıtın gücü değildir. Bir kural aradığını bulduğundan emin olabilir ve yine de bir sezgisel yönteme bakıyor olabilir. E1 bulguları okunmak ve değerlendirilmek içindir, asla körü körüne uygulanmak için değil; bu sınır bulgunun üzerinde terminalde, JSON'da ve ajana devirde işaretlidir.
|
|
387
|
-
|
|
388
|
-
**Ne kadar denetlendi — güven düzeyi.** Bulguların çoğu kodunuzu okumaktan gelir. Mjölnir'e gerçek bir test çalıştırmasının raporunu verin, kodun gerçekten çalıştığını doğrulayabilsin.
|
|
389
|
-
|
|
390
|
-
<p align="center">
|
|
391
|
-
<img src="assets/readme/trust-ladder.svg" alt="L0'dan L5'e güven merdiveni. L0–L2 kodu okumaktan gelir; L3–L5 gerçek bir çalıştırma raporu gerektirir, bu da merdivendeki bir kırılmayla işaretlenir." width="100%" />
|
|
392
|
-
</p>
|
|
393
|
-
|
|
394
|
-
| Düzey | Sade bir dille | Ne gerektirir |
|
|
395
|
-
| ------ | --------------------- | ------------------------------------------------------------------ |
|
|
396
|
-
| **L0** | Not edildi | Kodu okumak |
|
|
397
|
-
| **L1** | Sorun gibi görünüyor | Kodu okumak: bir kalıp eşleşti |
|
|
398
|
-
| **L2** | Kodda kanıtlandı | Kodu okumak: kusur yapısal |
|
|
399
|
-
| **L3** | Dosya çalıştı | Bir çalıştırma raporu bulgunun dosyasının yürütüldüğünü gösteriyor |
|
|
400
|
-
| **L4** | Test çalıştı | Bir çalıştırma raporu bulgunun testinin yürütüldüğünü gösteriyor |
|
|
401
|
-
| **L5** | Çalıştırma doğruluyor | Çalıştırmanın kendi sonucu kusur sınıfını doğruluyor |
|
|
402
|
-
|
|
403
|
-
Statik bir tarama L2'de durur. Yalnızca gerçek bir çalıştırma raporu (Playwright JSON, Jest veya Vitest JSON, JUnit XML) bir bulguyu L3 ve üstüne çıkarabilir; bu yüzden hiç çalışırken görülmemiş bir bulgu asla çalıştığını iddia edemez. Tanımlar: [docs/TERMINOLOGY.md](docs/TERMINOLOGY.md).
|
|
404
|
-
|
|
405
|
-
### Bunun ne kadarı ölçülmüş
|
|
406
|
-
|
|
407
|
-
**79 kuraldan 74'ünün gerçek OSS koduna karşı ölçülmüş bir yanlış pozitif oranı var** (her biri için en az 10 elle sınıflandırılmış bulgu; bkz. [docs/FP-AUDIT.md](docs/FP-AUDIT.md)). Diğer 5'i yazarın tahminiyle yayımlanır ve bunu `mjolnir explain` içinde kural kural söyler. `mjolnir rules --unmeasured` onları listeler ve her tarama altbilgisi, gerçekten _tetiklenen_ kurallardan kaçının ölçülmüş olduğunu bildirir.
|
|
408
|
-
|
|
409
|
-
Oranlar kötü olduğunda da herkese açık kalır. QA-TEST-001 (commit edilmiş bir `.only`) gerçek depolardaki denetimde kötü sonuç verir ve bu yüzden quarantine'dedir. QA-PW-141 dahil her kuralın güncel sayısı denetimdedir.
|
|
410
|
-
|
|
411
|
-
### Kural güven düzeyleri
|
|
412
|
-
|
|
413
|
-
Düzeyler görüşe değil, ölçülmüş yanlış pozitif oranına göre belirlenir:
|
|
414
|
-
|
|
415
|
-
| Düzey | Ölçülmüş FP | Davranış |
|
|
416
|
-
| -------------- | ---------------------------- | ------------------------------------------------------ |
|
|
417
|
-
| **core** | ≤ 10% | Varsayılan rapor, engeller |
|
|
418
|
-
| **extended** | ≤ 30% | Varsayılan rapor, daha düşük güven |
|
|
419
|
-
| **quarantine** | > 30% veya açıkça bildirilen | Yalnızca `--strict`, info ile sınırlı, asla engellemez |
|
|
420
|
-
| _ölçülmemiş_ | n < 10 | Ölçülene kadar core düzeyine yükseltilemez |
|
|
421
|
-
|
|
422
|
-
FP bantları yalnızca bir kademe düşürebilir — açıkça orada bildirilmişse bir kuralı `quarantine` dışına çıkarmaz. Açıkça quarantine'a alınmış bir kural, ölçülen FP oranından bağımsız olarak quarantine'de kalır.
|
|
423
|
-
|
|
424
|
-
Yükseltme, düşürme ve dil bazında olgunluk: [kural yaşam döngüsü](https://sergey-bar.github.io/Mjolnir/reference/rule-lifecycle).
|
|
425
|
-
|
|
426
|
-
### Bu neden bir linter değil
|
|
427
|
-
|
|
428
|
-
Linter'lar kodun kurallara uyup uymadığını söyler. Mjölnir doğrulamanıza güvenilip güvenilemeyeceğini söyler.
|
|
429
|
-
|
|
430
|
-
| | Linter'lar (ESLint, SonarQube) | Kapsam araçları | Yapay zekâ ile kod incelemesi | **Mjölnir** |
|
|
431
|
-
| ------------------------------------------------------------------- | :----------------------------: | :-------------: | :---------------------------: | :---------------: |
|
|
432
|
-
| Ürün kodunu değil, **doğrulama sistemini** puanlar | Hayır | Hayır | Hayır | Evet |
|
|
433
|
-
| CI workflow bütünlüğü (`continue-on-error`, `\|\| true`) | Hayır | Hayır | yalnızca diff | Evet |
|
|
434
|
-
| Playwright locator dayanıklılığını derecelendirir (Selector Health) | Hayır | Hayır | Hayır | Evet |
|
|
435
|
-
| `TRUE-FLAKE` kararları için gerçek çalıştırma verisi okur | Hayır | Hayır | Hayır | Evet |
|
|
436
|
-
| Kural başına ölçülmüş bir yanlış pozitif oranı yayımlar | Hayır | Hayır | Hayır | Evet |
|
|
437
|
-
| Doğrulamasız testleri işaretler | Evet\* | Hayır | bazen | Evet |
|
|
438
|
-
| Sabit sleep'leri yakalar (`waitForTimeout`, `time.sleep`) | Evet\* | Hayır | bazen | Evet |
|
|
439
|
-
| Deterministik (aynı girdi, aynı çıktı) | Evet | Evet | Hayır | Evet |
|
|
440
|
-
| Tarama başına maliyet | ücretsiz | ücretsiz | token | **sıfır** (yerel) |
|
|
441
|
-
|
|
442
|
-
<sub>\*`eslint-plugin-jest` ve `eslint-plugin-playwright` (`expect-expect`, `no-wait-for-timeout`) ile SonarQube'un kendi doğrulama kuralları tarafından kapsanır. Sütunlar, test paketi doğrulaması için varsayılan davranışı tanımlar; eklentiler, ücretli planlar ve özel kurallar bazı yanıtları değiştirir. Bu bir konumlandırma özetidir, kıyaslama değil.</sub>
|
|
443
|
-
|
|
444
|
-
Yapay zekâ incelemesini de kullanın. Hiçbir kalıbın bulamayacağı nüansları, niyeti ve tasarım kusurlarını yakalar. Mjölnir ise kasıtlı göründüğü için yapay zekâ incelemesinin gözden kaçırdığını yakalar: commit edilmiş bir `.only`, yutulmuş bir çıkış kodu, bir test job'undaki `continue-on-error`. Bunlar akıl yürütme değil tarama gerektirir.
|
|
445
|
-
|
|
446
|
-
<br />
|
|
447
|
-
|
|
448
|
-
## Test çalıştırma analizi
|
|
449
|
-
|
|
450
|
-
Statik analiz hiç çalışmamış kod hakkında akıl yürütür. Çalıştırma analizi ise gerçekte ne olduğunu okur: herhangi bir çalıştırıcıdan Playwright JSON, Jest JSON, Vitest JSON ve JUnit XML.
|
|
451
|
-
|
|
452
|
-
```bash
|
|
453
|
-
mjolnir forensics ./test-results/
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
```text
|
|
457
|
-
▍ FLAKINESS LEADERBOARD
|
|
458
|
-
|
|
459
|
-
3 tests · 1 failed · 1 flaky · 1 retried
|
|
460
|
-
|
|
461
|
-
TRUE-FLAKE completes checkout with saved card (e2e/checkout.spec.ts)
|
|
462
|
-
████████████████████ 6.0s · 2 attempts
|
|
463
|
-
FAILING declines an expired card (e2e/checkout.spec.ts)
|
|
464
|
-
████░░░░░░░░░░░░░░░░ 1.1s · 1 attempt
|
|
465
|
-
```
|
|
466
|
-
|
|
467
|
-
`TRUE-FLAKE` testin yeniden denendiği anlamına gelmez. Testin **en az bir denemede başarısız olup ardından yeşil bittiği** anlamına gelir: son onay işareti ne derse desin işaretlenen şanslı bir geçiş. `mjolnir triage` bu geçmişi bir karantina önerisine dönüştürür, `mjolnir pw-report` ise bir çalıştırmayı özetler. Bulguları L3 ve üzeri güven düzeylerine çıkaran da aynı çalıştırma raporlarıdır.
|
|
468
|
-
|
|
469
|
-
<br />
|
|
470
|
-
|
|
471
|
-
## CI bütünlüğü
|
|
472
|
-
|
|
473
|
-
Bir test geçerken çevresindeki pipeline başarısız olamayabilir. Mjölnir workflow'ları da okur: `continue-on-error`, `|| true`, hiç aktarılmayan çıkış kodları, her zaman başarılı olan step'ler, kullanılan ama hiç üretilmeyen raporlar ve engellemesi gereken olaylarda atlanan kapılar. Her bulgu job'u, step'i ve satırı belirtir ve kendi kanıt düzeyini taşır.
|
|
474
|
-
|
|
475
|
-
PR workflow'unu üretin, varsayılan olarak tavsiye niteliğindedir:
|
|
476
|
-
|
|
477
|
-
```bash
|
|
478
|
-
mjolnir ci install
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
Ya da Marketplace action'ını mevcut bir workflow'a ekleyin:
|
|
482
|
-
|
|
483
|
-
```yaml
|
|
484
|
-
- uses: Sergey-Bar/Mjolnir@v3
|
|
485
|
-
with:
|
|
486
|
-
scope: changed
|
|
487
|
-
fail-on: error
|
|
488
|
-
```
|
|
489
|
-
|
|
490
|
-
Ana sürüm hattını izlemek için `@v3`'i, tekrarlanabilir bir kapı için ise tam bir etiketi (`@v0.5.32`) sabitleyin. [docs/DISTRIBUTION-KIT.md](docs/DISTRIBUTION-KIT.md) Marketplace'i, Smithery'yi ve MCP kayıtlarını kapsar.
|
|
491
|
-
|
|
492
|
-
Bulguları GitHub Code Scanning'e aktarmak için SARIF yükleyin (workflow veya job kapsamında `security-events: write` gerekir):
|
|
493
|
-
|
|
494
|
-
```yaml
|
|
495
|
-
- run: npx mjolnir-qa@3.0.0 --format sarif > mjolnir.sarif
|
|
496
|
-
continue-on-error: true
|
|
497
|
-
- uses: github/codeql-action/upload-sarif@v3
|
|
498
|
-
if: ${{ !cancelled() }}
|
|
499
|
-
with:
|
|
500
|
-
sarif_file: mjolnir.sarif
|
|
501
|
-
```
|
|
502
|
-
|
|
503
|
-
GitLab'de `--format codequality`, MR widget'ının ve diff açıklamalarının okuduğu Code Quality raporunu yazar ([docs/GITLAB-CI.md](docs/GITLAB-CI.md)). Düzenleyici ve pipeline kurulumu: [docs/SARIF-INTEGRATION.md](docs/SARIF-INTEGRATION.md).
|
|
504
|
-
|
|
505
|
-
### Değişen kapsamda atıf
|
|
506
|
-
|
|
507
|
-
```bash
|
|
508
|
-
npx mjolnir-qa@3.0.0 --scope changed
|
|
509
|
-
```
|
|
510
|
-
|
|
511
|
-
Bulgular, dalınızın eklediği satırlara **merge-base**'e göre ölçülerek atfedilir. Kapsam, tam bir taramanın keşfettiği dosya kümesinin aynısıdır (TS/JS spec'leri ve adaptör yapılandırmaları, `test_*.py`, `*Test.java`, `*Tests.cs`, `.github/workflows/*.yml`); buna commit edilmemiş ve izlenmeyen değişiklikler de eklenir, böylece commit etmeden önce de çalışır. Taban `main → master → origin/main → origin/master → origin/HEAD` sırasıyla çözülür; `--base <ref>` ile geçersiz kılabilirsiniz.
|
|
512
|
-
|
|
513
|
-
merge-base çözülemediğinde (sığ bir klon, ayrık bir HEAD, git dışında bir hedef), bulgular tüm dosyaya atfa geri döner **ve rapor bunu söyler.** Sessiz bir geri dönüş, bu aracın yakalamak için var olduğu türden bir kusur olurdu.
|
|
514
|
-
|
|
515
|
-
<br />
|
|
516
|
-
|
|
517
|
-
## Yapay zekâ ajanları
|
|
518
|
-
|
|
519
|
-
Bulgular ancak bir şey onlara göre harekete geçerse bir değer taşır.
|
|
520
|
-
|
|
521
|
-
```text
|
|
522
|
-
SCAN → EVIDENCE → HANDOFF → AGENT → RE-SCAN → PROOF
|
|
523
|
-
```
|
|
524
|
-
|
|
525
|
-
**Düzeltmeyi yapay zekâ yazar. Mjölnir onu doğrular.** Kanıt yeniden taramadan gelir, asla ajanın kendi başarı raporundan değil.
|
|
526
|
-
|
|
527
|
-
| Komut | Ajanın aldığı |
|
|
528
|
-
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
529
|
-
| `mjolnir mcp` | stdio üzerinden bir [MCP](https://modelcontextprotocol.io) sunucusu. `scan`, `explain` ve `diff` çağrılabilir araçlara dönüşür. |
|
|
530
|
-
| `mjolnir handoff` | Kaydedilmiş bir `--json` raporu deterministik bir Markdown planına dönüşür: neyin tespit edildiği, her bulgunun kanıt sınırı, neyin **değişmemesi** gerektiği ve nasıl doğrulanacağı. |
|
|
531
|
-
| `mjolnir install` | Deponuzda zaten bulunan ajan yüzeylerine yazar (`.claude/`, `.cursor/`, `.kilo/`, `AGENTS.md`), böylece ajan bitti demeden önce yeniden tarar. |
|
|
532
|
-
|
|
533
|
-
Kendi CLI'ı olan bir istemciye ekleyin:
|
|
534
|
-
|
|
535
|
-
```bash
|
|
536
|
-
claude mcp add mjolnir -- npx -y mjolnir-qa@3.0.0 mcp
|
|
537
|
-
```
|
|
538
|
-
|
|
539
|
-
Ya da `mcpServers` bloğu kabul eden herhangi bir istemciye:
|
|
540
|
-
|
|
541
|
-
```json
|
|
542
|
-
{
|
|
543
|
-
"mcpServers": {
|
|
544
|
-
"mjolnir": { "command": "npx", "args": ["-y", "mjolnir-qa@3.0.0", "mcp"] }
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
```
|
|
548
|
-
|
|
549
|
-
**Korkuluk, kolaylıktan daha önemlidir.** Bir devirdeki her bulgu kendi sınırını taşır. **E2** der ki _deterministik: konumu kontrol edin ve düzeltmeyi uygulayın_. **E1** der ki _ONAY GEREKTİRİR: gözlem tek başına kusuru kanıtlamaz_. E1'i körü körüne düzelten, bir kuralı bastıran ya da puanı yükseltmek için bir kuralı düzenleyen bir ajan, tam da bu aracın yakalamak için var olduğu şeyi yapıyordur; bu yüzden devir bunu prompt'ta, bulgunun hemen yanında söyler.
|
|
550
|
-
|
|
551
|
-
<br />
|
|
552
|
-
|
|
553
|
-
## Güven ve güvenlik
|
|
554
|
-
|
|
555
|
-
**Önce yerel, sıfır telemetri.** `src/` içinde hiçbir yerde ağ yeteneğine sahip bir API (`fetch`, `http`, `https`, `net`, `dns`, `dgram`, WebSocket) yoktur ve [`privacy-network-isolation.spec.ts`](tests/contract/privacy-network-isolation.spec.ts) biri ortaya çıkarsa derlemeyi başarısız kılar. Ayrıca `eval` ve `new Function` kullanımını da yasaklar. Güvenilmeyen kodu taramak onu asla yürütmez: statik analiz kaynak metni okur, çalıştırma analizi ise diskte zaten bulunan rapor dosyalarını ayrıştırır.
|
|
556
|
-
|
|
557
|
-
İki çekince: `npx` herhangi bir şey çalışmadan önce paketi kendisi indirir ve bu garanti üçüncü taraf eklentileri değil, `src/`'yi kapsar.
|
|
558
|
-
|
|
559
|
-
**Eklentiler korumalı alanda çalışmaz.** JS eklentileri (`mjolnir-rules/*.mjs` ya da `"plugins"` altında listelenen npm paketleri) tam Node yetkileriyle çalışır; ESLint ya da Vitest eklentileriyle aynı güven modeli. Onları yüklemek **tarama başına** açıkça seçilmelidir: `--enable-plugins` (veya `MJOLNIR_ENABLE_PLUGINS=1`) olmadan kaynakları asla yüklenmez ve stderr'deki bir bildirim nelerin atlandığını listeler. JSON kural manifestoları kod yürütmez ve core kural kimliği önekleri ayrılmıştır, böylece bir eklenti onlardan birinin kılığına giremez. Güvenlik açıklarını [SECURITY.md](SECURITY.md) üzerinden bildirin.
|
|
560
|
-
|
|
561
|
-
**Kendi üzerinde çalışır.** Bir doğrulama güven motoru, kendisi doğrulanabilir değilse hiçbir itibara sahip olamaz. Her CI çalıştırması bu depoyu, aynı çalıştırmanın ürettiği derlemeyle tarar. Kapı, error önem düzeyindeki herhangi bir bulguda ve ayrıca **kısmi** bir taramada ya da **çöken bir kuralda** başarısız olur; çünkü hiçbir şey raporlamayan yarım kalmış bir öz tarama, bu projenin yakalamak için var olduğu sahte yeşilin ta kendisidir. `mjolnir doctor` aynı çalıştırmada kural tabanını yeniden denetler (fixture güvenlik duvarı, düzey dürüstlüğü, core düzeyi üst sınırı) ve INCONCLUSIVE sonuçlu bir denetim, başarısız bir denetimle tamamen aynı şekilde başarısız olur. Her iki rapor da derleme artefaktı olarak yüklenir.
|
|
562
|
-
|
|
563
|
-
### Çıkış kodları ve makine sözleşmesi
|
|
564
|
-
|
|
565
|
-
Donmuştur; böylece üzerlerine CI mantığı kurabilirsiniz:
|
|
566
|
-
|
|
567
|
-
| Çıkış kodu | Anlamı |
|
|
568
|
-
| ---------- | ------------------------------------------------------------------------- |
|
|
569
|
-
| `0` | Temiz: kapı düzeyinde ya da üstünde bulgu yok |
|
|
570
|
-
| `1` | Kapı düzeyinde ya da üstünde bulgular |
|
|
571
|
-
| `2` | Kısmi tarama (zaman bütçesi doldu, okunamayan dosyalar). Asla engellemez. |
|
|
572
|
-
| `10` | Kullanım hatası (hatalı bayrak, eksik hedef) |
|
|
573
|
-
| `20` | Dahili hata |
|
|
574
|
-
|
|
575
|
-
`2` bilinçli olarak `0`'dan farklıdır: bitmeyen bir tarama "hiçbir şey bulmamış" değildir. Yalnızca aramayı bitirmemiştir.
|
|
576
|
-
|
|
577
|
-
Bir makinenin tükettiği her şey (MCP araç sonuçları, `--json`, SARIF 2.1), sürümlü ve **yalnızca eklemeli** bir şema (`schemaVersion: 1`, `contractVersion: 1`) altındaki tek bir kanonik sonuçtan gelir; böylece hiçbir tüketici anlamı işlenmiş metinden yeniden kurmak zorunda kalmaz. Bkz. [makine sözleşmesi](docs/machine-contract.md). Kural kimlikleri (`QA-<FAMILY>-NNN`) yayımlandıktan sonra değiştirilemez ve asla yeniden kullanılmaz.
|
|
578
|
-
|
|
579
|
-
<br />
|
|
580
|
-
|
|
581
|
-
## Mjölnir'in size söyleyemedikleri
|
|
582
|
-
|
|
583
|
-
- **Testlerinizi çalıştırmaz.** Temiz bir tarama, geçen bir test paketi demek değildir.
|
|
584
|
-
- **Bir doğrulamanın _yanlış_ olduğunu söyleyemez.** `expect(total).toBe(41)` sağlıklı görünür. Mjölnir yanlış şeyi denetleyen testleri değil, _başarısız olamayan_ testleri ve _kırmızıya dönemeyen_ pipeline'ları bulur.
|
|
585
|
-
- **İş doğruluğunu kanıtlamaz.** Buradaki hiçbir şey ürününüzün gereksinimin istediğini yaptığını söylemez.
|
|
586
|
-
- **100, iyi bir test paketinin kanıtı değildir.** Paketinizin gerçek riskinizi kapsayıp kapsamadığı ayrı bir sorudur ve bu araç onu yanıtlamaz.
|
|
587
|
-
- **79 kuraldan 5'i ölçülmüş bir orana değil, bir tahmine dayanır.** Her biri bunu kendi bulgusunda söyler.
|
|
588
|
-
- **E1, E2 değildir.** Sezgisel bulgular okunmaya değerdir, körü körüne uygulanmaya değil.
|
|
589
|
-
- **Boş bir depo `null` alır, asla 100 değil.**
|
|
590
|
-
- **Test bildirimi olmayan `*.spec.ts` adlı bir dosya kapsam sayılmaz.** Tek spec dosyaları import ya da tür içeren (sıfır `it`/`test` çağrısı) bir depo 100 değil, `null` alır.
|
|
591
|
-
|
|
592
|
-
<br />
|
|
593
|
-
|
|
594
|
-
## Belgeler
|
|
595
|
-
|
|
596
|
-
Belgelerin tamamı <https://sergey-bar.github.io/Mjolnir/> adresindeki sitede.
|
|
597
|
-
|
|
598
|
-
| Belge | İçeriği |
|
|
599
|
-
| ------------------------------------------------------ | ---------------------------------------------------------------- |
|
|
600
|
-
| [docs/SCORING.md](docs/SCORING.md) | Puan normalleştirme ve kanıt ağırlıklandırma |
|
|
601
|
-
| [docs/TERMINOLOGY.md](docs/TERMINOLOGY.md) | Kanonik sözcük dağarcığı: kavram başına tek sözcük |
|
|
602
|
-
| [docs/FP-AUDIT.md](docs/FP-AUDIT.md) | Ölçülmüş yanlış pozitif oranları ve yöntem |
|
|
603
|
-
| [docs/RULE-LIFECYCLE.md](docs/RULE-LIFECYCLE.md) | Kural durumları, düzeyler, bastırma, kullanımdan kaldırma |
|
|
604
|
-
| [docs/VERSIONING.md](docs/VERSIONING.md) | Semver politikası, donmuş yüzeyler, kullanımdan kaldırma döngüsü |
|
|
605
|
-
| [docs/machine-contract.md](docs/machine-contract.md) | Kanonik, makine tarafından okunabilir sonuç |
|
|
606
|
-
| [docs/SARIF-INTEGRATION.md](docs/SARIF-INTEGRATION.md) | SARIF çıktısı ve düzenleyici ya da CI kurulumu |
|
|
607
|
-
| [docs/GITLAB-CI.md](docs/GITLAB-CI.md) | GitLab: Code Quality raporu, MR tarifi, kapı |
|
|
608
|
-
| [docs/rules/](docs/rules/) | Kural başına üretilmiş katalog |
|
|
609
|
-
| [CONTRIBUTING.md](CONTRIBUTING.md) | Geliştirme ortamı ve katkı iş akışı |
|
|
610
|
-
| [SUPPORT.md](SUPPORT.md) | Nerede sorulur, bildirilir ve yardım alınır |
|
|
611
|
-
| [SECURITY.md](SECURITY.md) | Güvenlik açığı bildirimi |
|
|
612
|
-
| [CHANGELOG.md](CHANGELOG.md) | Sürüm geçmişi |
|
|
613
|
-
|
|
614
|
-
### Durum
|
|
615
|
-
|
|
616
|
-
**Sürüm 1.** JSON şeması ve çıkış kodları donmuş sözleşmelerdir. TypeScript ve Python en geniş ölçülmüş kapsama sahiptir. Java ve C# daha yenidir; onları [olgunluk tablosu](https://sergey-bar.github.io/Mjolnir/reference/rule-lifecycle) üzerinden değerlendirin. Sırada ne olduğu, uydurma tarihler olmadan: [herkese açık yol haritası](https://sergey-bar.github.io/Mjolnir/reference/roadmap).
|
|
617
|
-
|
|
618
|
-
### Katkıda bulunma
|
|
619
|
-
|
|
620
|
-
Yeni kurallar en kolay ilk katkıdır. Tek bir komut, kuralı must-fire **ve** must-not-fire fixture'larıyla birlikte iskelet olarak oluşturur. Üretilen kural, gerçek tespit yazılana kadar kendi fixture'larında bilerek başarısız olur; çünkü yayımlanan bir taslak, kimsenin ölçmediği bir kuraldır:
|
|
621
|
-
|
|
622
|
-
```bash
|
|
623
|
-
mjolnir create-rule QA-PW-140 --title "Screenshot without diff bound"
|
|
624
|
-
```
|
|
625
|
-
|
|
626
|
-
Geliştirme ortamı, kalıcı kapı komutları ve anti-creep ile fixture güvenlik duvarı yasaları [CONTRIBUTING.md](CONTRIBUTING.md) içindedir.
|
|
627
|
-
|
|
628
|
-
<br />
|
|
629
|
-
|
|
630
|
-
<div align="center">
|
|
631
|
-
|
|
632
|
-
<img src="assets/readme/closing.svg" alt="Deponuzda çalıştırın." width="100%" />
|
|
633
|
-
|
|
634
|
-
```bash
|
|
635
|
-
npx mjolnir-qa@3.0.0
|
|
636
|
-
```
|
|
637
|
-
|
|
638
|
-
[Rehberi okuyun](https://sergey-bar.github.io/Mjolnir/guide/getting-started) · [Belge sitesi](https://sergey-bar.github.io/Mjolnir/) · [npm](https://www.npmjs.com/package/mjolnir-qa)
|
|
639
|
-
|
|
640
|
-
<br />
|
|
641
|
-
|
|
642
|
-
Testlerin geçip geçmediğini sormayın.<br />
|
|
643
|
-
Kanıtın, onların güveni hak ettiğini kanıtlayıp kanıtlamadığını sorun.
|
|
644
|
-
|
|
645
|
-
<sub>[Sergey Bar](https://www.linkedin.com/in/sergeybar/) tarafından geliştirildi · MIT lisanslı</sub>
|
|
646
|
-
|
|
647
|
-
</div>
|