Bilko — Retention entity_type mapping (V133, MC #105965) Retention entity_type mapping (V133) MC: #105965 (parent #105872 audit-trail program) · Autor: Bruce Momjian (CodeCraft) · Verdict: PASS (FORGE MLX peer-verify PASS) · Grana: azdo feat/105965-entity-type-mapping (nije u main) Problem document_retention_manifest.entity_type je čuvao IMENA TABELA ('expenses','inbox_items' iz B5), a entity_type_retention_policy (B1) je seedovana PRAVNIM KATEGORIJAMA ('isprave','eracun'). Nisu se mapirali → RetentionPurgeWorker fail-safe skip → dry-run nalazi ~0 kandidata. Worker je (linije 53-68, 336-342) eksplicitno imenovao ovaj gap kao MC #105965. Rješenje — dedicated lookup tabela entity_type_mapping(jurisdiction, table_entity_type, legal_entity_type) (V133). Odluka: zasebna tabela, NE kolona na policy tabeli. Zašto tabela, ne kolona: composite FOREIGN KEY (jurisdiction, legal_entity_type) → entity_type_retention_policy(jurisdiction, entity_type) na DB nivou onemogućava da mapping red pokazuje na nepostojeću pravnu kategoriju (dokazano V133MigrationTest FK-rejection testom). Kolona bi rekreirala isti "entity_type znači dvije stvari" ambiguitet i ne bi izrazila jurisdikcijski-skoupovanu many-to-one vezu. Seed: HR + BA_FED expenses/inbox_items → isprave. RS / BA_RS namjerno NEmapirani — nema odgovarajućeg policy reda (zasebna pravna-verifikaciona rupa, MC follow-up, NE izmišljati kategorije). Worker: rezolvira entity_type kroz mapping prvo; ako nemapiran, fallback = tretira entity_type kao već-pravnu-kategoriju (čuva staro ponašanje za fixture koji koriste 'isprave' direktno); fail-safe skip samo ako oba lookupa promaše. Testovi (V121 standard, Testcontainers postgres:16) 21/21 zeleno: V133MigrationTest (5: seed exactness, UNIQUE, CHECK, composite-FK rejection, grants) + 16 RetentionPurgeWorkerTest uklj. candidatesFound > 0 na realnom seedu + companion "ukloni mapping red → isti kandidat nestane" (doslovni V121 'dokaz = ukloni → test pada'). V131/V132 regresija re-run zelena. Odnos prema purge lancu Ovo je PREP: odblokira #105881 (B2 dry-run) . B3 live purge (#105882) ostaje CEO-sign-off gated — nijedan živi DELETE nije pokrenut. Evidence: ~/system/evidence/105965/verdict.md .