synapos 2.5.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.
- package/.github/copilot-instructions.md +72 -0
- package/.synapos/.manifest.json +155 -0
- package/.synapos/GUIDE.md +660 -0
- package/.synapos/VERSION +1 -0
- package/.synapos/_memory/company.md +11 -0
- package/.synapos/_memory/preferences.md +15 -0
- package/.synapos/copilot.md +451 -0
- package/.synapos/core/best-practices/_catalog.yaml +56 -0
- package/.synapos/core/best-practices/content/blog-post.md +238 -0
- package/.synapos/core/best-practices/content/copywriting.md +164 -0
- package/.synapos/core/best-practices/content/linkedin-post.md +186 -0
- package/.synapos/core/best-practices/dev/api-design.md +274 -0
- package/.synapos/core/best-practices/dev/code-review.md +138 -0
- package/.synapos/core/best-practices/dev/git-workflow.md +256 -0
- package/.synapos/core/best-practices/dev/testing-strategy.md +213 -0
- package/.synapos/core/best-practices/product/product-spec.md +235 -0
- package/.synapos/core/best-practices/product/technical-writing.md +264 -0
- package/.synapos/core/best-practices/product/user-research.md +242 -0
- package/.synapos/core/commands/bump.md +59 -0
- package/.synapos/core/commands/debug/session.md +100 -0
- package/.synapos/core/commands/migrate/v1-to-v2.md +142 -0
- package/.synapos/core/commands/set-model.md +197 -0
- package/.synapos/core/commands/setup/build-business.md +378 -0
- package/.synapos/core/commands/setup/build-tech.md +374 -0
- package/.synapos/core/commands/setup/discover.md +543 -0
- package/.synapos/core/commands/setup/from-code.md +407 -0
- package/.synapos/core/commands/setup/start.md +201 -0
- package/.synapos/core/copilot-adapter.md +283 -0
- package/.synapos/core/gate-system.md +417 -0
- package/.synapos/core/model-adapter.md +245 -0
- package/.synapos/core/orchestrator.md +794 -0
- package/.synapos/core/pipeline-runner.md +784 -0
- package/.synapos/core/pipelines/pre-execution.yaml +107 -0
- package/.synapos/core/rules/product-agent.mdc +59 -0
- package/.synapos/core/skills-engine.md +207 -0
- package/.synapos/core/versioning.md +218 -0
- package/.synapos/skills/.gitkeep +0 -0
- package/.synapos/skills/brave-search/SKILL.md +130 -0
- package/.synapos/skills/fetch-url/SKILL.md +135 -0
- package/.synapos/skills/filesystem/SKILL.md +162 -0
- package/.synapos/skills/github/SKILL.md +148 -0
- package/.synapos/skills/playwright-browser/SKILL.md +124 -0
- package/.synapos/squad-templates/backend/agents/alexandre-api.agent.md +243 -0
- package/.synapos/squad-templates/backend/agents/bruno-base.agent.md +240 -0
- package/.synapos/squad-templates/backend/agents/daniela-dados.agent.md +267 -0
- package/.synapos/squad-templates/backend/agents/roberto-revisao-be.agent.md +219 -0
- package/.synapos/squad-templates/backend/agents/sergio-seguranca.agent.md +266 -0
- package/.synapos/squad-templates/backend/pipelines/api-development.yaml +83 -0
- package/.synapos/squad-templates/backend/pipelines/bug-fix.yaml +41 -0
- package/.synapos/squad-templates/backend/pipelines/database-migration.yaml +56 -0
- package/.synapos/squad-templates/backend/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/backend/pipelines/steps/01-gate-integridade.md +66 -0
- package/.synapos/squad-templates/backend/pipelines/steps/02-design-api.md +155 -0
- package/.synapos/squad-templates/backend/pipelines/steps/03-checkpoint-contrato.md +44 -0
- package/.synapos/squad-templates/backend/pipelines/steps/04-implementacao.md +113 -0
- package/.synapos/squad-templates/backend/pipelines/steps/05-seguranca.md +100 -0
- package/.synapos/squad-templates/backend/pipelines/steps/06-review.md +80 -0
- package/.synapos/squad-templates/backend/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/backend/pipelines/steps/bfbe-02-diagnostico.md +47 -0
- package/.synapos/squad-templates/backend/pipelines/steps/bfbe-03-fix.md +41 -0
- package/.synapos/squad-templates/backend/pipelines/steps/bfbe-04-review.md +42 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-02-schema.md +85 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-03-checkpoint.md +30 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-04-migration.md +58 -0
- package/.synapos/squad-templates/backend/pipelines/steps/dm-05-review.md +44 -0
- package/.synapos/squad-templates/backend/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/backend/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/backend/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/backend/template.yaml +72 -0
- package/.synapos/squad-templates/devops/agents/claudio-containers.agent.md +245 -0
- package/.synapos/squad-templates/devops/agents/igor-infra.agent.md +198 -0
- package/.synapos/squad-templates/devops/agents/osvaldo-observabilidade.agent.md +262 -0
- package/.synapos/squad-templates/devops/agents/patricia-pipeline.agent.md +253 -0
- package/.synapos/squad-templates/devops/pipelines/ci-cd-setup.yaml +93 -0
- package/.synapos/squad-templates/devops/pipelines/infra-provision.yaml +56 -0
- package/.synapos/squad-templates/devops/pipelines/quick-fix.yaml +41 -0
- package/.synapos/squad-templates/devops/pipelines/steps/01-gate-integridade.md +62 -0
- package/.synapos/squad-templates/devops/pipelines/steps/02-infra-design.md +31 -0
- package/.synapos/squad-templates/devops/pipelines/steps/03-containers.md +28 -0
- package/.synapos/squad-templates/devops/pipelines/steps/04-checkpoint.md +20 -0
- package/.synapos/squad-templates/devops/pipelines/steps/05-pipeline-cicd.md +29 -0
- package/.synapos/squad-templates/devops/pipelines/steps/06-observabilidade.md +28 -0
- package/.synapos/squad-templates/devops/pipelines/steps/07-review.md +27 -0
- package/.synapos/squad-templates/devops/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-02-design.md +21 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-03-iac.md +20 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-04-checkpoint.md +22 -0
- package/.synapos/squad-templates/devops/pipelines/steps/ip-05-apply.md +22 -0
- package/.synapos/squad-templates/devops/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/devops/pipelines/steps/qf-03-executar.md +52 -0
- package/.synapos/squad-templates/devops/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/devops/template.yaml +68 -0
- package/.synapos/squad-templates/engineer/agents/leo-engenheiro.agent.md +203 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/01-gate.md +22 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/02-preparacao.md +66 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/03-investigacao.md +110 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/04-checkpoint-contexto.md +24 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/05-arquitetura.md +127 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/06-checkpoint-arquitetura.md +27 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/07-planejamento.md +109 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/08-checkpoint-plano.md +27 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/09-execucao.md +121 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/atualizar-tarefa.md +27 -0
- package/.synapos/squad-templates/engineer/pipeline/steps/visual-spec.md +74 -0
- package/.synapos/squad-templates/engineer/pipelines/feature-development.yaml +107 -0
- package/.synapos/squad-templates/engineer/template.yaml +56 -0
- package/.synapos/squad-templates/frontend/agents/ana-arquitetura-fe.agent.md +245 -0
- package/.synapos/squad-templates/frontend/agents/paulo-performance.agent.md +234 -0
- package/.synapos/squad-templates/frontend/agents/renata-revisao-fe.agent.md +219 -0
- package/.synapos/squad-templates/frontend/agents/rodrigo-react.agent.md +261 -0
- package/.synapos/squad-templates/frontend/agents/tiago-testes-fe.agent.md +229 -0
- package/.synapos/squad-templates/frontend/agents/ursula-ui.agent.md +283 -0
- package/.synapos/squad-templates/frontend/pipelines/bug-fix.yaml +40 -0
- package/.synapos/squad-templates/frontend/pipelines/component-development.yaml +48 -0
- package/.synapos/squad-templates/frontend/pipelines/feature-development.yaml +76 -0
- package/.synapos/squad-templates/frontend/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/01-gate-integridade.md +66 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/02-arquitetura.md +100 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/03-checkpoint-design.md +43 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/04-implementacao.md +114 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/05-review.md +104 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/06-docs.md +51 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/bf-02-diagnostico.md +52 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/bf-03-fix.md +58 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/bf-04-review.md +43 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/cd-02-spec.md +96 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/qf-03-executar.md +45 -0
- package/.synapos/squad-templates/frontend/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/frontend/template.yaml +77 -0
- package/.synapos/squad-templates/fullstack/agents/carlos-coordenador.agent.md +266 -0
- package/.synapos/squad-templates/fullstack/pipelines/bug-fix.yaml +46 -0
- package/.synapos/squad-templates/fullstack/pipelines/integration-feature.yaml +92 -0
- package/.synapos/squad-templates/fullstack/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/01-gate-integridade.md +66 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/02-contrato-api.md +63 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/03-checkpoint-contrato.md +25 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/04-frontend.md +35 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/05-backend.md +36 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/06-integracao.md +47 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/07-review.md +49 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/bf-02-diagnostico.md +34 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/bf-03-fix.md +22 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/bf-04-review.md +22 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/fullstack/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/fullstack/template.yaml +93 -0
- package/.synapos/squad-templates/ia-dados/agents/diana-dados.agent.md +269 -0
- package/.synapos/squad-templates/ia-dados/agents/larissa-llm.agent.md +255 -0
- package/.synapos/squad-templates/ia-dados/agents/marco-ml.agent.md +227 -0
- package/.synapos/squad-templates/ia-dados/agents/nelson-notebook.agent.md +252 -0
- package/.synapos/squad-templates/ia-dados/pipelines/data-pipeline.yaml +71 -0
- package/.synapos/squad-templates/ia-dados/pipelines/ml-feature.yaml +91 -0
- package/.synapos/squad-templates/ia-dados/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/01-gate-integridade.md +62 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/02-exploracao.md +36 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/03-design.md +25 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/04-checkpoint.md +23 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/05-implementacao.md +26 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/06-avaliacao.md +29 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/07-deploy.md +30 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-02-design.md +21 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-03-checkpoint.md +14 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-04-implementacao.md +19 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-05-qualidade.md +21 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/dp-06-deploy.md +22 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-03-executar.md +53 -0
- package/.synapos/squad-templates/ia-dados/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/ia-dados/template.yaml +68 -0
- package/.synapos/squad-templates/mobile/agents/felipe-feature.agent.md +234 -0
- package/.synapos/squad-templates/mobile/agents/marina-mobile.agent.md +219 -0
- package/.synapos/squad-templates/mobile/agents/viviane-visual.agent.md +218 -0
- package/.synapos/squad-templates/mobile/pipelines/bug-fix.yaml +47 -0
- package/.synapos/squad-templates/mobile/pipelines/feature-development.yaml +77 -0
- package/.synapos/squad-templates/mobile/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/01-gate-integridade.md +62 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/02-arquitetura.md +35 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/03-design-ux.md +29 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/04-checkpoint.md +20 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/05-implementacao.md +26 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/06-review.md +27 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/atualizar-tarefa.md +138 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/bf-02-diagnostico.md +22 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/bf-03-fix.md +23 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/bf-04-review.md +20 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/mobile/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/mobile/template.yaml +73 -0
- package/.synapos/squad-templates/produto/agents/ana-analise.agent.md +243 -0
- package/.synapos/squad-templates/produto/agents/eduardo-estrategia.agent.md +258 -0
- package/.synapos/squad-templates/produto/agents/paulo-pesquisa.agent.md +226 -0
- package/.synapos/squad-templates/produto/agents/priscila-produto.agent.md +235 -0
- package/.synapos/squad-templates/produto/agents/tania-tecnica.agent.md +239 -0
- package/.synapos/squad-templates/produto/agents/ursula-ux.agent.md +231 -0
- package/.synapos/squad-templates/produto/pipelines/discovery-spec-handoff.yaml +152 -0
- package/.synapos/squad-templates/produto/pipelines/nova-feature.yaml +77 -0
- package/.synapos/squad-templates/produto/pipelines/quick-fix.yaml +40 -0
- package/.synapos/squad-templates/produto/pipelines/quick-spec.yaml +60 -0
- package/.synapos/squad-templates/produto/pipelines/refinar-docs.yaml +33 -0
- package/.synapos/squad-templates/produto/pipelines/steps/01-gate-integridade.md +48 -0
- package/.synapos/squad-templates/produto/pipelines/steps/02-contexto-negocio.md +119 -0
- package/.synapos/squad-templates/produto/pipelines/steps/03-personas.md +107 -0
- package/.synapos/squad-templates/produto/pipelines/steps/04-checkpoint-research.md +53 -0
- package/.synapos/squad-templates/produto/pipelines/steps/04b-alinhamento-estrategico.md +92 -0
- package/.synapos/squad-templates/produto/pipelines/steps/05-spec.md +138 -0
- package/.synapos/squad-templates/produto/pipelines/steps/05b-checkpoint-spec.md +60 -0
- package/.synapos/squad-templates/produto/pipelines/steps/06-requisitos.md +118 -0
- package/.synapos/squad-templates/produto/pipelines/steps/06b-checkpoint-requisitos.md +53 -0
- package/.synapos/squad-templates/produto/pipelines/steps/06c-visual-spec.md +59 -0
- package/.synapos/squad-templates/produto/pipelines/steps/07-arquitetura.md +160 -0
- package/.synapos/squad-templates/produto/pipelines/steps/08-handoff.md +130 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-02-validar-requisito.md +73 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-03-verificar-docs.md +69 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-04-spec.md +160 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-05-checkpoint-aprovacao.md +50 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-06-versionar.md +71 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-07-handoff.md +99 -0
- package/.synapos/squad-templates/produto/pipelines/steps/nf-08-criar-tarefas.md +232 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qf-02-contexto.md +34 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qf-03-executar.md +49 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qf-04-registrar.md +35 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qs-02-contexto.md +59 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qs-03-spec.md +67 -0
- package/.synapos/squad-templates/produto/pipelines/steps/qs-05-handoff.md +49 -0
- package/.synapos/squad-templates/produto/pipelines/steps/rf-02-selecionar.md +66 -0
- package/.synapos/squad-templates/produto/pipelines/steps/rf-03-delta.md +73 -0
- package/.synapos/squad-templates/produto/pipelines/steps/rf-04-criar-versao.md +86 -0
- package/.synapos/squad-templates/produto/template.yaml +91 -0
- package/.synapos/squads/.gitkeep +0 -0
- package/README.md +285 -0
- package/bin/synapos.js +331 -0
- package/package.json +26 -0
|
@@ -0,0 +1,784 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: synapos-pipeline-runner
|
|
3
|
+
version: 2.2.0
|
|
4
|
+
description: Engine de execução de pipelines — gerencia steps, agents, vetos e revisões
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SYNAPOS PIPELINE RUNNER v2.2.0
|
|
8
|
+
|
|
9
|
+
> Responsável por executar pipelines de squads step-by-step.
|
|
10
|
+
> Chamado pelo orchestrator após criação ou carregamento de um squad.
|
|
11
|
+
>
|
|
12
|
+
> v2.0: Sistema de sessions — todos os artefatos de uma feature vivem em
|
|
13
|
+
> `docs/.squads/sessions/{feature-slug}/`, compartilhado entre squads.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## PROTOCOLO DE EXECUÇÃO
|
|
18
|
+
|
|
19
|
+
Receba do orchestrator:
|
|
20
|
+
- Configuração do squad: `.synapos/squads/{squad-slug}/`
|
|
21
|
+
- Feature session: `docs/.squads/sessions/{feature-slug}/`
|
|
22
|
+
- Pipeline a executar (ID ou `default`)
|
|
23
|
+
|
|
24
|
+
Execute os passos abaixo na ordem exata.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## CONCEITO: SESSION
|
|
29
|
+
|
|
30
|
+
Cada feature tem uma **session** — pasta única e permanente compartilhada por todos os squads que trabalham nela.
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
docs/.squads/sessions/{feature-slug}/
|
|
34
|
+
├── context.md ← contexto da feature (investigação)
|
|
35
|
+
├── architecture.md ← desenho técnico (arquitetura)
|
|
36
|
+
├── plan.md ← plano de execução por fases
|
|
37
|
+
├── memories.md ← aprendizados acumulados de todos os squads
|
|
38
|
+
├── review-notes.md ← notas de revisão (atualizado a cada review)
|
|
39
|
+
└── state.json ← estado da feature, atualizado por cada squad
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
O `{feature-slug}` é o identificador da feature — geralmente o nome da branch (`feat/auth-module`) ou um slug descritivo (`auth-module`).
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## FASE 1 — INICIALIZAÇÃO
|
|
47
|
+
|
|
48
|
+
### 1.1 — Carregar contexto
|
|
49
|
+
|
|
50
|
+
Leia os seguintes arquivos:
|
|
51
|
+
```
|
|
52
|
+
.synapos/squads/{squad-slug}/squad.yaml → configuração do squad
|
|
53
|
+
docs/.squads/sessions/{feature-slug}/memories.md → memória da feature (todos os squads)
|
|
54
|
+
docs/.squads/sessions/{feature-slug}/review-notes.md → notas de revisão (se existir)
|
|
55
|
+
docs/.squads/sessions/{feature-slug}/context.md → contexto da feature (se existir)
|
|
56
|
+
docs/.squads/sessions/{feature-slug}/architecture.md → arquitetura (se existir)
|
|
57
|
+
docs/.squads/sessions/{feature-slug}/plan.md → plano (se existir)
|
|
58
|
+
docs/_memory/company.md → perfil da empresa/usuário
|
|
59
|
+
docs/_memory/preferences.md → preferências de saída
|
|
60
|
+
docs/_memory/project-learnings.md → aprendizados transversais (se existir)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Leia `execution_mode` e `doc_score` do `squad.yaml` e configure o runner:
|
|
64
|
+
|
|
65
|
+
| `execution_mode` | Contexto injetado | Gates ativos |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| `bootstrap` | `company.md` + session files apenas | GATE-1, GATE-DECISION |
|
|
68
|
+
| `standard` | `company.md` + docs parciais + session files + ADRs | GATE-0,1, GATE-ADR, GATE-DECISION, GATE-3, GATE-5 |
|
|
69
|
+
| `strict` | Tudo — docs completas + session files + ADRs | Todos os gates |
|
|
70
|
+
|
|
71
|
+
Log ao iniciar:
|
|
72
|
+
```
|
|
73
|
+
⚙️ [MODE] {BOOTSTRAP | STANDARD | STRICT} — doc_score: {score}/100
|
|
74
|
+
Gates ativos: {lista}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Se `execution_mode: bootstrap`:**
|
|
78
|
+
- Não tente ler `docs/`, `docs/business/`, `docs/tech/` nem `docs/tech-context/`
|
|
79
|
+
- Injete apenas: `company.md` (se existir) + session files + step instructions
|
|
80
|
+
- Log adicional: `⚡ [BOOTSTRAP] Contexto mínimo — ADRs e docs de projeto não injetados`
|
|
81
|
+
|
|
82
|
+
**Se `execution_mode: standard` ou `strict`:**
|
|
83
|
+
|
|
84
|
+
Adicionalmente, **pré-carregue os ADRs do projeto uma única vez**:
|
|
85
|
+
- Leia todos os arquivos em `docs/` cujo nome contenha `ADR`, `adr`, `decisions` ou `architecture-decision`
|
|
86
|
+
- Armazene o conteúdo em memória como `[ADRS_CARREGADOS]`
|
|
87
|
+
- Esses ADRs serão injetados diretamente nos steps — agents não precisam ler `docs/` para buscá-los
|
|
88
|
+
|
|
89
|
+
Conte as seções de segundo nível (`##`) em `memories.md` e `review-notes.md` e armazene os valores como `[MEMORIES_COUNT]` e `[REVIEW_NOTES_COUNT]` para uso nas fases 2 e 3.
|
|
90
|
+
|
|
91
|
+
### 1.1b — Estimativa de Budget de Contexto
|
|
92
|
+
|
|
93
|
+
Com base nos arquivos carregados em 1.1, estime o volume de contexto da session:
|
|
94
|
+
|
|
95
|
+
1. Some o número de linhas de `context.md` + `architecture.md` + `plan.md` (se existirem)
|
|
96
|
+
2. Some o número de linhas de `memories.md` + `review-notes.md`
|
|
97
|
+
|
|
98
|
+
| Linhas totais (session files) | Ação |
|
|
99
|
+
|---|---|
|
|
100
|
+
| < 400 linhas | Sem alerta — contexto saudável |
|
|
101
|
+
| 400–700 linhas | Alerta amarelo: contexto crescendo |
|
|
102
|
+
| > 700 linhas | Alerta laranja: considere ativar `model_capability: standard` |
|
|
103
|
+
|
|
104
|
+
Se o total ultrapassar **400 linhas**, exiba ao anunciar o pipeline:
|
|
105
|
+
```
|
|
106
|
+
⚠️ [BUDGET] Session com contexto elevado:
|
|
107
|
+
context.md + architecture.md + plan.md: ~{N} linhas
|
|
108
|
+
memories.md + review-notes.md: ~{N} linhas
|
|
109
|
+
Total: ~{soma} linhas (~{soma/25}k tokens estimados por step)
|
|
110
|
+
|
|
111
|
+
Dica: ative model_capability: standard em docs/_memory/preferences.md
|
|
112
|
+
para comprimir o contexto automaticamente.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Nenhuma execução é bloqueada — apenas alerta informativo.
|
|
116
|
+
|
|
117
|
+
### 1.1c — Verificar model_capability
|
|
118
|
+
|
|
119
|
+
Leia o campo `model_capability` de `docs/_memory/preferences.md`:
|
|
120
|
+
|
|
121
|
+
| Valor | Ação |
|
|
122
|
+
|---|---|
|
|
123
|
+
| `high` ou ausente | Continuar normalmente — sem adaptação |
|
|
124
|
+
| `standard` | Ativar MODEL-ADAPTER em modo standard antes de cada step |
|
|
125
|
+
| `lite` | Ativar MODEL-ADAPTER em modo lite antes de cada step |
|
|
126
|
+
|
|
127
|
+
Se `model_capability` for `standard` ou `lite`, leia `.synapos/core/model-adapter.md` **agora** e mantenha o protocolo em memória para aplicar em cada step da FASE 2.
|
|
128
|
+
|
|
129
|
+
Log ao anunciar início do pipeline:
|
|
130
|
+
```
|
|
131
|
+
🔧 [MODEL-ADAPTER] Modo {standard|lite} ativo — {model_name se disponível, senão "modelo não especificado"}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 1.2 — Resolver pipeline
|
|
135
|
+
|
|
136
|
+
Leia `.synapos/squads/{squad-slug}/pipeline/pipeline.yaml`.
|
|
137
|
+
|
|
138
|
+
**Se o pipeline.yaml declara `session_files`:**
|
|
139
|
+
|
|
140
|
+
```yaml
|
|
141
|
+
session_files:
|
|
142
|
+
context: context.md
|
|
143
|
+
architecture: architecture.md
|
|
144
|
+
plan: plan.md
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Esses arquivos ficam na session folder. Toda vez que um step gera um `output_file` que coincide com um `session_files`, o arquivo é salvo na session e injetado automaticamente no contexto de todos os steps subsequentes.
|
|
148
|
+
|
|
149
|
+
Estrutura esperada do pipeline.yaml:
|
|
150
|
+
```yaml
|
|
151
|
+
name: "Nome do Pipeline"
|
|
152
|
+
description: "Descrição do fluxo"
|
|
153
|
+
steps:
|
|
154
|
+
- id: step-id
|
|
155
|
+
name: "Nome do Step"
|
|
156
|
+
agent: agent-id
|
|
157
|
+
file: pipeline/steps/{step-id}.md
|
|
158
|
+
execution: subagent | inline | checkpoint
|
|
159
|
+
model_tier: fast | powerful
|
|
160
|
+
output_files: # nomes de arquivo apenas
|
|
161
|
+
- {nome}.md # vai para docs/.squads/sessions/{feature-slug}/
|
|
162
|
+
veto_conditions: # opcional
|
|
163
|
+
- "condição que invalida o output"
|
|
164
|
+
on_reject: step-id-anterior # opcional — loop de revisão
|
|
165
|
+
depends_on: [step-id] # opcional
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Campo `model_tier` por step
|
|
169
|
+
|
|
170
|
+
Define a intensidade de processamento esperada para o step:
|
|
171
|
+
|
|
172
|
+
| Valor | Uso recomendado |
|
|
173
|
+
|-------|----------------|
|
|
174
|
+
| `fast` | Preparação, leitura, formatação, gates simples |
|
|
175
|
+
| `powerful` | Geração de conteúdo, arquitetura, spec, implementação, decisões complexas |
|
|
176
|
+
|
|
177
|
+
**Padrão quando não definido:** `powerful`.
|
|
178
|
+
|
|
179
|
+
**Multi-model environments:** Se `docs/_memory/preferences.md` define dois campos:
|
|
180
|
+
```yaml
|
|
181
|
+
model_fast: claude-haiku-4-5
|
|
182
|
+
model_powerful: claude-opus-4-6
|
|
183
|
+
```
|
|
184
|
+
O pipeline-runner roteia cada step automaticamente:
|
|
185
|
+
- `model_tier: fast` → usa `model_fast`
|
|
186
|
+
- `model_tier: powerful` → usa `model_powerful`
|
|
187
|
+
- Campo não definido → usa `model_powerful`
|
|
188
|
+
|
|
189
|
+
Se apenas um modelo está configurado em preferences.md, todos os steps usam o mesmo modelo independente do `model_tier`.
|
|
190
|
+
|
|
191
|
+
### 1.3 — Carregar agents
|
|
192
|
+
|
|
193
|
+
Para cada agent no squad.yaml, leia o arquivo `.agent.md` correspondente em `.synapos/squads/{squad-slug}/agents/`.
|
|
194
|
+
|
|
195
|
+
### 1.4 — Inicializar ou retomar session
|
|
196
|
+
|
|
197
|
+
#### A. Verificar session folder
|
|
198
|
+
|
|
199
|
+
Verifique se `docs/.squads/sessions/{feature-slug}/` existe.
|
|
200
|
+
|
|
201
|
+
**Se não existe:** crie a pasta e inicialize os arquivos:
|
|
202
|
+
|
|
203
|
+
```
|
|
204
|
+
docs/.squads/sessions/{feature-slug}/
|
|
205
|
+
├── memories.md ← inicializar vazio com header
|
|
206
|
+
├── review-notes.md ← inicializar vazio com header
|
|
207
|
+
└── state.json ← inicializar com estrutura abaixo
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
`state.json` inicial:
|
|
211
|
+
```json
|
|
212
|
+
{
|
|
213
|
+
"feature": "{feature-slug}",
|
|
214
|
+
"created_at": "{ISO datetime}",
|
|
215
|
+
"updated_at": "{ISO datetime}",
|
|
216
|
+
"squads": {}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
`memories.md` inicial:
|
|
221
|
+
```markdown
|
|
222
|
+
# Memória da Feature: {feature-slug}
|
|
223
|
+
|
|
224
|
+
> Aprendizados acumulados de todos os squads que trabalharam nesta feature.
|
|
225
|
+
> Atualizado ao final de cada pipeline.
|
|
226
|
+
|
|
227
|
+
(preenchido durante execuções)
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
`review-notes.md` inicial:
|
|
231
|
+
```markdown
|
|
232
|
+
# Review Notes: {feature-slug}
|
|
233
|
+
|
|
234
|
+
> Notas de revisão de todos os squads. Acrescentadas, nunca substituídas.
|
|
235
|
+
|
|
236
|
+
(preenchido durante revisões)
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
#### B. Verificar entrada do squad atual no state.json
|
|
240
|
+
|
|
241
|
+
Leia `state.json` e verifique se existe `state.squads["{squad-slug}"]`.
|
|
242
|
+
|
|
243
|
+
**Se existe e tem `"status": "running"`** — sessão interrompida:
|
|
244
|
+
|
|
245
|
+
O orchestrator já detectou isso e perguntou ao usuário antes de chegar aqui.
|
|
246
|
+
|
|
247
|
+
- Se o orchestrator passou `resume_from: {step-id}`:
|
|
248
|
+
- Pule todos os steps em `completed_steps`
|
|
249
|
+
- Continue a partir de `resume_from`
|
|
250
|
+
- Anuncie:
|
|
251
|
+
```
|
|
252
|
+
⚡ Retomando {squad-slug} na feature {feature-slug}
|
|
253
|
+
Steps já concluídos: {completed_steps}
|
|
254
|
+
Continuando a partir de: {resume_from}
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
**Se não existe ou `"status": "completed"` / `"discarded"`** — nova execução do squad:
|
|
258
|
+
|
|
259
|
+
Crie/atualize a entrada do squad no state.json:
|
|
260
|
+
```json
|
|
261
|
+
{
|
|
262
|
+
"squads": {
|
|
263
|
+
"{squad-slug}": {
|
|
264
|
+
"domain": "{domain}",
|
|
265
|
+
"pipeline": "{pipeline-id}",
|
|
266
|
+
"started_at": "{ISO datetime}",
|
|
267
|
+
"completed_at": null,
|
|
268
|
+
"status": "running",
|
|
269
|
+
"completed_steps": [],
|
|
270
|
+
"current_step": null,
|
|
271
|
+
"suspended_at": null
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Atualize `state.updated_at`.
|
|
278
|
+
|
|
279
|
+
**A cada step iniciado**, atualize imediatamente `state.squads["{squad-slug}"].suspended_at` com o step atual. Isso garante recuperação precisa se a sessão for interrompida.
|
|
280
|
+
|
|
281
|
+
### 1.4c — Proteção e Resiliência do state.json
|
|
282
|
+
|
|
283
|
+
**Leitura segura:**
|
|
284
|
+
Antes de usar o `state.json`, execute:
|
|
285
|
+
1. Tente parsear o conteúdo como JSON
|
|
286
|
+
2. Se falhar (JSON malformado): crie backup automático em `state.json.bak.{ISO-timestamp}` e informe:
|
|
287
|
+
```
|
|
288
|
+
⚠️ state.json corrompido. Backup salvo em state.json.bak.{timestamp}.
|
|
289
|
+
Reiniciando state da feature. Histórico preservado no backup.
|
|
290
|
+
```
|
|
291
|
+
3. Reinicialize com estrutura mínima (`{ "feature": "{slug}", "created_at": "...", "squads": {} }`)
|
|
292
|
+
|
|
293
|
+
**Escrita segura:**
|
|
294
|
+
Antes de persistir qualquer escrita no `state.json`:
|
|
295
|
+
1. Serialize o objeto atualizado para string
|
|
296
|
+
2. Valide que é JSON válido
|
|
297
|
+
3. Se inválido: descarte a escrita, log de erro, não sobrescreva o arquivo existente
|
|
298
|
+
4. Se válido: sobrescreva (nunca usar append direto — sempre reescrever o arquivo completo com o objeto completo)
|
|
299
|
+
|
|
300
|
+
**Regra:** O state.json nunca deve ser editado diretamente por agents. Apenas o pipeline-runner escreve nele.
|
|
301
|
+
|
|
302
|
+
### 1.4b — Verificar pre_pipeline
|
|
303
|
+
|
|
304
|
+
Verifique se o `squad.yaml` tem a chave `pre_pipeline`:
|
|
305
|
+
|
|
306
|
+
```yaml
|
|
307
|
+
pre_pipeline:
|
|
308
|
+
available: true
|
|
309
|
+
agent: {id-do-agent-lead}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**Se `pre_pipeline.available: true` E `context.md` ainda não existe na session:**
|
|
313
|
+
|
|
314
|
+
Pergunte ao usuário:
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
Esta feature ainda não tem contexto/arquitetura definidos.
|
|
318
|
+
|
|
319
|
+
Deseja executar a pré-execução antes de [{nome do pipeline principal}]?
|
|
320
|
+
|
|
321
|
+
- ✅ Sim — Investigação → Arquitetura → Planejamento → {pipeline principal}
|
|
322
|
+
- ⏭️ Não — Iniciar direto no {pipeline principal}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
**Se escolher Sim:**
|
|
326
|
+
1. Leia `.synapos/core/pipelines/pre-execution.yaml`
|
|
327
|
+
2. Resolva `{lead_agent}` pelo valor de `pre_pipeline.agent` no squad.yaml
|
|
328
|
+
3. Execute os steps do pre-execution (com todos os gates e checkpoints)
|
|
329
|
+
4. Os arquivos gerados (context.md, architecture.md, plan.md) vão para a session folder
|
|
330
|
+
5. Ao concluir, anuncie:
|
|
331
|
+
```
|
|
332
|
+
✅ Pré-execução concluída.
|
|
333
|
+
Session: docs/.squads/sessions/{feature-slug}/
|
|
334
|
+
Arquivos disponíveis: context.md, architecture.md, plan.md
|
|
335
|
+
Iniciando: {nome do pipeline principal}...
|
|
336
|
+
```
|
|
337
|
+
6. Continue para o pipeline principal com session files já no contexto
|
|
338
|
+
|
|
339
|
+
**Se `context.md` já existe na session:** pule — a pré-execução já foi feita.
|
|
340
|
+
|
|
341
|
+
### 1.5 — Verificação de Squads Paralelos
|
|
342
|
+
|
|
343
|
+
Ao iniciar a execução, leia `state.json` da feature.
|
|
344
|
+
|
|
345
|
+
Se existirem outros squads com `"status": "running"` na mesma feature:
|
|
346
|
+
```
|
|
347
|
+
⚠️ [PARALELO] Outros squads ativos nesta feature:
|
|
348
|
+
{lista de squad-slugs com status running}
|
|
349
|
+
|
|
350
|
+
Arquivos que este pipeline pode modificar:
|
|
351
|
+
{lista de output_files deste pipeline}
|
|
352
|
+
|
|
353
|
+
Possível conflito se outro squad também modificar os mesmos arquivos.
|
|
354
|
+
Recomendação: coordene com o outro squad antes de sobrescrever arquivos compartilhados.
|
|
355
|
+
|
|
356
|
+
Continuar? [Enter para sim]
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
Nunca bloqueie — apenas avise e aguarde confirmação.
|
|
360
|
+
|
|
361
|
+
### 1.6 — Anunciar início
|
|
362
|
+
|
|
363
|
+
```
|
|
364
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
365
|
+
Pipeline: {nome do pipeline}
|
|
366
|
+
Squad: {squad-slug} | Modo: {Alta Performance | Econômico | Solo}
|
|
367
|
+
Feature: {feature-slug}
|
|
368
|
+
Session: docs/.squads/sessions/{feature-slug}/
|
|
369
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
---
|
|
373
|
+
|
|
374
|
+
## FASE 2 — EXECUÇÃO DE STEPS
|
|
375
|
+
|
|
376
|
+
Para cada step do pipeline (em ordem, respeitando `depends_on`):
|
|
377
|
+
|
|
378
|
+
### 2.1 — Atualizar state
|
|
379
|
+
|
|
380
|
+
```json
|
|
381
|
+
{
|
|
382
|
+
"squads": {
|
|
383
|
+
"{squad-slug}": {
|
|
384
|
+
"current_step": "{step-id}",
|
|
385
|
+
"suspended_at": "{step-id}",
|
|
386
|
+
"status": "running"
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
"updated_at": "{ISO datetime}"
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### 2.2 — Anunciar step
|
|
394
|
+
|
|
395
|
+
```
|
|
396
|
+
▶ [{N}/{total}] {Nome do Step}
|
|
397
|
+
Agent: {icon} {displayName do agent}
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
### 2.3 — Carregar step
|
|
401
|
+
|
|
402
|
+
Leia o arquivo do step: `.synapos/squads/{squad-slug}/{file}`
|
|
403
|
+
|
|
404
|
+
**Antes de passar as instruções ao agent, substitua todas as ocorrências de `docs/` no texto do step por `docs/.squads/sessions/{feature-slug}/`.**
|
|
405
|
+
|
|
406
|
+
Exemplo: `docs/architecture.md` → `docs/.squads/sessions/auth-module/architecture.md`
|
|
407
|
+
|
|
408
|
+
**Se `model_capability` for `standard` ou `lite` (verificado em 1.1c):**
|
|
409
|
+
Aplique o protocolo do MODEL-ADAPTER sobre o prompt composto antes de enviar ao agent.
|
|
410
|
+
O adapter atua apenas em steps com `execution: subagent` ou `execution: inline`.
|
|
411
|
+
Steps com `execution: checkpoint` nunca são afetados.
|
|
412
|
+
|
|
413
|
+
### 2.4 — Executar por modo
|
|
414
|
+
|
|
415
|
+
**`execution: checkpoint`** — pausa para decisão do usuário. Use menu interativo:
|
|
416
|
+
```
|
|
417
|
+
⏸ CHECKPOINT: {nome do step}
|
|
418
|
+
{pergunta ou contexto do step}
|
|
419
|
+
|
|
420
|
+
- ✅ Continuar
|
|
421
|
+
- ✏️ Ajustar contexto
|
|
422
|
+
- ⏭️ Pular este step
|
|
423
|
+
```
|
|
424
|
+
Aguarde a seleção do usuário. Salve a resposta e continue.
|
|
425
|
+
|
|
426
|
+
> **Modo Solo** — Se `squad.yaml` tem `mode: solo` E o step checkpoint **não tem** `gate:` definido:
|
|
427
|
+
> → Pule o checkpoint automaticamente, sem aguardar input do usuário.
|
|
428
|
+
> → Log: `⚡ [SOLO] {nome do step} — checkpoint de aprovação ignorado`
|
|
429
|
+
> → Continue para o próximo step imediatamente.
|
|
430
|
+
> Checkpoints com `gate:` definido **sempre** executam, independente do modo.
|
|
431
|
+
|
|
432
|
+
### Checkpoints Assíncronos (para equipes distribuídas)
|
|
433
|
+
|
|
434
|
+
Se `squad.yaml` tem o campo `async_checkpoints: true`:
|
|
435
|
+
|
|
436
|
+
Ao invés de bloquear e aguardar input síncrono:
|
|
437
|
+
1. Salve o estado: `suspended_at: {step-id}`, `status: "awaiting_approval"`
|
|
438
|
+
2. Registre o checkpoint em `docs/.squads/sessions/{feature-slug}/pending-approvals.md`:
|
|
439
|
+
```markdown
|
|
440
|
+
## Aprovação Pendente — {step-id} · {YYYY-MM-DD HH:MM}
|
|
441
|
+
|
|
442
|
+
Squad: {squad-slug}
|
|
443
|
+
Pipeline: {pipeline-name}
|
|
444
|
+
Step: {step-name}
|
|
445
|
+
|
|
446
|
+
{conteúdo do checkpoint — output do step anterior resumido}
|
|
447
|
+
|
|
448
|
+
Para aprovar e continuar: execute /init → selecione o squad → "Retomar de onde parou"
|
|
449
|
+
```
|
|
450
|
+
3. Informe:
|
|
451
|
+
```
|
|
452
|
+
⏸ [ASYNC] Checkpoint registrado para aprovação assíncrona.
|
|
453
|
+
Arquivo: docs/.squads/sessions/{feature-slug}/pending-approvals.md
|
|
454
|
+
|
|
455
|
+
Retome quando aprovado: /init → squad → "Retomar de onde parou"
|
|
456
|
+
```
|
|
457
|
+
4. Encerre o pipeline sem erro (não é falha — é pausa deliberada)
|
|
458
|
+
|
|
459
|
+
Para ativar no squad:
|
|
460
|
+
```yaml
|
|
461
|
+
# squad.yaml
|
|
462
|
+
async_checkpoints: true # padrão: false
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
**`execution: inline`** — agent executa diretamente na conversa:
|
|
466
|
+
- Assuma a persona do agent (lida do .agent.md)
|
|
467
|
+
- Execute as instruções do step
|
|
468
|
+
- Apresente o output formatado
|
|
469
|
+
- Se `output_file` definido → salve o resultado
|
|
470
|
+
|
|
471
|
+
**Step `atualizar-tarefa`** — Antes de executar qualquer step com id contendo `atualizar-tarefa`, verifique `docs/_memory/preferences.md`:
|
|
472
|
+
- Se `task_tracker: none` ou campo ausente → pule o step automaticamente.
|
|
473
|
+
- Log: `⚡ Task tracker não configurado — step 'atualizar-tarefa' ignorado`
|
|
474
|
+
- Continue para o próximo step.
|
|
475
|
+
|
|
476
|
+
**`execution: subagent`** — agent executa como subagente:
|
|
477
|
+
- Lance um subagente com:
|
|
478
|
+
- O conteúdo completo do .agent.md do agent
|
|
479
|
+
- As instruções do step
|
|
480
|
+
- O contexto do squad (company.md + memories.md da session)
|
|
481
|
+
- Os session files disponíveis (context.md, architecture.md, plan.md)
|
|
482
|
+
- Os outputs dos steps anteriores relevantes (via `depends_on`)
|
|
483
|
+
- As instruções de todas as skills ativas (lidas de `.synapos/skills/{skill}/SKILL.md`)
|
|
484
|
+
- A instrução explícita: **"Use as skills disponíveis para executar esta tarefa. Skills são o caminho preferencial — nunca as ignore."**
|
|
485
|
+
- Aguarde o resultado
|
|
486
|
+
- Se `output_file` definido → salve o resultado
|
|
487
|
+
|
|
488
|
+
### 2.5 — Aplicar gates automáticos pós-execução
|
|
489
|
+
|
|
490
|
+
> Antes de aplicar qualquer gate, verifique `execution_mode` do squad.yaml e a tabela de gates ativos em `.synapos/core/gate-system.md`. Gates marcados como desativados para o modo atual são ignorados silenciosamente — sem log, sem falha.
|
|
491
|
+
|
|
492
|
+
**GATE-DECISION (universal — ativo em todos os modos):**
|
|
493
|
+
|
|
494
|
+
Antes de aceitar qualquer output de step `inline` ou `subagent`, verifique:
|
|
495
|
+
|
|
496
|
+
1. O output contém decisões implícitas? (frases como "optei por", "escolhi", "assumindo que", "vou usar", escolha não documentada)
|
|
497
|
+
- **Sim** → aplique GATE-DECISION (falha — decisão autônoma): reexecute o step instruindo o agent a usar `[DECISÃO PENDENTE]`
|
|
498
|
+
- **Não** → continue
|
|
499
|
+
|
|
500
|
+
2. O output contém `[DECISÃO PENDENTE]`?
|
|
501
|
+
- **Sim** → aplique GATE-DECISION (aguardando): apresente as opções ao usuário e aguarde seleção. **Nunca resolva automaticamente.** Após aprovação, reexecute o step passando a decisão aprovada como contexto.
|
|
502
|
+
- **Não** → continue
|
|
503
|
+
|
|
504
|
+
**GATE-ADR (quando ADRs existem):**
|
|
505
|
+
|
|
506
|
+
Se existem ADRs em `docs/`, verifique se o output as referenciou. Se não referenciar, reexecute com instrução explícita. Se contradizer ADR existente, bloqueie e informe.
|
|
507
|
+
|
|
508
|
+
**Veto conditions (após gates):**
|
|
509
|
+
|
|
510
|
+
Verifique cada condição em `veto_conditions`:
|
|
511
|
+
|
|
512
|
+
```
|
|
513
|
+
⚠ VETO: {condição violada}
|
|
514
|
+
Tentativa {N}/2 — reexecutando step com feedback...
|
|
515
|
+
```
|
|
516
|
+
|
|
517
|
+
- Máximo de 2 tentativas automáticas de reexecução
|
|
518
|
+
- Na 3ª falha → apresente ao usuário para decisão
|
|
519
|
+
|
|
520
|
+
### 2.6 — Salvar output
|
|
521
|
+
|
|
522
|
+
Se `output_file` ou `output_files` definido:
|
|
523
|
+
- Salve em `docs/.squads/sessions/{feature-slug}/{filename}`
|
|
524
|
+
- Exemplo: `output_files: [architecture.md]` → `docs/.squads/sessions/auth-module/architecture.md`
|
|
525
|
+
- Os valores em `output_files` são **somente o nome do arquivo** — sem prefixo de path
|
|
526
|
+
|
|
527
|
+
> **Regra:** Todos os outputs vão para `docs/.squads/sessions/{feature-slug}/`. Nunca crie arquivos em `docs/` raiz nem dentro de `.synapos/`.
|
|
528
|
+
|
|
529
|
+
### Proteção de output_files existentes
|
|
530
|
+
|
|
531
|
+
Antes de sobrescrever qualquer `output_file` que já existe na session folder:
|
|
532
|
+
1. Verifique se o arquivo já existe
|
|
533
|
+
2. Se sim E se `state.squads["{squad-slug}"].completed_steps` não está vazio (ou seja, há trabalho anterior):
|
|
534
|
+
- Crie cópia de segurança: `{filename}.v{N}.bak` onde N é o número de versões `.bak` existentes + 1
|
|
535
|
+
- Log: `📦 Backup criado: {filename}.v{N}.bak`
|
|
536
|
+
3. Prossiga com a escrita do novo conteúdo
|
|
537
|
+
|
|
538
|
+
Isso protege `context.md`, `architecture.md`, `spec.md` e outros artefatos centrais de reescritas acidentais.
|
|
539
|
+
|
|
540
|
+
**Retenção de backups:** Mantenha no máximo **3 arquivos `.bak`** por output file. Ao criar um novo backup quando já existem 3 versões, delete o mais antigo antes de criar o novo.
|
|
541
|
+
Log: `🗑️ Backup antigo removido: {filename}.v{N-2}.bak → novo: {filename}.v{N+1}.bak`
|
|
542
|
+
|
|
543
|
+
### 2.7 — Loop de revisão (on_reject)
|
|
544
|
+
|
|
545
|
+
Se o usuário rejeitar um output:
|
|
546
|
+
- Execute o step `on_reject` com o feedback
|
|
547
|
+
- Limite: 3 ciclos de revisão por step
|
|
548
|
+
- Na 4ª rejeição → pergunte ao usuário como proceder
|
|
549
|
+
|
|
550
|
+
Se o step gera `review-notes.md`: acrescente as notas ao arquivo existente (nunca substitua — append apenas).
|
|
551
|
+
|
|
552
|
+
### 2.8 — Marcar step completo
|
|
553
|
+
|
|
554
|
+
Atualize `state.json`:
|
|
555
|
+
```json
|
|
556
|
+
{
|
|
557
|
+
"squads": {
|
|
558
|
+
"{squad-slug}": {
|
|
559
|
+
"completed_steps": [..., "{step-id}"],
|
|
560
|
+
"current_step": null,
|
|
561
|
+
"suspended_at": null
|
|
562
|
+
}
|
|
563
|
+
},
|
|
564
|
+
"updated_at": "{ISO datetime}"
|
|
565
|
+
}
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
```
|
|
569
|
+
✅ {Nome do Step} — concluído
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
## FASE 3 — FINALIZAÇÃO
|
|
575
|
+
|
|
576
|
+
### 3.1 — Atualizar state
|
|
577
|
+
|
|
578
|
+
```json
|
|
579
|
+
{
|
|
580
|
+
"squads": {
|
|
581
|
+
"{squad-slug}": {
|
|
582
|
+
"status": "completed",
|
|
583
|
+
"completed_at": "{ISO datetime}",
|
|
584
|
+
"current_step": null,
|
|
585
|
+
"suspended_at": null
|
|
586
|
+
}
|
|
587
|
+
},
|
|
588
|
+
"updated_at": "{ISO datetime}"
|
|
589
|
+
}
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
### 3.2 — Atualizar memories
|
|
593
|
+
|
|
594
|
+
Pergunte ao usuário:
|
|
595
|
+
```
|
|
596
|
+
Algo importante que devo registrar na memória desta feature? (ENTER para pular)
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
Se houver resposta, acrescente em `docs/.squads/sessions/{feature-slug}/memories.md`:
|
|
600
|
+
```markdown
|
|
601
|
+
## [{squad-slug} · usuario] — {YYYY-MM-DD}
|
|
602
|
+
{texto do usuário}
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
### Consolidação de memories.md
|
|
606
|
+
|
|
607
|
+
Após cada append, conte o número de seções de segundo nível (`##`) em `memories.md`.
|
|
608
|
+
|
|
609
|
+
Se ≥ 10 seções: apresente ao usuário:
|
|
610
|
+
```
|
|
611
|
+
📝 memories.md acumula {N} entradas.
|
|
612
|
+
Deseja consolidar para facilitar a leitura?
|
|
613
|
+
[1] Sim — resumir entradas antigas em bloco único preservando todas as informações
|
|
614
|
+
[2] Não — manter como está
|
|
615
|
+
```
|
|
616
|
+
|
|
617
|
+
Se o usuário escolher consolidar:
|
|
618
|
+
1. Crie seção `## Consolidado até {YYYY-MM-DD}` com resumo estruturado de todas as entradas
|
|
619
|
+
2. Marque as entradas antigas com comentário `<!-- consolidado em {data} -->`
|
|
620
|
+
3. Não delete nenhuma entrada — apenas reorganize
|
|
621
|
+
|
|
622
|
+
### Formato de autoria (aplicar a todos os novos appends)
|
|
623
|
+
|
|
624
|
+
Todo append em `memories.md` deve seguir o formato:
|
|
625
|
+
```markdown
|
|
626
|
+
## [{squad-slug} · {agent-id}] — {YYYY-MM-DD}
|
|
627
|
+
|
|
628
|
+
{conteúdo do aprendizado}
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
Para aprendizados inseridos diretamente pelo usuário (não por agent), usar:
|
|
632
|
+
```markdown
|
|
633
|
+
## [{squad-slug} · usuario] — {YYYY-MM-DD}
|
|
634
|
+
|
|
635
|
+
{conteúdo}
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
### Consolidação de review-notes.md
|
|
639
|
+
|
|
640
|
+
Após cada append em `review-notes.md`, atualize o contador `[REVIEW_NOTES_COUNT]`.
|
|
641
|
+
|
|
642
|
+
Se ≥ 10 seções (`##`): apresente ao usuário:
|
|
643
|
+
```
|
|
644
|
+
📝 review-notes.md acumula {N} entradas de revisão.
|
|
645
|
+
Deseja consolidar para facilitar a leitura?
|
|
646
|
+
[1] Sim — agrupar revisões antigas em bloco único preservando todo o conteúdo
|
|
647
|
+
[2] Não — manter como está
|
|
648
|
+
```
|
|
649
|
+
|
|
650
|
+
Se o usuário escolher consolidar:
|
|
651
|
+
1. Crie seção `## Revisões Consolidadas até {YYYY-MM-DD}` com resumo estruturado de todas as entradas antigas
|
|
652
|
+
2. Marque entradas antigas com `<!-- consolidado em {data} -->`
|
|
653
|
+
3. Não delete nenhuma entrada — apenas reorganize
|
|
654
|
+
|
|
655
|
+
**Aprendizados transversais do projeto:**
|
|
656
|
+
```
|
|
657
|
+
Algo que todos os squads deste projeto devem saber? (ENTER para pular)
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
Se houver resposta, acrescente em `docs/_memory/project-learnings.md`:
|
|
661
|
+
```markdown
|
|
662
|
+
## Aprendizado — {YYYY-MM-DD} [{squad-slug} / {feature-slug}]
|
|
663
|
+
{texto do usuário}
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
### 3.2b — Evolução de modo (verificar após execução)
|
|
667
|
+
|
|
668
|
+
Recalcule o score de documentação usando a mesma fórmula do Mode Decision System (PASSO 2 do orchestrator):
|
|
669
|
+
- `company.md` +30, `docs/tech/` +20, `docs/business/` +20, `docs/tech-context/` +15, ≥5 arquivos +15
|
|
670
|
+
|
|
671
|
+
Se o novo score ultrapassar o threshold do próximo modo, exiba:
|
|
672
|
+
|
|
673
|
+
```
|
|
674
|
+
📈 [MODE UPGRADE DISPONÍVEL]
|
|
675
|
+
Score atual: {novo_score}/100 (era {score_anterior}/100)
|
|
676
|
+
Modo atual: {BOOTSTRAP | STANDARD}
|
|
677
|
+
|
|
678
|
+
Com /setup:build-{tech|business} você chegaria em {próximo_modo}.
|
|
679
|
+
Execute /init novamente para ativar automaticamente.
|
|
680
|
+
```
|
|
681
|
+
|
|
682
|
+
Nunca faça upgrade automático sem novo `/init` — deixe o usuário decidir.
|
|
683
|
+
|
|
684
|
+
### 3.3 — Apresentar sumário
|
|
685
|
+
|
|
686
|
+
```
|
|
687
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
688
|
+
✅ Pipeline concluído!
|
|
689
|
+
|
|
690
|
+
Feature: {feature-slug}
|
|
691
|
+
Squad: {squad-slug}
|
|
692
|
+
Session: docs/.squads/sessions/{feature-slug}/
|
|
693
|
+
|
|
694
|
+
Arquivos na session:
|
|
695
|
+
📄 {lista de output_files criados/atualizados}
|
|
696
|
+
|
|
697
|
+
O que deseja fazer agora?
|
|
698
|
+
[1] Iniciar outro squad nesta feature
|
|
699
|
+
[2] Ver um arquivo da session
|
|
700
|
+
[3] Voltar ao menu principal
|
|
701
|
+
[4] Pausar squad
|
|
702
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
---
|
|
706
|
+
|
|
707
|
+
## INJEÇÃO DE CONTEXTO NOS AGENTS
|
|
708
|
+
|
|
709
|
+
Ao executar qualquer step, o agent recebe automaticamente:
|
|
710
|
+
|
|
711
|
+
1. **Conteúdo do próprio .agent.md** (persona, princípios, framework)
|
|
712
|
+
2. **Contexto do squad** (company.md + objetivo do squad)
|
|
713
|
+
3. **Documentação do projeto** (`docs/` na raiz — **obrigatório**, leia todos os arquivos disponíveis)
|
|
714
|
+
4. **Session files** (leia na ordem abaixo, se existirem):
|
|
715
|
+
- `docs/.squads/sessions/{feature-slug}/context.md`
|
|
716
|
+
- `docs/.squads/sessions/{feature-slug}/architecture.md`
|
|
717
|
+
- `docs/.squads/sessions/{feature-slug}/plan.md`
|
|
718
|
+
5. **ADRs do projeto** — injetados a partir do cache `[ADRS_CARREGADOS]` pré-lido na FASE 1. O agent **não precisa ler docs/** para buscá-los — recebe o conteúdo diretamente. Liste cada ADR como `[RESPEITADA]` ou `[NÃO APLICÁVEL]`. Conflito = output vetado.
|
|
719
|
+
6. **Memória da feature** (`docs/.squads/sessions/{feature-slug}/memories.md`)
|
|
720
|
+
7. **Aprendizados transversais** (`docs/_memory/project-learnings.md` — se existir)
|
|
721
|
+
8. **Outputs anteriores relevantes** (definidos em `depends_on`)
|
|
722
|
+
9. **Instruções do step** (arquivo do step)
|
|
723
|
+
10. **Base path do squad** (caminho absoluto para todas as operações de arquivo)
|
|
724
|
+
|
|
725
|
+
A ordem de composição sempre é:
|
|
726
|
+
```
|
|
727
|
+
[Agent Persona] + [Contexto Squad] + [docs/ do projeto] + [Session Files] + [ADRs] + [Memória da Feature] + [Project Learnings] + [Outputs Anteriores] + [Instrução do Step] + [Skills Ativas]
|
|
728
|
+
```
|
|
729
|
+
|
|
730
|
+
> **Regra ADR — Não-Negociável:** Conflito com ADR existente = `🚫 CONFLITO-ADR: {adr-id} — {motivo}` e output bloqueado.
|
|
731
|
+
|
|
732
|
+
> **Regra:** Quando há skills ativas, o agent DEVE usá-las. Skills não são sugestões.
|
|
733
|
+
|
|
734
|
+
> **Regra:** Nenhum agent executa sem ler `docs/` da raiz. Sem documentação = bloqueio.
|
|
735
|
+
|
|
736
|
+
### Caminhos de arquivo
|
|
737
|
+
|
|
738
|
+
Todo agent executado recebe como primeira instrução:
|
|
739
|
+
|
|
740
|
+
```
|
|
741
|
+
IMPORTANTE — TODOS OS CAMINHOS SÃO ABSOLUTOS A PARTIR DA RAIZ DO PROJETO.
|
|
742
|
+
NUNCA crie arquivos dentro de .synapos/ — essa pasta é somente do framework.
|
|
743
|
+
|
|
744
|
+
LEITURA (documentação compartilhada — nunca escreva aqui):
|
|
745
|
+
- {PROJECT_ROOT}/docs/business/
|
|
746
|
+
- {PROJECT_ROOT}/docs/tech/
|
|
747
|
+
- {PROJECT_ROOT}/docs/tech-context/
|
|
748
|
+
|
|
749
|
+
LEITURA + ESCRITA (session da feature ativa):
|
|
750
|
+
- {PROJECT_ROOT}/docs/.squads/sessions/{feature-slug}/
|
|
751
|
+
|
|
752
|
+
REGRA CRÍTICA: Todos os arquivos gerados pelo agent vão para:
|
|
753
|
+
{PROJECT_ROOT}/docs/.squads/sessions/{feature-slug}/{arquivo}
|
|
754
|
+
|
|
755
|
+
Nunca crie arquivos em docs/ raiz, em .synapos/ ou em outros subdiretórios.
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
Substitua `{feature-slug}` e `{squad-slug}` pelos valores reais antes de injetar.
|
|
759
|
+
|
|
760
|
+
---
|
|
761
|
+
|
|
762
|
+
## REGRAS DO RUNNER
|
|
763
|
+
|
|
764
|
+
| Regra | Descrição |
|
|
765
|
+
|-------|-----------|
|
|
766
|
+
| **Ordem é sagrada** | Execute steps na ordem do pipeline.yaml |
|
|
767
|
+
| **depends_on é hard** | Nunca execute step sem seus pré-requisitos completos |
|
|
768
|
+
| **Veto máximo 2x** | Após 2 tentativas, escale para o usuário |
|
|
769
|
+
| **Review máximo 3x** | Após 3 rejeições, pergunte como proceder |
|
|
770
|
+
| **Sempre salve** | Nunca perca output gerado — salve antes de continuar |
|
|
771
|
+
| **State é real-time** | Atualize state.json a cada mudança de step |
|
|
772
|
+
| **Falha loud** | Se agent ou arquivo não encontrado, pare e informe |
|
|
773
|
+
| **Nunca escreva em .synapos/** | Outputs vão SEMPRE para `docs/.squads/sessions/{feature-slug}/` |
|
|
774
|
+
| **Caminhos absolutos** | Todo agent usa caminhos a partir da raiz do projeto |
|
|
775
|
+
| **Skills são obrigatórias** | Se uma skill cobre a tarefa, o agent DEVE usá-la |
|
|
776
|
+
| **Zero decisões autônomas** | Toda decisão fora do escopo = `[DECISÃO PENDENTE]` obrigatório |
|
|
777
|
+
| **ADRs são lei** | Antes de implementação, agents leem ADRs. Conflito = veto |
|
|
778
|
+
| **Sessão recuperável** | `suspended_at` atualizado a cada step. Orquestrador detecta e retoma |
|
|
779
|
+
| **Session é compartilhada** | Múltiplos squads trabalham na mesma session. Nunca apague arquivos existentes sem aprovação |
|
|
780
|
+
| **review-notes é append-only** | Nunca substitua review-notes.md — sempre acrescente. Consolidar ao atingir 10+ entradas |
|
|
781
|
+
| **memories é append-only** | Nunca substitua memories.md — sempre acrescente. Consolidar ao atingir 10+ entradas |
|
|
782
|
+
| **Backups limitados a 3** | Máximo 3 arquivos `.bak` por output file — delete o mais antigo antes de criar novo |
|
|
783
|
+
| **ADRs são pré-carregados** | ADRs lidos uma vez na FASE 1 e injetados diretamente — subagents não re-leem docs/ |
|
|
784
|
+
| **Budget é monitorado** | Estime linhas da session na inicialização — alerte acima de 400 linhas |
|