What good proof looks like
Proof is not a feeling. It is the output of verification commands and git history. Every handoff you write should answer two questions: did the build pass, and can someone else see exactly what changed?
Proof packet pipeline
Proof packet anatomy
Every handoff packet must include the literal output of git show --stat HEAD and git show --name-only HEAD. No exceptions. The six examples below show the format for web, backend, and mobile tasks.
Key idea
Web copy change: rewrite one FAQ answer
Scope
Update a single FAQ answer to be clearer and shorter.
Hotspot boundaries
app/faq/page.tsx
Verification commands
npx tsc --noEmitnpm run build
Commit message
fix(faq): rewrite billing answer for clarity
Example handoff packet
HANDOFF PACKET
Summary: Rewrote the billing FAQ answer. Removed jargon, shortened to two sentences.
Files changed: app/faq/page.tsx (1 file, 4 insertions, 6 deletions)
Verification:
npx tsc --noEmit 0 errors
npm run build all routes rendered, 0 errors
Git proof:
git show --stat HEAD
<commit sha> (HEAD -> main)
app/faq/page.tsx | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
git show --name-only HEAD
<commit sha> (HEAD -> main)
app/faq/page.tsxWeb bug fix: missing import causes build error
Scope
Fix a build failure caused by a missing import or mismatched dependency.
Hotspot boundaries
app/pricing/page.tsxpackage.json (read only, verify dep exists)
Verification commands
npx tsc --noEmitnpm run build
Commit message
fix(pricing): add missing Link import
Example handoff packet
HANDOFF PACKET
Summary: Build failed because Link was used but not imported. Added the import.
Files changed: app/pricing/page.tsx (1 file, 1 insertion)
Verification:
npx tsc --noEmit 0 errors (was 1 error before fix)
npm run build all routes rendered, 0 errors
Git proof:
git show --stat HEAD
<commit sha> (HEAD -> main)
app/pricing/page.tsx | 1 +
1 file changed, 1 insertion(+)
git show --name-only HEAD
<commit sha> (HEAD -> main)
app/pricing/page.tsxWeb feature add: new section on a page
Scope
Add a "Do this in order" checklist section to the start page.
Hotspot boundaries
app/start/page.tsx
Verification commands
npx tsc --noEmitnpm run build
Commit message
feat(start): add step-by-step checklist section
Example handoff packet
HANDOFF PACKET
Summary: Added a 4-step checklist section between the intro and the CTA.
Files changed: app/start/page.tsx (1 file, 38 insertions)
Verification:
npx tsc --noEmit 0 errors
npm run build all routes rendered, /start is static, 0 errors
Git proof:
git show --stat HEAD
<commit sha> (HEAD -> main)
app/start/page.tsx | 38 ++++++++++++++++++++++++++++++++++++++
1 file changed, 38 insertions(+)
git show --name-only HEAD
<commit sha> (HEAD -> main)
app/start/page.tsxBackend endpoint add: new API route
Scope
Add a POST endpoint that accepts a JSON body and returns a confirmation.
Hotspot boundaries
app/api/example/route.ts (new)
Verification commands
npx tsc --noEmitnpm run buildcurl -s -X POST http://localhost:3000/api/example -H "Content-Type: application/json" -d '{"name":"test"}'
Commit message
feat(api): add example endpoint
Example handoff packet
HANDOFF PACKET
Summary: Created POST /api/example. Accepts { name: string }, returns { ok: true, name }.
Files changed: app/api/example/route.ts (1 new file, 22 insertions)
Verification:
npx tsc --noEmit 0 errors
npm run build /api/example listed as dynamic, 0 errors
curl POST returned {"ok":true,"name":"test"} with HTTP 200
Git proof:
git show --stat HEAD
<commit sha> (HEAD -> main)
app/api/example/route.ts | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
git show --name-only HEAD
<commit sha> (HEAD -> main)
app/api/example/route.tsMobile UI change: update a screen layout
Scope
Reorganize a React Native screen so the action button is pinned to the bottom.
Hotspot boundaries
src/screens/HomeScreen.tsx
Verification commands
npx tsc --noEmitnpx expo exportManual: open simulator, confirm button is pinned to bottom of screen
Commit message
fix(home): pin action button to bottom of screen
Example handoff packet
HANDOFF PACKET
Summary: Moved the action button into a sticky footer container using flex.
Files changed: src/screens/HomeScreen.tsx (1 file, 12 insertions, 8 deletions)
Verification:
npx tsc --noEmit 0 errors
npx expo export bundle compiled, 0 errors
Simulator check button is visible at bottom on iPhone 15 and Pixel 7
Git proof:
git show --stat HEAD
<commit sha> (HEAD -> main)
src/screens/HomeScreen.tsx | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
git show --name-only HEAD
<commit sha> (HEAD -> main)
src/screens/HomeScreen.tsxMobile icon update: replace app icon asset
Scope
Replace the app icon with a new design and regenerate native assets.
Hotspot boundaries
assets/icon.png (replaced)app.json (icon field, no other changes)
Verification commands
npx expo prebuild --cleanConfirm ios/<project>/Images.xcassets/AppIcon.appiconset contains new iconsConfirm android/app/src/main/res/mipmap-* contains new iconsBuild and install on simulator to verify icon appearsIf distributing: upload to TestFlight or internal testing track and confirm icon in store listing
Commit message
chore(assets): update app icon and regenerate native assets
Example handoff packet
HANDOFF PACKET
Summary: Replaced assets/icon.png. Ran prebuild to regenerate iOS and Android icon sets. Verified on simulator.
Files changed: assets/icon.png, ios/ and android/ regenerated icon sets
Verification:
npx expo prebuild --clean completed, no errors
iOS simulator new icon visible on home screen
Android emulator new icon visible in app drawer
TestFlight (if applicable) new icon confirmed in build details
Git proof:
git show --stat HEAD
<commit sha> (HEAD -> main)
assets/icon.png | Bin 12040 -> 15320 bytes
app.json | 0
2 files changed, 0 insertions(+), 0 deletions(-)
(native dirs in .gitignore, regenerated locally)
git show --name-only HEAD
<commit sha> (HEAD -> main)
assets/icon.png
app.jsonUse this format on every task
Copy any example above as a starting point. Replace the placeholders with your actual command output. The goal is zero ambiguity about what changed and whether it works.
View the toolkitPlan. Build. Prove. The proof packet is the last step before handoff.