A data inventory is a file, and it maps personal data

A deletion request arrives and the first question is where the data is, which is not a question anybody can answer from memory.

customers:
  personal: [name, email, phone, address_line_1]
  action: anonymise
  reason: order history must survive for accounting

order_events:
  personal: [payload.customer_email]
  action: redact-json-path

audit_log:
  personal: [actor_email, ip_address]
  action: retain
  reason: legal basis is legitimate interest, 7 years

The reason field is what makes this defensible rather than merely a list — a decision to retain needs a stated basis, and writing it down when the table is created is much easier than reconstructing it under a deadline. A CI check that fails when a migration adds a column not covered by the inventory is the mechanism that keeps it current.