shippingszn 0.9.7 → 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 +103 -28
- package/dist/index.js +1617 -1907
- package/package.json +5 -8
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -1,27 +1,44 @@
|
|
|
1
1
|
# shippingszn
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
Human output
|
|
22
|
-
severity counts,
|
|
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
|
{
|
|
@@ -30,7 +47,19 @@ score-and-counts summary in a machine-readable shape:
|
|
|
30
47
|
"counts": { "critical": 0, "high": 11, "medium": 1, "lower": 1 },
|
|
31
48
|
"filesScanned": 128,
|
|
32
49
|
"coverage": { "checksCompleted": 19, "checklistAreas": 51 },
|
|
33
|
-
"
|
|
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 @@ score-and-counts summary in a 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,10 +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
|
-
|
|
85
|
-
list.
|
|
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.
|
|
86
157
|
|
|
87
158
|
## Suppressing false positives
|
|
88
159
|
|
|
@@ -132,7 +203,10 @@ rerun loop before you ship.
|
|
|
132
203
|
shippingszn [path] [options]
|
|
133
204
|
|
|
134
205
|
Options:
|
|
135
|
-
--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.)
|
|
136
210
|
--proof Backward-compatible alias. Normal runs already return
|
|
137
211
|
a scan-specific Launch Fix Kit URL.
|
|
138
212
|
--base-url <url> Base URL used to build checkout and Fix Kit links.
|
|
@@ -156,17 +230,18 @@ This makes the CLI suitable for CI:
|
|
|
156
230
|
```
|
|
157
231
|
|
|
158
232
|
For PR scan signal, have GitHub Actions run the scanner and post the JSON
|
|
159
|
-
summary as a comment: score, severity counts, and unlock URL.
|
|
233
|
+
summary as a comment: score, severity counts, findings, and unlock URL.
|
|
160
234
|
|
|
161
235
|
## Privacy
|
|
162
236
|
|
|
163
237
|
`shippingszn` reads files on your machine. It never uploads source code. By
|
|
164
|
-
default it creates a
|
|
238
|
+
default it creates a scan handoff for checkout and makes one best-effort
|
|
165
239
|
outbound request to post anonymous Wall stats: score, launch label, files
|
|
166
240
|
scanned count, finding counts by severity, detected stack tags, scanner version,
|
|
167
241
|
and timestamp. Wall stats never include source code, file paths, filenames,
|
|
168
242
|
project names, repo URLs, secrets, emails, handles, finding titles, evidence, or
|
|
169
|
-
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.
|
|
170
245
|
|
|
171
246
|
## License
|
|
172
247
|
|