synapos 2.6.1 → 2.7.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,6 +1,5 @@
1
1
  ---
2
2
  name: synapos-pipeline-runner
3
- version: 2.2.0
4
3
  description: Engine de execução de pipelines — gerencia steps, agents, vetos e revisões
5
4
  ---
6
5
 
@@ -47,74 +46,52 @@ O `{feature-slug}` é o identificador da feature — geralmente o nome da branch
47
46
 
48
47
  ### 1.1 — Carregar contexto
49
48
 
50
- Leia os seguintes arquivos:
49
+ Leia os seguintes arquivos na ordem exata:
50
+
51
51
  ```
52
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
53
  docs/_memory/company.md → perfil da empresa/usuário
59
54
  docs/_memory/preferences.md → preferências de saída
55
+ docs/.squads/sessions/{feature-slug}/context.md → contexto da feature ← LEIA PRIMEIRO, sempre
56
+ docs/.squads/sessions/{feature-slug}/memories.md → memória da feature
57
+ docs/.squads/sessions/{feature-slug}/architecture.md → arquitetura (se existir)
58
+ docs/.squads/sessions/{feature-slug}/plan.md → plano (se existir)
59
+ docs/.squads/sessions/{feature-slug}/review-notes.md → notas de revisão (se existir)
60
60
  docs/_memory/project-learnings.md → aprendizados transversais (se existir)
61
61
  ```
62
62
 
63
- Leia `execution_mode` e `doc_score` do `squad.yaml` e configure o runner:
63
+ > **Regra context.md é obrigatório em feature existente:**
64
+ > Se a session folder já existe e `context.md` está presente, leia-o **antes de qualquer outra coisa**.
65
+ > O context.md é a memória principal da feature — define o que é, por que existe, decisões tomadas e o que não fazer.
66
+ > Ignorar o context.md em feature existente é o erro mais comum de um role novo entrando na feature.
67
+
68
+ Leia `execution_mode` do `squad.yaml` e configure o runner:
64
69
 
65
70
  | `execution_mode` | Contexto injetado | Gates ativos |
66
71
  |---|---|---|
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 |
72
+ | `quick` | `company.md` + session files | GATE-0, GATE-3, GATE-5 |
73
+ | `complete` | Tudo docs/, ADRs, session files | GATE-0, GATE-3, GATE-5 |
70
74
 
71
75
  Log ao iniciar:
72
76
  ```
73
- ⚙️ [MODE] {BOOTSTRAP | STANDARD | STRICT} — doc_score: {score}/100
74
- Gates ativos: {lista}
77
+ ⚙️ [MODE] {Rápido | Completo}
78
+ Gates ativos: GATE-0, GATE-3, GATE-5
75
79
  ```
76
80
 
77
- **Se `execution_mode: bootstrap`:**
81
+ **Se `execution_mode: quick`:**
78
82
  - Não tente ler `docs/`, `docs/business/`, `docs/tech/` nem `docs/tech-context/`
79
83
  - 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`
84
+ - Log adicional: `⚡ [RÁPIDO] Contexto mínimo — ADRs e docs de projeto não injetados`
81
85
 
82
- **Se `execution_mode: standard` ou `strict`:**
86
+ **Se `execution_mode: complete`:**
83
87
 
84
88
  Adicionalmente, **pré-carregue os ADRs do projeto uma única vez**:
85
89
  - Leia todos os arquivos em `docs/` cujo nome contenha `ADR`, `adr`, `decisions` ou `architecture-decision`
86
90
  - Armazene o conteúdo em memória como `[ADRS_CARREGADOS]`
87
91
  - Esses ADRs serão injetados diretamente nos steps — agents não precisam ler `docs/` para buscá-los
88
92
 
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
93
 
117
- ### 1.1c — Verificar model_capability
94
+ ### 1.1b — Verificar model_capability
118
95
 
119
96
  Leia o campo `model_capability` de `docs/_memory/preferences.md`:
120
97
 
@@ -202,7 +179,8 @@ Verifique se `docs/.squads/sessions/{feature-slug}/` existe.
202
179
 
203
180
  ```
204
181
  docs/.squads/sessions/{feature-slug}/
205
- ├── memories.md inicializar vazio com header
182
+ ├── context.md template padrão (ver abaixo)
183
+ ├── memories.md ← template padrão (ver abaixo)
206
184
  ├── review-notes.md ← inicializar vazio com header
207
185
  └── state.json ← inicializar com estrutura abaixo
208
186
  ```
@@ -217,21 +195,48 @@ docs/.squads/sessions/{feature-slug}/
217
195
  }
218
196
  ```
219
197
 
198
+ `context.md` inicial:
199
+ ```markdown
200
+ # Contexto: {feature-slug}
201
+
202
+ > Arquivo central da feature. Lido por todos os roles antes de executar qualquer step.
203
+ > Atualizado pelo role que fizer discovery/investigação.
204
+
205
+ ## O que é
206
+ {descrição da feature — preenchido na pré-execução ou pelo usuário}
207
+
208
+ ## Por que existe
209
+ {motivação de negócio ou técnica}
210
+
211
+ ## Decisões tomadas
212
+ {decisões já resolvidas — evita retrabalho}
213
+
214
+ ## O que não fazer
215
+ {armadilhas conhecidas, abordagens descartadas}
216
+ ```
217
+
220
218
  `memories.md` inicial:
221
219
  ```markdown
222
- # Memória da Feature: {feature-slug}
220
+ # Memória: {feature-slug}
221
+
222
+ > Aprendizados acumulados de todos os roles que trabalharam nesta feature.
223
+ > Append-only. Para consolidar: execute /consolidate.
224
+
225
+ ## Aprendizados
226
+ {preenchido durante execuções}
223
227
 
224
- > Aprendizados acumulados de todos os squads que trabalharam nesta feature.
225
- > Atualizado ao final de cada pipeline.
228
+ ## Armadilhas conhecidas
229
+ {preenchido durante execuções}
226
230
 
227
- (preenchido durante execuções)
231
+ ## Próximos passos sugeridos
232
+ {preenchido durante execuções}
228
233
  ```
229
234
 
230
235
  `review-notes.md` inicial:
231
236
  ```markdown
232
237
  # Review Notes: {feature-slug}
233
238
 
234
- > Notas de revisão de todos os squads. Acrescentadas, nunca substituídas.
239
+ > Notas de revisão de todos os roles. Append-only.
235
240
 
236
241
  (preenchido durante revisões)
237
242
  ```
@@ -278,40 +283,48 @@ Atualize `state.updated_at`.
278
283
 
279
284
  **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
285
 
281
- ### 1.4c — Proteção e Resiliência do state.json
286
+ ### 1.4c — Resiliência do state.json
282
287
 
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": {} }`)
288
+ O state.json é **best-effort** — log de execução, não fonte de verdade crítica.
292
289
 
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)
290
+ **Leitura:**
291
+ - Tente parsear como JSON
292
+ - Se falhar: logue `⚠️ state.json corrompido reiniciando estado` e reinicialize com estrutura mínima
293
+ - Nunca bloqueie a execução por causa do state.json
299
294
 
300
- **Regra:** O state.json nunca deve ser editado diretamente por agents. Apenas o pipeline-runner escreve nele.
295
+ **Escrita:**
296
+ - Escreva normalmente após cada mudança de step
297
+ - Se a escrita falhar: logue o erro e continue sem interromper o pipeline
298
+
299
+ **Regra:** agents não escrevem no state.json. Apenas o pipeline-runner.
301
300
 
302
301
  ### 1.4b — Verificar pre_pipeline
303
302
 
304
- Verifique se o `squad.yaml` tem a chave `pre_pipeline`:
303
+ **Validação de segurança:** Antes de acessar `pre_pipeline`, verifique se a chave existe no squad.yaml.
305
304
 
306
305
  ```yaml
306
+ # squad.yaml — estrutura válida
307
307
  pre_pipeline:
308
- available: true
309
- agent: {id-do-agent-lead}
308
+ available: true # boolean
309
+ agent: {id-do-agent-lead} # string — ID de um agent do squad
310
310
  ```
311
311
 
312
- **Se `pre_pipeline.available: true` E `context.md` ainda não existe na session:**
312
+ **Se `pre_pipeline` não existe ou `available: false`:** pule esta seção.
313
313
 
314
- Pergunte ao usuário:
314
+ **Se `pre_pipeline.available: true`:**
315
+
316
+ 1. **Validar agente:**
317
+ - Verifique se `pre_pipeline.agent` está preenchido (não vazio/nulo)
318
+ - Verifique se o agent referenciado existe no squad.yaml (em `agents[]`)
319
+ - Se inválido: log `⚠️ pre_pipeline.agent inválido ou não encontrado — pulando pré-execução` e pule
320
+
321
+ 2. **Validar arquivo do pipeline:**
322
+ - Verifique se `.synapos/core/pipelines/pre-execution.yaml` existe
323
+ - Se não existe: log `⚠️ pre-execution.yaml não encontrado — pulando pré-execução` e pule
324
+
325
+ 3. **Se `context.md` já existe na session:** pule — pré-execução já feita.
326
+
327
+ 4. **Se `context.md` não existe E pré-execução válida:**
315
328
 
316
329
  ```
317
330
  Esta feature ainda não tem contexto/arquitetura definidos.
@@ -324,7 +337,7 @@ Deseja executar a pré-execução antes de [{nome do pipeline principal}]?
324
337
 
325
338
  **Se escolher Sim:**
326
339
  1. Leia `.synapos/core/pipelines/pre-execution.yaml`
327
- 2. Resolva `{lead_agent}` pelo valor de `pre_pipeline.agent` no squad.yaml
340
+ 2. Use `pre_pipeline.agent` como lead do pre-execution
328
341
  3. Execute os steps do pre-execution (com todos os gates e checkpoints)
329
342
  4. Os arquivos gerados (context.md, architecture.md, plan.md) vão para a session folder
330
343
  5. Ao concluir, anuncie:
@@ -336,8 +349,6 @@ Deseja executar a pré-execução antes de [{nome do pipeline principal}]?
336
349
  ```
337
350
  6. Continue para o pipeline principal com session files já no contexto
338
351
 
339
- **Se `context.md` já existe na session:** pule — a pré-execução já foi feita.
340
-
341
352
  ### 1.5 — Verificação de Squads Paralelos
342
353
 
343
354
  Ao iniciar a execução, leia `state.json` da feature.
@@ -530,16 +541,10 @@ Se `output_file` ou `output_files` definido:
530
541
 
531
542
  Antes de sobrescrever qualquer `output_file` que já existe na session folder:
532
543
  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`
544
+ 2. Se sim: crie cópia de segurança `{filename}.bak` antes de sobrescrever
545
+ - Log: `📦 Backup criado: {filename}.bak`
536
546
  3. Prossiga com a escrita do novo conteúdo
537
547
 
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
548
  ### 2.7 — Loop de revisão (on_reject)
544
549
 
545
550
  Se o usuário rejeitar um output:
@@ -602,23 +607,6 @@ Se houver resposta, acrescente em `docs/.squads/sessions/{feature-slug}/memories
602
607
  {texto do usuário}
603
608
  ```
604
609
 
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
610
  ### Formato de autoria (aplicar a todos os novos appends)
623
611
 
624
612
  Todo append em `memories.md` deve seguir o formato:
@@ -635,23 +623,6 @@ Para aprendizados inseridos diretamente pelo usuário (não por agent), usar:
635
623
  {conteúdo}
636
624
  ```
637
625
 
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
626
  **Aprendizados transversais do projeto:**
656
627
  ```
657
628
  Algo que todos os squads deste projeto devem saber? (ENTER para pular)
@@ -663,24 +634,6 @@ Se houver resposta, acrescente em `docs/_memory/project-learnings.md`:
663
634
  {texto do usuário}
664
635
  ```
665
636
 
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
637
  ### 3.3 — Apresentar sumário
685
638
 
686
639
  ```
@@ -706,32 +659,33 @@ O que deseja fazer agora?
706
659
 
707
660
  ## INJEÇÃO DE CONTEXTO NOS AGENTS
708
661
 
709
- Ao executar qualquer step, o agent recebe automaticamente:
662
+ O contexto injetado depende do `execution_mode` do squad.
663
+
664
+ ### Modo Rápido (`quick`) — 5 itens
710
665
 
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)
666
+ 1. **Persona do agent** (conteúdo do `.agent.md`)
667
+ 2. **Contexto do squad** (`company.md` + descrição do squad + roles[])
668
+ 3. **Session files** (se existirem: `context.md` `architecture.md` `plan.md`)
669
+ 4. **Outputs anteriores relevantes** (definidos em `depends_on`)
670
+ 5. **Instrução do step** + base path do squad
724
671
 
725
- A ordem de composição sempre é:
726
672
  ```
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]
673
+ [Agent Persona] + [Contexto Squad] + [Session Files] + [Outputs Anteriores] + [Instrução do Step] + [Skills Ativas]
728
674
  ```
729
675
 
730
- > **Regra ADR Não-Negociável:** Conflito com ADR existente = `🚫 CONFLITO-ADR: {adr-id} {motivo}` e output bloqueado.
676
+ ### Modo Completo (`complete`)5 itens + extras
731
677
 
732
- > **Regra:** Quando skills ativas, o agent DEVE usá-las. Skills não são sugestões.
678
+ 1. **Persona do agent** (conteúdo do `.agent.md`)
679
+ 2. **Contexto do squad** (`company.md` + descrição + roles[]) + **docs/** do projeto
680
+ 3. **Session files** (`context.md` → `architecture.md` → `plan.md`) + **memories.md** + **project-learnings.md** (se existir)
681
+ 4. **ADRs** — injetados do cache `[ADRS_CARREGADOS]`. Agente lista cada ADR como `[RESPEITADA]` ou `[NÃO APLICÁVEL]`. Conflito com ADR aceita = output vetado.
682
+ 5. **Outputs anteriores relevantes** + **Instrução do step** + base path
683
+
684
+ ```
685
+ [Agent Persona] + [Contexto Squad + docs/] + [Session Files + Memória] + [ADRs] + [Outputs Anteriores] + [Instrução do Step] + [Skills Ativas]
686
+ ```
733
687
 
734
- > **Regra:** Nenhum agent executa sem ler `docs/` da raiz. Sem documentação = bloqueio.
688
+ > **Skills:** quando ativas, o agent DEVE usá-las não são opcionais.
735
689
 
736
690
  ### Caminhos de arquivo
737
691
 
@@ -768,17 +722,17 @@ Substitua `{feature-slug}` e `{squad-slug}` pelos valores reais antes de injetar
768
722
  | **Veto máximo 2x** | Após 2 tentativas, escale para o usuário |
769
723
  | **Review máximo 3x** | Após 3 rejeições, pergunte como proceder |
770
724
  | **Sempre salve** | Nunca perca output gerado — salve antes de continuar |
771
- | **State é real-time** | Atualize state.json a cada mudança de step |
725
+ | **State é best-effort** | Atualize state.json a cada mudança de step — falhas não bloqueiam |
772
726
  | **Falha loud** | Se agent ou arquivo não encontrado, pare e informe |
773
727
  | **Nunca escreva em .synapos/** | Outputs vão SEMPRE para `docs/.squads/sessions/{feature-slug}/` |
774
728
  | **Caminhos absolutos** | Todo agent usa caminhos a partir da raiz do projeto |
775
729
  | **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 |
730
+ | **Decisões sinalizam com `[?]`** | Decisão fora do escopo sinaliza `[?]` no output, aguarda usuário |
731
+ | **ADRs somente no modo Completo** | Modo Rápido não injeta ADRs. Modo Completo: conflito com ADR = veto |
778
732
  | **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 filedelete 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 |
733
+ | **Session é compartilhada** | Múltiplos roles trabalham na mesma session. Nunca apague arquivos sem aprovação |
734
+ | **review-notes é append-only** | Nunca substitua — sempre acrescente. Consolidação é manual via `/consolidate` |
735
+ | **memories é append-only** | Nunca substitua — sempre acrescente. Consolidação é manual via `/consolidate` |
736
+ | **Backups simples** | Cria `{filename}.bak` antes de sobrescreversem rotação automática |
737
+ | **ADRs são pré-carregados** | ADRs lidos uma vez na FASE 1 — subagents não re-leem docs/ |
738
+ | **Contexto por modo** | Modo Rápido: 5 itens. Modo Completo: 5 itens + docs/ + ADRs + memories |
@@ -1,6 +1,5 @@
1
1
  ---
2
2
  name: synapos-skills-engine
3
- version: 1.1.0
4
3
  description: Engine de gerenciamento de skills — MCP, scripts e instruções de comportamento
5
4
  ---
6
5
 
@@ -93,7 +92,9 @@ skills:
93
92
  ```
94
93
 
95
94
  ### 2. Para cada skill listada:
96
- - Verificar se `.synapos/skills/{skill}/SKILL.md` existe — diretório real **ou symlink**
95
+ - Verificar se `.synapos/skills/{skill}/SKILL.md` existe
96
+ - Se symlink: validar que o destino está DENTRO de `.synapos/skills/` ou `docs/_memory/`
97
+ - Se fora: tratar como broken, log `⚠️ Skill '{skill}' symlink inválido — pulando`
97
98
  - Se não existe → apresentar opções:
98
99
  ```
99
100
  ⚠ Skill '{skill}' não está instalada.