2026-07-18 — XP-145 remove NIK + KTP-photo columns
What shipped
Section titled “What shipped”Dropped three empty, unprotected sensitive-identity columns end to end for PDP
data-minimisation: tutor_profiles.ktp_no, tutor_profiles.ktp_foto_ref (from
XP-127), parent_profiles.nik (from XP-21). Pure removal across 21 files +
migration 20260717222733_drop_nik_ktp_columns (3× DROP COLUMN) — schema,
contract zod, service select/insert/update-diff + before/after audit snapshots,
web api-client types + tutor/student forms + detail renders, and the removed
testids. Merge 959cc1a.
Key decisions
Section titled “Key decisions”No backfill/data-migration — columns were nullable + empty. No seam left behind:
NIK/KTP capture returns later behind a dedicated secure-upload/KYC ticket, out of
scope here. Migration generated via db:generate (pure DROP, no ADD → no
rename-TTY trap) and never drizzle-kit pushed a shared DB.
Gotchas / lessons
Section titled “Gotchas / lessons”Field-removal on existing forms still needs the 3-viewport visual gate — round-1
skipped screenshots and Stage-3 bounced it; round-2 added a
student-nik-removed-visual.spec.ts and regenerated all 12 PNGs. UX verification
in a fresh worktree hit two env gaps (no .dev.vars; db:seed seeds only RBAC +
superadmin, no domain rows) — both promoted into the playwright-local-e2e
skill.
Reference changes
Section titled “Reference changes”No canonical/locked doc changed. packages/db/src/schema/profiles.ts altered but
the removed columns were post-lock (not in domain-people-tables locked shapes),
so no locked shape broke.