## Build & Development Commands
- Fornisci un **Makefile** come unico punto di ingresso a tutti i task del progetto, incapsulando script npm, comandi Docker e setup dell’ambiente per semplificare l’onboarding. :contentReference[oaicite:0]{index=0}
- Includi target standard: `setup` (installa dipendenze), `build`, `clean`, `test`, `deploy` e `help`, usando nomi descrittivi e namespace-style se necessario. :contentReference[oaicite:1]{index=1}
- Usa **variabili** (es. `CC`, `CFLAGS`, `SRC`, `OBJ`) per centralizzare percorsi e flag, facilitando aggiornamenti e coerenza. :contentReference[oaicite:2]{index=2}
- Dichiara **`.PHONY`** per i target non‑file (come `clean` e `help`) per evitare collisioni con file omonimi. :contentReference[oaicite:3]{index=3}
- Mantieni gli **npm scripts** semplici e cross‑platform: documentali in `package.json`, usa `&&` per bailing on error e sfrutta le convenzioni built‑in di npm anziché logica custom. :contentReference[oaicite:4]{index=4}
- In CI, esegui `npm run <script> --silent` per ridurre il rumore dei log. :contentReference[oaicite:5]{index=5}
- Fallisci subito in catene di comandi sostituendo `;` con `&&`, così uno step successivo parte solo se quello precedente ha avuto successo. :contentReference[oaicite:6]{index=6}
- Non duplicare funzionalità che npm già fornisce: sfrutta campi come `bin`, `engines` e `scripts` in `package.json` per comportamenti coerenti. :contentReference[oaicite:7]{index=7}
## Testing Guidelines
- Isola l’ambiente di test con `venv` (o equivalente) e `pip` per garantire che ogni esecuzione avvenga sullo stesso set di dipendenze. :contentReference[oaicite:8]{index=8}
- Organizza i test in cartelle `unit/`, `integration/` e `e2e/` per separare chiaramente i livelli di coverage. :contentReference[oaicite:9]{index=9}
- Per gli **unit test**, segui il pattern Arrange–Act–Assert (AAA): arreda i dati, esegui l’azione e asserisci il risultato con input minimali. :contentReference[oaicite:10]{index=10}
- Utilizza **fixture** di `pytest` per setup e teardown, mettendo quelle condivise in `conftest.py` per evitare duplicazioni. :contentReference[oaicite:11]{index=11}
- Usa fixture a scope **session** o **module** per operazioni costose (es. migrazioni DB), facendole partire una sola volta per sessione di test. :contentReference[oaicite:12]{index=12}
- Mocka dipendenze esterne (API, database) con `unittest.mock` o `pytest-mock` per mantenere i test unitari veloci e deterministici. :contentReference[oaicite:13]{index=13}
- Integra i test in CI con comandi come `pytest --maxfail=1 --disable-warnings` e blocca i merge finché non passano tutti. :contentReference[oaicite:14]{index=14}
- Imposta una copertura minima (es. 80%) e fallisci la pipeline se scende sotto la soglia. :contentReference[oaicite:15]{index=15}
## Code Style & Guidelines
- Automatizza linting e formatting con **ESLint + Prettier** (JS/TS) o **Flake8 + Black** (Python), integrandoli in pre‑commit e CI. :contentReference[oaicite:16]{index=16}
- Adotta style guide ufficiali: **Airbnb JavaScript Style Guide** per JS e **PEP 8** per Python, usando config condivisi come `eslint-config-airbnb`. :contentReference[oaicite:17]{index=17}
- Applica convenzioni di naming coerenti: `camelCase` per funzioni/variabili JS, `snake_case` per Python, `PascalCase` per classi in entrambi. :contentReference[oaicite:18]{index=18}
- Mantieni le funzioni focalizzate (≤ 50 linee), con responsabilità singola per facilità di test e lettura. :contentReference[oaicite:19]{index=19}
- Commenta blocchi complessi in linea in modo sintetico e limita l’API pubblica a interfacce ben valutate. :contentReference[oaicite:20]{index=20}
## Documentation Guidelines
- Scrivi **README.md** prima di partire col codice: includi descrizione, installazione, esempi di uso e linee guida per contributi. :contentReference[oaicite:21]{index=21}
- Mantieni la doc “minimum viable”: usa badge, panoramica della struttura cartelle e link a documenti dettagliati per argomenti avanzati. :contentReference[oaicite:22]{index=22}
- Genera API docs con strumenti come **Sphinx** (Python) o **JSDoc/MkDocs** (JS), versionando la cartella `docs/`. :contentReference[oaicite:23]{index=23}
- Scrivi docstring per tutte le funzioni/pubbliche secondo Google/NumPy style (Python) o JSDoc (JS). :contentReference[oaicite:24]{index=24}
- Incentiva contributi esterni con un `CONTRIBUTING.md` che descriva workflow di pull request, issue template e standard di progetto. :contentReference[oaicite:25]{index=25}