DESIGN — Proof of Good Care (PoGC) for ShipTime + Warehowz
Status: Prototype built (src/care-document.js, runs --demo)
Date: 2026-06-01
Audience: Austin Lewis / PAID, Inc. (ShipTime + Warehowz) + Rich Wheeless (Rootz CFO)
1. The thesis in one sentence
After Montgomery v. Caribe Transport (9-0, May 14 2026), every party in a shipment owes a documentable duty of care, and the absence of a record is itself evidence of negligence — so the shipping document needs to stop being a label and start being a signed, court-ready proof of care that travels with the goods.
PAID, Inc. is one of the only companies positioned to issue that document, because it owns both ends of the lifecycle:
No one else in the SMB shipping market (Shippo, ShipStation, EasyPost) touches both. That overlap is the moat.
2. The four duties of care (and the law behind each)
freight.rootz.global already produces the selection receipt. PoGC extends it across all four:
| Stage | Who owes the duty | Legal authority | Evidence that discharges it |
|---|---|---|---|
| Carrier selection | Broker | Montgomery v. Caribe 608 U.S. ___ (2026) | FMCSA vetting record + risk score + timestamp + hash |
| Custody / handling | Carrier | Carmack Amendment, 49 U.S.C. §14706 | Condition at tender + at delivery (prima facie case) |
| Storage | Warehouse | UCC Art. 7, §7-204 (reasonable care / bailment) | Condition in + condition out + storage conditions |
| Documentation | Everyone | Montgomery: "no record = evidence of negligence" | A complete, unbroken, tamper-evident chain |
The existing vetting-record.js already covers row 1 perfectly. PoGC adds rows 2–4 and binds all four into one document.
3. What we built
src/care-document.js — a hash-chained duty-of-care ledger:
createCareDocument(shipment, parties, {vetting}) — opens the document (ShipTime, at label time). If a vetting-record.js result is passed, the Montgomery CARRIER_SELECTION event is seeded automatically.appendCareEvent(doc, stage, entry) — adds a custody handoff. Each event stores its evidence + prev_hash and computes its own event_hash, so the ledger is a tamper-evident chain (same SHA-256 spine as attestation.js).scoreCare(doc) — a 0–100 Care Score (Grade A–F): the at-a-glance number an insurer, court, or AI agent reads to answer "was this handled with documented care?"verifyCareDocument(doc) — re-derives every hash. Anyone can verify with nothing but SHA-256 — no Rootz account, no API key, no trust in us.renderCertificate(doc) — human-readable certificate (and the basis for the PDF/printed BOL addendum).The demo runs a $48K reefer load of strawberries: brokered → tendered → picked up → warehoused (in/out) → delivered, scores 100/100 (Grade A), then proves the chain breaks the instant someone backdates the warehouse temperature.
This mirrors what's already real in the codebase: the PWA captures condition photos, seals, temps, and VINs in the field; PoGC is the structure those captures sign into.
4. How it plugs into PAID's stack
``
SHIPPER ──┐
│ ShipTime quote + label (PAID Inc)
▼
┌─────────────────────────────────────────────────────────┐
│ ShipTime label API │
│ → calls FreightProof createVettingRecord(carrierDOT) │ ← Montgomery defense
│ → createCareDocument(shipment, parties, {vetting}) │ ← opens PoGC
│ → prints PoGC QR + URL onto the shipping label │
└─────────────────────────────────────────────────────────┘
│
PWA (driver / dock) appendCareEvent: ORIGIN_TENDER, PICKUP_HANDOFF, DELIVERY
│
┌─────────────────────────────────────────────────────────┐
│ Warehowz deal (when a load is stored) │
│ → appendCareEvent: WAREHOUSE_IN / WAREHOUSE_OUT │ ← UCC §7-204 bailment
│ → condition, seal, temp log, photos from the dock app │
└─────────────────────────────────────────────────────────┘
│
▼
PoGC document, hash-chained + Care Score, anchored on Polygon
Resolvable + verifiable at freight.rootz.global/care/{id}
`
Three integration points, smallest first:
appends tender/pickup/delivery events. No new app — a new capture mode.5. Why each PAID stakeholder cares
6. Why Rootz, specifically
The document is self-verifying — anyone re-runs SHA-256 and confirms it, no Rootz dependency. That is the whole point and the reason a court accepts it. Rootz's role:
root-hash + the PQ wallet's Merkle/epoch work).This is the same Rootz pattern as Origin and the data wallet: we make the proof easy to create; the proof stands on its own without us.
7. Build sequence
| Phase | Work | Output |
|---|---|---|
| 0 — done | care-document.js ledger + score + verify + demo | Runnable prototype |
| 1 — done | care_documents table, care-store.js, server routes (/care/:id HTML + .json, POST /api/care, /event, /verify, /demo`) | Shareable, verifiable document — live |
| 2 | ShipTime label-time hook (vetting → PoGC → QR on label) | Sellable selection-receipt product |
| 3 | PWA capture mode → appendCareEvent for tender/pickup/delivery | Field-signed handoffs |
| 4 | Warehowz intake/outtake → WAREHOUSE_IN/OUT events | End-to-end, PAID-only differentiator |
| 5 | Polygon anchor of chain_root (reuse attestation.js + PQ Merkle) | Court-grade immutability |
| 6 | Insurer Care-Score feed | Underwriting / premium-share revenue |
8. The pitch line for the call
> "ShipTime already prints the label. Warehowz already holds the goods. After Montgomery, the one thing missing is the proof that everyone in the chain took care — and you're the only shipping company that touches every point where that proof is made. We make that document, it travels with the freight, and it holds up in court because anyone can verify it without trusting us. Print it on the label you already print."