PD Framework — Hierarquia Time/Squad e memory híbrida¶
Decisões estruturais 25/05/2026. Atualiza notas anteriores: - IA-Tecnologia/2026-05-23 PD Framework — arquitetura de squads e Stamper como orchestrator - IA-Tecnologia/2026-05-24 PD Framework — Arquitetura completa e mapeamento de stack - IA-Tecnologia/2026-05-24 PD Framework — SOUL.md vs CLAUDE.md vs STATE.md
O que mudou hoje¶
1. Refator squads/ → times/¶
Conceitualmente passamos a tratar áreas da empresa como Times, e sub-áreas como Squads. A pasta squads/ foi renomeada times/ no monorepo. Hierarquia conceitual:
Stamper
└── Time (área da empresa)
└── Squad (sub-área)
└── Squad aninhado (mais específico — opcional)
└── conteúdo (workers, skills, memory, context)
Profundidade variável. 3 níveis se a sub-área é monolítica. 4 níveis quando o Squad tem agrupamento natural com sub-squads de ritmo independente.
2. Path achatado no filesystem¶
Cada nível do path = um nível semântico. Não repetir times/ ou squads/ aninhado:
times/
├── infra/ ← Time
├── marketing/ ← Time
│ ├── conteudo/ ← Squad
│ │ ├── insight-artificial/ ← Squad aninhado
│ │ ├── site-pd/ ← Squad aninhado
│ │ └── workers/ ← workers do Squad pai
│ ├── brand/ ← Squad direto
│ └── performance/ ← Squad direto (?)
├── dev/ ← Time
│ ├── vitor/ ← Squad (persona)
│ ├── amelia/ ← Squad (persona)
│ └── ...
└── produto/ ← Time
├── ferramentas-ia/cadencia/ ← Squad agrupador → Squad
│ ├── frontend/ ← Sub-squad
│ ├── growth/ ← Sub-squad
│ └── ...
├── nskin/ ← Squad (monolítico)
├── gci-go/ ← Squad
│ └── components/lara,ecuro,confirmacao-agenda/
└── consultorias/
├── nathalia/
└── padaria-milionaria/
Identificação automática: scripts (render-html.py, _lookup_backends/) detectam Squads procurando subpastas com CLAUDE.md — funciona em qualquer profundidade.
3. Memory em qualquer nível com CLAUDE.md¶
Regra simples: tem CLAUDE.md? Tem memory/. Sem CLAUDE.md? Estado vive no pai.
| Nível | Tem memory/? |
|---|---|
| Stamper | ✅ (memória pessoal Felipe — auto-memory) |
| Time | ✅ (STATE agregado dos Squads filhos + decisions transversais) |
| Squad | ✅ (STATE operacional + decisions específicas) |
| Squad aninhado | ✅ (STATE granular + decisions próprias) |
| Component | ❌ (estado vive no STATE do Squad pai) |
| Feature | ❌ (idem) |
Isso desfaz a regra anterior "Stamper não tem STATE.md". Agora Time também tem STATE.md — agregado a partir dos Squads filhos. Stamper continua sem STATE (a memória dele é a auto-memory pessoal do Felipe).
4. Agregação L1 híbrida determinística A+B+C¶
Time pai precisa saber estado dos Squads filhos. Squad pai precisa saber dos Sub-squads. 3 mecanismos, mesma função core (aggregate_l1(parent_path) em _core/state-aggregator.py):
| Mecanismo | Como | Quando |
|---|---|---|
| A Manual | /fechar-squad <squad> propaga L1 pro Time pai | Felipe fecha sessão |
| B On-demand | /abrir-squad <time> calcula ao vivo (sem escrita) | Felipe abre Time |
| C Fallback cron | state-aggregator.py --all --propagate 03h BRT | Garantia que STATE Time nunca fica >24h stale |
Felipe disse: "funciono bem fechando manualmente mas às vezes esqueço, então podemos ter as 3 versões no sistema. Mas precisa ser determinístico."
Por isso mesma função core nos 3. Resultado consistente. Cron só reescreve se diff real (idempotente).
5. STATE inicial = onboarding doc¶
STATE.md inicial de cada Time/Squad é populado como doc de onboarding — o que um novo entrante na área precisaria pra começar a operar (igual onboarding de funcionário novo).
Template inicial: função, stack, pessoas-chave, projetos Linear vinculados, workflows ativos, docs relevantes, bloqueios externos, convenções. Pode ter overlap com context/<x>.md — STATE tem o resumo onboarding, context/ tem detalhes técnicos profundos.
6. Personas podem habitar qualquer Time¶
Anterior (PDL-241): "personas BMAD/AIOX só em Dev + Maria Marketing + Diego Infra".
Revisado: personas BR podem habitar QUALQUER Time. Cada Time decide na sessão de criação quais personas fazem sentido. No Time Dev cada persona É um Squad. Em outros Times, persona pode ser Squad, Skill, ou inexistir.
7. Princípio "criar com Felipe"¶
Toda estruturação de Time/Squad nova é trabalho conjunto. Felipe é o único que conhece nuances do negócio (personas, sub-áreas com ritmo próprio, pessoas-chave, projetos Linear). Sem ele na sala, agente inventa estrutura que precisa redesenhar.
Padrão de sessão: 1. Apresentar o que se sabe (pastas reais, projetos Linear, INVENTORY refs) 2. Listar perguntas estruturadas (escopo, sub-squads, personas, workers, skills, pessoas-chave, Linear vinculados, bloqueios) 3. Felipe responde numerado 4. SÓ AÍ criar boilerplate
8. SOUL.md mantém escopo dos 4 produtos¶
| Produto | SOUL.md? |
|---|---|
| Cadência | ✅ |
| PD Portal | ✅ |
| NSkin | ✅ |
| GCI-GO | ✅ |
| Sub-squads, consultorias, Times operacionais | ❌ |
Será revisitado em cada sessão de criação — Felipe pode adicionar SOUL próprio em Marketing/Brand, Insight Artificial, ou consultorias se a voz delas for distinta.
Tabela de Times pendentes¶
| Time | Status sessão de criação |
|---|---|
| Dev | ✅ Mapeado (8 personas BR como Squads) |
| Marketing | ⏳ Parcial (Conteúdo + Insight Artificial + Site PD + Brand identificados, sessão completa pendente) |
| Comercial | ⏳ Pendente |
| CS | ⏳ Pendente (sabemos: Squad Bot Telegram Suporte dentro) |
| Infra | ⏳ Atual populado antes da regra "criar com Felipe" — refator pendente |
| Operacional | ⏳ Pendente |
| Financeiro | ⏳ Pendente |
| Produto/Cadência | ⏳ Sessão própria (4 sub-squads mapeados) |
| Produto/PD Portal | ⏳ Pendente |
| Produto/NSkin | ⏳ Pendente |
| Produto/GCI-GO | ⏳ Pendente |
| Produto/Consultorias | ⏳ Sessão por cliente |
Arquivos atualizados no repo¶
Sessão tarde (memory híbrida)¶
_core/HIERARCHY.mdreescrito com Time/Squad/Sub-squad + path achatado_core/memory-schema.mdreescrito com hierarquia memory + agregação A+B+C + onboarding template_core/state-aggregator.pycriado — funçãoaggregate_l1()determinísticatimes/infra/(refator desquads/infra/— único Time populado pré-regra).githooks/pre-commitajustado pra novo path
Sessão noite (integração Linear ↔ Squad — commits 416d571, 33d7d92)¶
_core/linear-squad-map.json— 19/19 projetos Linear mapeados → Squads_core/lib/squad_resolver.py+squad_integration.py— helpers reutilizáveis_core/SKILLS-LINEAR-INTEGRATION.md— padrão completostamper/skills/criar-squad/(nova) +abrir-squad/fechar-squad(atualizadas com mecanismos A/B)- 8 skills Linear integradas em
stamper/skills/linear-*/ stamper/skills/documentar/(nova — persona Paula, Tech Writer)
Sessão noite (foundation/ + constituição — commits d061441, 4701a84, 369b78f, aeb60d0)¶
_core/CRIACAO-TIME-BRIEFING.md— Modo Foco + foundation/ + 9ª pergunta sobre foundation_core/CONSTITUICAO-TIMES.md— doc fundador (anatomia, foundation, lifecycle, sugestões por Time)_core/memory-schema.mdampliado com distinção memory ≠ foundation ≠ context_core/HIERARCHY.mdmenciona foundation/ na estrutura Time- 3 memories migradas do auto-memory pra
stamper/memory/versionada
Bugs encontrados em validação end-to-end (commits 948d4a5, d6d6226)¶
squad_resolver.pyapontava pra credencial Linear errada → corrigido (Linear - APIvaultServiços & Toolscampopassword)register_project_in_stateinseria seção "Projetos Linear vinculados" no início do L3 empurrando conteúdo existente pra dentro → corrigido (insere no FIM do L3)
Validações end-to-end (8/8 sub-testes passaram)¶
- ✅
resolve_squad_from_project_idem todos 19 projetos - ✅ Cascata
resolve_squad_from_issuevia Linear API REAL (PDL-252 → stamper) - ✅
register_issue_in_state+ idempotência + update status - ✅
remove_issue_from_state+ idempotência - ✅
register_project_in_state+ idempotência (após fix) - ✅
propagate_after_close(sem propagação pra REPO_ROOT — correto)
Próximos passos (atualizado noite 25/05)¶
- ✅ ~~Implementar
/fechar-squadcom propagação L1 (mecanismo A)~~ — feito - ✅ ~~Implementar
/abrir-squad <time>comaggregate_l1()ao vivo (mecanismo B)~~ — feito - Sessões de criação de Times, uma por uma, junto com Felipe (próximo trabalho real)
- Refator Time Infra (populado antes da regra)
- Deploy do cron
state-aggregator.py --all --propagatena VPS Master (mecanismo C) — PDL-252 criada, bloqueada por PDL-242 (Fase 7 deploy)
Padrão pra abrir sessão de criação de Time (Modo Foco)¶
Agente carrega APENAS o briefing (200 linhas) + Hierarchy + linear-squad-map filtrado. NÃO carrega INVENTORY/REFERENCE-*/PERSONAS inteiros. Reduz ~3-5k tokens iniciais vs 50k+.
Constituição¶
Doc fundador que define em uma leitura o que é Time/Squad no framework: - IA-Tecnologia/2026-05-25 PD Framework — Constituição dos Times - Fonte canônica: _core/CONSTITUICAO-TIMES.md
Referências¶
- Repo:
felipeluissalgueiro/pd-framework - Local:
Hub Projetos/pd-framework/ - Linear projeto: PD Framework — Squads, Stamper, Memória Operacional
- Decisões anteriores: PDL-241 (Fase 0.7), PDL-218 (Fase 0)