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.
Files changed (4) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +103 -28
  3. package/dist/index.js +1617 -1907
  4. package/package.json +5 -8
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 shippingszn llc
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,27 +1,44 @@
1
1
  # shippingszn
2
2
 
3
- Primary local launch inspector for AI-built apps. Run it inside the app you are
4
- about to ship to catch the launch debt AI builders commonly miss: leaked API
5
- keys, missing crawl assets, weak browser defenses, dangerous code patterns, and
6
- last-mile polish gaps.
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
- The CLI **never writes, modifies, or deletes** any files - it only reads.
15
- Normal runs create a locked scan handoff for checkout and send one anonymous
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. Finding-level detail stays out of public
19
- CLI/Wall output and opens inside the paid Launch Fix Kit.
33
+ names, secrets, handles, or emails. Pass `--no-telemetry` to run fully offline
34
+ (zero network calls).
20
35
 
21
- Human output starts with a verdict, a higher-is-better Readiness Score,
22
- severity counts, a short plain-English launch-risk explanation, completed
23
- checks, and the locked Fix Kit handoff. Run with `--json` to get the same
24
- score-and-counts summary in a machine-readable shape:
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
- "detailsLocked": true,
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
- Finding titles, files, evidence, AI-builder punch list, and verification steps
44
- are paid. The free CLI explains why the score matters, but the actual fixes
45
- unlock inside the Launch Fix Kit.
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
- ## Aggregate summary
77
+ ## Telemetry
48
78
 
49
- Plain `npx shippingszn@latest` sends the Wall summary automatically. The stored
50
- row is anonymous and intentionally small: score, launch label, files scanned,
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
- Internally each finding is tagged Critical, High, Medium, or Lower and maps to
83
- the relevant checklist item. The free CLI output keeps that finding-level detail
84
- locked; the Fix Kit turns it into the human launch decision and AI-builder punch
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 locked scan handoff for checkout and makes one best-effort
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 Wall summary is automatic and not user-configurable.
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