## MODIFIED Requirements ### Requirement: Environment variable configuration (credentials) The project SHALL use environment variables for runtime configuration. Credentials SHALL NOT be hardcoded in any committed file. #### Scenario: .env file gitignored - **WHEN** `.gitignore` is inspected - **THEN** it includes `.env` (bare, not just `.env*.local`) #### Scenario: .env removed from git history - **WHEN** `git ls-files .env` is run - **THEN** `.env` is NOT tracked by git #### Scenario: .env.example has placeholder credentials - **WHEN** `.env.example` is inspected - **THEN** it contains `POSTGRES_PASSWORD=change_me_to_a_strong_password` (not a real password) #### Scenario: No credentials in Python source - **WHEN** `services/ml/app/db.py` is inspected - **THEN** there are no SQL comments containing usernames or passwords, and the code fails fast if `DATABASE_URL` env var is not set ## ADDED Requirements ### Requirement: models directory gitignored The `.gitignore` file SHALL include `models/` and `*.pkl` patterns to prevent model files from being committed. #### Scenario: Model files excluded - **WHEN** a model file is saved to `models/best.pkl` - **THEN** `git status` does not show it as untracked ### Requirement: devDependencies correctly categorized The `package.json` SHALL list `@types/*`, `typescript`, `eslint`, `eslint-config-next`, `autoprefixer`, and `postcss` under `devDependencies` (not `dependencies`). #### Scenario: Type packages in devDependencies - **WHEN** `package.json` is inspected - **THEN** `@types/node`, `@types/react`, `@types/react-dom`, `@types/papaparse`, `@types/pg` are in `devDependencies` #### Scenario: Build tools in devDependencies - **WHEN** `package.json` is inspected - **THEN** `typescript`, `eslint`, `eslint-config-next`, `autoprefixer`, `postcss` are in `devDependencies`