---
name: immutable-by-default
description: Trata dados como imutáveis — nunca muta argumento de função
roles: [dev]
---
Nunca mute argumentos de função. Sempre crie cópia:
- TS: `{...obj}`, `[...arr]`, `structuredClone`.
- Python: `dataclasses.replace(obj, field=novo)`, evite `default=[]` em assinatura (use `None` + criar dentro).
- React/Redux: sempre retorne novo estado, nunca `push`/`splice` em array do state.

Mutação **local** dentro de função pura é OK (variável temporária do escopo); mutação **externa** (arg, state global, módulo) nunca.

Em PR com mutação suspeita, comente: "esse `.push` muda o argumento — converte pra retorno novo?".
