The dist-stale bug (deployed onCoupleKeyRotated lacked committed src twice) was
one instance of a class: a tracked build artifact whose source is elsewhere,
with no guard they match. Fix it at the root — don't track the artifact.
- functions/dist: git rm --cached (104 files) + gitignored. src is truth; dist
is tsc output that ships (main: dist/index.js). The predeploy hook already
builds it at deploy and backend-ci builds it for tests, so the old
"committed for reproducibility" rationale is dead — committing it only hid
drift behind noisy .js/.js.map diffs. You cannot ship stale what you don't
track; a deploy on a fresh clone now fails loudly (missing dist) instead of
shipping old code.
- app/schemas: deleted the stale com.couplesconnect.app.data.local dir — dead
cruft from the package rename to app.closer, and living proof the class isn't
hypothetical. The live app.closer schema stays committed (legitimate Room
migration provenance, validated by AssetDatabaseVerifyTest).
- ERM rewritten: the dist-committed convention is reversed; the app.db + schema
cousins documented as same-class-but-guarded.
No behavior change — dist remains on disk (untracked) so local/predeploy/CI
builds and deploys are unaffected.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>