# Technical debt ## P1 - EF migrations and startup reconciliation still share historical schema ownership. Keep compatibility bootstraps until a production restore rehearsal supports an expand/verify/contract migration. - `JobApplication` duplicates opportunity data now owned by `Job`. Keep dual writes and compatibility reads until the production report/restore gate passes and one observation release completes. - Background workers are single-instance; add database leasing before deploying more than one backend replica. ## P2/P3 - Central log aggregation is deployment-owned; add it only when multi-host operation or incident response requires it. - Tags remain a JSON string and attachment-purpose flags remain compatibility columns; normalize/remove only with measured need and an API/schema compatibility release. - Checklist reads intentionally seed/synchronize system items and are non-cacheable until measured workspace volume justifies separation. - Large controllers/components should be split only around a cohesive behavior change with regression coverage; do not perform a standalone rewrite. Intentional design choices are not debt: free-text statuses preserve custom user values, Next.js remains the static shell, and the current CV queue targets one backend instance.