shippingszn 0.10.0 → 0.11.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 +79 -70
  3. package/dist/index.js +395 -824
  4. package/package.json +14 -10
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 Ryan Zaucha
3
+ Copyright (c) 2026 shippingszn llc
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,44 +1,33 @@
1
1
  # shippingszn
2
2
 
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
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.
12
7
 
13
8
  ```bash
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
9
+ npx shippingszn@latest
17
10
  # or
18
11
  pnpm dlx shippingszn@latest
19
12
  ```
20
13
 
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
14
  The CLI **never writes, modifies, or deletes** any files - it only reads. (The
28
15
  one exception is a tiny first-run marker under your config dir,
29
16
  `~/.config/shippingszn/seen`, used to show the telemetry notice once.) By
30
17
  default each run creates a scan handoff for checkout and sends one anonymous
31
18
  Wall report-card summary with score, severity counts, files scanned, scanner
32
- version, and safe stack tags. It never uploads source code, repo URLs, project
33
- names, secrets, handles, or emails. Pass `--no-telemetry` to run fully offline
34
- (zero network calls).
35
-
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:
19
+ version, and safe stack tags. The handoff includes a stable opaque project
20
+ fingerprint so shippingszn can recognize matched paid rescans without receiving
21
+ the repo URL, project name, or absolute project path. It never uploads matched
22
+ source lines, source-file contents, unredacted secrets, handles, or emails.
23
+ Pass `--no-telemetry` to run fully offline (zero network calls).
24
+
25
+ **The free scan is the launch scoreboard.** Its result contains only a verdict,
26
+ a higher-is-better Readiness Score, severity counts, and a launch band. It does
27
+ not reveal finding titles, checklist content, file paths, evidence, fix steps,
28
+ or AI-builder prompts. The Fix Kit CTA and locked handoff metadata stay visible
29
+ so the matched project can be purchased. Run with `--json` to get the same
30
+ score-level result in a machine-readable shape:
42
31
 
43
32
  ```json
44
33
  {
@@ -46,20 +35,8 @@ and what's wrong — plus completed-checks coverage and the Fix Kit CTA. Run wit
46
35
  "band": "fix_first",
47
36
  "counts": { "critical": 0, "high": 11, "medium": 1, "lower": 1 },
48
37
  "filesScanned": 128,
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
- ],
38
+ "scannerVersion": "0.11.0",
39
+ "detailsLocked": true,
63
40
  "unlockUrl": "https://shippingszn.com/fix-kit?scanResultId=00000000-0000-4000-8000-000000000123",
64
41
  "scanHandoff": {
65
42
  "status": "uploaded",
@@ -69,21 +46,48 @@ and what's wrong — plus completed-checks coverage and the Fix Kit CTA. Run wit
69
46
  }
70
47
  ```
71
48
 
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.
49
+ ### Upgrading from 0.10.x
50
+
51
+ Version 0.11 intentionally removes the `findings` array from free human and
52
+ JSON output. JSON responses now set `detailsLocked` to `true` and expose only
53
+ the score, severity counts, launch band, and paid handoff metadata. The 0.10
54
+ line is superseded and unsupported; consumers of its old finding-level JSON
55
+ must migrate to the score-level 0.11 contract.
56
+
57
+ One $49 Launch Fix Kit is bound to one matched project. It includes the exact
58
+ findings, file evidence, per-finding fix instructions, AI-builder prompts, the
59
+ full 58-item launch workbook, and unlimited matched re-scans for that project.
60
+ One global Codex OAuth connection works from any local Codex project, but paid
61
+ data for an unrelated project is denied. Checkout purchases the Fix Kit but
62
+ does not sign you in; OTP sign-in is required before paid report or OAuth
63
+ access. Compatible legacy purchases that predate secure project binding can be
64
+ linked once from Account when their original repository scan and paid report
65
+ context are still available: run a fresh score-only scan in the exact project,
66
+ select the exact owned purchase, and permanently confirm that one project. If
67
+ Account says that context is missing or incompatible, use
68
+ https://shippingszn.com/support#codex-mcp for a manual access review. Recurring
69
+ launch monitoring is a separate product and is not included in the Fix Kit.
76
70
 
77
71
  ## Telemetry
78
72
 
79
- Plain `npx shippingszn@latest` sends one anonymous Wall summary automatically.
80
- The stored row is intentionally small: score, launch label, files scanned,
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
73
+ Plain `npx shippingszn@latest` makes **two** telemetry requests per run. The
74
+ locked handoff is pseudonymous; the Wall ping is anonymous:
75
+
76
+ 1. **Scan handoff** (`POST /api/scan-results`) — powers the `/fix-kit` link the
77
+ CLI prints. It carries a stable pseudonymous project fingerprint used only
78
+ to match paid rescans and enforce one-project access. It also carries each
79
+ finding's severity, checklist item, `file:line` location, and a short derived
80
+ or redacted evidence category. It never carries matched source lines,
81
+ source-file contents, the repo URL, project name, absolute project path, or
82
+ unredacted secret values.
83
+ 2. **Aggregate Wall ping** (`POST /api/wall`) — intentionally small: score,
84
+ launch label, files scanned, finding counts by severity, detected stack
85
+ tags, scanner version, and timestamp. No paths, no filenames, no
86
+ finding-level detail.
87
+
88
+ On the **first run on a machine**, the CLI prints a description of both requests,
89
+ including the stable project fingerprint category, plus the exact aggregate
90
+ payload (to stderr, so it never corrupts `--json` output) and a note that you
87
91
  can turn it off. Telemetry is default-on but fully transparent and opt-out-able:
88
92
 
89
93
  ```bash
@@ -95,8 +99,9 @@ npx shippingszn@latest --no-telemetry # zero network calls, fully offline
95
99
 
96
100
  The same run also creates a scan-specific paid-report handoff. The terminal
97
101
  prints a `/fix-kit?scanResultId=...` URL so checkout can carry that scan into
98
- the Launch Fix Kit after purchase. `--proof` is still accepted for old docs, but
99
- it is no longer required.
102
+ the project-bound Launch Fix Kit after purchase. Checkout does not sign you in;
103
+ complete OTP sign-in to open the paid Kit. `--proof` is still accepted for old
104
+ docs, but it is no longer required.
100
105
 
101
106
  ## What gets checked
102
107
 
@@ -122,10 +127,10 @@ maps back to one of the items on the checklist.
122
127
  - Placeholder content (`lorem ipsum`, `John Doe`, `test@example.com`) and
123
128
  `TODO` / `FIXME` / `XXX` / `HACK` comments.
124
129
 
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.
130
+ Internally, each finding is tagged Critical, High, Medium, or Lower and maps to
131
+ the relevant checklist item. The free output rolls those findings into the
132
+ scoreboard. The Fix Kit opens the finding-level diagnosis, human launch
133
+ decision, and AI-builder punch list.
129
134
 
130
135
  ## Scoring
131
136
 
@@ -203,8 +208,8 @@ rerun loop before you ship.
203
208
  shippingszn [path] [options]
204
209
 
205
210
  Options:
206
- --json Output a machine-readable JSON summary (includes the
207
- full findings array).
211
+ --json Output a machine-readable score, severity counts, and
212
+ launch band summary.
208
213
  --no-telemetry Run fully offline: no scan handoff, no Wall ping, zero
209
214
  network calls. (--no-wall is an alias.)
210
215
  --proof Backward-compatible alias. Normal runs already return
@@ -230,18 +235,22 @@ This makes the CLI suitable for CI:
230
235
  ```
231
236
 
232
237
  For PR scan signal, have GitHub Actions run the scanner and post the JSON
233
- summary as a comment: score, severity counts, findings, and unlock URL.
238
+ summary as a comment: score, severity counts, launch band, and unlock URL.
234
239
 
235
240
  ## Privacy
236
241
 
237
242
  `shippingszn` reads files on your machine. It never uploads source code. By
238
- default it creates a scan handoff for checkout and makes one best-effort
239
- outbound request to post anonymous Wall stats: score, launch label, files
240
- scanned count, finding counts by severity, detected stack tags, scanner version,
241
- and timestamp. Wall stats never include source code, file paths, filenames,
242
- project names, repo URLs, secrets, emails, handles, finding titles, evidence, or
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.
243
+ default it makes two requests. The locked checkout handoff contains a stable
244
+ pseudonymous project fingerprint plus each finding's severity, checklist item,
245
+ relative file-and-line location, and short derived or redacted evidence
246
+ category; it never contains matched source lines, source-file contents, an
247
+ absolute project path, or unredacted secrets. The anonymous Wall request
248
+ contains only score, launch label, files-scanned count, severity counts,
249
+ detected stack tags, scanner version, and timestamp. It never contains file
250
+ paths, filenames, project names, repo URLs, emails, handles, finding titles,
251
+ evidence, or report contents. The first run on a machine prints this contract
252
+ and that run's exact aggregate Wall values to stderr. `--no-telemetry` (alias
253
+ `--no-wall`) turns off both requests and every other network call.
245
254
 
246
255
  ## License
247
256