Review packet
Do not skim this one
14 files · +86 −8 · about 2 min. 5 high-priority findings. First pass: index.ts, fixture.ts, verify.ts.
Reading order
-
01
src/api/index.ts
Public export changed Then this -
02
src/webhooks/fixture.ts
Secret-shaped string added Read now -
03
src/webhooks/verify.ts
Signature compared with == Read now -
04
.github/workflows/release.yml
Workflow grants write permissions Read now -
05
src/billing/invoice.ts
Billing path changed Then this -
06
test/webhooks/verify.test.ts
Test file deleted Read now -
07
migrations/2026_09_23_api_keys.sql
Schema change Read now -
08
src/billing/charge.ts
Billing path changed Then this -
09
package.json
Dependency manifest changed Then this -
10
Dockerfile
Runtime packaging changed Then this -
11
test/billing/charge.test.ts
Tests Can wait -
12
docs/webhooks.md
Docs Can wait -
13
package-lock.json
Lockfile changed Can wait -
14
src/generated/types.ts
Generated file Can wait
Findings
Pattern: Stripe live key. If it is real, rotate it. If it is a fixture, use an obvious placeholder.
Equality on a digest leaks timing. A constant-time compare belongs on the raw bytes, and the two sides need to be the same length.
A stolen token in this workflow can push code or publish a package. Read the permission block before the step list.
Deleted coverage does not come back on its own. Check the replacement test, or the reason there isn't one.
Read the up path and how it rolls back. A default on a hot table is still a migration.
Read the behavior here before docs, lockfiles, or generated code.
Read the behavior here before docs, lockfiles, or generated code.
Nothing in this diff covers “invoice”. If the change is pure wiring, say so in the pull request.
Read the new range here. The lockfile, later in the packet, is the resolved pin.
Image, cluster, or infra changed. Read it before the changelog.
This is the contract other callers will see. Read it before the implementation that backs it.
Skim this after the manifest. You are looking for a surprise package, not a line-by-line read.
Review the source that generates it. This file can wait.
Files
src/api/index.ts
medium Public export changed. This is the contract other callers will see. Read it before the implementation that backs it.
src/webhooks/fixture.ts
high Secret-shaped string added. Pattern: Stripe live key. If it is real, rotate it. If it is a fixture, use an obvious placeholder.
src/webhooks/verify.ts
high Signature compared with ==. Equality on a digest leaks timing. A constant-time compare belongs on the raw bytes, and the two sides need to be the same length.
.github/workflows/release.yml
high Workflow grants write permissions. A stolen token in this workflow can push code or publish a package. Read the permission block before the step list.
src/billing/invoice.ts
medium Billing path changed. Read the behavior here before docs, lockfiles, or generated code.
medium Behavior changed without a matching test. Nothing in this diff covers “invoice”. If the change is pure wiring, say so in the pull request.
test/webhooks/verify.test.ts
high Test file deleted. Deleted coverage does not come back on its own. Check the replacement test, or the reason there isn't one.
migrations/2026_09_23_api_keys.sql
high Schema change. Read the up path and how it rolls back. A default on a hot table is still a migration.
src/billing/charge.ts
medium Billing path changed. Read the behavior here before docs, lockfiles, or generated code.
package.json
medium Dependency manifest changed. Read the new range here. The lockfile, later in the packet, is the resolved pin.
Dockerfile
medium Runtime packaging changed. Image, cluster, or infra changed. Read it before the changelog.
test/billing/charge.test.ts
docs/webhooks.md
package-lock.json
medium Lockfile changed. Skim this after the manifest. You are looking for a surprise package, not a line-by-line read.
src/generated/types.ts
info Generated file. Review the source that generates it. This file can wait.