shippingszn 0.10.1 → 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 +76 -77
  3. package/dist/index.js +264 -814
  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,46 +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
- default each run makes two anonymous requests: a scan handoff for checkout that
31
- carries finding-level detail (severity, checklist item, `file:line`, and a short
32
- evidence snippet — secret values always redacted before upload), and an
33
- aggregate Wall summary with score, severity counts, files scanned, scanner
34
- version, and safe stack tags. Neither uploads full source files, repo URLs,
35
- project names, unredacted secrets, handles, or emails. Pass `--no-telemetry` to
36
- run fully offline (zero network calls). Details in [Telemetry](#telemetry).
37
-
38
- **The free scan is the full diagnosis.** Human output prints a verdict, a
39
- higher-is-better Readiness Score, severity counts, and **every finding grouped
40
- by severity** — its severity, the checklist item it maps to, the `file:line`,
41
- and what's wrong — plus completed-checks coverage and the Fix Kit CTA. Run with
42
- `--json` to get the same in a machine-readable shape, including the full
43
- `findings` array:
17
+ default each run creates a scan handoff for checkout and sends one anonymous
18
+ Wall report-card summary with score, severity counts, files scanned, scanner
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:
44
31
 
45
32
  ```json
46
33
  {
@@ -48,20 +35,8 @@ and what's wrong — plus completed-checks coverage and the Fix Kit CTA. Run wit
48
35
  "band": "fix_first",
49
36
  "counts": { "critical": 0, "high": 11, "medium": 1, "lower": 1 },
50
37
  "filesScanned": 128,
51
- "coverage": { "checksCompleted": 19, "checklistAreas": 51 },
52
- "scannerVersion": "0.10.0",
53
- "findings": [
54
- {
55
- "checkId": "hardcoded-secrets",
56
- "itemId": "secrets",
57
- "severity": "high",
58
- "itemTitle": "Lock up your API keys and passwords",
59
- "file": "src/lib/config.ts",
60
- "line": 12,
61
- "message": "Possible hardcoded API key detected.",
62
- "permalink": "https://shippingszn.com/i/secrets"
63
- }
64
- ],
38
+ "scannerVersion": "0.11.0",
39
+ "detailsLocked": true,
65
40
  "unlockUrl": "https://shippingszn.com/fix-kit?scanResultId=00000000-0000-4000-8000-000000000123",
66
41
  "scanHandoff": {
67
42
  "status": "uploaded",
@@ -71,30 +46,49 @@ and what's wrong — plus completed-checks coverage and the Fix Kit CTA. Run wit
71
46
  }
72
47
  ```
73
48
 
74
- The findings are free. What's **paid** is the remediation layer: per-finding fix
75
- instructions, prompts to paste straight into your AI builder, the 58-item launch
76
- workbook, unlimited re-scans, and launch monitoring. The free CLI tells you
77
- 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.
78
70
 
79
71
  ## Telemetry
80
72
 
81
- Plain `npx shippingszn@latest` makes **two** anonymous requests per run:
73
+ Plain `npx shippingszn@latest` makes **two** telemetry requests per run. The
74
+ locked handoff is pseudonymous; the Wall ping is anonymous:
82
75
 
83
76
  1. **Scan handoff** (`POST /api/scan-results`) — powers the `/fix-kit` link the
84
- CLI prints. It carries finding-level detail: each finding's severity, the
85
- checklist item it maps to, its `file:line` location, and a short evidence
86
- snippet from the matched line. Secret values are always redacted to a
87
- `abc123…x9z2` form before upload. It does not include your repo URL, project
88
- name, or full source files.
89
- 2. **Aggregate Wall summary** (`POST /api/wall`) — intentionally small: score,
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,
90
84
  launch label, files scanned, finding counts by severity, detected stack
91
85
  tags, scanner version, and timestamp. No paths, no filenames, no
92
86
  finding-level detail.
93
87
 
94
- On the **first run on a machine**, the CLI prints a description of both requests
95
- plus the exact aggregate payload (to stderr, so it never corrupts `--json`
96
- output) and a note that you can turn it off. Telemetry is default-on but fully
97
- transparent and opt-out-able:
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
91
+ can turn it off. Telemetry is default-on but fully transparent and opt-out-able:
98
92
 
99
93
  ```bash
100
94
  npx shippingszn@latest --no-telemetry # zero network calls, fully offline
@@ -105,8 +99,9 @@ npx shippingszn@latest --no-telemetry # zero network calls, fully offline
105
99
 
106
100
  The same run also creates a scan-specific paid-report handoff. The terminal
107
101
  prints a `/fix-kit?scanResultId=...` URL so checkout can carry that scan into
108
- the Launch Fix Kit after purchase. `--proof` is still accepted for old docs, but
109
- 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.
110
105
 
111
106
  ## What gets checked
112
107
 
@@ -132,10 +127,10 @@ maps back to one of the items on the checklist.
132
127
  - Placeholder content (`lorem ipsum`, `John Doe`, `test@example.com`) and
133
128
  `TODO` / `FIXME` / `XXX` / `HACK` comments.
134
129
 
135
- Each finding is tagged Critical, High, Medium, or Lower and maps to the relevant
136
- checklist item. All of that finding-level detail is free and printed on every
137
- run; the Fix Kit turns it into the human launch decision and AI-builder punch
138
- 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.
139
134
 
140
135
  ## Scoring
141
136
 
@@ -213,8 +208,8 @@ rerun loop before you ship.
213
208
  shippingszn [path] [options]
214
209
 
215
210
  Options:
216
- --json Output a machine-readable JSON summary (includes the
217
- full findings array).
211
+ --json Output a machine-readable score, severity counts, and
212
+ launch band summary.
218
213
  --no-telemetry Run fully offline: no scan handoff, no Wall ping, zero
219
214
  network calls. (--no-wall is an alias.)
220
215
  --proof Backward-compatible alias. Normal runs already return
@@ -240,18 +235,22 @@ This makes the CLI suitable for CI:
240
235
  ```
241
236
 
242
237
  For PR scan signal, have GitHub Actions run the scanner and post the JSON
243
- summary as a comment: score, severity counts, findings, and unlock URL.
238
+ summary as a comment: score, severity counts, launch band, and unlock URL.
244
239
 
245
240
  ## Privacy
246
241
 
247
242
  `shippingszn` reads files on your machine. It never uploads source code. By
248
- default it creates a scan handoff for checkout and makes one best-effort
249
- outbound request to post anonymous Wall stats: score, launch label, files
250
- scanned count, finding counts by severity, detected stack tags, scanner version,
251
- and timestamp. Wall stats never include source code, file paths, filenames,
252
- project names, repo URLs, secrets, emails, handles, finding titles, evidence, or
253
- report contents. The first run on a machine prints the exact payload to stderr,
254
- 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.
255
254
 
256
255
  ## License
257
256