shippingszn 0.9.6 → 0.10.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/LICENSE +1 -1
- package/README.md +109 -33
- package/dist/index.js +1653 -1763
- package/package.json +7 -9
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2026
|
|
3
|
+
Copyright (c) 2026 Ryan Zaucha
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -1,36 +1,65 @@
|
|
|
1
1
|
# shippingszn
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
you are about to ship
|
|
5
|
-
|
|
6
|
-
patterns,
|
|
3
|
+
`shippingszn` is a local, read-only launch-readiness scanner for apps built with
|
|
4
|
+
AI. It runs inside the project you are about to ship and reads your files to
|
|
5
|
+
catch the launch debt AI builders commonly miss — leaked API keys, missing crawl
|
|
6
|
+
assets, weak browser defenses, dangerous code patterns, unguarded routes, and
|
|
7
|
+
last-mile polish gaps — then prints a 0-100 readiness score, a launch verdict,
|
|
8
|
+
and every finding with the file and line it came from. It never writes to your
|
|
9
|
+
project and needs no account to run.
|
|
10
|
+
|
|
11
|
+
## Install / usage
|
|
7
12
|
|
|
8
13
|
```bash
|
|
9
|
-
npx shippingszn@latest
|
|
14
|
+
npx shippingszn@latest # scan the current directory
|
|
15
|
+
npx shippingszn@latest ./path # scan a specific directory
|
|
16
|
+
npx shippingszn@latest --no-telemetry # run fully offline, zero network calls
|
|
10
17
|
# or
|
|
11
18
|
pnpm dlx shippingszn@latest
|
|
12
19
|
```
|
|
13
20
|
|
|
14
|
-
|
|
15
|
-
|
|
21
|
+
This is the open-source scanner. The optional paid **Launch Fix Kit** — the
|
|
22
|
+
remediation layer with per-finding fixes, prompts to paste straight into your AI
|
|
23
|
+
builder, the 58-item launch workbook, unlimited re-scans, and launch monitoring
|
|
24
|
+
— lives at <https://shippingszn.com/fix-kit>. The scanner is free and always
|
|
25
|
+
will be; the Fix Kit is how you fix what it finds.
|
|
26
|
+
|
|
27
|
+
The CLI **never writes, modifies, or deletes** any files - it only reads. (The
|
|
28
|
+
one exception is a tiny first-run marker under your config dir,
|
|
29
|
+
`~/.config/shippingszn/seen`, used to show the telemetry notice once.) By
|
|
30
|
+
default each run creates a scan handoff for checkout and sends one anonymous
|
|
16
31
|
Wall report-card summary with score, severity counts, files scanned, scanner
|
|
17
32
|
version, and safe stack tags. It never uploads source code, repo URLs, project
|
|
18
|
-
names, secrets, handles, or emails.
|
|
19
|
-
|
|
33
|
+
names, secrets, handles, or emails. Pass `--no-telemetry` to run fully offline
|
|
34
|
+
(zero network calls).
|
|
20
35
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
36
|
+
**The free scan is the full diagnosis.** Human output prints a verdict, a
|
|
37
|
+
higher-is-better Readiness Score, severity counts, and **every finding grouped
|
|
38
|
+
by severity** — its severity, the checklist item it maps to, the `file:line`,
|
|
39
|
+
and what's wrong — plus completed-checks coverage and the Fix Kit CTA. Run with
|
|
40
|
+
`--json` to get the same in a machine-readable shape, including the full
|
|
41
|
+
`findings` array:
|
|
25
42
|
|
|
26
43
|
```json
|
|
27
44
|
{
|
|
28
|
-
"score":
|
|
29
|
-
"band": "
|
|
30
|
-
"counts": { "critical":
|
|
45
|
+
"score": 60,
|
|
46
|
+
"band": "fix_first",
|
|
47
|
+
"counts": { "critical": 0, "high": 11, "medium": 1, "lower": 1 },
|
|
31
48
|
"filesScanned": 128,
|
|
32
|
-
"coverage": { "checksCompleted": 19, "checklistAreas":
|
|
33
|
-
"
|
|
49
|
+
"coverage": { "checksCompleted": 19, "checklistAreas": 51 },
|
|
50
|
+
"scannerVersion": "0.10.0",
|
|
51
|
+
"findings": [
|
|
52
|
+
{
|
|
53
|
+
"checkId": "hardcoded-secrets",
|
|
54
|
+
"itemId": "secrets",
|
|
55
|
+
"severity": "high",
|
|
56
|
+
"itemTitle": "Lock up your API keys and passwords",
|
|
57
|
+
"file": "src/lib/config.ts",
|
|
58
|
+
"line": 12,
|
|
59
|
+
"message": "Possible hardcoded API key detected.",
|
|
60
|
+
"permalink": "https://shippingszn.com/i/secrets"
|
|
61
|
+
}
|
|
62
|
+
],
|
|
34
63
|
"unlockUrl": "https://shippingszn.com/fix-kit?scanResultId=00000000-0000-4000-8000-000000000123",
|
|
35
64
|
"scanHandoff": {
|
|
36
65
|
"status": "uploaded",
|
|
@@ -40,15 +69,29 @@ machine-readable shape:
|
|
|
40
69
|
}
|
|
41
70
|
```
|
|
42
71
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
72
|
+
The findings are free. What's **paid** is the remediation layer: per-finding fix
|
|
73
|
+
instructions, prompts to paste straight into your AI builder, the 58-item launch
|
|
74
|
+
workbook, unlimited re-scans, and launch monitoring. The free CLI tells you
|
|
75
|
+
exactly what's wrong; the Launch Fix Kit is how you fix it.
|
|
46
76
|
|
|
47
|
-
##
|
|
77
|
+
## Telemetry
|
|
48
78
|
|
|
49
|
-
Plain `npx shippingszn@latest` sends
|
|
50
|
-
row is
|
|
79
|
+
Plain `npx shippingszn@latest` sends one anonymous Wall summary automatically.
|
|
80
|
+
The stored row is intentionally small: score, launch label, files scanned,
|
|
51
81
|
finding counts by severity, detected stack tags, scanner version, and timestamp.
|
|
82
|
+
It never includes code, file paths, filenames, project names, repo URLs,
|
|
83
|
+
secrets, emails, or any finding-level detail.
|
|
84
|
+
|
|
85
|
+
On the **first run on a machine**, the CLI prints the exact anonymous payload it
|
|
86
|
+
would send (to stderr, so it never corrupts `--json` output) and a note that you
|
|
87
|
+
can turn it off. Telemetry is default-on but fully transparent and opt-out-able:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
npx shippingszn@latest --no-telemetry # zero network calls, fully offline
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`--no-wall` is an alias for `--no-telemetry`. With telemetry off, the CLI makes
|
|
94
|
+
**no** scan-handoff upload and **no** Wall ping.
|
|
52
95
|
|
|
53
96
|
The same run also creates a scan-specific paid-report handoff. The terminal
|
|
54
97
|
prints a `/fix-kit?scanResultId=...` URL so checkout can carry that scan into
|
|
@@ -79,9 +122,38 @@ maps back to one of the items on the checklist.
|
|
|
79
122
|
- Placeholder content (`lorem ipsum`, `John Doe`, `test@example.com`) and
|
|
80
123
|
`TODO` / `FIXME` / `XXX` / `HACK` comments.
|
|
81
124
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
125
|
+
Each finding is tagged Critical, High, Medium, or Lower and maps to the relevant
|
|
126
|
+
checklist item. All of that finding-level detail is free and printed on every
|
|
127
|
+
run; the Fix Kit turns it into the human launch decision and AI-builder punch
|
|
128
|
+
list of fixes.
|
|
129
|
+
|
|
130
|
+
## Scoring
|
|
131
|
+
|
|
132
|
+
The 0-100 Readiness Score is not a black box. Each finding subtracts a fixed
|
|
133
|
+
number of penalty points from 100 based on its severity:
|
|
134
|
+
|
|
135
|
+
| Severity | Penalty per finding |
|
|
136
|
+
| -------- | ------------------- |
|
|
137
|
+
| Critical | 35 |
|
|
138
|
+
| High | 22 |
|
|
139
|
+
| Medium | 10 |
|
|
140
|
+
| Lower | 5 |
|
|
141
|
+
|
|
142
|
+
The raw score is `100 - (sum of all penalties)`, clamped to the `0-100` range.
|
|
143
|
+
The score is then floored into a severity band so the number can never contradict
|
|
144
|
+
the verdict — the most severe finding present sets the band ceiling:
|
|
145
|
+
|
|
146
|
+
| Band | Score range | Trigger |
|
|
147
|
+
| -------------------- | ----------- | ----------------------------------------- |
|
|
148
|
+
| Fix now (no-go) | 0-59 | any Critical finding caps the score at 59 |
|
|
149
|
+
| Fix-first | 60-79 | any High finding (no Critical) caps at 79 |
|
|
150
|
+
| Verify before launch | 80-89 | any Medium finding (no Critical/High) |
|
|
151
|
+
| Launchable | 90-100 | only Lower findings, or a clean scan |
|
|
152
|
+
|
|
153
|
+
So one Critical finding alone drops you to at most 59 ("Fix now") regardless of
|
|
154
|
+
how few findings there are; a single High caps you at 79 ("Fix-first"). Count
|
|
155
|
+
pressure moves the score inside its band. The CLI runs with no source-side score
|
|
156
|
+
cap — the score you see is the severity-banded score.
|
|
85
157
|
|
|
86
158
|
## Suppressing false positives
|
|
87
159
|
|
|
@@ -122,8 +194,8 @@ These are deliberately out of scope for v1:
|
|
|
122
194
|
quotas, etc.).
|
|
123
195
|
|
|
124
196
|
A clean report is **not** a launch certificate — it just means none of the
|
|
125
|
-
obvious things tripped a tripwire.
|
|
126
|
-
ship.
|
|
197
|
+
obvious things tripped a tripwire. Use the Fix Kit, owner-verification items, and
|
|
198
|
+
rerun loop before you ship.
|
|
127
199
|
|
|
128
200
|
## Usage
|
|
129
201
|
|
|
@@ -131,7 +203,10 @@ ship.
|
|
|
131
203
|
shippingszn [path] [options]
|
|
132
204
|
|
|
133
205
|
Options:
|
|
134
|
-
--json Output a machine-readable JSON summary
|
|
206
|
+
--json Output a machine-readable JSON summary (includes the
|
|
207
|
+
full findings array).
|
|
208
|
+
--no-telemetry Run fully offline: no scan handoff, no Wall ping, zero
|
|
209
|
+
network calls. (--no-wall is an alias.)
|
|
135
210
|
--proof Backward-compatible alias. Normal runs already return
|
|
136
211
|
a scan-specific Launch Fix Kit URL.
|
|
137
212
|
--base-url <url> Base URL used to build checkout and Fix Kit links.
|
|
@@ -155,17 +230,18 @@ This makes the CLI suitable for CI:
|
|
|
155
230
|
```
|
|
156
231
|
|
|
157
232
|
For PR scan signal, have GitHub Actions run the scanner and post the JSON
|
|
158
|
-
summary as a comment: score, severity counts, and unlock URL.
|
|
233
|
+
summary as a comment: score, severity counts, findings, and unlock URL.
|
|
159
234
|
|
|
160
235
|
## Privacy
|
|
161
236
|
|
|
162
237
|
`shippingszn` reads files on your machine. It never uploads source code. By
|
|
163
|
-
default it creates a
|
|
238
|
+
default it creates a scan handoff for checkout and makes one best-effort
|
|
164
239
|
outbound request to post anonymous Wall stats: score, launch label, files
|
|
165
240
|
scanned count, finding counts by severity, detected stack tags, scanner version,
|
|
166
241
|
and timestamp. Wall stats never include source code, file paths, filenames,
|
|
167
242
|
project names, repo URLs, secrets, emails, handles, finding titles, evidence, or
|
|
168
|
-
report contents. The
|
|
243
|
+
report contents. The first run on a machine prints the exact payload to stderr,
|
|
244
|
+
and `--no-telemetry` (alias `--no-wall`) turns off all network calls.
|
|
169
245
|
|
|
170
246
|
## License
|
|
171
247
|
|