Skip to content

2026-07-18 — XP-145 remove NIK + KTP-photo columns

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.

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.

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.

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.