yowtf 0.1.0 → 0.1.1
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/LICENSE +20 -20
- package/README.md +227 -1477
- package/dist/{chunk-2PCP3AKH.js → chunk-R4XNB67V.js} +67 -2
- package/dist/chunk-R4XNB67V.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/index.d.ts +29 -2
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-2PCP3AKH.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,1605 +1,355 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="images/white-logo.png" alt="YOWTF — Your Operating Workstation Trouble Finder" width="
|
|
2
|
+
<img src="images/white-logo.png" alt="YOWTF — Your Operating Workstation Trouble Finder" width="460">
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
6
|
-
|
|
6
|
+
<strong>A local-first, read-only developer workstation and project health diagnostic CLI.</strong><br>
|
|
7
|
+
<em>"Yo, WTF is happening?"</em>
|
|
7
8
|
</p>
|
|
8
9
|
|
|
9
|
-
>
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
No telemetry.
|
|
16
|
-
No cloud dashboard.
|
|
17
|
-
No AI required.
|
|
18
|
-
No automatic fixes.
|
|
19
|
-
No modifying your project.
|
|
20
|
-
|
|
21
|
-
Just run it.
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
yowtf
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Why YOWTF?
|
|
30
|
-
|
|
31
|
-
Every developer eventually hits one of these:
|
|
32
|
-
|
|
33
|
-
- "Why is Node using the wrong version?"
|
|
34
|
-
- "Why is this port already occupied?"
|
|
35
|
-
- "Why does this project work on my machine but not theirs?"
|
|
36
|
-
- "Why is my disk suddenly full?"
|
|
37
|
-
- "Which Node/Python/Git installation is actually being used?"
|
|
38
|
-
- "Why does this command work in one terminal but not another?"
|
|
39
|
-
- "Why is this project using a different package manager?"
|
|
40
|
-
- "Why did this build suddenly become painfully slow?"
|
|
41
|
-
- "What the hell is wrong with this machine?"
|
|
42
|
-
|
|
43
|
-
Usually, the answer is buried somewhere between:
|
|
44
|
-
|
|
45
|
-
```text
|
|
46
|
-
PATH
|
|
47
|
-
environment variables
|
|
48
|
-
runtime versions
|
|
49
|
-
duplicate installations
|
|
50
|
-
ports
|
|
51
|
-
processes
|
|
52
|
-
disk usage
|
|
53
|
-
project configuration
|
|
54
|
-
dependency metadata
|
|
55
|
-
lockfiles
|
|
56
|
-
Git state
|
|
57
|
-
developer caches
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
YOWTF brings those signals together into one deterministic diagnostic workflow.
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
# ✨ What YOWTF Does
|
|
65
|
-
|
|
66
|
-
YOWTF follows a structured diagnostic pipeline:
|
|
67
|
-
|
|
68
|
-
```text
|
|
69
|
-
DISCOVER
|
|
70
|
-
↓
|
|
71
|
-
COLLECT
|
|
72
|
-
↓
|
|
73
|
-
DETECT
|
|
74
|
-
↓
|
|
75
|
-
EVALUATE
|
|
76
|
-
↓
|
|
77
|
-
SCORE
|
|
78
|
-
↓
|
|
79
|
-
EXPLAIN
|
|
80
|
-
↓
|
|
81
|
-
REPORT
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
It doesn't just dump system information.
|
|
85
|
-
|
|
86
|
-
It turns collected evidence into **findings**.
|
|
87
|
-
|
|
88
|
-
Each finding can contain:
|
|
89
|
-
|
|
90
|
-
- rule ID
|
|
91
|
-
- category
|
|
92
|
-
- status
|
|
93
|
-
- severity
|
|
94
|
-
- confidence
|
|
95
|
-
- explanation
|
|
96
|
-
- evidence
|
|
97
|
-
- impact
|
|
98
|
-
- remediation hint
|
|
99
|
-
|
|
100
|
-
The goal is simple:
|
|
101
|
-
|
|
102
|
-
> **Don't just tell the developer what exists. Tell them what deserves attention and why.**
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
# 🚀 Features
|
|
107
|
-
|
|
108
|
-
## 🖥️ Workstation Diagnostics
|
|
109
|
-
|
|
110
|
-
Inspect developer-facing system health:
|
|
111
|
-
|
|
112
|
-
- operating system
|
|
113
|
-
- architecture
|
|
114
|
-
- memory
|
|
115
|
-
- CPU pressure
|
|
116
|
-
- uptime
|
|
117
|
-
- disk space
|
|
118
|
-
- developer storage
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## ⚙️ Process Diagnostics
|
|
123
|
-
|
|
124
|
-
Identify potentially problematic development processes:
|
|
125
|
-
|
|
126
|
-
- high CPU processes
|
|
127
|
-
- high memory processes
|
|
128
|
-
- zombie/defunct processes where supported
|
|
129
|
-
- suspicious duplicate development processes
|
|
130
|
-
|
|
131
|
-
YOWTF **never kills processes**.
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## 🔌 Port Diagnostics
|
|
136
|
-
|
|
137
|
-
Understand what is listening on your machine:
|
|
138
|
-
|
|
139
|
-
- development port conflicts
|
|
140
|
-
- duplicate listeners
|
|
141
|
-
- unexpected development-service exposure
|
|
142
|
-
- ports whose owning process cannot be identified
|
|
143
|
-
|
|
144
|
-
YOWTF does not terminate anything.
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## 🌐 Network Diagnostics
|
|
149
|
-
|
|
150
|
-
Inspect local network configuration relevant to development:
|
|
151
|
-
|
|
152
|
-
- network interface availability
|
|
153
|
-
- DNS configuration
|
|
154
|
-
- proxy configuration
|
|
155
|
-
- route information
|
|
156
|
-
|
|
157
|
-
YOWTF does not require a remote monitoring service.
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
## 🔐 Environment Diagnostics
|
|
162
|
-
|
|
163
|
-
Inspect environment metadata without dumping sensitive values.
|
|
164
|
-
|
|
165
|
-
Examples:
|
|
166
|
-
|
|
167
|
-
- empty PATH entries
|
|
168
|
-
- duplicate PATH entries
|
|
169
|
-
- shell/PATH mismatches
|
|
170
|
-
- suspicious secret-like environment variable names
|
|
171
|
-
|
|
172
|
-
### Privacy by default
|
|
173
|
-
|
|
174
|
-
YOWTF does **not** need to print:
|
|
175
|
-
|
|
176
|
-
```text
|
|
177
|
-
API_KEY=...
|
|
178
|
-
DATABASE_PASSWORD=...
|
|
179
|
-
TOKEN=...
|
|
180
|
-
SECRET=...
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
When environment inspection is required, YOWTF works primarily with **names and metadata**, not secret values.
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
## 🧩 Runtime Diagnostics
|
|
188
|
-
|
|
189
|
-
Detect runtime-related problems across applicable projects:
|
|
190
|
-
|
|
191
|
-
- Node.js
|
|
192
|
-
- Python
|
|
193
|
-
- Java
|
|
194
|
-
- other supported runtime contexts defined by the V1 rule set
|
|
195
|
-
|
|
196
|
-
Examples:
|
|
197
|
-
|
|
198
|
-
```text
|
|
199
|
-
runtime.version.mismatch
|
|
200
|
-
runtime.node.unpinned
|
|
201
|
-
runtime.python.unpinned
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## 🛠️ Developer Tool Diagnostics
|
|
207
|
-
|
|
208
|
-
Inspect important developer tooling:
|
|
209
|
-
|
|
210
|
-
- Git
|
|
211
|
-
- package managers
|
|
212
|
-
- Docker when relevant
|
|
213
|
-
- executable resolution
|
|
214
|
-
- tool conflicts
|
|
215
|
-
|
|
216
|
-
This is particularly useful when your machine has accumulated multiple installations over time.
|
|
217
|
-
|
|
218
|
-
---
|
|
219
|
-
|
|
220
|
-
## 🛣️ PATH Diagnostics
|
|
221
|
-
|
|
222
|
-
PATH problems are classic developer-machine problems.
|
|
223
|
-
|
|
224
|
-
YOWTF can identify:
|
|
225
|
-
|
|
226
|
-
- missing expected executables
|
|
227
|
-
- multiple executable installations
|
|
228
|
-
- invalid PATH entries
|
|
229
|
-
- PATH-order shadowing
|
|
230
|
-
|
|
231
|
-
For example:
|
|
232
|
-
|
|
233
|
-
```text
|
|
234
|
-
node
|
|
235
|
-
├── C:\Program Files\nodejs\node.exe
|
|
236
|
-
└── C:\Users\you\AppData\Roaming\npm\node.exe
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
If PATH ordering means the wrong executable wins, YOWTF can surface that relationship.
|
|
240
|
-
|
|
241
|
-
---
|
|
242
|
-
|
|
243
|
-
## 📦 Project Diagnostics
|
|
244
|
-
|
|
245
|
-
YOWTF can inspect a project for issues involving:
|
|
246
|
-
|
|
247
|
-
- project manifests
|
|
248
|
-
- lockfiles
|
|
249
|
-
- runtime policies
|
|
250
|
-
- project-root ambiguity
|
|
251
|
-
- package-manager expectations
|
|
252
|
-
- environment configuration
|
|
253
|
-
|
|
254
|
-
Run against the current directory:
|
|
255
|
-
|
|
256
|
-
```bash
|
|
257
|
-
yowtf project
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
Or explicitly target another directory:
|
|
261
|
-
|
|
262
|
-
```bash
|
|
263
|
-
yowtf --path ./my-project project
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
---
|
|
267
|
-
|
|
268
|
-
## 📚 Dependency Diagnostics
|
|
269
|
-
|
|
270
|
-
YOWTF can detect problems such as:
|
|
271
|
-
|
|
272
|
-
- missing lockfiles
|
|
273
|
-
- dependency metadata mismatches
|
|
274
|
-
- package-manager mismatches
|
|
275
|
-
- inconsistent local dependency state
|
|
276
|
-
|
|
277
|
-
YOWTF does **not** reinstall dependencies for you.
|
|
278
|
-
|
|
279
|
-
---
|
|
280
|
-
|
|
281
|
-
## 🌿 Git Diagnostics
|
|
282
|
-
|
|
283
|
-
Inspect local Git state:
|
|
284
|
-
|
|
285
|
-
- repository availability
|
|
286
|
-
- dirty working tree
|
|
287
|
-
- untracked files
|
|
288
|
-
- branch divergence
|
|
289
|
-
|
|
290
|
-
YOWTF does not:
|
|
291
|
-
|
|
292
|
-
```text
|
|
293
|
-
commit
|
|
294
|
-
reset
|
|
295
|
-
stash
|
|
296
|
-
checkout
|
|
297
|
-
pull
|
|
298
|
-
push
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
It observes.
|
|
302
|
-
|
|
303
|
-
---
|
|
304
|
-
|
|
305
|
-
## 🧹 Cache & Storage Diagnostics
|
|
306
|
-
|
|
307
|
-
Find developer storage pressure caused by recognized:
|
|
308
|
-
|
|
309
|
-
- caches
|
|
310
|
-
- build artifacts
|
|
311
|
-
- dependency-related directories
|
|
312
|
-
- other supported developer storage locations
|
|
313
|
-
|
|
314
|
-
The `clean` command is intentionally diagnostic.
|
|
315
|
-
|
|
316
|
-
It helps you decide what is safe to review.
|
|
317
|
-
|
|
318
|
-
It does **not** silently delete things.
|
|
319
|
-
|
|
320
|
-
---
|
|
321
|
-
|
|
322
|
-
# 📊 Health Score
|
|
323
|
-
|
|
324
|
-
YOWTF produces a health score from:
|
|
325
|
-
|
|
326
|
-
```text
|
|
327
|
-
0 → 100
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
Higher is better.
|
|
331
|
-
|
|
332
|
-
The V1 scoring model starts at:
|
|
333
|
-
|
|
334
|
-
```text
|
|
335
|
-
100
|
|
336
|
-
```
|
|
337
|
-
|
|
338
|
-
and applies penalties based on finding severity.
|
|
339
|
-
|
|
340
|
-
| Severity | Penalty |
|
|
341
|
-
| -------- | ------: |
|
|
342
|
-
| CRITICAL | 25 |
|
|
343
|
-
| HIGH | 15 |
|
|
344
|
-
| MEDIUM | 8 |
|
|
345
|
-
| LOW | 3 |
|
|
346
|
-
| INFO | 0 |
|
|
347
|
-
|
|
348
|
-
A `FAIL` finding receives its full severity penalty.
|
|
349
|
-
|
|
350
|
-
A `WARN` finding receives 50% of its severity penalty.
|
|
351
|
-
|
|
352
|
-
`PASS`, `SKIPPED`, `UNAVAILABLE`, and `ERROR` findings do not directly reduce the score.
|
|
353
|
-
|
|
354
|
-
The score is clamped to:
|
|
355
|
-
|
|
356
|
-
```text
|
|
357
|
-
0–100
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
### Score bands
|
|
361
|
-
|
|
362
|
-
| Score | Health |
|
|
363
|
-
| -----: | ------------ |
|
|
364
|
-
| 90–100 | 🟢 EXCELLENT |
|
|
365
|
-
| 75–89 | GOOD |
|
|
366
|
-
| 60–74 | FAIR |
|
|
367
|
-
| 40–59 | POOR |
|
|
368
|
-
| 0–39 | CRITICAL |
|
|
369
|
-
|
|
370
|
-
### Important
|
|
371
|
-
|
|
372
|
-
The score is **not** a security rating.
|
|
373
|
-
|
|
374
|
-
It is a deterministic diagnostic health indicator for the scope YOWTF evaluated.
|
|
375
|
-
|
|
376
|
-
Coverage and score are separate concepts.
|
|
377
|
-
|
|
378
|
-
A partial scan may still have a valid score for its evaluated scope.
|
|
379
|
-
|
|
380
|
-
---
|
|
381
|
-
|
|
382
|
-
# 🔎 Findings
|
|
383
|
-
|
|
384
|
-
A typical diagnostic finding is conceptually represented as:
|
|
385
|
-
|
|
386
|
-
```text
|
|
387
|
-
Rule
|
|
388
|
-
├── ID
|
|
389
|
-
├── Category
|
|
390
|
-
├── Status
|
|
391
|
-
├── Severity
|
|
392
|
-
├── Confidence
|
|
393
|
-
├── Title
|
|
394
|
-
├── Summary
|
|
395
|
-
├── Evidence
|
|
396
|
-
├── Impact
|
|
397
|
-
└── Remediation Hint
|
|
398
|
-
```
|
|
399
|
-
|
|
400
|
-
Example:
|
|
401
|
-
|
|
402
|
-
```text
|
|
403
|
-
[HIGH] runtime.version.mismatch
|
|
404
|
-
|
|
405
|
-
Node.js 18.x is active, but the project requires Node.js >=20.
|
|
406
|
-
|
|
407
|
-
Why it matters:
|
|
408
|
-
The project may fail to build or behave differently from
|
|
409
|
-
environments using the required runtime.
|
|
410
|
-
|
|
411
|
-
What to do:
|
|
412
|
-
Use the project's documented Node.js version.
|
|
413
|
-
```
|
|
414
|
-
|
|
415
|
-
The exact terminal presentation is defined by the CLI/reporting specifications.
|
|
416
|
-
|
|
417
|
-
---
|
|
418
|
-
|
|
419
|
-
# 🧠 Deterministic by Design
|
|
420
|
-
|
|
421
|
-
YOWTF does not ask an AI model:
|
|
422
|
-
|
|
423
|
-
> "Does this machine look healthy?"
|
|
424
|
-
|
|
425
|
-
The diagnostic engine uses explicit rules.
|
|
426
|
-
|
|
427
|
-
That means the same evidence should produce the same result.
|
|
428
|
-
|
|
429
|
-
```text
|
|
430
|
-
Evidence
|
|
431
|
-
↓
|
|
432
|
-
Rule
|
|
433
|
-
↓
|
|
434
|
-
Finding
|
|
435
|
-
↓
|
|
436
|
-
Score
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
No hidden model.
|
|
440
|
-
|
|
441
|
-
No probabilistic health score.
|
|
442
|
-
|
|
443
|
-
No remote recommendation engine.
|
|
444
|
-
|
|
445
|
-
---
|
|
446
|
-
|
|
447
|
-
# 🔒 Privacy
|
|
448
|
-
|
|
449
|
-
YOWTF is designed around data minimization.
|
|
450
|
-
|
|
451
|
-
### By default
|
|
452
|
-
|
|
453
|
-
YOWTF:
|
|
454
|
-
|
|
455
|
-
- runs locally
|
|
456
|
-
- does not require an account
|
|
457
|
-
- does not require a backend
|
|
458
|
-
- does not send telemetry
|
|
459
|
-
- does not upload scan results
|
|
460
|
-
- does not require a cloud dashboard
|
|
461
|
-
- does not intentionally expose environment secret values
|
|
462
|
-
|
|
463
|
-
### YOWTF does not silently collect:
|
|
464
|
-
|
|
465
|
-
```text
|
|
466
|
-
telemetry
|
|
467
|
-
analytics
|
|
468
|
-
usage tracking
|
|
469
|
-
cloud diagnostics
|
|
470
|
-
remote machine inventory
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
The product is intentionally local-first.
|
|
474
|
-
|
|
475
|
-
---
|
|
476
|
-
|
|
477
|
-
# 🧱 Read-Only by Default
|
|
478
|
-
|
|
479
|
-
YOWTF is a diagnostic tool, not a repair tool.
|
|
480
|
-
|
|
481
|
-
It does not automatically:
|
|
482
|
-
|
|
483
|
-
```text
|
|
484
|
-
delete files
|
|
485
|
-
install software
|
|
486
|
-
uninstall software
|
|
487
|
-
modify PATH
|
|
488
|
-
modify environment variables
|
|
489
|
-
kill processes
|
|
490
|
-
modify project files
|
|
491
|
-
modify dependencies
|
|
492
|
-
modify Git state
|
|
493
|
-
commit changes
|
|
494
|
-
reset repositories
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
If YOWTF tells you:
|
|
498
|
-
|
|
499
|
-
```text
|
|
500
|
-
Your cache is huge.
|
|
501
|
-
```
|
|
502
|
-
|
|
503
|
-
it doesn't immediately delete the cache.
|
|
504
|
-
|
|
505
|
-
If it tells you:
|
|
506
|
-
|
|
507
|
-
```text
|
|
508
|
-
Your Node version is wrong.
|
|
509
|
-
```
|
|
510
|
-
|
|
511
|
-
it doesn't change your Node installation.
|
|
512
|
-
|
|
513
|
-
You stay in control.
|
|
514
|
-
|
|
515
|
-
---
|
|
516
|
-
|
|
517
|
-
# 🌍 Cross-Platform
|
|
518
|
-
|
|
519
|
-
YOWTF is designed for multi-platform developer workstations:
|
|
520
|
-
|
|
521
|
-
- **Windows** (native PowerShell and cmd command execution)
|
|
522
|
-
- **macOS** (Darwin process and system introspection)
|
|
523
|
-
- **Linux** (POSIX and `/proc`-compatible metric gathering)
|
|
524
|
-
|
|
525
|
-
Not every operating system exposes identical diagnostic APIs or system utilities. YOWTF therefore distinguishes between:
|
|
526
|
-
|
|
527
|
-
```text
|
|
528
|
-
PASS Condition verified healthy
|
|
529
|
-
FAIL Definite issue identified
|
|
530
|
-
WARN Condition requires developer attention
|
|
531
|
-
SKIPPED Diagnostic not applicable to this project or platform
|
|
532
|
-
UNAVAILABLE Platform metric or tool not available in this environment
|
|
533
|
-
ERROR Unexpected internal error during individual rule evaluation
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
An unavailable platform capability is never treated as an execution failure. On unsupported platforms (e.g. BSD or Solaris), YOWTF gracefully skips platform-specific collectors and executes generic project diagnostics safely.
|
|
537
|
-
|
|
538
|
-
---
|
|
539
|
-
|
|
540
|
-
# 📦 Installation
|
|
541
|
-
|
|
542
|
-
YOWTF is distributed through npm.
|
|
543
|
-
|
|
544
|
-
### Run instantly with npx
|
|
545
|
-
|
|
546
|
-
You can run YOWTF without installing it globally:
|
|
547
|
-
|
|
548
|
-
```bash
|
|
549
|
-
npx yowtf
|
|
550
|
-
```
|
|
551
|
-
|
|
552
|
-
### Or install globally
|
|
553
|
-
|
|
554
|
-
With npm:
|
|
555
|
-
|
|
556
|
-
```bash
|
|
557
|
-
npm install -g yowtf
|
|
558
|
-
```
|
|
559
|
-
|
|
560
|
-
Or with pnpm:
|
|
561
|
-
|
|
562
|
-
```bash
|
|
563
|
-
pnpm add -g yowtf
|
|
564
|
-
```
|
|
565
|
-
|
|
566
|
-
> **Note:** Public npm publication will occur in Phase 11. Until published to the npm registry, you can clone and run YOWTF locally from source (see [Development](#-development)).
|
|
567
|
-
|
|
568
|
-
Check the installed version:
|
|
569
|
-
|
|
570
|
-
```bash
|
|
571
|
-
yowtf --version
|
|
572
|
-
```
|
|
573
|
-
|
|
574
|
-
---
|
|
575
|
-
|
|
576
|
-
# ⚡ Quick Start
|
|
577
|
-
|
|
578
|
-
From a project directory:
|
|
579
|
-
|
|
580
|
-
```bash
|
|
581
|
-
yowtf
|
|
582
|
-
```
|
|
583
|
-
|
|
584
|
-
For the full health-oriented diagnostic workflow:
|
|
585
|
-
|
|
586
|
-
```bash
|
|
587
|
-
yowtf doctor
|
|
588
|
-
```
|
|
589
|
-
|
|
590
|
-
Check the score:
|
|
591
|
-
|
|
592
|
-
```bash
|
|
593
|
-
yowtf score
|
|
594
|
-
```
|
|
595
|
-
|
|
596
|
-
Understand the findings:
|
|
597
|
-
|
|
598
|
-
```bash
|
|
599
|
-
yowtf explain
|
|
600
|
-
```
|
|
601
|
-
|
|
602
|
-
Inspect a specific area:
|
|
603
|
-
|
|
604
|
-
```bash
|
|
605
|
-
yowtf runtimes
|
|
606
|
-
yowtf ports
|
|
607
|
-
yowtf processes
|
|
608
|
-
yowtf env
|
|
609
|
-
yowtf git
|
|
610
|
-
yowtf deps
|
|
611
|
-
```
|
|
612
|
-
|
|
613
|
-
---
|
|
614
|
-
|
|
615
|
-
# 🧰 Commands
|
|
616
|
-
|
|
617
|
-
YOWTF V1 exposes 20 canonical entry points (default full scan + 19 focused subcommands):
|
|
618
|
-
|
|
619
|
-
```text
|
|
620
|
-
yowtf
|
|
621
|
-
yowtf doctor
|
|
622
|
-
yowtf score
|
|
623
|
-
yowtf explain
|
|
624
|
-
|
|
625
|
-
yowtf system
|
|
626
|
-
yowtf disk
|
|
627
|
-
yowtf processes
|
|
628
|
-
yowtf ports
|
|
629
|
-
yowtf network
|
|
630
|
-
yowtf env
|
|
631
|
-
yowtf runtimes
|
|
632
|
-
yowtf tools
|
|
633
|
-
yowtf paths
|
|
634
|
-
yowtf versions
|
|
635
|
-
|
|
636
|
-
yowtf project
|
|
637
|
-
yowtf deps
|
|
638
|
-
yowtf git
|
|
639
|
-
yowtf config
|
|
640
|
-
|
|
641
|
-
yowtf caches
|
|
642
|
-
yowtf clean
|
|
643
|
-
```
|
|
644
|
-
|
|
645
|
-
---
|
|
646
|
-
|
|
647
|
-
# 📖 Command Overview
|
|
648
|
-
|
|
649
|
-
| Command | Category | Purpose |
|
|
650
|
-
| :---------------- | :---------- | :----------------------------------------------------------------------------------- |
|
|
651
|
-
| `yowtf` | Core | Full workstation and project diagnostic scan |
|
|
652
|
-
| `yowtf doctor` | Core | Health-oriented diagnostic scan highlighting issues requiring attention |
|
|
653
|
-
| `yowtf score` | Core | Calculate and display the 0–100 workstation/project health score |
|
|
654
|
-
| `yowtf explain` | Core | Provide detailed explanations and next steps for detected findings |
|
|
655
|
-
| `yowtf system` | Workstation | Inspect OS, CPU architecture, memory pressure, and system uptime |
|
|
656
|
-
| `yowtf disk` | Workstation | Inspect disk space, storage pressure, and volume limits |
|
|
657
|
-
| `yowtf processes` | Workstation | Detect process resource hogs and duplicate dev processes (read-only) |
|
|
658
|
-
| `yowtf ports` | Workstation | Detect development port conflicts and listening sockets (read-only) |
|
|
659
|
-
| `yowtf network` | Workstation | Inspect network interfaces, DNS configuration, and proxy settings |
|
|
660
|
-
| `yowtf env` | Environment | Inspect environment variables, PATH entries, and configuration metadata safely |
|
|
661
|
-
| `yowtf runtimes` | Environment | Inspect installed and active runtimes (Node.js, Python, Java, etc.) |
|
|
662
|
-
| `yowtf tools` | Environment | Inspect developer tools (Git, package managers, Docker, etc.) |
|
|
663
|
-
| `yowtf paths` | Environment | Detect PATH-order shadowing, empty entries, and executable conflicts |
|
|
664
|
-
| `yowtf versions` | Environment | Diagnose version conflicts and requirement mismatches |
|
|
665
|
-
| `yowtf project` | Project | Diagnose project type, manifest health, and configuration |
|
|
666
|
-
| `yowtf deps` | Project | Diagnose project dependency health, lockfiles, and package manager consistency |
|
|
667
|
-
| `yowtf git` | Project | Inspect Git repository health, branch status, and working tree (read-only) |
|
|
668
|
-
| `yowtf config` | Project | Inspect project configuration files and environment definitions |
|
|
669
|
-
| `yowtf caches` | Maintenance | Identify developer caches and large storage consumers (read-only) |
|
|
670
|
-
| `yowtf clean` | Maintenance | Diagnostic cleanup candidate finder; `--preview` reports candidates without deleting |
|
|
671
|
-
|
|
672
|
-
> **Important:** `yowtf clean` (and `yowtf clean --preview`) is **strictly diagnostic**. It reports identified cleanup candidates and estimated sizes. It **never deletes any files**.
|
|
673
|
-
|
|
674
|
-
---
|
|
675
|
-
|
|
676
|
-
# 🎛️ Global Options
|
|
677
|
-
|
|
678
|
-
All commands support the documented global options:
|
|
679
|
-
|
|
680
|
-
| Option | Purpose | Description |
|
|
681
|
-
| :-------------- | :--------------- | :-------------------------------------------------------------------------- |
|
|
682
|
-
| `-h, --help` | Help | Display help and usage information for YOWTF or a subcommand |
|
|
683
|
-
| `-V, --version` | Version | Display current version number |
|
|
684
|
-
| `--verbose` | Verbose mode | Enable detailed diagnostic output (without exposing secrets) |
|
|
685
|
-
| `--no-color` | Color toggle | Disable ANSI terminal colors for raw text pipelines |
|
|
686
|
-
| `--json` | Machine output | Output pure machine-readable JSON (suppresses spinners and decorations) |
|
|
687
|
-
| `--quiet` | Quiet mode | Reduce output noise; show only essential findings and summaries |
|
|
688
|
-
| `--path <dir>` | Target directory | Target a specific project directory (defaults to current working directory) |
|
|
689
|
-
|
|
690
|
-
### Examples
|
|
691
|
-
|
|
692
|
-
JSON output:
|
|
693
|
-
|
|
694
|
-
```bash
|
|
695
|
-
yowtf --json
|
|
696
|
-
```
|
|
697
|
-
|
|
698
|
-
Verbose output:
|
|
699
|
-
|
|
700
|
-
```bash
|
|
701
|
-
yowtf --verbose
|
|
702
|
-
```
|
|
703
|
-
|
|
704
|
-
Disable colors:
|
|
705
|
-
|
|
706
|
-
```bash
|
|
707
|
-
yowtf --no-color
|
|
708
|
-
```
|
|
709
|
-
|
|
710
|
-
Quiet mode:
|
|
711
|
-
|
|
712
|
-
```bash
|
|
713
|
-
yowtf --quiet
|
|
714
|
-
```
|
|
715
|
-
|
|
716
|
-
Analyze another project:
|
|
717
|
-
|
|
718
|
-
```bash
|
|
719
|
-
yowtf --path ./some-project
|
|
720
|
-
```
|
|
721
|
-
|
|
722
|
-
---
|
|
723
|
-
|
|
724
|
-
# 🤖 JSON Output
|
|
725
|
-
|
|
726
|
-
YOWTF supports pure machine-readable output:
|
|
727
|
-
|
|
728
|
-
```bash
|
|
729
|
-
yowtf --json
|
|
730
|
-
```
|
|
731
|
-
|
|
732
|
-
When `--json` is enabled:
|
|
733
|
-
|
|
734
|
-
- Interactive spinners and progress bars are disabled.
|
|
735
|
-
- ANSI color formatting sequences are suppressed.
|
|
736
|
-
- Informational banners and decoration are omitted.
|
|
737
|
-
- The output can be piped directly to tools like `jq` or captured by CI automation.
|
|
738
|
-
|
|
739
|
-
---
|
|
740
|
-
|
|
741
|
-
# 🚦 Exit Codes
|
|
742
|
-
|
|
743
|
-
YOWTF defines strict, predictable exit code semantics:
|
|
744
|
-
|
|
745
|
-
| Exit Code | Classification | Meaning |
|
|
746
|
-
| :-------: | :---------------------- | :-------------------------------------------------------------------------------------------------------------------------------- |
|
|
747
|
-
| `0` | **Success** | Successful command execution. Findings with `FAIL`, `WARN`, or `PASS` status are valid diagnostic results and exit with code `0`. |
|
|
748
|
-
| `1` | **Application Failure** | Internal or fatal application error preventing completion of the diagnostic run. |
|
|
749
|
-
| `2` | **CLI Usage Error** | Unknown command, unrecognized option, missing required argument, or inaccessible project directory path. |
|
|
750
|
-
|
|
751
|
-
---
|
|
752
|
-
|
|
753
|
-
# 🧪 Example Workflow
|
|
754
|
-
|
|
755
|
-
Imagine a project requiring Node.js 20.
|
|
756
|
-
|
|
757
|
-
Your machine resolves:
|
|
758
|
-
|
|
759
|
-
```text
|
|
760
|
-
Node.js 18.20.x
|
|
761
|
-
```
|
|
762
|
-
|
|
763
|
-
YOWTF might identify:
|
|
764
|
-
|
|
765
|
-
```text
|
|
766
|
-
runtime.version.mismatch
|
|
767
|
-
```
|
|
768
|
-
|
|
769
|
-
and explain:
|
|
770
|
-
|
|
771
|
-
```text
|
|
772
|
-
Project requirement:
|
|
773
|
-
Node.js >= 20
|
|
774
|
-
|
|
775
|
-
Resolved runtime:
|
|
776
|
-
Node.js 18.20.x
|
|
777
|
-
|
|
778
|
-
Impact:
|
|
779
|
-
The project may fail to build or behave differently
|
|
780
|
-
from environments using the required runtime.
|
|
781
|
-
```
|
|
782
|
-
|
|
783
|
-
Instead of blindly changing your environment, YOWTF gives you enough evidence to investigate.
|
|
784
|
-
|
|
785
|
-
---
|
|
786
|
-
|
|
787
|
-
# 🧩 V1 Rule Catalogue
|
|
788
|
-
|
|
789
|
-
YOWTF V1 defines **60 diagnostic rules** across 15 categories.
|
|
790
|
-
|
|
791
|
-
```text
|
|
792
|
-
System
|
|
793
|
-
Disk
|
|
794
|
-
Processes
|
|
795
|
-
Ports
|
|
796
|
-
Network
|
|
797
|
-
Environment
|
|
798
|
-
Runtimes
|
|
799
|
-
Tools
|
|
800
|
-
Paths
|
|
801
|
-
Versions
|
|
802
|
-
Project
|
|
803
|
-
Dependencies
|
|
804
|
-
Git
|
|
805
|
-
Configuration
|
|
806
|
-
Caches
|
|
807
|
-
```
|
|
808
|
-
|
|
809
|
-
Examples include:
|
|
810
|
-
|
|
811
|
-
```text
|
|
812
|
-
system.memory.pressure
|
|
813
|
-
disk.space.low
|
|
814
|
-
process.resource.hog
|
|
815
|
-
port.development.conflict
|
|
816
|
-
environment.path.empty-entry
|
|
817
|
-
runtime.node.unpinned
|
|
818
|
-
tool.executable.shadowing
|
|
819
|
-
path.order.shadowing
|
|
820
|
-
version.runtime.conflict
|
|
821
|
-
project.lockfile.missing
|
|
822
|
-
dependency.lockfile.mismatch
|
|
823
|
-
git.working-tree.dirty
|
|
824
|
-
config.required.value.missing
|
|
825
|
-
cache.storage.large
|
|
826
|
-
```
|
|
827
|
-
|
|
828
|
-
The complete authoritative rule inventory is maintained in:
|
|
829
|
-
|
|
830
|
-
```text
|
|
831
|
-
docs/RULE-CATALOGUE.md
|
|
832
|
-
```
|
|
833
|
-
|
|
834
|
-
---
|
|
835
|
-
|
|
836
|
-
# 🏗️ Architecture
|
|
837
|
-
|
|
838
|
-
YOWTF is structured as a layered diagnostic system.
|
|
839
|
-
|
|
840
|
-
```text
|
|
841
|
-
┌──────────────────────────────┐
|
|
842
|
-
│ CLI │
|
|
843
|
-
├──────────────────────────────┤
|
|
844
|
-
│ Application │
|
|
845
|
-
├──────────────────────────────┤
|
|
846
|
-
│ Domain │
|
|
847
|
-
├──────────────────────────────┤
|
|
848
|
-
│ Collection │
|
|
849
|
-
├──────────────────────────────┤
|
|
850
|
-
│ Platform │
|
|
851
|
-
├──────────────────────────────┤
|
|
852
|
-
│ Detection │
|
|
853
|
-
├──────────────────────────────┤
|
|
854
|
-
│ Scoring │
|
|
855
|
-
├──────────────────────────────┤
|
|
856
|
-
│ Reporting │
|
|
857
|
-
└──────────────────────────────┘
|
|
858
|
-
```
|
|
859
|
-
|
|
860
|
-
The conceptual flow is:
|
|
861
|
-
|
|
862
|
-
```text
|
|
863
|
-
Discover
|
|
864
|
-
↓
|
|
865
|
-
Collect
|
|
866
|
-
↓
|
|
867
|
-
Detect
|
|
868
|
-
↓
|
|
869
|
-
Evaluate
|
|
870
|
-
↓
|
|
871
|
-
Score
|
|
872
|
-
↓
|
|
873
|
-
Explain
|
|
874
|
-
↓
|
|
875
|
-
Report
|
|
876
|
-
```
|
|
877
|
-
|
|
878
|
-
The architecture is designed so that:
|
|
879
|
-
|
|
880
|
-
- collectors collect evidence
|
|
881
|
-
- rules evaluate evidence
|
|
882
|
-
- scoring calculates health
|
|
883
|
-
- reporting renders results
|
|
884
|
-
- CLI handles user interaction
|
|
885
|
-
|
|
886
|
-
These concerns remain separated.
|
|
887
|
-
|
|
888
|
-
---
|
|
889
|
-
|
|
890
|
-
# 🛠️ Technology
|
|
891
|
-
|
|
892
|
-
YOWTF V1 uses:
|
|
893
|
-
|
|
894
|
-
- Node.js 20+
|
|
895
|
-
- TypeScript
|
|
896
|
-
- pnpm
|
|
897
|
-
- Commander
|
|
898
|
-
- Chalk
|
|
899
|
-
- Ora
|
|
900
|
-
- Boxen
|
|
901
|
-
- cli-table3
|
|
902
|
-
- tsup
|
|
903
|
-
- Vitest
|
|
904
|
-
- ESLint
|
|
905
|
-
- Prettier
|
|
906
|
-
- Git
|
|
907
|
-
- GitHub Actions
|
|
908
|
-
- npm
|
|
909
|
-
|
|
910
|
-
The project intentionally does **not** require:
|
|
911
|
-
|
|
912
|
-
- a database
|
|
913
|
-
- a backend
|
|
914
|
-
- a frontend framework
|
|
915
|
-
- a cloud service
|
|
916
|
-
- an AI service
|
|
917
|
-
- telemetry infrastructure
|
|
918
|
-
- a mandatory network service
|
|
10
|
+
<p align="center">
|
|
11
|
+
<a href="https://github.com/isthatpratham/yowtf/actions/workflows/ci.yml"><img src="https://github.com/isthatpratham/yowtf/actions/workflows/ci.yml/badge.svg" alt="CI Status"></a>
|
|
12
|
+
<a href="https://www.npmjs.com/package/yowtf"><img src="https://img.shields.io/npm/v/yowtf.svg" alt="npm version"></a>
|
|
13
|
+
<a href="https://github.com/isthatpratham/yowtf/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License: MIT"></a>
|
|
14
|
+
<img src="https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen" alt="Node >= 20.0.0">
|
|
15
|
+
</p>
|
|
919
16
|
|
|
920
17
|
---
|
|
921
18
|
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
The implementation follows the architecture specification.
|
|
925
|
-
|
|
926
|
-
Conceptually:
|
|
927
|
-
|
|
928
|
-
```text
|
|
929
|
-
yowtf/
|
|
930
|
-
├── docs/
|
|
931
|
-
│ ├── PRD.md
|
|
932
|
-
│ ├── ARCHITECTURE.md
|
|
933
|
-
│ ├── TECH-STACK.md
|
|
934
|
-
│ ├── CLI-SPEC.md
|
|
935
|
-
│ ├── DETECTION-ENGINE.md
|
|
936
|
-
│ ├── SCORING.md
|
|
937
|
-
│ ├── COMMANDS.md
|
|
938
|
-
│ └── RULE-CATALOGUE.md
|
|
939
|
-
│
|
|
940
|
-
├── src/
|
|
941
|
-
│ ├── cli/
|
|
942
|
-
│ ├── application/
|
|
943
|
-
│ ├── domain/
|
|
944
|
-
│ ├── collection/
|
|
945
|
-
│ ├── platform/
|
|
946
|
-
│ ├── detection/
|
|
947
|
-
│ ├── scoring/
|
|
948
|
-
│ └── reporting/
|
|
949
|
-
│
|
|
950
|
-
├── tests/
|
|
951
|
-
├── package.json
|
|
952
|
-
├── tsconfig.json
|
|
953
|
-
├── tsup.config.ts
|
|
954
|
-
└── README.md
|
|
955
|
-
```
|
|
956
|
-
|
|
957
|
-
The exact implementation structure is governed by:
|
|
19
|
+
YOWTF inspects your developer machine, environment configuration, runtimes, tooling, ports, processes, dependencies, Git state, and storage pressure — then explains what may be wrong, why it matters, and where to look next.
|
|
958
20
|
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
21
|
+
- **Local-first**: runs entirely on your machine.
|
|
22
|
+
- **Read-only**: observes and explains; never alters your files, system, or Git history.
|
|
23
|
+
- **Deterministic**: explicit rules produce predictable results without probabilistic guessing or AI.
|
|
24
|
+
- **Zero telemetry**: no analytics, no external tracking, no cloud dependencies.
|
|
25
|
+
- **Private by default**: inspects configuration metadata; never dumps secret values.
|
|
962
26
|
|
|
963
27
|
---
|
|
964
28
|
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
### Unknown command or unrecognized option (Exit Code 2)
|
|
968
|
-
|
|
969
|
-
```text
|
|
970
|
-
error: unknown command 'foo'
|
|
971
|
-
error: unknown option '--bar'
|
|
972
|
-
```
|
|
973
|
-
|
|
974
|
-
**Cause:** Typographical error in command or option name.
|
|
975
|
-
**Resolution:** Run `yowtf --help` to list all 20 valid commands, or `yowtf <command> --help` to inspect command-specific flags.
|
|
976
|
-
|
|
977
|
-
### Invalid or inaccessible path (Exit Code 2)
|
|
978
|
-
|
|
979
|
-
```text
|
|
980
|
-
CLI Usage Error: Directory does not exist or is not accessible: ./non-existent-dir
|
|
981
|
-
```
|
|
982
|
-
|
|
983
|
-
**Cause:** The directory passed to `--path <dir>` does not exist or lacks read permissions.
|
|
984
|
-
**Resolution:** Verify the target directory path spelling and ensure your user account has read access.
|
|
985
|
-
|
|
986
|
-
### Tool or runtime shows `UNAVAILABLE` or `SKIPPED`
|
|
987
|
-
|
|
988
|
-
```text
|
|
989
|
-
[SKIPPED] runtime.python.unpinned (Python not detected)
|
|
990
|
-
```
|
|
991
|
-
|
|
992
|
-
**Cause:** The specified runtime (e.g. Python, Java, Docker) is not installed or not present in your system `PATH`.
|
|
993
|
-
**Resolution:** This is normal diagnostic behavior. YOWTF never crashes when an optional tool is absent; it records the evidence as unavailable and skips dependent checks.
|
|
994
|
-
|
|
995
|
-
### Permission or access issues during collection
|
|
996
|
-
|
|
997
|
-
**Cause:** Certain system statistics (e.g. processes belonging to other users or privileged network sockets) may be restricted by the host OS.
|
|
998
|
-
**Resolution:** YOWTF runs without requiring root/administrator permissions. Restricted metrics are safely captured as `FAILED` or `UNAVAILABLE` collection evidence without halting the scan.
|
|
999
|
-
|
|
1000
|
-
### Scripting with JSON output
|
|
1001
|
-
|
|
1002
|
-
**Cause:** Automated scripts encountering unexpected formatting in `--json` mode.
|
|
1003
|
-
**Resolution:** When `--json` is supplied, all interactive spinners, ANSI color escape sequences, and decorative banners are suppressed. The stdout output is strictly valid JSON:
|
|
1004
|
-
|
|
1005
|
-
```bash
|
|
1006
|
-
yowtf --json | jq .healthScore
|
|
1007
|
-
```
|
|
29
|
+
## 🧭 Quick Navigation
|
|
1008
30
|
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
31
|
+
- [Quick Start](#-quick-start)
|
|
32
|
+
- [What YOWTF Does](#-what-yowtf-does)
|
|
33
|
+
- [What It Checks](#-what-it-checks)
|
|
34
|
+
- [Scoring](#-scoring)
|
|
35
|
+
- [Command Reference](#-command-reference)
|
|
36
|
+
- [Global Options](#-global-options)
|
|
37
|
+
- [Exit Codes](#-exit-codes)
|
|
38
|
+
- [Safe by Design](#-safe-by-design)
|
|
39
|
+
- [Example Output](#-example-output)
|
|
40
|
+
- [Development](#-development)
|
|
41
|
+
- [FAQ](#-faq)
|
|
42
|
+
- [Project Links](#-project-links)
|
|
43
|
+
- [License](#-license)
|
|
1013
44
|
|
|
1014
45
|
---
|
|
1015
46
|
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
### Prerequisites
|
|
1019
|
-
|
|
1020
|
-
- **Node.js**: `>= 20.0.0`
|
|
1021
|
-
- **pnpm**: `>= 9.0.0`
|
|
1022
|
-
- **Git**
|
|
1023
|
-
|
|
1024
|
-
### Setup
|
|
1025
|
-
|
|
1026
|
-
Clone the repository and install dependencies:
|
|
47
|
+
## ⚡ Quick Start
|
|
1027
48
|
|
|
1028
|
-
|
|
1029
|
-
git clone https://github.com/isthatpratham/yowtf.git
|
|
1030
|
-
cd yowtf
|
|
1031
|
-
pnpm install
|
|
1032
|
-
```
|
|
1033
|
-
|
|
1034
|
-
### Build & Run Locally
|
|
1035
|
-
|
|
1036
|
-
Compile TypeScript with `tsup`:
|
|
49
|
+
Run YOWTF instantly without global installation:
|
|
1037
50
|
|
|
1038
51
|
```bash
|
|
1039
|
-
|
|
1040
|
-
node dist/cli.js --help
|
|
52
|
+
npx yowtf
|
|
1041
53
|
```
|
|
1042
54
|
|
|
1043
|
-
|
|
55
|
+
Or install globally:
|
|
1044
56
|
|
|
1045
57
|
```bash
|
|
1046
|
-
|
|
58
|
+
npm install -g yowtf
|
|
59
|
+
# or
|
|
60
|
+
pnpm add -g yowtf
|
|
1047
61
|
```
|
|
1048
62
|
|
|
1049
|
-
###
|
|
1050
|
-
|
|
1051
|
-
YOWTF enforces strict quality gates across testing, type safety, linting, and formatting:
|
|
63
|
+
### Basic Commands
|
|
1052
64
|
|
|
1053
65
|
```bash
|
|
1054
|
-
# Run
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
# Run tests in interactive watch mode
|
|
1058
|
-
pnpm run test:watch
|
|
1059
|
-
|
|
1060
|
-
# Verify TypeScript types without emitting
|
|
1061
|
-
pnpm run typecheck
|
|
1062
|
-
|
|
1063
|
-
# Check code with ESLint
|
|
1064
|
-
pnpm run lint
|
|
66
|
+
# Run full workstation and project diagnostic scan
|
|
67
|
+
yowtf
|
|
1065
68
|
|
|
1066
|
-
#
|
|
1067
|
-
|
|
1068
|
-
pnpm run format:check
|
|
1069
|
-
```
|
|
69
|
+
# Health-oriented diagnostic scan highlighting issues requiring attention
|
|
70
|
+
yowtf doctor
|
|
1070
71
|
|
|
1071
|
-
|
|
72
|
+
# Calculate and display workstation health score (0–100)
|
|
73
|
+
yowtf score
|
|
1072
74
|
|
|
1073
|
-
|
|
75
|
+
# Deep explanation of detected findings (problem -> evidence -> impact -> next action)
|
|
76
|
+
yowtf explain
|
|
1074
77
|
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
pnpm run build
|
|
78
|
+
# Inspect specific categories
|
|
79
|
+
yowtf system
|
|
80
|
+
yowtf runtimes
|
|
81
|
+
yowtf ports
|
|
82
|
+
yowtf env
|
|
1081
83
|
```
|
|
1082
84
|
|
|
1083
|
-
For complete architectural rules, contribution workflows, and rule authoring guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
1084
|
-
|
|
1085
85
|
---
|
|
1086
86
|
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
The `/docs` directory is the project's technical source of truth.
|
|
1090
|
-
|
|
1091
|
-
### Product
|
|
1092
|
-
|
|
1093
|
-
```text
|
|
1094
|
-
docs/PRD.md
|
|
1095
|
-
```
|
|
1096
|
-
|
|
1097
|
-
Defines what YOWTF is, why it exists, scope, goals, non-goals, and V1 definition of done.
|
|
1098
|
-
|
|
1099
|
-
### Architecture
|
|
1100
|
-
|
|
1101
|
-
```text
|
|
1102
|
-
docs/ARCHITECTURE.md
|
|
1103
|
-
```
|
|
1104
|
-
|
|
1105
|
-
Defines system structure, layers, boundaries, data flow, and architectural invariants.
|
|
1106
|
-
|
|
1107
|
-
### Technology
|
|
1108
|
-
|
|
1109
|
-
```text
|
|
1110
|
-
docs/TECH-STACK.md
|
|
1111
|
-
```
|
|
1112
|
-
|
|
1113
|
-
Defines the approved technology stack and dependency policy.
|
|
1114
|
-
|
|
1115
|
-
### CLI
|
|
1116
|
-
|
|
1117
|
-
```text
|
|
1118
|
-
docs/CLI-SPEC.md
|
|
1119
|
-
```
|
|
1120
|
-
|
|
1121
|
-
Defines public CLI behavior.
|
|
1122
|
-
|
|
1123
|
-
### Detection
|
|
1124
|
-
|
|
1125
|
-
```text
|
|
1126
|
-
docs/DETECTION-ENGINE.md
|
|
1127
|
-
```
|
|
1128
|
-
|
|
1129
|
-
Defines evidence, collectors, rules, findings, applicability, evaluation, and detection behavior.
|
|
1130
|
-
|
|
1131
|
-
### Scoring
|
|
1132
|
-
|
|
1133
|
-
```text
|
|
1134
|
-
docs/SCORING.md
|
|
1135
|
-
```
|
|
1136
|
-
|
|
1137
|
-
Defines the numerical health-score model.
|
|
87
|
+
## 🛠️ What YOWTF Does
|
|
1138
88
|
|
|
1139
|
-
|
|
89
|
+
YOWTF executes a structured diagnostic pipeline:
|
|
1140
90
|
|
|
1141
91
|
```text
|
|
1142
|
-
|
|
92
|
+
DISCOVER ──> COLLECT ──> DETECT ──> EVALUATE ──> SCORE ──> EXPLAIN ──> REPORT
|
|
1143
93
|
```
|
|
1144
94
|
|
|
1145
|
-
|
|
95
|
+
1. **Discover**: Resolves the target workspace, identifies active project types, manifests, and platform capabilities.
|
|
96
|
+
2. **Collect**: Gathers low-overhead, read-only evidence across workstation and project surfaces.
|
|
97
|
+
3. **Detect**: Evaluates collected evidence against explicit, authoritative V1 diagnostic rules.
|
|
98
|
+
4. **Evaluate**: Determines finding statuses (`PASS`, `WARN`, `FAIL`, `SKIPPED`, `UNAVAILABLE`, `ERROR`).
|
|
99
|
+
5. **Score**: Calculates a deterministic health score from 0 to 100 based on finding severity.
|
|
100
|
+
6. **Explain**: Correlates findings with underlying evidence, architectural impact, and concrete remediation hints.
|
|
101
|
+
7. **Report**: Formats results for terminal presentation or machine-readable JSON.
|
|
1146
102
|
|
|
1147
|
-
###
|
|
103
|
+
### Anatomy of a Diagnostic Finding
|
|
1148
104
|
|
|
1149
|
-
|
|
1150
|
-
docs/RULE-CATALOGUE.md
|
|
1151
|
-
```
|
|
1152
|
-
|
|
1153
|
-
Defines the complete V1 diagnostic rule inventory.
|
|
1154
|
-
|
|
1155
|
-
---
|
|
1156
|
-
|
|
1157
|
-
# 📜 Documentation Is the Source of Truth
|
|
1158
|
-
|
|
1159
|
-
YOWTF follows a strict documentation-first development model.
|
|
1160
|
-
|
|
1161
|
-
The hierarchy is:
|
|
105
|
+
Every detected finding provides structured diagnostic context:
|
|
1162
106
|
|
|
1163
107
|
```text
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
108
|
+
Finding
|
|
109
|
+
├── Rule ID e.g. runtime.version.mismatch
|
|
110
|
+
├── Category e.g. runtimes
|
|
111
|
+
├── Status FAIL | WARN | PASS | SKIPPED | UNAVAILABLE | ERROR
|
|
112
|
+
├── Severity CRITICAL | HIGH | MEDIUM | LOW | INFO
|
|
113
|
+
├── Confidence HIGH | MEDIUM | LOW
|
|
114
|
+
├── Title Summary of the identified condition
|
|
115
|
+
├── Evidence Specific observations that triggered the rule
|
|
116
|
+
├── Impact Why this issue affects development or reliability
|
|
117
|
+
└── Remediation Actionable next steps to investigate or resolve
|
|
1171
118
|
```
|
|
1172
119
|
|
|
1173
|
-
If implementation conflicts with the specification:
|
|
1174
|
-
|
|
1175
|
-
> **The implementation is wrong.**
|
|
1176
|
-
|
|
1177
|
-
If README conflicts with the specification:
|
|
1178
|
-
|
|
1179
|
-
> **The README is wrong.**
|
|
1180
|
-
|
|
1181
|
-
If two specifications conflict:
|
|
1182
|
-
|
|
1183
|
-
> **Stop and resolve the conflict before implementation.**
|
|
1184
|
-
|
|
1185
|
-
Undocumented behavior is not automatically approved behavior.
|
|
1186
|
-
|
|
1187
120
|
---
|
|
1188
121
|
|
|
1189
|
-
|
|
122
|
+
## 🔍 What It Checks
|
|
1190
123
|
|
|
1191
|
-
YOWTF
|
|
124
|
+
YOWTF features **60 authoritative V1 diagnostic rules** across 15 developer-focused categories:
|
|
1192
125
|
|
|
1193
|
-
|
|
126
|
+
| Category | Scope | Focus Area |
|
|
127
|
+
| -------------------- | ----------- | -------------------------------------------------------------------------------- |
|
|
128
|
+
| **System** | Workstation | OS architecture, CPU load, memory pressure, and system uptime |
|
|
129
|
+
| **Disk** | Workstation | Storage limits, volume capacity, and partition availability |
|
|
130
|
+
| **Processes** | Workstation | Resource hogs, zombie processes, and duplicate dev process instances |
|
|
131
|
+
| **Ports** | Workstation | Port conflicts, duplicate listeners, and unexpected local server exposure |
|
|
132
|
+
| **Network** | Workstation | Interface availability, DNS configuration, and active proxy settings |
|
|
133
|
+
| **Environment** | Environment | PATH anomalies, duplicate entries, shell mismatches, and sensitive key names |
|
|
134
|
+
| **Runtimes** | Environment | Node.js, Python, Java version alignment, unpinned runtimes, and version managers |
|
|
135
|
+
| **Tools** | Environment | Availability and conflict detection for Git, package managers, and Docker |
|
|
136
|
+
| **Paths** | Environment | PATH-order shadowing, empty entries, and executable resolution conflicts |
|
|
137
|
+
| **Versions** | Environment | Runtime requirement constraints vs. resolved system binaries |
|
|
138
|
+
| **Project** | Project | Project manifests, workspace root ambiguity, and config consistency |
|
|
139
|
+
| **Dependencies** | Project | Lockfile health, package manager alignment, and dependency integrity |
|
|
140
|
+
| **Git** | Project | Repository state, detached HEAD, dirty working trees, and divergence |
|
|
141
|
+
| **Configuration** | Project | Project config files, lint/build setups, and environment definitions |
|
|
142
|
+
| **Caches & Storage** | Maintenance | Large developer caches (npm, pnpm, yarn, pip, cargo) and build artifacts |
|
|
1194
143
|
|
|
1195
|
-
|
|
1196
|
-
- follow the documented architecture
|
|
1197
|
-
- use only documented commands
|
|
1198
|
-
- use only documented rules
|
|
1199
|
-
- use documented thresholds
|
|
1200
|
-
- preserve stable rule IDs
|
|
1201
|
-
- add tests
|
|
1202
|
-
- avoid undocumented dependencies
|
|
1203
|
-
- avoid undocumented network behavior
|
|
1204
|
-
- avoid undocumented mutations
|
|
1205
|
-
- avoid silent scope expansion
|
|
1206
|
-
|
|
1207
|
-
The rule is simple:
|
|
1208
|
-
|
|
1209
|
-
> **AI may implement the specification. AI does not become the specification.**
|
|
1210
|
-
|
|
1211
|
-
---
|
|
1212
|
-
|
|
1213
|
-
# 🧪 Testing Philosophy
|
|
1214
|
-
|
|
1215
|
-
Tests are part of the product contract.
|
|
1216
|
-
|
|
1217
|
-
YOWTF tests should cover:
|
|
1218
|
-
|
|
1219
|
-
- collectors
|
|
1220
|
-
- platform adapters
|
|
1221
|
-
- project discovery
|
|
1222
|
-
- rule evaluation
|
|
1223
|
-
- rule applicability
|
|
1224
|
-
- threshold boundaries
|
|
1225
|
-
- scoring
|
|
1226
|
-
- command behavior
|
|
1227
|
-
- output modes
|
|
1228
|
-
- error handling
|
|
1229
|
-
- privacy behavior
|
|
1230
|
-
- read-only guarantees
|
|
1231
|
-
- regression cases
|
|
1232
|
-
|
|
1233
|
-
For threshold-based rules, boundary cases matter.
|
|
1234
|
-
|
|
1235
|
-
For example:
|
|
1236
|
-
|
|
1237
|
-
```text
|
|
1238
|
-
79.9%
|
|
1239
|
-
80.0%
|
|
1240
|
-
80.1%
|
|
1241
|
-
```
|
|
1242
|
-
|
|
1243
|
-
should not accidentally produce the same result when the specification defines different outcomes.
|
|
144
|
+
> **What YOWTF is NOT:** YOWTF is not an antivirus, firewall, full vulnerability scanner, system monitor, background daemon, process manager, or package manager. It is a targeted developer health diagnostic tool.
|
|
1244
145
|
|
|
1245
146
|
---
|
|
1246
147
|
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
YOWTF is deliberately conservative.
|
|
1250
|
-
|
|
1251
|
-
When evidence is unavailable:
|
|
148
|
+
## 📊 Scoring
|
|
1252
149
|
|
|
1253
|
-
|
|
1254
|
-
don't invent
|
|
1255
|
-
```
|
|
150
|
+
YOWTF calculates an objective, deterministic health score between **0 and 100**.
|
|
1256
151
|
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
```text
|
|
1260
|
-
don't assume
|
|
1261
|
-
```
|
|
152
|
+
- Starts at **100**.
|
|
153
|
+
- Applies penalties based on finding severity:
|
|
1262
154
|
|
|
1263
|
-
|
|
155
|
+
| Severity | Full Deduction (`FAIL`) | Partial Deduction (`WARN`) |
|
|
156
|
+
| ------------ | ----------------------: | -------------------------: |
|
|
157
|
+
| **CRITICAL** | 25 pts | 12.5 pts |
|
|
158
|
+
| **HIGH** | 15 pts | 7.5 pts |
|
|
159
|
+
| **MEDIUM** | 8 pts | 4.0 pts |
|
|
160
|
+
| **LOW** | 3 pts | 1.5 pts |
|
|
161
|
+
| **INFO** | 0 pts | 0.0 pts |
|
|
1264
162
|
|
|
1265
|
-
|
|
1266
|
-
don't claim certainty
|
|
1267
|
-
```
|
|
163
|
+
`PASS`, `SKIPPED`, `UNAVAILABLE`, and `ERROR` findings do not deduct points. The score is clamped to the range `0–100`.
|
|
1268
164
|
|
|
1269
|
-
|
|
165
|
+
### Health Score Bands
|
|
1270
166
|
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
167
|
+
| Score Range | Status Band | Interpretation |
|
|
168
|
+
| ----------: | ---------------- | ------------------------------------------------------------ |
|
|
169
|
+
| **90–100** | 🟢 **EXCELLENT** | Workstation and project environment are in optimal condition |
|
|
170
|
+
| **75–89** | 🟡 **GOOD** | Minor issues or warnings detected; development unaffected |
|
|
171
|
+
| **60–74** | 🟠 **FAIR** | Several warnings or moderate issues require attention |
|
|
172
|
+
| **40–59** | 🔴 **POOR** | Significant environmental conflicts or failures present |
|
|
173
|
+
| **0–39** | 🚨 **CRITICAL** | Severe issues detected; build or runtime failures likely |
|
|
1274
174
|
|
|
1275
|
-
|
|
175
|
+
_Note: The health score is a diagnostic metric for evaluated scope, not a security certification._
|
|
1276
176
|
|
|
1277
177
|
---
|
|
1278
178
|
|
|
1279
|
-
|
|
179
|
+
## 🧰 Command Reference
|
|
1280
180
|
|
|
1281
|
-
YOWTF
|
|
181
|
+
YOWTF provides 20 canonical public commands:
|
|
1282
182
|
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
183
|
+
| Command | Category | Purpose |
|
|
184
|
+
| ----------------- | ----------- | ------------------------------------------------------------------------------------ |
|
|
185
|
+
| `yowtf` | Core | Full workstation and project diagnostic scan |
|
|
186
|
+
| `yowtf doctor` | Core | Health-oriented diagnostic scan highlighting prioritized issues |
|
|
187
|
+
| `yowtf score` | Core | Calculate and display the 0–100 workstation/project health score |
|
|
188
|
+
| `yowtf explain` | Core | Deep explanation view (problem → evidence → impact → remediation) |
|
|
189
|
+
| `yowtf system` | Workstation | Inspect OS, CPU architecture, memory pressure, and system uptime |
|
|
190
|
+
| `yowtf disk` | Workstation | Inspect disk space, storage pressure, and volume limits |
|
|
191
|
+
| `yowtf processes` | Workstation | Detect process resource hogs and duplicate dev processes (read-only) |
|
|
192
|
+
| `yowtf ports` | Workstation | Detect development port conflicts and listening sockets (read-only) |
|
|
193
|
+
| `yowtf network` | Workstation | Inspect network interfaces, DNS configuration, and proxy settings |
|
|
194
|
+
| `yowtf env` | Environment | Inspect environment variables, PATH entries, and configuration metadata |
|
|
195
|
+
| `yowtf runtimes` | Environment | Inspect installed and active runtimes (Node.js, Python, Java, etc.) |
|
|
196
|
+
| `yowtf tools` | Environment | Inspect developer tools (Git, package managers, Docker, etc.) |
|
|
197
|
+
| `yowtf paths` | Environment | Detect PATH-order shadowing, empty entries, and executable conflicts |
|
|
198
|
+
| `yowtf versions` | Environment | Diagnose version conflicts and requirement mismatches |
|
|
199
|
+
| `yowtf project` | Project | Diagnose project type, manifest health, and configuration |
|
|
200
|
+
| `yowtf deps` | Project | Diagnose project dependency health, lockfiles, and package manager consistency |
|
|
201
|
+
| `yowtf git` | Project | Inspect Git repository health, branch status, and working tree (read-only) |
|
|
202
|
+
| `yowtf config` | Project | Inspect project configuration files and environment definitions |
|
|
203
|
+
| `yowtf caches` | Maintenance | Identify developer caches and large storage consumers (read-only) |
|
|
204
|
+
| `yowtf clean` | Maintenance | Diagnostic cleanup candidate finder; `--preview` reports candidates without deleting |
|
|
1293
205
|
|
|
1294
|
-
|
|
206
|
+
> **Safety Notice on `clean`:** `yowtf clean` is strictly diagnostic. It reports identified cleanup candidates and estimated space reclamation. It **never deletes files or caches**.
|
|
1295
207
|
|
|
1296
208
|
---
|
|
1297
209
|
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
YOWTF is local-first.
|
|
210
|
+
## 🎛️ Global Options
|
|
1301
211
|
|
|
1302
|
-
The
|
|
212
|
+
The following global options are supported across all commands:
|
|
1303
213
|
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
214
|
+
| Option | Purpose | Description |
|
|
215
|
+
| --------------- | -------------- | --------------------------------------------------------------------------- |
|
|
216
|
+
| `-h, --help` | Help | Display usage information for YOWTF or a specific subcommand |
|
|
217
|
+
| `-V, --version` | Version | Display the current YOWTF version number |
|
|
218
|
+
| `--verbose` | Verbosity | Enable detailed diagnostic output including rule IDs and evidence keys |
|
|
219
|
+
| `--no-color` | Formatting | Disable ANSI terminal colors for plain-text logs and pipelines |
|
|
220
|
+
| `--json` | Machine Output | Output pure machine-readable JSON (suppresses animations and banners) |
|
|
221
|
+
| `--quiet` | Quiet Mode | Show minimal summaries and essential failures only (suppresses animation) |
|
|
222
|
+
| `--path <dir>` | Project Path | Target a specific project directory (applies to project-scoped diagnostics) |
|
|
1307
223
|
|
|
1308
224
|
---
|
|
1309
225
|
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
Docker is not a mandatory runtime dependency for YOWTF V1.
|
|
226
|
+
## 🚦 Exit Codes
|
|
1313
227
|
|
|
1314
|
-
|
|
228
|
+
YOWTF adheres to strict, standard CLI exit codes:
|
|
1315
229
|
|
|
1316
|
-
|
|
230
|
+
| Code | Status | Meaning |
|
|
231
|
+
| :---: | --------------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
232
|
+
| **0** | **Success** | The command completed successfully. Finding statuses (`FAIL`, `WARN`, `PASS`) are valid diagnostic outputs and exit code 0. |
|
|
233
|
+
| **1** | **Application Error** | Internal runtime error or fatal failure preventing diagnostic completion. |
|
|
234
|
+
| **2** | **Usage Error** | Unknown command, unrecognized option, missing required argument, or inaccessible project path. |
|
|
1317
235
|
|
|
1318
236
|
---
|
|
1319
237
|
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
The V1 foundation focuses on:
|
|
1323
|
-
|
|
1324
|
-
```text
|
|
1325
|
-
Local diagnostics
|
|
1326
|
-
Read-only analysis
|
|
1327
|
-
Deterministic rules
|
|
1328
|
-
Cross-platform support
|
|
1329
|
-
Project health
|
|
1330
|
-
Workstation health
|
|
1331
|
-
Explainable findings
|
|
1332
|
-
Health scoring
|
|
1333
|
-
CLI usability
|
|
1334
|
-
```
|
|
1335
|
-
|
|
1336
|
-
Future functionality may be considered independently, but new capabilities require explicit specification.
|
|
1337
|
-
|
|
1338
|
-
Potential future areas may include:
|
|
238
|
+
## 🛡️ Safe by Design
|
|
1339
239
|
|
|
1340
|
-
-
|
|
1341
|
-
-
|
|
1342
|
-
-
|
|
1343
|
-
-
|
|
1344
|
-
-
|
|
1345
|
-
-
|
|
1346
|
-
|
|
1347
|
-
Nothing becomes part of the product merely because it appears on a roadmap.
|
|
240
|
+
- **Read-Only**: YOWTF observes and inspects. It never installs packages, uninstalls tools, terminates processes, alters environment files, or mutates Git state.
|
|
241
|
+
- **No Automatic Fixes**: YOWTF explains root causes and remediation paths; you decide what changes to make.
|
|
242
|
+
- **Zero Telemetry**: No tracking, analytics, crash reporting, or external API calls during standard scans.
|
|
243
|
+
- **No Network Requirement**: Diagnostic scans evaluate local workstation state; no internet connection is required.
|
|
244
|
+
- **Secrets Protection**: Environment analysis inspects variable names and metadata, never printing credential values.
|
|
245
|
+
- **Cross-Platform**: Tailored adapters for Windows, macOS, and Linux with graceful degradation when a metric is unavailable.
|
|
1348
246
|
|
|
1349
247
|
---
|
|
1350
248
|
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
Contributions are welcome! Please review our detailed [CONTRIBUTING.md](CONTRIBUTING.md) guide before opening pull requests.
|
|
1354
|
-
|
|
1355
|
-
Before changing the code:
|
|
1356
|
-
|
|
1357
|
-
1. Read the relevant documentation.
|
|
1358
|
-
2. Understand the existing behavior.
|
|
1359
|
-
3. Identify the owning specification.
|
|
1360
|
-
4. Make the smallest appropriate change.
|
|
1361
|
-
5. Add/update tests.
|
|
1362
|
-
6. Run validation.
|
|
1363
|
-
7. Update documentation when behavior changes.
|
|
249
|
+
## 💻 Example Output
|
|
1364
250
|
|
|
1365
|
-
|
|
251
|
+
When running in an interactive terminal, YOWTF initializes with a fast boot sequence:
|
|
1366
252
|
|
|
1367
253
|
```text
|
|
1368
|
-
|
|
1369
|
-
↓
|
|
1370
|
-
RULE-CATALOGUE.md
|
|
1371
|
-
↓
|
|
1372
|
-
Detection implementation
|
|
1373
|
-
↓
|
|
1374
|
-
Tests
|
|
1375
|
-
↓
|
|
1376
|
-
Registration
|
|
1377
|
-
↓
|
|
1378
|
-
Command integration
|
|
1379
|
-
↓
|
|
1380
|
-
Validation
|
|
1381
|
-
```
|
|
1382
|
-
|
|
1383
|
-
Do not add hidden rules.
|
|
254
|
+
YOWTF // INITIALIZING
|
|
1384
255
|
|
|
1385
|
-
|
|
256
|
+
> loading diagnostic engine...
|
|
257
|
+
> preparing collectors...
|
|
258
|
+
> preparing detection rules...
|
|
259
|
+
> preparing reporting pipeline...
|
|
260
|
+
> ready.
|
|
1386
261
|
|
|
1387
|
-
|
|
262
|
+
Yo, WTF is happening?
|
|
1388
263
|
|
|
1389
|
-
|
|
264
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
265
|
+
│ │
|
|
266
|
+
│ Workstation Health Score: 85/100 (GOOD) │
|
|
267
|
+
│ Total Deductions: 15 pts across 1 finding(s) │
|
|
268
|
+
│ Scope: workstation + project │
|
|
269
|
+
│ │
|
|
270
|
+
└─────────────────────────────────────────────────────────────┘
|
|
1390
271
|
|
|
1391
|
-
|
|
272
|
+
Findings:
|
|
273
|
+
[FAIL] runtime.version.mismatch (HIGH) - 15 pts
|
|
274
|
+
Active Node.js v18.20.0 does not satisfy required >=20.0.0
|
|
275
|
+
Impact: Build scripts or tools relying on modern runtime APIs will fail.
|
|
276
|
+
Remediation: Switch to Node.js 20+ using your version manager (nvm use 20, fnm use 20).
|
|
1392
277
|
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
fix: correct PATH normalization
|
|
1396
|
-
docs: clarify scoring behavior
|
|
1397
|
-
test: add lockfile mismatch coverage
|
|
1398
|
-
refactor: simplify rule registry
|
|
1399
|
-
chore: update dependencies
|
|
278
|
+
[PASS] git.repo.clean
|
|
279
|
+
Working tree is clean and branch is tracked.
|
|
1400
280
|
```
|
|
1401
281
|
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
---
|
|
1405
|
-
|
|
1406
|
-
# 📦 Release Philosophy
|
|
282
|
+
In automated pipelines or scripts (`--json`), all presentation animations are bypassed to output pure JSON:
|
|
1407
283
|
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
In general:
|
|
1411
|
-
|
|
1412
|
-
```text
|
|
1413
|
-
MAJOR → breaking changes
|
|
1414
|
-
MINOR → new compatible functionality
|
|
1415
|
-
PATCH → compatible fixes
|
|
284
|
+
```bash
|
|
285
|
+
yowtf --json | jq .score
|
|
1416
286
|
```
|
|
1417
287
|
|
|
1418
|
-
Rule IDs and documented behavior are treated as compatibility-sensitive surfaces.
|
|
1419
|
-
|
|
1420
|
-
---
|
|
1421
|
-
|
|
1422
|
-
# 🧭 Design Principles
|
|
1423
|
-
|
|
1424
|
-
YOWTF is built around a small set of principles:
|
|
1425
|
-
|
|
1426
|
-
### Local-first
|
|
1427
|
-
|
|
1428
|
-
Your machine is the primary source of diagnostic evidence.
|
|
1429
|
-
|
|
1430
|
-
### Read-only
|
|
1431
|
-
|
|
1432
|
-
Diagnose first. Let the developer decide what to change.
|
|
1433
|
-
|
|
1434
|
-
### Deterministic
|
|
1435
|
-
|
|
1436
|
-
The same evidence should produce the same result.
|
|
1437
|
-
|
|
1438
|
-
### Evidence-based
|
|
1439
|
-
|
|
1440
|
-
Findings should be explainable from collected evidence.
|
|
1441
|
-
|
|
1442
|
-
### Privacy by default
|
|
1443
|
-
|
|
1444
|
-
Collect the minimum information necessary.
|
|
1445
|
-
|
|
1446
|
-
### Developer-oriented
|
|
1447
|
-
|
|
1448
|
-
Focus on problems developers actually encounter.
|
|
1449
|
-
|
|
1450
|
-
### No silent magic
|
|
1451
|
-
|
|
1452
|
-
Undocumented behavior is not a feature.
|
|
1453
|
-
|
|
1454
288
|
---
|
|
1455
289
|
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
A developer workstation is an ecosystem.
|
|
1459
|
-
|
|
1460
|
-
Over time it collects:
|
|
1461
|
-
|
|
1462
|
-
```text
|
|
1463
|
-
runtimes
|
|
1464
|
-
tools
|
|
1465
|
-
PATH entries
|
|
1466
|
-
package managers
|
|
1467
|
-
dependencies
|
|
1468
|
-
caches
|
|
1469
|
-
ports
|
|
1470
|
-
processes
|
|
1471
|
-
environment variables
|
|
1472
|
-
configuration
|
|
1473
|
-
projects
|
|
1474
|
-
Git repositories
|
|
1475
|
-
```
|
|
1476
|
-
|
|
1477
|
-
Eventually something breaks.
|
|
1478
|
-
|
|
1479
|
-
And when it does, developers often start checking random things manually.
|
|
1480
|
-
|
|
1481
|
-
YOWTF's job is to make that investigation structured.
|
|
1482
|
-
|
|
1483
|
-
Not:
|
|
290
|
+
## 🛠️ Development
|
|
1484
291
|
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
But:
|
|
292
|
+
### Prerequisites
|
|
1488
293
|
|
|
1489
|
-
|
|
294
|
+
- Node.js >= 20.0.0
|
|
295
|
+
- pnpm >= 9.0.0
|
|
1490
296
|
|
|
1491
|
-
|
|
297
|
+
### Quality Gate Commands
|
|
1492
298
|
|
|
1493
|
-
```
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
How confident we are.
|
|
1497
|
-
What evidence supports it.
|
|
1498
|
-
Where you should look next.
|
|
1499
|
-
```
|
|
299
|
+
```bash
|
|
300
|
+
# Install dependencies
|
|
301
|
+
pnpm install
|
|
1500
302
|
|
|
1501
|
-
|
|
303
|
+
# Check code formatting
|
|
304
|
+
pnpm run format:check
|
|
1502
305
|
|
|
1503
|
-
#
|
|
306
|
+
# Lint codebase
|
|
307
|
+
pnpm run lint
|
|
1504
308
|
|
|
1505
|
-
|
|
309
|
+
# Verify TypeScript types
|
|
310
|
+
pnpm run typecheck
|
|
1506
311
|
|
|
1507
|
-
|
|
312
|
+
# Run test suite
|
|
313
|
+
pnpm test
|
|
1508
314
|
|
|
1509
|
-
|
|
315
|
+
# Build production bundle
|
|
316
|
+
pnpm run build
|
|
1510
317
|
|
|
1511
|
-
|
|
1512
|
-
|
|
318
|
+
# Verify npm package archive
|
|
319
|
+
npm pack --dry-run
|
|
1513
320
|
```
|
|
1514
321
|
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
Questionable branding.
|
|
322
|
+
For contributing guidelines and coding standards, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
1518
323
|
|
|
1519
324
|
---
|
|
1520
325
|
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
YOWTF is licensed under the MIT License.
|
|
326
|
+
## ❓ FAQ
|
|
1524
327
|
|
|
1525
|
-
|
|
328
|
+
**Q: Does YOWTF modify any files or settings on my machine?**
|
|
329
|
+
A: No. YOWTF is strictly read-only. It never modifies configurations, alters project manifests, or deletes caches.
|
|
1526
330
|
|
|
1527
|
-
|
|
331
|
+
**Q: Does YOWTF use AI or large language models?**
|
|
332
|
+
A: No. YOWTF uses an explicit rule engine and deterministic scoring. The same environment state produces the exact same findings every time.
|
|
1528
333
|
|
|
1529
|
-
|
|
334
|
+
**Q: Does YOWTF send my system information to the cloud?**
|
|
335
|
+
A: No. YOWTF has zero telemetry, zero analytics, and requires no external server or user account.
|
|
1530
336
|
|
|
1531
|
-
|
|
337
|
+
**Q: Can I use YOWTF in CI/CD workflows?**
|
|
338
|
+
A: Yes. Use `yowtf --json` to generate machine-readable output suitable for CI gates and scripting.
|
|
1532
339
|
|
|
1533
|
-
|
|
340
|
+
**Q: How fast is the startup boot animation?**
|
|
341
|
+
A: The boot sequence takes ~250–300ms in interactive terminals and is completely skipped in non-TTY environments (pipes, CI), `--json`, and `--quiet` modes.
|
|
1534
342
|
|
|
1535
343
|
---
|
|
1536
344
|
|
|
1537
|
-
|
|
345
|
+
## 🔗 Project Links
|
|
1538
346
|
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
├── docs/PRD.md
|
|
1543
|
-
│ Product requirements
|
|
1544
|
-
│
|
|
1545
|
-
├── docs/ARCHITECTURE.md
|
|
1546
|
-
│ System architecture
|
|
1547
|
-
│
|
|
1548
|
-
├── docs/TECH-STACK.md
|
|
1549
|
-
│ Technology contract
|
|
1550
|
-
│
|
|
1551
|
-
├── docs/CLI-SPEC.md
|
|
1552
|
-
│ CLI behavior
|
|
1553
|
-
│
|
|
1554
|
-
├── docs/DETECTION-ENGINE.md
|
|
1555
|
-
│ Detection architecture
|
|
1556
|
-
│
|
|
1557
|
-
├── docs/SCORING.md
|
|
1558
|
-
│ Health scoring
|
|
1559
|
-
│
|
|
1560
|
-
├── docs/COMMANDS.md
|
|
1561
|
-
│ Command catalogue
|
|
1562
|
-
│
|
|
1563
|
-
└── docs/RULE-CATALOGUE.md
|
|
1564
|
-
V1 diagnostic rules
|
|
1565
|
-
```
|
|
347
|
+
- **GitHub Repository**: [https://github.com/isthatpratham/yowtf](https://github.com/isthatpratham/yowtf)
|
|
348
|
+
- **npm Package**: [https://www.npmjs.com/package/yowtf](https://www.npmjs.com/package/yowtf)
|
|
349
|
+
- **Issue Tracker**: [https://github.com/isthatpratham/yowtf/issues](https://github.com/isthatpratham/yowtf/issues)
|
|
1566
350
|
|
|
1567
351
|
---
|
|
1568
352
|
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
YOWTF isn't trying to manage your machine.
|
|
1572
|
-
|
|
1573
|
-
It isn't trying to replace your package manager.
|
|
1574
|
-
|
|
1575
|
-
It isn't trying to be an antivirus.
|
|
1576
|
-
|
|
1577
|
-
It isn't trying to upload your workstation to some dashboard.
|
|
1578
|
-
|
|
1579
|
-
It simply asks:
|
|
1580
|
-
|
|
1581
|
-
```text
|
|
1582
|
-
What is happening?
|
|
1583
|
-
What looks wrong?
|
|
1584
|
-
Why does it matter?
|
|
1585
|
-
How certain are we?
|
|
1586
|
-
What should I investigate?
|
|
1587
|
-
```
|
|
1588
|
-
|
|
1589
|
-
And then gives you the evidence.
|
|
1590
|
-
|
|
1591
|
-
```text
|
|
1592
|
-
┌─────────────────────────────────────┐
|
|
1593
|
-
│ │
|
|
1594
|
-
│ YOWTF │
|
|
1595
|
-
│ Your Operating Workstation │
|
|
1596
|
-
│ Trouble Finder │
|
|
1597
|
-
│ │
|
|
1598
|
-
│ Yo, WTF is happening? │
|
|
1599
|
-
│ │
|
|
1600
|
-
└─────────────────────────────────────┘
|
|
1601
|
-
```
|
|
1602
|
-
|
|
1603
|
-
**Local. Read-only. Deterministic. Developer-first.**
|
|
353
|
+
## 📄 License
|
|
1604
354
|
|
|
1605
|
-
|
|
355
|
+
YOWTF is open-source software licensed under the [MIT License](LICENSE).
|