maestro-bundle 1.9.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,158 +1,158 @@
1
- ---
2
- name: deep-agent-memory
3
- description: Configure persistent memory for Deep Agents using AGENTS.md and LangGraph Store. Use when the agent needs to remember context across sessions, persist learnings, or maintain long-term knowledge.
4
- version: 1.0.0
5
- author: Maestro
6
- ---
7
-
8
- # Deep Agent Memory
9
-
10
- Give your Deep Agent persistent memory that survives across sessions using AGENTS.md files and LangGraph Store.
11
-
12
- ## When to Use
13
- - When the agent should remember context between sessions
14
- - When loading project-specific knowledge at startup
15
- - When persisting learnings across threads
16
- - When configuring AGENTS.md for persistent context
17
-
18
- ## Available Operations
19
- 1. Load AGENTS.md as persistent context
20
- 2. Configure LangGraph Store for cross-thread memory
21
- 3. Use CompositeBackend for memory routing
22
- 4. Persist agent learnings
23
-
24
- ## Multi-Step Workflow
25
-
26
- ### Step 1: AGENTS.md as Memory
27
-
28
- ```python
29
- from deepagents import create_deep_agent
30
- from deepagents.backends.utils import create_file_data
31
- from langgraph.checkpoint.memory import MemorySaver
32
-
33
- agents_md = """
34
- # Project Context
35
-
36
- ## Architecture
37
- This project uses Clean Architecture with Python FastAPI.
38
-
39
- ## Conventions
40
- - Use Pydantic for all DTOs
41
- - Pytest for testing
42
- - Ruff for linting
43
- """
44
-
45
- agent = create_deep_agent(
46
- model="anthropic:claude-sonnet-4-6",
47
- memory=["/AGENTS.md"],
48
- checkpointer=MemorySaver()
49
- )
50
-
51
- result = agent.invoke(
52
- {
53
- "messages": [{"role": "user", "content": "What architecture do we use?"}],
54
- "files": {"/AGENTS.md": create_file_data(agents_md)}
55
- },
56
- config={"configurable": {"thread_id": "session-1"}}
57
- )
58
- ```
59
-
60
- ### Step 2: Persistent Store Memory
61
-
62
- ```python
63
- from deepagents import create_deep_agent
64
- from deepagents.backends import StoreBackend
65
- from langgraph.store.postgres import PostgresStore
66
- from langgraph.checkpoint.postgres import PostgresSaver
67
-
68
- # Production: PostgreSQL for both
69
- store = PostgresStore(conn_string="postgresql://user:pass@localhost/agents")
70
- checkpointer = PostgresSaver(conn_string="postgresql://user:pass@localhost/agents")
71
-
72
- agent = create_deep_agent(
73
- model="anthropic:claude-sonnet-4-6",
74
- backend=lambda rt: StoreBackend(rt),
75
- store=store,
76
- checkpointer=checkpointer,
77
- memory=["/AGENTS.md"]
78
- )
79
- ```
80
-
81
- ### Step 3: CompositeBackend with Memory
82
-
83
- ```python
84
- from deepagents.backends import CompositeBackend, StateBackend, StoreBackend
85
-
86
- composite = lambda rt: CompositeBackend(
87
- default=StateBackend(rt),
88
- routes={
89
- "/memories/": StoreBackend(rt), # Long-term memory: persistent
90
- "/workspace/": StateBackend(rt), # Working files: ephemeral
91
- }
92
- )
93
-
94
- agent = create_deep_agent(
95
- backend=composite,
96
- store=InMemoryStore()
97
- )
98
- # Agent writes to /memories/ for things it wants to remember
99
- # Agent writes to /workspace/ for temporary work
100
- ```
101
-
102
- ### Step 4: Consistent Thread IDs
103
-
104
- ```python
105
- # Same thread_id = same conversation context
106
- config = {"configurable": {"thread_id": f"project-{project_id}"}}
107
-
108
- # First invocation
109
- agent.invoke({"messages": [msg1]}, config=config)
110
-
111
- # Later invocation — agent remembers the first one
112
- agent.invoke({"messages": [msg2]}, config=config)
113
- ```
114
-
115
- ### Step 5: Verify
116
-
117
- ```bash
118
- python -c "
119
- from deepagents import create_deep_agent
120
- from langgraph.checkpoint.memory import MemorySaver
121
-
122
- agent = create_deep_agent(checkpointer=MemorySaver())
123
- config = {'configurable': {'thread_id': 'test-memory'}}
124
-
125
- # First message
126
- agent.invoke({'messages': [{'role': 'user', 'content': 'My name is João'}]}, config=config)
127
-
128
- # Second message — should remember
129
- result = agent.invoke({'messages': [{'role': 'user', 'content': 'What is my name?'}]}, config=config)
130
- print(result['messages'][-1].content)
131
- "
132
- ```
133
-
134
- ## Resources
135
- - `references/memory-patterns.md` — Memory architecture patterns
136
-
137
- ## Examples
138
-
139
- ### Example 1: Project Context Memory
140
- User asks: "Agent should know our project conventions"
141
- Response approach:
142
- 1. Write AGENTS.md with conventions
143
- 2. Pass via `memory=["/AGENTS.md"]`
144
- 3. Agent loads it every session
145
-
146
- ### Example 2: Learning Memory
147
- User asks: "Agent should remember what worked in previous sessions"
148
- Response approach:
149
- 1. Use CompositeBackend with StoreBackend for `/memories/`
150
- 2. Agent writes learnings to `/memories/`
151
- 3. Next session, agent reads from `/memories/`
152
-
153
- ## Notes
154
- - `checkpointer` is REQUIRED for memory to persist
155
- - AGENTS.md follows the agents.md standard (https://agents.md/)
156
- - Use PostgresStore for production, InMemoryStore for dev
157
- - Thread ID determines conversation scope
158
- - Memory files are loaded at session start
1
+ ---
2
+ name: deep-agent-memory
3
+ description: Configure persistent memory for Deep Agents using AGENTS.md and LangGraph Store. Use when the agent needs to remember context across sessions, persist learnings, or maintain long-term knowledge.
4
+ version: 1.0.0
5
+ author: Maestro
6
+ ---
7
+
8
+ # Deep Agent Memory
9
+
10
+ Give your Deep Agent persistent memory that survives across sessions using AGENTS.md files and LangGraph Store.
11
+
12
+ ## When to Use
13
+ - When the agent should remember context between sessions
14
+ - When loading project-specific knowledge at startup
15
+ - When persisting learnings across threads
16
+ - When configuring AGENTS.md for persistent context
17
+
18
+ ## Available Operations
19
+ 1. Load AGENTS.md as persistent context
20
+ 2. Configure LangGraph Store for cross-thread memory
21
+ 3. Use CompositeBackend for memory routing
22
+ 4. Persist agent learnings
23
+
24
+ ## Multi-Step Workflow
25
+
26
+ ### Step 1: AGENTS.md as Memory
27
+
28
+ ```python
29
+ from deepagents import create_deep_agent
30
+ from deepagents.backends.utils import create_file_data
31
+ from langgraph.checkpoint.memory import MemorySaver
32
+
33
+ agents_md = """
34
+ # Project Context
35
+
36
+ ## Architecture
37
+ This project uses Clean Architecture with Python FastAPI.
38
+
39
+ ## Conventions
40
+ - Use Pydantic for all DTOs
41
+ - Pytest for testing
42
+ - Ruff for linting
43
+ """
44
+
45
+ agent = create_deep_agent(
46
+ model="anthropic:claude-sonnet-4-6",
47
+ memory=["/AGENTS.md"],
48
+ checkpointer=MemorySaver()
49
+ )
50
+
51
+ result = agent.invoke(
52
+ {
53
+ "messages": [{"role": "user", "content": "What architecture do we use?"}],
54
+ "files": {"/AGENTS.md": create_file_data(agents_md)}
55
+ },
56
+ config={"configurable": {"thread_id": "session-1"}}
57
+ )
58
+ ```
59
+
60
+ ### Step 2: Persistent Store Memory
61
+
62
+ ```python
63
+ from deepagents import create_deep_agent
64
+ from deepagents.backends import StoreBackend
65
+ from langgraph.store.postgres import PostgresStore
66
+ from langgraph.checkpoint.postgres import PostgresSaver
67
+
68
+ # Production: PostgreSQL for both
69
+ store = PostgresStore(conn_string="postgresql://user:pass@localhost/agents")
70
+ checkpointer = PostgresSaver(conn_string="postgresql://user:pass@localhost/agents")
71
+
72
+ agent = create_deep_agent(
73
+ model="anthropic:claude-sonnet-4-6",
74
+ backend=lambda rt: StoreBackend(rt),
75
+ store=store,
76
+ checkpointer=checkpointer,
77
+ memory=["/AGENTS.md"]
78
+ )
79
+ ```
80
+
81
+ ### Step 3: CompositeBackend with Memory
82
+
83
+ ```python
84
+ from deepagents.backends import CompositeBackend, StateBackend, StoreBackend
85
+
86
+ composite = lambda rt: CompositeBackend(
87
+ default=StateBackend(rt),
88
+ routes={
89
+ "/memories/": StoreBackend(rt), # Long-term memory: persistent
90
+ "/workspace/": StateBackend(rt), # Working files: ephemeral
91
+ }
92
+ )
93
+
94
+ agent = create_deep_agent(
95
+ backend=composite,
96
+ store=InMemoryStore()
97
+ )
98
+ # Agent writes to /memories/ for things it wants to remember
99
+ # Agent writes to /workspace/ for temporary work
100
+ ```
101
+
102
+ ### Step 4: Consistent Thread IDs
103
+
104
+ ```python
105
+ # Same thread_id = same conversation context
106
+ config = {"configurable": {"thread_id": f"project-{project_id}"}}
107
+
108
+ # First invocation
109
+ agent.invoke({"messages": [msg1]}, config=config)
110
+
111
+ # Later invocation — agent remembers the first one
112
+ agent.invoke({"messages": [msg2]}, config=config)
113
+ ```
114
+
115
+ ### Step 5: Verify
116
+
117
+ ```bash
118
+ python -c "
119
+ from deepagents import create_deep_agent
120
+ from langgraph.checkpoint.memory import MemorySaver
121
+
122
+ agent = create_deep_agent(checkpointer=MemorySaver())
123
+ config = {'configurable': {'thread_id': 'test-memory'}}
124
+
125
+ # First message
126
+ agent.invoke({'messages': [{'role': 'user', 'content': 'My name is João'}]}, config=config)
127
+
128
+ # Second message — should remember
129
+ result = agent.invoke({'messages': [{'role': 'user', 'content': 'What is my name?'}]}, config=config)
130
+ print(result['messages'][-1].content)
131
+ "
132
+ ```
133
+
134
+ ## Resources
135
+ - `references/memory-patterns.md` — Memory architecture patterns
136
+
137
+ ## Examples
138
+
139
+ ### Example 1: Project Context Memory
140
+ User asks: "Agent should know our project conventions"
141
+ Response approach:
142
+ 1. Write AGENTS.md with conventions
143
+ 2. Pass via `memory=["/AGENTS.md"]`
144
+ 3. Agent loads it every session
145
+
146
+ ### Example 2: Learning Memory
147
+ User asks: "Agent should remember what worked in previous sessions"
148
+ Response approach:
149
+ 1. Use CompositeBackend with StoreBackend for `/memories/`
150
+ 2. Agent writes learnings to `/memories/`
151
+ 3. Next session, agent reads from `/memories/`
152
+
153
+ ## Notes
154
+ - `checkpointer` is REQUIRED for memory to persist
155
+ - AGENTS.md follows the agents.md standard (https://agents.md/)
156
+ - Use PostgresStore for production, InMemoryStore for dev
157
+ - Thread ID determines conversation scope
158
+ - Memory files are loaded at session start
@@ -1,138 +1,138 @@
1
- # Bundle Base — Padrões da Organização
1
+ # Bundle Base — Organization Standards
2
2
 
3
- Este é o bundle base que TODOS os desenvolvedores devem usar. Ele define os padrões inegociáveis da organização.
3
+ This is the base bundle that ALL developers must use. It defines the organization's non-negotiable standards.
4
4
 
5
- ## REGRA FUNDAMENTAL: Specification-Driven Development (SDD)
5
+ ## FUNDAMENTAL RULE: Specification-Driven Development (SDD)
6
6
 
7
- Este projeto usa **GitHub Spec Kit** para governança. Toda demandanova ou em andamentoDEVE seguir o fluxo SDD. Sem spec, sem código. Isso não é opcional.
7
+ This project uses **GitHub Spec Kit** for governance. Every demandnew or in progressMUST follow the SDD flow. No spec, no code. This is not optional.
8
8
 
9
- ### Antes de escrever qualquer código:
9
+ ### Before writing any code:
10
10
 
11
- 1. `/speckit.constitution` — Definir princípios ( na primeira vez do projeto)
12
- 2. `/speckit.specify` — Descrever O QUE construir e POR QUÊ (nunca o como)
13
- 3. `/speckit.plan` — Planejar arquitetura, stack e decisões técnicas
14
- 4. `/speckit.tasks` — Quebrar em tasks atômicas implementáveis
15
- 5. `/speckit.implement` — Executar as tasks seguindo o plano
11
+ 1. `/speckit.constitution` — Define principles (only the first time for the project)
12
+ 2. `/speckit.specify` — Describe WHAT to build and WHY (never the how)
13
+ 3. `/speckit.plan` — Plan architecture, stack, and technical decisions
14
+ 4. `/speckit.tasks` — Break down into atomic implementable tasks
15
+ 5. `/speckit.implement` — Execute the tasks following the plan
16
16
 
17
17
  ### Anti-vibing code
18
18
 
19
- Vibing code é quando alguém começa a codar sem spec, sem plano, sem tasks — "vai fazendo". Isso é proibido neste projeto. Se o usuário pedir para implementar algo e não existir spec:
19
+ Vibing code is when someone starts coding without a spec, without a plan, without tasks — just "winging it". This is forbidden in this project. If the user asks to implement something and no spec exists:
20
20
 
21
- 1. **PARE**. Não escreva código.
22
- 2. Informe que precisa criar a spec primeiro.
23
- 3. Rode `/speckit.specify` para iniciar o processo.
24
- 4. após ter spec → plan → tasks, comece a implementar.
21
+ 1. **STOP**. Do not write code.
22
+ 2. Inform them that a spec needs to be created first.
23
+ 3. Run `/speckit.specify` to start the process.
24
+ 4. Only after having spec → plan → tasks, begin implementing.
25
25
 
26
- Se a demanda está no meio (spec existe), verifique:
27
- - `.specify/specs/` contém a spec da feature?
28
- - O plano existe em `plan.md`?
29
- - As tasks estão em `tasks.md`?
26
+ If the demand is already in progress (spec already exists), check:
27
+ - `.specify/specs/` contains the feature spec?
28
+ - The plan exists in `plan.md`?
29
+ - The tasks are in `tasks.md`?
30
30
 
31
- Se sim, continue de onde parou. Se não, crie a spec antes de prosseguir.
31
+ If yes, continue from where you left off. If not, create the spec before proceeding.
32
32
 
33
- ### Demanda nova vs demanda em andamento
33
+ ### New demand vs in-progress demand
34
34
 
35
- | Situação | O que fazer |
35
+ | Situation | What to do |
36
36
  |---|---|
37
- | Demanda nova, sem spec | `/speckit.specify` → `/speckit.plan` → `/speckit.tasks` → `/speckit.implement` |
38
- | Demanda com spec mas sem plano | `/speckit.plan` → `/speckit.tasks` → `/speckit.implement` |
39
- | Demanda com plano e tasks | `/speckit.implement` (continuar de onde parou) |
40
- | Bug fix simples | Pode corrigir direto, mas documentar no spec se afetar o plano |
41
- | Refactoring | Criar spec se afetar arquitetura; se for cosmético, pode fazer direto |
37
+ | New demand, no spec | `/speckit.specify` → `/speckit.plan` → `/speckit.tasks` → `/speckit.implement` |
38
+ | Demand with spec but no plan | `/speckit.plan` → `/speckit.tasks` → `/speckit.implement` |
39
+ | Demand with plan and tasks | `/speckit.implement` (continue from where you left off) |
40
+ | Simple bug fix | Can fix directly, but document in the spec if it affects the plan |
41
+ | Refactoring | Create spec if it affects architecture; if cosmetic, can do directly |
42
42
 
43
- ## Quem você é
43
+ ## Who you are
44
44
 
45
- Você é um assistente de desenvolvimento que segue rigorosamente os padrões da organização. Todo código produzido deve aderir às convenções abaixo. Você NUNCA produz código sem antes verificar se existe uma spec para a demanda.
45
+ You are a development assistant that strictly follows the organization's standards. All code produced must adhere to the conventions below. You NEVER produce code without first checking if a spec exists for the demand.
46
46
 
47
- ## Padrões de Código
47
+ ## Code Standards
48
48
 
49
- ### Geral
50
- - Máximo de 500 linhas por arquivo
51
- - Funções com no máximo 20 linhas
52
- - Nomes de variáveis e funções descritivos (nunca `d`, `x`, `tmp`)
53
- - Usar funções nativas da linguagem para manipulação de strings
54
- - Evitar ifs aninhados (hadouken) — usar early returns e guard clauses
55
- - Tratar fluxos de exceção, não o caminho feliz
56
- - Não deixar código morto, comentários TODO sem prazo, ou prints de debug
49
+ ### General
50
+ - Maximum of 500 lines per file
51
+ - Functions with a maximum of 20 lines
52
+ - Descriptive variable and function names (never `d`, `x`, `tmp`)
53
+ - Use the language's native functions for string manipulation
54
+ - Avoid nested ifs (hadouken) — use early returns and guard clauses
55
+ - Handle exception flows, not just the happy path
56
+ - Do not leave dead code, TODO comments without a deadline, or debug prints
57
57
 
58
58
  ### Python
59
- - Usar f-strings para interpolação
60
- - Type hints em todas as funções públicas
61
- - Docstrings apenas em funções complexas (não óbvias)
62
- - Black para formatação, Ruff para linting
59
+ - Use f-strings for interpolation
60
+ - Type hints on all public functions
61
+ - Docstrings only on complex (non-obvious) functions
62
+ - Black for formatting, Ruff for linting
63
63
 
64
64
  ### TypeScript
65
- - Strict mode habilitado
66
- - Interfaces sobre types quando possível
67
- - Async/await sobre .then()
65
+ - Strict mode enabled
66
+ - Interfaces over types when possible
67
+ - Async/await over .then()
68
68
 
69
69
  ### Java
70
- - Seguir convenções do Google Java Style Guide
71
- - Records para DTOs imutáveis
72
- - Optional ao invés de null
70
+ - Follow Google Java Style Guide conventions
71
+ - Records for immutable DTOs
72
+ - Optional instead of null
73
73
 
74
- ## Padrões de Git
74
+ ## Git Standards
75
75
 
76
76
  ### Branches
77
- - `main` — produção, protegida
78
- - `develop` — integração
79
- - `feature/<escopo>-<descricao>` — novas funcionalidades
80
- - `fix/<escopo>-<descricao>` — correções
81
- - `hotfix/<descricao>` — correções urgentes em produção
77
+ - `main` — production, protected
78
+ - `develop` — integration
79
+ - `feature/<scope>-<description>` — new features
80
+ - `fix/<scope>-<description>` — bug fixes
81
+ - `hotfix/<description>` — urgent production fixes
82
82
 
83
83
  ### Commits
84
- Formato: `<tipo>(<escopo>): <descrição>`
85
-
86
- Tipos permitidos:
87
- - `feat` — nova funcionalidade
88
- - `fix` — correção de bug
89
- - `refactor` — refatoração sem mudança de comportamento
90
- - `docs` — documentação
91
- - `test` — adição ou correção de testes
92
- - `chore` — tarefas de manutenção
93
- - `ci` — mudanças em CI/CD
94
-
95
- Exemplos:
84
+ Format: `<type>(<scope>): <description>`
85
+
86
+ Allowed types:
87
+ - `feat` — new feature
88
+ - `fix` — bug fix
89
+ - `refactor` — refactoring without behavior change
90
+ - `docs` — documentation
91
+ - `test` — adding or fixing tests
92
+ - `chore` — maintenance tasks
93
+ - `ci` — CI/CD changes
94
+
95
+ Examples:
96
96
  ```
97
- feat(auth): implementar autenticação JWT
98
- fix(api): corrigir timeout na busca de usuários
99
- refactor(domain): extrair value object para CPF
97
+ feat(auth): implement JWT authentication
98
+ fix(api): fix timeout in user search
99
+ refactor(domain): extract value object for CPF
100
100
  ```
101
101
 
102
102
  ### Pull Requests
103
- - Título curto (< 70 caracteres)
104
- - Descrição com: resumo, motivação, como testar
105
- - Sempre vincular à task/issue
106
- - Mínimo 1 reviewer
103
+ - Short title (< 70 characters)
104
+ - Description with: summary, motivation, how to test
105
+ - Always link to the task/issue
106
+ - Minimum 1 reviewer
107
107
 
108
- ## Segurança
108
+ ## Security
109
109
 
110
- - NUNCA commitar secrets (.env, credentials, API keys)
111
- - Rate limiting em todas as APIs
112
- - Validar inputs em fronteiras do sistema (API, UI)
113
- - Seguir OWASP Top 10
114
- - HTTPS obrigatório
110
+ - NEVER commit secrets (.env, credentials, API keys)
111
+ - Rate limiting on all APIs
112
+ - Validate inputs at system boundaries (API, UI)
113
+ - Follow OWASP Top 10
114
+ - HTTPS mandatory
115
115
 
116
- ## Testes
116
+ ## Tests
117
117
 
118
- - Cobertura mínima: 80% no código de domínio
119
- - Testes unitários para regras de negócio
120
- - Testes de integração para repositórios e APIs
121
- - Nomear testes descritivamente: `should_return_error_when_email_is_invalid`
118
+ - Minimum coverage: 80% on domain code
119
+ - Unit tests for business rules
120
+ - Integration tests for repositories and APIs
121
+ - Name tests descriptively: `should_return_error_when_email_is_invalid`
122
122
 
123
- ## Estrutura de Projeto
123
+ ## Project Structure
124
124
 
125
- Organizar por domínio/feature, não por tipo técnico:
125
+ Organize by domain/feature, not by technical type:
126
126
 
127
127
  ```
128
- # BOMpor domínio
128
+ # GOODby domain
129
129
  src/
130
130
  ├── demands/
131
131
  ├── bundles/
132
132
  ├── agents/
133
133
  └── tracking/
134
134
 
135
- # RUIMpor camada técnica
135
+ # BADby technical layer
136
136
  src/
137
137
  ├── controllers/
138
138
  ├── services/
@@ -140,17 +140,17 @@ src/
140
140
  └── models/
141
141
  ```
142
142
 
143
- ## Documentação
143
+ ## Documentation
144
144
 
145
- - README.md na raiz com: propósito, como rodar, como testar
146
- - ADRs para decisões arquiteturais significativas
147
- - Diagramas como código (Mermaid) versionados no repo
145
+ - README.md at the root with: purpose, how to run, how to test
146
+ - ADRs for significant architectural decisions
147
+ - Diagrams as code (Mermaid) versioned in the repo
148
148
 
149
- ## O que NÃO fazer
149
+ ## What NOT to do
150
150
 
151
- - Não usar `any` em TypeScript
152
- - Não ignorar erros com try/catch vazio
153
- - Não fazer push direto na main
154
- - Não criar utils/helpers genéricos "para o futuro"
155
- - Não instalar dependências sem justificativa
156
- - Não fazer "vibing coding" — sempre ter uma task/spec associada
151
+ - Do not use `any` in TypeScript
152
+ - Do not ignore errors with empty try/catch
153
+ - Do not push directly to main
154
+ - Do not create generic utils/helpers "for the future"
155
+ - Do not install dependencies without justification
156
+ - Do not do "vibing coding" — always have an associated task/spec
@@ -1,32 +1,32 @@
1
- # Constitution — Projeto Pipeline de Dados e ML
1
+ # Constitution — Data and ML Pipeline Project
2
2
 
3
- ## Princípios
3
+ ## Principles
4
4
 
5
- 1. **Spec primeiro, código depois** — Toda demanda passa pelo fluxo SDD antes de implementação
6
- 2. **Dados originais são imutáveis** — Nunca editar dados em `raw/`
7
- 3. **Reprodutibilidade** — Todo pipeline deve ser reproduzível com mesma entrada = mesma saída
8
- 4. **Baseline obrigatório** — Todo modelo precisa de baseline para comparação
9
- 5. **Notebook para exploração, script para produção** — Refatorar antes de merge
5
+ 1. **Spec first, code later** — Every demand goes through the SDD flow before implementation
6
+ 2. **Original data is immutable** — Never edit data in `raw/`
7
+ 3. **Reproducibility** — Every pipeline must be reproducible with same input = same output
8
+ 4. **Baseline mandatory** — Every model needs a baseline for comparison
9
+ 5. **Notebook for exploration, script for production** — Refactor before merge
10
10
 
11
- ## Padrões de desenvolvimento
11
+ ## Development Standards
12
12
 
13
13
  - Python 3.11+, type hints, Black + Ruff
14
- - Funções puras para transformações (input output)
15
- - Validação de schema em cada etapa (Pandera)
16
- - Versionamento de datasets com DVC
17
- - Experiment tracking com MLflow
14
+ - Pure functions for transformations (input -> output)
15
+ - Schema validation at each step (Pandera)
16
+ - Dataset versioning with DVC
17
+ - Experiment tracking with MLflow
18
18
 
19
- ## Padrões de ML
19
+ ## ML Standards
20
20
 
21
- - Cross-validation k=5 mínimo
22
- - Métricas documentadas no MLflow
23
- - Feature importance registrada
24
- - Random seed consistente
25
- - A/B testing antes de substituir modelo
21
+ - Cross-validation k=5 minimum
22
+ - Metrics documented in MLflow
23
+ - Feature importance recorded
24
+ - Consistent random seed
25
+ - A/B testing before replacing model
26
26
 
27
- ## Padrões de qualidade
27
+ ## Quality Standards
28
28
 
29
- - Testes de schema para transformações
30
- - Testes de regressão para métricas
31
- - Cobertura mínima: 80% em pipelines
32
- - Commits seguem Conventional Commits
29
+ - Schema tests for transformations
30
+ - Regression tests for metrics
31
+ - Minimum coverage: 80% on pipelines
32
+ - Commits follow Conventional Commits