pa.gf.cx contractors — canonical-record architecture
Date: 2026-05-21 · Status: Phase 1 shipped (section live, 2 pending-vetting records + property cross-section), Phase 2 parked (BBB automation, reviews distill)
The architectural answer to Dan’s question
“Do these references live inside the car record (likely yes) but they live at the Contractor level, then become applied to sub-categories, right?”
Yes — contractor records are canonical, asset records reference them. Same exact pattern as the existing equipment-vendor relationship (N&J General Repair, Newtown Homeware) — lifted into its own first-class section because vetting + reviews + multi-asset reference patterns deserve a dedicated home.
Topology — where records live + how they reference each other
pa.gf.cx/contractors/ ← canonical truth
─────────────────────
│
┌──────────────┬──┴───────────┬────────────────┐
│ │ │ │
▼ ▼ ▼ ▼
Apple Earl's Newtown Homeware N&J General
Graphics Sealcoating (to migrate) Repair
(wraps, (driveway) (to migrate)
tint,
signage)
Asset records reference contractors via link, never embed:
──────────────────────────────────────────────────────────
pa/vehicles/bmw-2013 ──→ /contractors/apple-graphics
(window tinting)
pa/vehicles/ford-f250-2007 ──→ /contractors/apple-graphics
(full vehicle wrap)
pa/property/front-gate ──→ /contractors/<gate-firm>
(replace/automate) (pending shortlist)
pa/household/miele-c3 ──→ /contractors/newtown-homeware
(service) (currently inline; to migrate)
pa/equipment/john-deere ──→ /contractors/n-and-j-repair
(annual service) (currently inline; to migrate)
Key property: the link is unidirectional — asset records point at contractor records, never the other direction. The contractor record’s history log captures the reverse (which assets it’s been used on) as service-log entries get added.
Status taxonomy — vetting lifecycle
┌───────────────┐ BBB ok + ┌──────────────────┐
│ PENDING │ reviews ok + │ SHORTLISTED │
│ vetting │ ──first call──▶ │ not yet hired │
└───────┬───────┘ positive └────────┬─────────┘
│ │
│ BBB bad OR │ estimate signed +
│ reviews bad OR │ first job booked
│ wrong service area │
▼ ▼
┌───────────────┐ ┌──────────────────┐
│ REJECTED │ │ ENGAGED │
│ (notes WHY) │ │ has service │
└───────────────┘ │ log entries │
└──────────────────┘
Each state is captured in the contractor record’s Status field. REJECTED records stay in the directory (not deleted) so the “why we ruled them out” reasoning persists — prevents re-evaluating the same firm twice.