Mirrored from GitHub github.com/roostorg/coop

Replace dotenv with Node's built-in --env-file-if-exists (#929) master

* Replace dotenv with Node's built-in --env-file-if-exists Node 24 (this repo's runtime) has a built-in flag that loads a .env file when present and silently no-ops when absent - exactly the behavior dotenv/config provided. Remove the dotenv package from server and db, and switch all invocations to . Key details: - (not ) preserves the silent no-op when .env is absent, matching dotenv/config. CI/prod get env from the docker-compose directive, so .env is not present there. - is NOT allowed in NODE_OPTIONS, so the test scripts were restructured to invoke directly while keeping the ts-node loader in NODE_OPTIONS. - Removed from 4 test/e2e fixture files; env is now loaded by the node flag before any module reads process.env. - Removed dotenv from db/knip.json ignoreDependencies (no longer needed). - Updated db/src/index.ts shebang and db/README.md. uuid was NOT removed: the server uses v1 (timestamp) UUIDs in 23 files, and crypto.randomUUID() only generates v4 - there is no Node built-in replacement for v1. Co-Authored-By: pi * Remove redundant env-loading comments The comments restated the env-loading mechanism; removing them keeps the files clean. Behavior unchanged. Co-Authored-By: pi * Load env in test:e2e via --env-file-if-exists The e2e suite boots the IoC container (via the coop.ts fixture), which reads env vars like UI_URL at module load. Removing the `import 'dotenv/config'` from the fixture left nothing to load server/.env when playwright runs, so CI failed with "Missing env var UI_URL". Invoke playwright through `node --env-file-if-exists=.env` (the same pattern used for jest) so env loads before any test module imports the container. CI gets server/.env from the workflow's `cp server/.env.example server/.env` step; the -if-exists variant no-ops if it's absent. Co-Authored-By: pi