sauron-cli 1.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.
- package/README.md +85 -0
- package/Taevo-PRD-1780772261443.md +429 -0
- package/dist/index.js +49 -0
- package/package.json +28 -0
- package/sauron_cli_implementation_plan.md +62 -0
- package/templates/.agents/rules/memory.md +128 -0
- package/templates/.agents/skills/wiki/SKILL.md +172 -0
- package/templates/.sauron/wiki/summary.json +37 -0
package/README.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Sauron CLI 👁️
|
|
2
|
+
|
|
3
|
+
> O "Lobo Frontal" dos assistentes de código de IA. Resolva a amnésia de contexto de uma vez por todas.
|
|
4
|
+
|
|
5
|
+
O **Sauron CLI** é uma infraestrutura passiva de orquestração de contexto para IAs. Ele injeta um "Cérebro" estruturado nos seus repositórios, forçando as Inteligências Artificiais (como Cursor, Windsurf e Aider) a respeitarem um conceito de **"Write Obligation" (Obrigação de Escrita)**. Em vez de apenas ler código, a IA passará a documentar decisões de negócio e arquitetura continuamente, garantindo que o seu projeto não quebre após meses sem ser tocado.
|
|
6
|
+
|
|
7
|
+
## O Problema
|
|
8
|
+
|
|
9
|
+
Assistentes de código são incrivelmente poderosos, mas sofrem de amnésia volátil. Entre o fechamento e a abertura de sessões da IDE, as IAs esquecem as regras do seu projeto, alucinam lógicas, e obrigam você a reescrever prompts diários para ditar o contexto.
|
|
10
|
+
|
|
11
|
+
## A Solução
|
|
12
|
+
|
|
13
|
+
O Sauron resolve isso ejetando pastas estruturadas (`.sauron` e `.agents`) no seu repositório local. A partir desse momento, as IAs são condicionadas a documentar regras passivamente de acordo com os templates gerados, preservando o **Single Source of Truth** do seu produto.
|
|
14
|
+
|
|
15
|
+
## Instalação
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# Como o pacote ainda não está publicado publicamente no NPM,
|
|
19
|
+
# você pode usá-lo localmente (após rodar npm link neste repositório):
|
|
20
|
+
|
|
21
|
+
sauron init
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
*Brevemente disponível via `npx sauron-cli init`.*
|
|
25
|
+
|
|
26
|
+
## Comandos (MVP)
|
|
27
|
+
|
|
28
|
+
### `sauron init`
|
|
29
|
+
|
|
30
|
+
Inicializa o Sauron Memory System no projeto atual.
|
|
31
|
+
Ele copia passivamente toda a estrutura base (templates de instrução e JSON de mapa mental) para o diretório raiz do usuário.
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
sauron init
|
|
35
|
+
```
|
|
36
|
+
*Nota: Este comando é seguro e bloqueará automaticamente caso os diretórios `.sauron` ou `.agents` já existam no repositório, evitando a corrupção do seu histórico atual.*
|
|
37
|
+
|
|
38
|
+
## Estrutura Injetada
|
|
39
|
+
|
|
40
|
+
Ao rodar o comando `init`, a CLI injeta a seguinte topologia no projeto:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
/
|
|
44
|
+
├── .agents/
|
|
45
|
+
│ ├── rules/
|
|
46
|
+
│ └── skills/
|
|
47
|
+
└── .sauron/
|
|
48
|
+
└── wiki/
|
|
49
|
+
├── summary.json
|
|
50
|
+
├── history/
|
|
51
|
+
├── knowledge/
|
|
52
|
+
├── manuals/
|
|
53
|
+
├── modules/
|
|
54
|
+
└── standards/
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Stack Tecnológica
|
|
58
|
+
- **Node.js**: Engine nativa.
|
|
59
|
+
- **TypeScript**: Tipagem estática e segurança.
|
|
60
|
+
- **Commander.js**: Para interfaceamento e rotas CLI.
|
|
61
|
+
- **Tsup**: Bundler rápido para Node e ESM.
|
|
62
|
+
- **fs-extra**: Gerenciamento avançado de arquivos.
|
|
63
|
+
|
|
64
|
+
## Desenvolvimento
|
|
65
|
+
|
|
66
|
+
Para contribuir com o core do CLI:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# 1. Instale as dependências
|
|
70
|
+
npm install
|
|
71
|
+
|
|
72
|
+
# 2. Rode o build local
|
|
73
|
+
npm run build
|
|
74
|
+
|
|
75
|
+
# 3. Vincule a CLI globalmente para testes
|
|
76
|
+
npm link
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Próximos Passos no Roadmap
|
|
80
|
+
- `sauron check`: Comando de validação rigorosa para auditar a integridade da documentação deixada pela IA e bater o Markdown com o `summary.json`.
|
|
81
|
+
- `sauron map`: Visão em formato de árvore hierárquica direto no terminal do seu "Cérebro de IA".
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
**Sauron CLI** - Desenvolvido para a comunidade Indie Hacker e Tech Leads do futuro.
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
### METADADOS
|
|
2
|
+
|
|
3
|
+
| Atributo | Detalhe |
|
|
4
|
+
| :--- | :--- |
|
|
5
|
+
| **Nome do Produto** | Sauron (Sauron CLI & Sauron Cloud) |
|
|
6
|
+
| **Versão** | 1.0 (Draft) |
|
|
7
|
+
| **Data Atual** | 24 de Maio de 2024 |
|
|
8
|
+
| **Status** | Draft |
|
|
9
|
+
| **Responsável** | [PENDENTE: Inserir nome do Solo Founder/Product Owner] |
|
|
10
|
+
| **Stack Tecnológica Recomendada** | Node.js, TypeScript, NPM, Commander, Tsup (CLI). React/Next.js (Web), React Native/Expo (Mobile), Stripe (Assinaturas). |
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
### 1. VISÃO GERAL E PROPOSTA DE VALOR
|
|
15
|
+
|
|
16
|
+
**Elevator Pitch:**
|
|
17
|
+
O Sauron é uma infraestrutura de orquestração de contexto para IAs que atua como o "lobo frontal" de assistentes de código, garantindo que regras de negócio não se percam através de um ecossistema agnóstico de ferramentas de linha de comando, interface web e aprovações mobile.
|
|
18
|
+
|
|
19
|
+
**Problema Central:**
|
|
20
|
+
Na era do "vibe coding", desenvolvedores dependem crescentemente de agentes de Inteligência Artificial (como Cursor, Windsurf e Aider) para gerar e refatorar bases de código complexas. Contudo, esses agentes sofrem de "Amnésia de Contexto". Eles conseguem ler a sintaxe do código atual, mas desconhecem o histórico e o *porquê* das decisões arquiteturais (regras de negócio). Isso resulta em refatorações destrutivas, perda de tempo com a reescrita de prompts gigantescos diários e um consumo ineficiente da "Context Window" dos modelos (gastando tokens excessivamente e aumentando o tempo de resposta).
|
|
21
|
+
|
|
22
|
+
Além disso, a documentação tradicional falha porque é mantida por humanos após o código ser escrito, tornando-se rapidamente obsoleta. Sem um "Single Source of Truth" determinístico, a escalabilidade de projetos guiados por IA torna-se insustentável a médio prazo.
|
|
23
|
+
|
|
24
|
+
**Diferencial Competitivo:**
|
|
25
|
+
O diferencial intransponível do Sauron em 6 meses reside no conceito nativo de **"Write Obligation" (Obrigação de Escrita)** aliado à agnosia de plataforma. Diferente de concorrentes que apenas leem o repositório, o Sauron obriga a IA a documentar proativamente suas ações e decisões de negócio em um formato Markdown estruturado antes de concluir a tarefa. O Sauron não compete com os agentes (não escreve código); ele os padroniza e governa. Essa infraestrutura passiva é validada localmente via CLI e estendida colaborativamente via interfaces Web e Mobile.
|
|
26
|
+
|
|
27
|
+
**Posicionamento de Mercado:**
|
|
28
|
+
O Sauron posiciona-se como a "camada de governança e memória" padrão (o equivalente a um "Git para contexto de IA") no desenvolvimento de software. Ele atende desde o Indie Hacker que precisa de controle absoluto do seu projeto solo, até Tech Leads corporativos que demandam monitoramento, sincronização na nuvem e auditoria de agentes de IA através de uma suíte multiplataforma paga (Web/Mobile).
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
### 2. PROBLEMA E OPORTUNIDADE
|
|
33
|
+
|
|
34
|
+
**Descrição Aprofundada da Dor:**
|
|
35
|
+
O desenvolvedor contemporâneo passa de "escritor de código" para "revisor de código gerado". A dor crítica ocorre na transição entre sessões de trabalho. Quando a IDE é fechada, a IA esquece os limites estritos do domínio da aplicação. Consequentemente, o usuário precisa gastar de 15 a 30 minutos por dia apenas contextualizando o agente, subindo arquivos `.txt` desorganizados ou copiando regras do Notion para o chat da IA. As alucinações da IA quebram lógicas de pagamento, rotas de autenticação e padrões de arquitetura porque a memória do agente é volátil.
|
|
36
|
+
|
|
37
|
+
**Jornada Atual do Usuário (AS-IS):**
|
|
38
|
+
1. O desenvolvedor abre sua IDE (ex: Cursor) em um projeto complexo.
|
|
39
|
+
2. Ele percebe que a IA não entende as regras de faturamento do sistema.
|
|
40
|
+
3. Ele sai da IDE, abre o Notion/Confluence (ou um bloco de notas local) e copia as regras.
|
|
41
|
+
4. Ele cola as regras no prompt principal da IA.
|
|
42
|
+
5. A IA codifica, mas esquece o contexto 10 interações depois devido ao limite da janela de contexto.
|
|
43
|
+
6. A documentação original fica defasada, pois o código mudou e o humano não atualizou o Notion.
|
|
44
|
+
|
|
45
|
+
**Oportunidade Quantificada:**
|
|
46
|
+
Estima-se que mais de 5 milhões de desenvolvedores já utilizem assistentes de IA avançados. Se cada desenvolvedor perde em média 20 minutos diários gerenciando contexto e corrigindo alucinações decorrentes de amnésia da IA, há uma oportunidade de recuperação de 33 milhões de horas mensais no mercado global de desenvolvimento corporativo e indie. [ESTIMATIVA — validar com o time de pesquisa].
|
|
47
|
+
|
|
48
|
+
**Concorrentes Diretos e Indiretos:**
|
|
49
|
+
- *Repomix / gpt-repo-to-text (Indiretos):* Agregadores "Read-Only". Copiam todo o repositório, mas não ensinam a IA a manter histórico.
|
|
50
|
+
- *Aider / GPT-Pilot (Indiretos):* Agentes de execução direta. Focam no "O quê" e prendem o usuário ao terminal deles.
|
|
51
|
+
- *Notion / Confluence (Indiretos):* Plataformas de documentação tradicional. Exigem trabalho manual humano e são isoladas da IDE.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
### 3. PÚBLICO-ALVO E PERSONAS
|
|
56
|
+
|
|
57
|
+
| Atributo | Persona 1: Alex, o Indie Hacker (Early Adopter) | Persona 2: Sarah, Tech Lead Corporativa (Fase Escala) |
|
|
58
|
+
| :--- | :--- | :--- |
|
|
59
|
+
| **Nome e Perfil** | Alex (28), Desenvolvedor Full-stack Solo, construtor de micro-SaaS. | Sarah (35), Arquiteta de Software gerenciando 3 squads. |
|
|
60
|
+
| **Contexto de Uso** | Usa Cursor para escrever 100% do código (Vibe Coding). Trabalha localmente. | Supervisiona código gerado por IAs operadas por desenvolvedores juniores. |
|
|
61
|
+
| **Dor Principal** | A IA quebra lógicas de projetos paralisados há semanas por falta de memória de contexto. | Agentes de IA do time estão alucinando e ignorando padrões arquiteturais e de compliance corporativo. |
|
|
62
|
+
| **Job-to-be-done** | Quando volto a um projeto antigo, quero que a IA saiba imediatamente as regras, para continuar desenvolvendo sem atrito. | Quando a IA de um dev altera uma regra core, quero ser notificada no Mobile para aprovar e garantir a governança. |
|
|
63
|
+
| **Maior Medo/Risco** | O projeto ficar tão complexo que a IA não consiga mais escalá-lo, travando o produto. | Vazamento de propriedade intelectual ou código deficiente indo para produção por erro não auditado da IA. |
|
|
64
|
+
| **Critério de Sucesso** | Rodar `sauron init` e ver a IA documentar e respeitar o histórico automaticamente na próxima hora. | Ter visibilidade completa das regras no Dashboard Web e aprovar integrações via Mobile App. |
|
|
65
|
+
| **Maturidade Digital** | 5 (Explorador de bleeding-edge AI) | 4 (Altamente técnica, focada em processos robustos) |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### 4. OBJETIVOS E MÉTRICAS DE SUCESSO
|
|
70
|
+
|
|
71
|
+
**North Star Metric:**
|
|
72
|
+
*Successful Context Writes (SCW):* Número de arquivos de regras de negócio (Skills/Memories) gerados, atualizados e auditados com sucesso pelas IAs nas bases de código dos usuários.
|
|
73
|
+
|
|
74
|
+
**Tabela de KPIs:**
|
|
75
|
+
|
|
76
|
+
| Métrica | Baseline Atual | Meta 3 Meses | Meta 6 Meses | Como Medir |
|
|
77
|
+
| :--- | :--- | :--- | :--- | :--- |
|
|
78
|
+
| Instalações CLI (`npx`) | 0 | 5.000 | 15.000 | NPM Registry Stats |
|
|
79
|
+
| Sucesso do `sauron check` | 0% | > 85% | > 95% | Telemetria anônima (CLI) |
|
|
80
|
+
| Assinantes Cloud (SaaS) | 0 | 100 | 500 | Stripe Billing (Dashboard) |
|
|
81
|
+
| MAU (Web Dashboard) | 0 | 500 | 2.500 | Google Analytics / PostHog |
|
|
82
|
+
|
|
83
|
+
**Métricas de Produto:**
|
|
84
|
+
- *Engajamento:* Média de comandos `sauron map` executados por usuário/semana.
|
|
85
|
+
- *Retenção:* % de repositórios que continuam passando no `sauron check` após 30 dias do `init`.
|
|
86
|
+
- *Adoção Multiplataforma:* % de usuários CLI que fazem login no Web Dashboard e baixam o Mobile App.
|
|
87
|
+
|
|
88
|
+
**Métricas de Negócio:**
|
|
89
|
+
- *Receita Recorrente Mensal (MRR):* Gerada pelas assinaturas premium de sincronização e aprovação Mobile.
|
|
90
|
+
- *Churn de Assinatura:* Meta < 5% ao mês.
|
|
91
|
+
- *LTV / CAC:* [PENDENTE: Estimar após validação de custos de ads do SaaS na Fase 2].
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### 5. ESCOPO — IN & OUT
|
|
96
|
+
|
|
97
|
+
**Lista In-Scope:**
|
|
98
|
+
- Desenvolvimento da CLI com os comandos `init`, `check` e `map` (Prioridade Máxima: O núcleo que valida a tese de governança local).
|
|
99
|
+
- Geração da estrutura de pastas `.sauron/` e `.agents/` e do `summary.json`.
|
|
100
|
+
- Web Dashboard para gestão do contexto de times e gerenciamento de assinaturas SaaS (Prioridade Alta: Atende restrição multiplataforma).
|
|
101
|
+
- Aplicativo Mobile para aprovações rápidas de mudanças de regras e monitoramento de alertas (Prioridade Média: Atende restrição de governança de squads).
|
|
102
|
+
- Módulo de Assinaturas (Stripe) para liberação de acesso aos Adapters Cloud (Prioridade Alta: Sustentação de receita estipulada).
|
|
103
|
+
|
|
104
|
+
**Lista Out-of-Scope:**
|
|
105
|
+
- Execução direta de código-fonte pelo Sauron (Justificativa: O CLI é passivo; quem altera código é o Cursor/Windsurf).
|
|
106
|
+
- Treinamento local de modelos LLM (Justificativa: Fora da proposta de infraestrutura de governança; muito custoso).
|
|
107
|
+
- Versionamento de código integrado (O Sauron gerencia memória em Markdown, o Git continuará sendo a ferramenta para código-fonte).
|
|
108
|
+
|
|
109
|
+
**Hipóteses Assumidas:**
|
|
110
|
+
- Desenvolvedores aceitarão adicionar uma pasta oculta `.sauron` aos seus repositórios.
|
|
111
|
+
- Assistentes de IA (LLMs atuais) têm capacidade analítica suficiente para respeitar instruções severas escritas em arquivos Markdown.
|
|
112
|
+
- Tech Leads pagarão por um modelo SaaS/Assinatura para ter visibilidade Web e aprovações Mobile.
|
|
113
|
+
|
|
114
|
+
**Restrições:**
|
|
115
|
+
- *Técnicas:* O desenvolvimento do CLI inicial será feito por 1 Solo Founder usando Vibe Coding em 2 a 3 dias.
|
|
116
|
+
- *Multiplataforma:* Web e Mobile exigem construção de API e banco de dados centralizado em nuvem paralela à CLI open-source.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### 6. REQUISITOS FUNCIONAIS
|
|
121
|
+
|
|
122
|
+
*(Instrução Crítica seguida: Gherkin completo, mínimo 2 regras de negócio por feature, prioridades MoSCoW).*
|
|
123
|
+
|
|
124
|
+
#### ÉPICO 1: Core CLI Tools (Governança Local)
|
|
125
|
+
|
|
126
|
+
**Feature 1.1: Ejeção da Estrutura Inicial (`sauron init`)**
|
|
127
|
+
- **User Story:** Como Indie Hacker, quero inicializar o Sauron na raiz do meu projeto, para que a IA receba imediatamente a arquitetura de memória e regras de negócio base.
|
|
128
|
+
- **Regras de Negócio:**
|
|
129
|
+
1. O comando deve ser bloqueado se executado fora de um diretório válido ou se a pasta `.sauron` já existir.
|
|
130
|
+
2. O comando deve ejetar estritamente o manifesto `summary.json`, a pasta `.agents` e a pasta `.sauron/wiki/`.
|
|
131
|
+
- **Critérios de Aceitação (Gherkin):**
|
|
132
|
+
- Dado que o usuário está na raiz de um projeto Node sem o Sauron instalado, quando ele executar `npx sauron-cli init`, então o sistema deve criar a estrutura de pastas `.sauron`, e exibir uma mensagem de sucesso no terminal com a cor verde.
|
|
133
|
+
- Dado que a pasta `.sauron` já existe no diretório atual, quando o usuário executar `npx sauron-cli init`, então o sistema deve abortar a operação, e exibir o erro "Sauron já inicializado neste diretório".
|
|
134
|
+
- **Prioridade:** Must Have
|
|
135
|
+
- **Complexidade:** P
|
|
136
|
+
|
|
137
|
+
**Feature 1.2: Validação de Integridade (`sauron check`)**
|
|
138
|
+
- **User Story:** Como desenvolvedor, quero rodar uma auditoria local nos arquivos Markdown, para que eu tenha certeza que a IA não corrompeu as métricas ou a estrutura exigida pelo framework.
|
|
139
|
+
- **Regras de Negócio:**
|
|
140
|
+
1. Todos os arquivos `.md` na pasta `wiki` devem possuir um mapeamento exato no `summary.json` (match de ID, Slug e Type).
|
|
141
|
+
2. Arquivos órfãos (existem fisicamente, mas não no JSON) devem resultar em falha no check (exit code 1).
|
|
142
|
+
- **Critérios de Aceitação (Gherkin):**
|
|
143
|
+
- Dado que a IA criou um novo arquivo Markdown sem atualizá-lo no `summary.json`, quando o usuário executar `sauron check`, então o CLI deve apontar falha de validação, e listar o nome do arquivo órfão no console.
|
|
144
|
+
- Dado que a estrutura Markdown e o `summary.json` estão perfeitamente sincronizados, quando o usuário executar `sauron check`, então o CLI deve retornar exit code 0, e exibir uma mensagem "Auditoria concluída com sucesso".
|
|
145
|
+
- **Prioridade:** Must Have
|
|
146
|
+
- **Complexidade:** M
|
|
147
|
+
|
|
148
|
+
**Feature 1.3: Visualização do Cérebro (`sauron map`)**
|
|
149
|
+
- **User Story:** Como desenvolvedor, quero visualizar a árvore de contexto atual, para que eu entenda rapidamente o que a IA já documentou sem precisar abrir os arquivos JSON ou Markdown um a um.
|
|
150
|
+
- **Regras de Negócio:**
|
|
151
|
+
1. A exibição deve ser formatada em hierarquia de árvore via terminal utilizando biblioteca visual (ex: `chalk`).
|
|
152
|
+
2. O comando deve agrupar os itens por domínios (`knowledge`, `modules`, `standards`).
|
|
153
|
+
- **Critérios de Aceitação (Gherkin):**
|
|
154
|
+
- Dado que o manifesto possui 3 domínios registrados, quando o usuário executar `sauron map`, então o sistema deve imprimir uma árvore colorida no terminal ilustrando a relação hierárquica, e agrupar os arquivos em seus respectivos domínios.
|
|
155
|
+
- Dado que o `summary.json` está vazio de regras, quando o usuário executar `sauron map`, então o sistema deve exibir um "Empty State" amigável, e sugerir que o usuário interaja com a IA para criar as primeiras regras.
|
|
156
|
+
- **Prioridade:** Should Have
|
|
157
|
+
- **Complexidade:** M
|
|
158
|
+
|
|
159
|
+
#### ÉPICO 2: Ecossistema Multiplataforma & SaaS (Governança Escalonada)
|
|
160
|
+
|
|
161
|
+
**Feature 2.1: Criação Completa de Projetos via Web Dashboard**
|
|
162
|
+
- **User Story:** Como Tech Lead, quero acessar um dashboard web para visualizar e editar o repositório de memória das IAs dos meus squads de forma centralizada, para que padrões organizacionais sejam cumpridos.
|
|
163
|
+
- **Regras de Negócio:**
|
|
164
|
+
1. O usuário Web deve ter nível de permissão "Admin" ou "Editor" vinculado ao plano da assinatura.
|
|
165
|
+
2. Qualquer alteração feita via Web atualizará o banco de dados nuvem e notificará os clientes locais via webhook ou adapter para sincronização posterior.
|
|
166
|
+
- **Critérios de Aceitação (Gherkin):**
|
|
167
|
+
- Dado que o Tech Lead está autenticado no Web Dashboard com plano ativo, quando ele cria uma nova "Regra de Negócio Padrão" pela interface web, então o sistema deve salvar a regra no banco de dados centralizado, e propagar o status de sincronização pendente para o repositório vinculado.
|
|
168
|
+
- Dado que a assinatura do usuário está expirada, quando ele tenta salvar uma regra via Web, então o sistema deve bloquear a ação, e redirecioná-lo para a tela de pagamento.
|
|
169
|
+
- **Prioridade:** Should Have (Fase 2)
|
|
170
|
+
- **Complexidade:** G
|
|
171
|
+
|
|
172
|
+
**Feature 2.2: Mobile App para Aprovações Rápidas (Governança)**
|
|
173
|
+
- **User Story:** Como Tech Lead, quero receber notificações push no meu celular quando a IA de um júnior alterar uma regra core do Sauron, para que eu possa revisar e aprovar o contexto rapidamente de qualquer lugar.
|
|
174
|
+
- **Regras de Negócio:**
|
|
175
|
+
1. Alterações em arquivos classificados como `type: "core_standard"` acionam uma trava (lock) e exigem aprovação via Mobile ou Web.
|
|
176
|
+
2. O app Mobile operará em modo "Read & Approve", não permitindo edição de blocos extensos de código.
|
|
177
|
+
- **Critérios de Aceitação (Gherkin):**
|
|
178
|
+
- Dado que uma regra core foi modificada por um agente no CLI e submetida via Nuvem, quando o Tech Lead abrir o app Mobile, então ele deve ver um diff das mudanças, e visualizar os botões de "Aprovar" ou "Rejeitar".
|
|
179
|
+
- Dado que o Tech Lead clica em "Aprovar" no Mobile, quando a requisição é concluída, então a trava do arquivo é removida no banco de dados, e o desenvolvedor local recebe permissão para continuar a task.
|
|
180
|
+
- **Prioridade:** Could Have (Fase 2)
|
|
181
|
+
- **Complexidade:** GG
|
|
182
|
+
|
|
183
|
+
**Feature 2.3: Motor de Assinaturas (Monetização Cloud)**
|
|
184
|
+
- **User Story:** Como usuário corporativo, quero gerenciar meu plano de assinatura, para que meu time tenha acesso aos recursos de sincronização Cloud, Web e Mobile.
|
|
185
|
+
- **Regras de Negócio:**
|
|
186
|
+
1. A cobrança ocorrerá via Stripe (cartão de crédito) em um modelo de assentos (per-seat pricing).
|
|
187
|
+
2. Cancelamento do plano reverte o repositório ao estado Open Source (apenas operação local via CLI, perdendo acesso Web/Mobile).
|
|
188
|
+
- **Critérios de Aceitação (Gherkin):**
|
|
189
|
+
- Dado que um usuário acessa a aba "Billing" no Web Dashboard, quando ele preenche os dados do cartão via checkout do Stripe e confirma, então a conta é provisionada com status "Premium", e os recursos Mobile e Web são desbloqueados em tempo real.
|
|
190
|
+
- Dado que o pagamento mensal falha, quando passam-se 3 dias de retentativa, então a API deve revogar as chaves de sincronização em nuvem, e enviar um e-mail de aviso de downgrade.
|
|
191
|
+
- **Prioridade:** Must Have (Fase SaaS)
|
|
192
|
+
- **Complexidade:** G
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
### 7. REQUISITOS NÃO-FUNCIONAIS
|
|
197
|
+
|
|
198
|
+
- **Performance:**
|
|
199
|
+
- O comando `sauron check` deve varrer até 100 arquivos Markdown e validar o JSON associado em `< 50ms` localmente.
|
|
200
|
+
- O tempo de carregamento da "Tree View" no Dashboard Web deve ser `< 1.5s` (LCP).
|
|
201
|
+
- **Segurança:**
|
|
202
|
+
- Na versão Web/Mobile, todas as chaves de sincronização devem ser protegidas usando criptografia AES-256 no banco de dados.
|
|
203
|
+
- A autenticação Cloud deve exigir OAuth 2.0 (GitHub Login obrigatório). JWT tokens de sessão expiram em 24h.
|
|
204
|
+
- **Conformidade Legal:**
|
|
205
|
+
- Total conformidade com GDPR e LGPD: O sistema (na sua via SaaS) deve permitir a exclusão completa e permanente dos dados da conta do usuário em até 72 horas após o pedido (`Right to be Forgotten`).
|
|
206
|
+
- **Escalabilidade:**
|
|
207
|
+
- O banco de dados Web/Mobile (PostgreSQL) deve suportar no mínimo 1.000 requisições simultâneas de Webhooks de sincronização de CLI na Fase 2 (SaaS MVP) sem degradação de performance.
|
|
208
|
+
- **Disponibilidade:**
|
|
209
|
+
- A API do SaaS (Web/Mobile) deve garantir um SLA de 99.9% de uptime. Plano de contingência via fallback para AWS Multi-AZ no banco de dados. (O CLI Open Source possui 100% de disponibilidade por ser offline).
|
|
210
|
+
- **Acessibilidade:**
|
|
211
|
+
- O Dashboard Web deve atingir nota "AA" nos padrões WCAG 2.1 (contraste de cor, navegação completa por teclado e suporte a leitores de tela como NVDA/VoiceOver).
|
|
212
|
+
- **Compatibilidade:**
|
|
213
|
+
- CLI: Suporte nativo a Node.js v18+. Sistemas operacionais: Windows (PowerShell/WSL), macOS (Zsh), Linux (Bash).
|
|
214
|
+
- Web: Suporte aos navegadores Chrome v100+, Firefox v100+, Safari v15+.
|
|
215
|
+
- Mobile: Suporte a iOS 15+ e Android 11+.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
### 8. FLUXOS DO USUÁRIO E JORNADA
|
|
220
|
+
|
|
221
|
+
**Happy Path (Inicialização e Uso do CLI):**
|
|
222
|
+
1. O usuário abre o terminal em um projeto existente.
|
|
223
|
+
2. Executa o comando `npx sauron-cli init`.
|
|
224
|
+
3. O CLI injeta a pasta `.sauron` e exibe mensagem de sucesso.
|
|
225
|
+
4. O usuário abre sua IDE (Cursor) e inicia o chat com a IA.
|
|
226
|
+
5. O usuário instrui a IA: "Implemente um sistema de login e siga as regras do Sauron".
|
|
227
|
+
6. A IA lê a arquitetura, escreve o código do login e, seguindo o "Write Obligation", cria o arquivo `.sauron/wiki/auth-rules.md`.
|
|
228
|
+
7. A IA atualiza automaticamente o `summary.json` mapeando a nova regra.
|
|
229
|
+
8. O usuário roda `sauron check` e recebe aprovação verde ("Tudo sincronizado").
|
|
230
|
+
9. O usuário roda `sauron map` e visualiza a nova estrutura mapeada no terminal.
|
|
231
|
+
|
|
232
|
+
**Fluxo Alternativo (Correção de Erro de IA):**
|
|
233
|
+
No passo 7, a IA esquece de atualizar o `summary.json`. No passo 8, o `sauron check` falha e exibe erro vermelho: "Arquivo órfão: auth-rules.md". O desenvolvedor pede para a IA: "Você esqueceu de mapear no JSON, conserte". A IA atualiza o JSON. O usuário roda `check` novamente, agora com sucesso.
|
|
234
|
+
|
|
235
|
+
**Tabela de Edge Cases (Casos de Fronteira):**
|
|
236
|
+
|
|
237
|
+
| Situação | Comportamento Esperado | Mensagem ao Usuário | Ação do Sistema |
|
|
238
|
+
| :--- | :--- | :--- | :--- |
|
|
239
|
+
| Rodar `init` em pasta sem permissão de escrita | CLI captura erro do File System. | "Erro: Permissão negada para gravar no diretório." | Aborta processo, Exit Code 1. |
|
|
240
|
+
| Rodar `check` e o `summary.json` tem sintaxe inválida (malformado pela IA) | Parser falha de forma controlada, identificando a linha do erro. | "Falha crítica: summary.json possui sintaxe inválida na linha X." | Aborta o check imediatamente. |
|
|
241
|
+
| Arquivo `.md` listado no JSON foi deletado fisicamente | Inconsistência apontada no check. | "Erro: Arquivo [nome] listado no JSON não existe." | Marca o check como falho. |
|
|
242
|
+
| Tech Lead tenta aprovar regra no Mobile sem internet | App detecta estado offline da rede local. | "Sem conexão. Tente novamente mais tarde." | Salva aprovação pendente no cache local (Queue). |
|
|
243
|
+
| Usuário com assinatura bloqueada tenta sincronizar CLI (`sauron push`) | Rejeição no servidor e no CLI local. | "Sincronização falhou. Assinatura Cloud inativa." | Bloqueia webhook HTTP 403 Forbidden. |
|
|
244
|
+
| Usuário roda `map` num projeto gigante (+500 regras) | O comando paginará a exibição para não inundar o terminal. | "Mostrando regras 1-50 de 500. Pressione Espaço." | Ativa modo interativo de rolagem no terminal. |
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
### 9. REGRAS DE NEGÓCIO E LÓGICA
|
|
249
|
+
|
|
250
|
+
- **Estados e Transições de Arquivos de Regra (Cloud/Mobile):**
|
|
251
|
+
- *Draft Local:* Gerado pela IA, validado pelo CLI, mas não sincronizado.
|
|
252
|
+
- *Em Revisão:* Sincronizado para a nuvem, aguardando aprovação do Tech Lead via Mobile.
|
|
253
|
+
- *Aprovado (Ativo):* Aprovado via Web/Mobile, serve de "Single Source of Truth" incontestável.
|
|
254
|
+
- *Obsoleto:* Substituído por nova versão arquitetural.
|
|
255
|
+
- **Validações Críticas (Sauron Check):**
|
|
256
|
+
- O campo `id` no JSON deve ser único. Duplicações acionam erro fatal.
|
|
257
|
+
- O campo `type` deve pertencer ao enum: `["knowledge", "modules", "standards", "core_standard"]`.
|
|
258
|
+
- **Regras de Acesso por Assinatura (Módulo SaaS):**
|
|
259
|
+
- *Plano OSS (Free):* Apenas comandos locais. Arquivos guardados na máquina/Git do usuário.
|
|
260
|
+
- *Plano Pro (SaaS):* Desbloqueia autenticação via Web, visualização de painéis e uso do Mobile App. Limite de 5 membros.
|
|
261
|
+
- **Lógica de Permissões Multiplataforma:**
|
|
262
|
+
- `Admin`: Edita assinaturas, aprova regras no app Mobile.
|
|
263
|
+
- `Developer`: Roda CLI, sincroniza para revisão, visualiza painéis no Web, mas não aprova Core Standards.
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
### 10. INTEGRAÇÕES E DEPENDÊNCIAS
|
|
268
|
+
|
|
269
|
+
| Serviço | Finalidade | Obrigatório para MVP? | Risco de Dependência | Fallback se indisponível | Versão / Endpoint |
|
|
270
|
+
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
271
|
+
| **Node FS API** | Manipulação de arquivos, escrita local do JSON e Markdown | Sim | Baixo (nativo) | N/A (crítico) | Nativo Node 18+ |
|
|
272
|
+
| **Agentes de IA (Cursor/Windsurf)** | Execução real do projeto e documentação | Sim (passivo) | Médio (mudanças no prompt engine deles) | Uso de outro LLM via terminal | N/A |
|
|
273
|
+
| **Stripe API** | Processamento de pagamento e assinaturas (SaaS) | Não (Apenas V2/SaaS) | Médio | Cobrança manual via invoice | `v1/checkout/sessions` |
|
|
274
|
+
| **Expo / React Native** | Build do Mobile App de notificações/aprovações | Não (Apenas V2/SaaS) | Baixo | Acessar Dashboard Responsivo Web | SDK 50+ |
|
|
275
|
+
| **GitHub OAuth** | Autenticação para Web Dashboard Cloud | Não (Apenas V2/SaaS) | Baixo | Autenticação por Magic Link (Email) | OAuth 2.0 / Autorize |
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
### 11. ARQUITETURA DE DADOS (HIGH-LEVEL)
|
|
280
|
+
|
|
281
|
+
**Entidades Principais:**
|
|
282
|
+
- **Summary (JSON):**
|
|
283
|
+
- `version` (String)
|
|
284
|
+
- `last_updated` (Timestamp)
|
|
285
|
+
- `domains` (Array of Object References)
|
|
286
|
+
- **Domain (JSON/Lógico):**
|
|
287
|
+
- `id` (UUID)
|
|
288
|
+
- `name` (String)
|
|
289
|
+
- `files` (Array of Markdown Files)
|
|
290
|
+
- **File / Rule (Markdown Físico):**
|
|
291
|
+
- `slug` (String, ex: "auth-rules")
|
|
292
|
+
- `content` (Text, armazenado localmente e mapeado via nuvem na V2)
|
|
293
|
+
- **UserAccount (DB Nuvem):**
|
|
294
|
+
- `uuid` (UUID)
|
|
295
|
+
- `email` (String, Sensível)
|
|
296
|
+
- `plan` (Enum: Free, Pro)
|
|
297
|
+
- `role` (Enum: Admin, Developer)
|
|
298
|
+
|
|
299
|
+
**Estratégia de Banco de Dados:**
|
|
300
|
+
- *CLI (V1):* Totalmente local (Relacional em JSON File System). Nenhuma dependência externa.
|
|
301
|
+
- *Web/Mobile (SaaS V2):* PostgreSQL relacional (hospedado na AWS/Supabase) para armazenar usuários, permissões, logs de sincronização e assinaturas. Cache via Redis para listagem rápida de árvores (`sauron map` via Web).
|
|
302
|
+
|
|
303
|
+
**Dados Sensíveis e Proteção:**
|
|
304
|
+
Os arquivos de código e memória das empresas não devem vazar. No plano Cloud (SaaS), o conteúdo em Markdown enviado pelas APIs de sincronização será encriptado at-rest utilizando chaves KMS geradas por usuário (E2E Encryption Strategy), garantindo soberania dos dados do cliente.
|
|
305
|
+
|
|
306
|
+
---
|
|
307
|
+
|
|
308
|
+
### 12. DIRETRIZES DE UX/UI
|
|
309
|
+
|
|
310
|
+
**Princípios de Design:**
|
|
311
|
+
1. *Terminal-First Elegance:* A interface de CLI deve ser limpa, com uso sutil de cores para guiar o usuário sem poluir o log.
|
|
312
|
+
2. *Clareza Determinística:* Se houver erro, a ferramenta deve apontar exatamente a linha e o arquivo (Fail loudly and clearly).
|
|
313
|
+
3. *Single Pane of Glass:* O Dashboard Web deve permitir visualização da topologia do cérebro da aplicação em uma única tela.
|
|
314
|
+
4. *Fricção Intencional:* No Mobile App, aprovações críticas (mudança de regras core) exigem duplo clique ou "swipe-to-approve" para evitar aprovações acidentais.
|
|
315
|
+
|
|
316
|
+
**Estados Críticos da UI:**
|
|
317
|
+
- *Empty State (CLI):* Ao rodar `map` vazio, terminal retorna em amarelo: `[Sauron] O cérebro está vazio. Peça para a IA criar as primeiras memórias.`
|
|
318
|
+
- *Loading (Web):* Skeleton screens reproduzindo a árvore de arquivos enquanto a API Cloud busca o `summary.json` em nuvem.
|
|
319
|
+
- *Erro (Mobile):* Modal vermelho se falha a sincronização, com botão de "Retry Network".
|
|
320
|
+
- *Sucesso (CLI):* Texto em negrito e verde vivo utilizando `chalk.green.bold()`.
|
|
321
|
+
|
|
322
|
+
**Tom de Voz e Microcopy:**
|
|
323
|
+
- *Perfil:* Assertivo, cirúrgico, assistente confiável ("Lobo frontal").
|
|
324
|
+
- *Exemplo de Erro:* "Erro fatal: Encontramos um arquivo fantasma. `database-rules.md` existe, mas não está no `summary.json`."
|
|
325
|
+
|
|
326
|
+
**Distinção de Experiência entre Plataformas:**
|
|
327
|
+
- *CLI:* Foco total no desenvolvedor, ações de terminal, respostas textuais.
|
|
328
|
+
- *Web:* Foco na topologia e overview gerencial, gráficos de saúde da documentação.
|
|
329
|
+
- *Mobile:* Interface simplificada estilo "Tinder de Code Review" — aprova ou rejeita regras alteradas pelas IAs em tempo real.
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
### 13. RISCOS, PREMISSAS E MITIGAÇÕES
|
|
334
|
+
|
|
335
|
+
| Risco | Categoria | Probabilidade | Impacto | Mitigação | Responsável |
|
|
336
|
+
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
337
|
+
| **Alucinação da IA corrompendo o JSON** | Técnico | Alta | Alto | O comando `sauron check` fará validação rígida, impedindo sincronizações defeituosas. | [PENDENTE: Eng. Principal] |
|
|
338
|
+
| **Adoção pelo Usuário (Baixa adesão à disciplina de Write)** | Negócio | Média | Alto | Criar templates perfeitos (`memory.md`, `skill.md`) injetados via `init` que "forçam" a IA a respeitar a estrutura. | [PENDENTE: PM / UX] |
|
|
339
|
+
| **Mudança na Política/API de Terceiros (IDE Agents)** | Técnico | Baixa | Médio | Como a infraestrutura é passiva e baseada em Markdown, o risco é baixo. Arquivos `.md` são padrões universais. | [PENDENTE: Arquiteto] |
|
|
340
|
+
| **Resistência ao modelo SaaS Web/Mobile por Tech Leads** | Negócio | Alta | Médio | Focar na fase MVP Open Source para Indie Hackers. Quando a tração orgânica vier, o up-sell para o time corporativo será natural. | [PENDENTE: Growth/Vendas] |
|
|
341
|
+
| **Risco Regulatório e Privacidade de Dados (SaaS Cloud)** | Operacional | Baixa | Alto | Adotar estratégia "Bring Your Own Database (Adapters)" ou garantir criptografia E2E na sincronização da Nuvem Oficial. | [PENDENTE: Legal/Security] |
|
|
342
|
+
| **Dificuldade na Aprovação App Mobile nas Lojas (Apple/Google)** | Operacional | Baixa | Baixo | Preparar os termos de serviço focados em B2B e prever Web App (PWA) como fallback provisório. | [PENDENTE: Mobile Dev] |
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
### 14. ROADMAP E FASES DE ENTREGA
|
|
347
|
+
|
|
348
|
+
| Feature / Módulo | Tamanho | Prioridade (MoSCoW) | Dependências |
|
|
349
|
+
| :--- | :--- | :--- | :--- |
|
|
350
|
+
| **Fase 1: MVP CLI (Open Source V1)** |
|
|
351
|
+
| Ejeção de Estrutura (`sauron init`) | S | Must Have | Setup inicial do Tsup/Commander |
|
|
352
|
+
| Auditoria de Integridade (`sauron check`) | M | Must Have | `init` funcional |
|
|
353
|
+
| Visão Hierárquica (`sauron map`) | M | Should Have | `check` e `init` |
|
|
354
|
+
| **Fase 2: Expansão Cloud & SaaS (V2)** |
|
|
355
|
+
| Web Dashboard (Criação/Monitoramento) | XL | Must Have | Backend / API REST em nuvem |
|
|
356
|
+
| Motor de Assinaturas (Stripe) | L | Must Have | Dashboard Web criado |
|
|
357
|
+
| API de Adapters / Sincronização Local-Nuvem| L | Should Have | Web Dashboard operante |
|
|
358
|
+
| **Fase 3: Mobile & Governança de Squads (V3)**|
|
|
359
|
+
| App Mobile Native (Aprovações push) | XL | Could Have | API Cloud / Adapters |
|
|
360
|
+
| Lock System de Arquivos (Governança) | L | Must Have | App Mobile operante |
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
### 15. CRITÉRIOS DE ACEITAÇÃO E DOD
|
|
365
|
+
|
|
366
|
+
**Definition of Done (DoD) Geral do Projeto:**
|
|
367
|
+
- [ ] O código passou em lint, formatação e verificação de tipagem estática (TypeScript strict mode).
|
|
368
|
+
- [ ] Testes unitários (Jest/Vitest) cobrem ao menos 80% dos parsers e validadores do CLI.
|
|
369
|
+
- [ ] As 3 features críticas possuem testes de cenário feliz, alternativo e falha documentados.
|
|
370
|
+
- [ ] O comando `npx sauron-cli` pode ser executado globalmente sem erros de permissionamento no SO.
|
|
371
|
+
- [ ] A interface CLI retorna mensagens claras de sucesso e erro ao usuário.
|
|
372
|
+
- [ ] As variáveis de ambiente SaaS (Web/Mobile) estão devidamente encriptadas.
|
|
373
|
+
- [ ] Documentação do README do Open Source está revisada, instruindo como instalar.
|
|
374
|
+
- [ ] O Release está publicado via pipeline automatizada (GitHub Actions para NPM, Vercel para Web).
|
|
375
|
+
|
|
376
|
+
**Cenários de Teste para Feature Crítica (`sauron check`):**
|
|
377
|
+
- *Cenário Feliz:* Rode o `check` num projeto perfeito. A validação deve retornar verde e demorar < 50ms.
|
|
378
|
+
- *Cenário Alternativo:* Adicione manualmente um novo domínio no JSON com lista vazia de arquivos. O `check` deve alertar "Domínio vazio detectado", mas não deve quebrar/falhar com exit code 1 (warning, not error).
|
|
379
|
+
- *Cenário de Erro:* Remova uma aspa dupla do arquivo `summary.json`. O parser JSON nativo lançará erro. O Sauron deve capturá-lo e imprimir de forma elegante no console em vez de vomitar um stack trace ilegível do Node.js.
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
### 16. PLANO DE LANÇAMENTO
|
|
384
|
+
|
|
385
|
+
**Fases de Lançamento:**
|
|
386
|
+
1. **Alpha Fechado (Solo Founder & IAs):** O fundador utilizará a CLI nos seus próprios projetos de laboratório durante 1 semana.
|
|
387
|
+
- *Go/No-go:* Se a IA alucinar as regras ou quebrar o JSON mais de 3 vezes por semana, retorna para revisão de prompt.
|
|
388
|
+
2. **Beta Aberto (Comunidade Indie Hacker):** Divulgação no X (Twitter) e Product Hunt do pacote via NPM (`npx sauron-cli`).
|
|
389
|
+
- *Critério:* Chegar a 1.000 instalações. Feedback intensivo de dev solos focados no modelo Open Source.
|
|
390
|
+
3. **Lançamento SaaS Phase (Fase 2 - Web Dashboard):** Abertura do modelo de monetização com Early-bird pricing.
|
|
391
|
+
- *Onboarding:* E-mails educacionais para a base do pacote NPM mostrando os benefícios do sincronismo em nuvem.
|
|
392
|
+
4. **General Availability (GA Mobile - Fase 3):** App chega às lojas oficiais (App Store / Play Store) direcionando marketing para Tech Leads e empresas B2B.
|
|
393
|
+
|
|
394
|
+
**Métricas de Adoção Inicial:**
|
|
395
|
+
Monitorar retenção do pacote NPM no primeiro mês de uso (se os usuários continuam rodando `sauron check` semanas após a instalação, provando o valor a longo prazo).
|
|
396
|
+
|
|
397
|
+
---
|
|
398
|
+
|
|
399
|
+
### GLOSSÁRIO
|
|
400
|
+
|
|
401
|
+
1. **Amnésia de Contexto:** Limitação dos agentes de IA em recordar decisões de negócio passadas durante sessões prolongadas de desenvolvimento.
|
|
402
|
+
2. **Context Window:** O limite numérico de tokens (palavras/caracteres) que uma Inteligência Artificial consegue processar em um único prompt.
|
|
403
|
+
3. **Vibe Coding:** Paradigma moderno de desenvolvimento onde o humano apenas escreve prompts e orquestra, enquanto a IA escreve e compila todo o código.
|
|
404
|
+
4. **Write Obligation:** Conceito central do Sauron onde a IA é arquiteturalmente forçada a documentar ativamente regras no projeto (escrever memórias), e não apenas ler repositórios.
|
|
405
|
+
5. **LLM (Large Language Model):** Modelo de linguagem de grande escala (ex: GPT-4, Claude 3) que alimenta os agentes de código.
|
|
406
|
+
6. **Agente Executável:** Ferramentas de IA (como Aider e Devin) que tomam ações ativas no terminal e alteram o código diretamente.
|
|
407
|
+
7. **Lobo Frontal:** Metáfora anatômica utilizada para descrever o Sauron CLI; a área cerebral responsável pela tomada de decisão, comportamento padrão e memória de longo prazo das IAs.
|
|
408
|
+
8. **Single Source of Truth (SSOT):** Prática de estruturar dados/regras de forma que exista um único ponto de referência confiável.
|
|
409
|
+
9. **Sauron Adapters:** Scripts ou conectores open-source que permitirão ligar os dados locais do CLI a bancos de dados externos (SaaS/Cloud).
|
|
410
|
+
10. **MoSCoW:** Técnica de priorização de requisitos (Must, Should, Could, Won't have).
|
|
411
|
+
|
|
412
|
+
---
|
|
413
|
+
|
|
414
|
+
### APÊNDICE
|
|
415
|
+
|
|
416
|
+
**Perguntas Abertas para o Time:**
|
|
417
|
+
1. O parser do comando `check` deve usar validações restritas via Zod no TypeScript, ou deixaremos a lógica customizada para garantir performance máxima sem dependências extras?
|
|
418
|
+
2. Para o fluxo do "Sauron Cloud / Web Dashboard", como garantiremos a criptografia ponta a ponta sem onerar a experiência de busca no banco PostgreSQL?
|
|
419
|
+
3. O modelo de assinatura (Stripe) deve cobrar um valor base pelo "Team Workspace" + taxa por usuário adicional, ou ser flat-rate na V1 do SaaS?
|
|
420
|
+
4. A injeção das pastas e templates via `sauron init` sobrescreverá arquivos com nomes similares (risco destrutivo), ou irá dar append seguro? Precisamos decidir o comportamento do Merge.
|
|
421
|
+
5. Como os Agentes vão lidar com limites rigorosos de rate-limiting (tokens) ao ler uma estrutura de "Memórias" que começar a ultrapassar 50+ arquivos Markdown? Teremos um sistema de auto-compressão no roadmap futuro?
|
|
422
|
+
|
|
423
|
+
**Referências:**
|
|
424
|
+
- Documentação do Commander.js: `https://github.com/tj/commander.js/`
|
|
425
|
+
- Arquiteturas de Vibe Coding & Context Management (Pesquisas em IA e Repomix).
|
|
426
|
+
- Padrões WCAG 2.1 para o Dashboard Web.
|
|
427
|
+
|
|
428
|
+
**Histórico de Versões:**
|
|
429
|
+
- *v1.0:* Criação do PRD cobrindo Core CLI, Injeção multiplataforma (Web/Mobile) e Módulo de Monetização. Elaborado pelo Product Manager Senior (IA).
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/index.ts
|
|
4
|
+
import { Command } from "commander";
|
|
5
|
+
|
|
6
|
+
// src/commands/init.ts
|
|
7
|
+
import fs from "fs-extra";
|
|
8
|
+
import path from "path";
|
|
9
|
+
import pc from "picocolors";
|
|
10
|
+
import { fileURLToPath } from "url";
|
|
11
|
+
var __filename = fileURLToPath(import.meta.url);
|
|
12
|
+
var __dirname = path.dirname(__filename);
|
|
13
|
+
async function runInit() {
|
|
14
|
+
const cwd = process.cwd();
|
|
15
|
+
const packageRoot = path.join(__dirname, "..");
|
|
16
|
+
const templatesDir = path.join(packageRoot, "templates");
|
|
17
|
+
const targetSauronDir = path.join(cwd, ".sauron");
|
|
18
|
+
const targetAgentsDir = path.join(cwd, ".agents");
|
|
19
|
+
console.log(pc.blue("Inicializando Sauron Memory System..."));
|
|
20
|
+
if (await fs.pathExists(targetSauronDir) || await fs.pathExists(targetAgentsDir)) {
|
|
21
|
+
console.error(pc.red("Erro: Sauron j\xE1 inicializado neste diret\xF3rio (pasta .sauron ou .agents existente)."));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const sourceSauronDir = path.join(templatesDir, ".sauron");
|
|
26
|
+
const sourceAgentsDir = path.join(templatesDir, ".agents");
|
|
27
|
+
if (await fs.pathExists(sourceAgentsDir)) {
|
|
28
|
+
await fs.copy(sourceAgentsDir, targetAgentsDir);
|
|
29
|
+
} else {
|
|
30
|
+
console.warn(pc.yellow(`Aviso: Pasta .agents n\xE3o encontrada nos templates originais (${sourceAgentsDir}).`));
|
|
31
|
+
}
|
|
32
|
+
if (await fs.pathExists(sourceSauronDir)) {
|
|
33
|
+
await fs.copy(sourceSauronDir, targetSauronDir);
|
|
34
|
+
} else {
|
|
35
|
+
console.warn(pc.yellow(`Aviso: Pasta .sauron n\xE3o encontrada nos templates originais (${sourceSauronDir}).`));
|
|
36
|
+
}
|
|
37
|
+
console.log(pc.green(pc.bold("\nSauron Memory System instalado com sucesso! \u{1F441}\uFE0F\n")));
|
|
38
|
+
console.log(pc.white("O C\xE9rebro da IA foi ejetado neste diret\xF3rio. A partir de agora, suas IAs documentar\xE3o regras passivamente.\n"));
|
|
39
|
+
} catch (error) {
|
|
40
|
+
console.error(pc.red("Erro fatal ao ejetar os arquivos do Sauron:"), error);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// src/index.ts
|
|
46
|
+
var program = new Command();
|
|
47
|
+
program.name("sauron").description("Sauron CLI - Framework para resolu\xE7\xE3o de Amn\xE9sia de Contexto em IAs").version("1.0.0");
|
|
48
|
+
program.command("init").description("Inicializa o Sauron Memory System no projeto atual").action(runInit);
|
|
49
|
+
program.parse();
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sauron-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"sauron": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsup src/index.ts --format esm --clean",
|
|
12
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [],
|
|
15
|
+
"author": "",
|
|
16
|
+
"license": "ISC",
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"commander": "^15.0.0",
|
|
19
|
+
"fs-extra": "^11.3.5",
|
|
20
|
+
"picocolors": "^1.1.1"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@types/fs-extra": "^11.0.4",
|
|
24
|
+
"@types/node": "^25.9.2",
|
|
25
|
+
"tsup": "^8.5.1",
|
|
26
|
+
"typescript": "^6.0.3"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Plano de Implementação: Sauron CLI
|
|
2
|
+
|
|
3
|
+
Este é o plano detalhado de construção técnica do framework Sauron CLI. Ao iniciar um novo projeto, entregue este plano para o seu agente de IA para que ele possa executar a construção em 5 fases.
|
|
4
|
+
|
|
5
|
+
## Fase 1: Setup do Repositório
|
|
6
|
+
**Objetivo:** Inicializar o projeto Node.js e instalar o maquinário do CLI.
|
|
7
|
+
|
|
8
|
+
1. Inicialize um pacote Node.js (`npm init -y`).
|
|
9
|
+
2. Defina o campo `"bin": { "sauron": "./dist/index.js" }` e `"type": "module"` no `package.json`.
|
|
10
|
+
3. Instale as dependências essenciais:
|
|
11
|
+
- `npm install commander fs-extra picocolors`
|
|
12
|
+
- `npm install -D typescript @types/node @types/fs-extra tsup`
|
|
13
|
+
4. Crie o arquivo `tsconfig.json` básico.
|
|
14
|
+
5. Crie um script no `package.json`: `"build": "tsup src/index.ts --format esm --clean"`.
|
|
15
|
+
|
|
16
|
+
## Fase 2: Construção dos Templates (O Coração)
|
|
17
|
+
**Objetivo:** Criar a pasta que armazena as réplicas exatas do sistema Sauron que serão ejetadas nas máquinas dos usuários.
|
|
18
|
+
|
|
19
|
+
Crie fisicamente a seguinte estrutura no diretório `templates/`:
|
|
20
|
+
```plaintext
|
|
21
|
+
templates/
|
|
22
|
+
├── .agents/
|
|
23
|
+
│ ├── rules/
|
|
24
|
+
│ │ └── memory.md (Conteúdo que orienta a IA a ler o Sauron)
|
|
25
|
+
│ └── skills/
|
|
26
|
+
│ └── wiki/
|
|
27
|
+
│ └── SKILL.md (Conteúdo da Write Obligation / Regra do Sauron)
|
|
28
|
+
└── .sauron/
|
|
29
|
+
└── wiki/
|
|
30
|
+
├── summary.json (Arquivo inicial de mapa vazio)
|
|
31
|
+
├── history/
|
|
32
|
+
├── knowledge/
|
|
33
|
+
├── manuals/
|
|
34
|
+
├── modules/
|
|
35
|
+
└── standards/
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Fase 3: Desenvolvimento do Core CLI (`src/index.ts`)
|
|
39
|
+
**Objetivo:** Criar a porta de entrada que escuta o comando do usuário.
|
|
40
|
+
|
|
41
|
+
1. Crie a pasta `src/` e o arquivo `index.ts`.
|
|
42
|
+
2. Adicione a shebang line no topo de `index.ts`: `#!/usr/bin/env node`.
|
|
43
|
+
3. Configure o `commander` para iniciar o programa, declarando nome, versão e descrição.
|
|
44
|
+
4. Registre o comando primário: `program.command('init').description('Inicializa o Sauron Memory System no projeto atual').action(runInit)`.
|
|
45
|
+
|
|
46
|
+
## Fase 4: Lógica do Comando Init (`src/commands/init.ts`)
|
|
47
|
+
**Objetivo:** O motor que vai copiar os templates.
|
|
48
|
+
|
|
49
|
+
1. Identifique o diretório de execução do usuário usando `process.cwd()`.
|
|
50
|
+
2. Identifique onde os templates do CLI estão localizados localmente usando `__dirname` e caminhos relativos (cuidado com as diferenças de pathing no momento em que o código vira bundle pelo `tsup`).
|
|
51
|
+
3. Verifique com `fs-extra.pathExists` se `.sauron` ou `.agents` já existem no destino. Se sim, logue um aviso colorido com `picocolors` sugerindo cuidado ou pulando etapas não-destrutivas.
|
|
52
|
+
4. Execute `fs-extra.copy()` para ejetar `templates/.agents/` e `templates/.sauron/` para o `process.cwd()`.
|
|
53
|
+
5. Exiba mensagens visuais de sucesso indicando que a memória da IA está instalada.
|
|
54
|
+
|
|
55
|
+
## Fase 5: Build, Teste e Deploy
|
|
56
|
+
**Objetivo:** Empacotar e preparar para NPM.
|
|
57
|
+
|
|
58
|
+
1. Rode `npm run build`. O `tsup` deverá gerar a pasta `dist/` com o binário minificado.
|
|
59
|
+
2. Na raiz do projeto CLI, rode `npm link` para testar o binário globalmente no sistema local.
|
|
60
|
+
3. Crie uma pasta vazia aleatória e rode `sauron init` para atestar que os templates são injetados.
|
|
61
|
+
4. Adicione um arquivo `.npmignore` garantindo que os `templates/` e `dist/` não fiquem de fora da publicação (cuidado, `dist` costuma ficar no `.gitignore`).
|
|
62
|
+
5. (Final) Para a distribuição global, rode `npm login` seguido de `npm publish --access public`.
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
trigger: always_on
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Regra de Memória do Projeto (OBRIGATÓRIA)
|
|
6
|
+
|
|
7
|
+
> Esta regra garante que o Wiki (`.sauron/wiki/`) é a fonte da verdade absoluta do projeto.
|
|
8
|
+
> Violá-la significa perder informação crítica entre sessões.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 1. LEITURA — Antes de Agir
|
|
13
|
+
|
|
14
|
+
Sempre que algo for perguntado ou uma tarefa for iniciada:
|
|
15
|
+
|
|
16
|
+
1. Leia `.sauron/wiki/summary.json` (o arquivo de roteamento base) primeiro. Este arquivo segue um **padrão rígido** e é a única fonte confiável de metadados.
|
|
17
|
+
2. Navegue pelas sub-páginas relevantes usando as informações de nome original e tipo (file/folder) contidas no JSON.
|
|
18
|
+
3. Só recorra à exploração do sistema de arquivos se a informação **não existir** no sumário (e atualize o sumário se necessário seguindo o schema da Seção 6).
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. PROTOCOLO DE SINCRONIZAÇÃO (NUVEM)
|
|
23
|
+
|
|
24
|
+
O fluxo de documentação segue um ciclo de três etapas para garantir a persistência:
|
|
25
|
+
|
|
26
|
+
1. **PULL (Manual)**: Antes de iniciar a tarefa, o usuário executa `sauron pull` para atualizar os documentos locais com a versão mais recente da nuvem.
|
|
27
|
+
2. **EXECUÇÃO (IA)**: Durante o desenvolvimento, o Agente atualiza/cria os documentos em `.sauron/wiki/` em tempo real.
|
|
28
|
+
3. **PUSH (Manual)**: Ao finalizar a tarefa, o usuário executa `sauron push` para enviar as atualizações locais para a nuvem.
|
|
29
|
+
|
|
30
|
+
> [!IMPORTANT]
|
|
31
|
+
> O Agente deve assumir que o diretório `.sauron/wiki/` é o destino final e atualizá-lo diligentemente, permitindo que o usuário sincronize as mudanças posteriormente.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 3. ESCRITA — Depois de Entregar (CRÍTICO)
|
|
36
|
+
|
|
37
|
+
**Após QUALQUER entrega funcional, a wiki DEVE ser atualizada NO MESEMO TURNO de resposta.**
|
|
38
|
+
|
|
39
|
+
### Gatilhos Obrigatórios de Escrita
|
|
40
|
+
|
|
41
|
+
| Evento | Ação no Wiki |
|
|
42
|
+
|--------|-------------|
|
|
43
|
+
| **Integração de API externa** | Criar/atualizar página documentando URL, autenticação, payload, resposta e tratamento de erros. |
|
|
44
|
+
| **Nova página/rota criada** | Registrar em `summary.json` (seguindo o **padrão rígido** da Seção 6) + criar arquivo `.md`. |
|
|
45
|
+
| **Fluxo de autenticação alterado** | Atualizar a página de auth com o fluxo completo, incluindo cookies, tokens e middleware. |
|
|
46
|
+
| **Novo componente de UI funcional** | Registrar na página do módulo correspondente com props, comportamento e dependências. |
|
|
47
|
+
| **Decisão arquitetural tomada** | Documentar usando o formato "Decisão Arquitetural" (Problema → Opções → Escolha → Justificativa). |
|
|
48
|
+
| **Variável de ambiente adicionada/alterada** | Registrar na página de infraestrutura com nome, propósito e exemplo. |
|
|
49
|
+
| **Schema de banco alterado** | Atualizar `module-data-schema.md` com a mudança. |
|
|
50
|
+
| **Bug crítico resolvido** | Registrar causa raiz e solução na página do módulo afetado. |
|
|
51
|
+
|
|
52
|
+
### Regra de Ouro
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
❌ ERRADO: Entregar código → Responder ao usuário → Esquecer o wiki
|
|
56
|
+
✅ CORRETO: Entregar código → Atualizar wiki → Responder ao usuário
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
A atualização do wiki é **parte da entrega**, não um passo opcional posterior.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 4. FORMATO — O que Escrever
|
|
64
|
+
|
|
65
|
+
Cada registro deve conter no mínimo:
|
|
66
|
+
- **O que foi feito** (descrição objetiva)
|
|
67
|
+
- **Por que foi feito** (contexto e motivação)
|
|
68
|
+
- **Como funciona** (detalhes técnicos: endpoints, payloads, fluxos)
|
|
69
|
+
- **Arquivos afetados** (lista de caminhos)
|
|
70
|
+
- **Data** (timestamp da alteração)
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 6. ESTRUTURA RÍGIDA DO SUMMARY.JSON
|
|
75
|
+
|
|
76
|
+
O arquivo `.sauron/wiki/summary.json` é o mapa de metadados que vincula os arquivos locais ao servidor. O CLI exige um padrão estrito para o comando `sauron push` funcionar corretamente.
|
|
77
|
+
|
|
78
|
+
### Regras de Ouro do Summary
|
|
79
|
+
- **NUNCA altere IDs**: Os campos `id`, `domainId` e `orgId` são cruciais. Removê-los ou alterá-los causará a criação de documentos duplicados no servidor em vez de atualizar os existentes.
|
|
80
|
+
- **Mantenha o Mapeamento**: O campo `name` deve ser o título original (com espaços e acentos). O `slug` e o `path` devem ser gerados seguindo a lógica de normalização (lowercase, sem acentos, espaços viram hífens).
|
|
81
|
+
- **Otimização**: Os campos `contentLength` e `contentHash` (SHA256) permitem que o CLI pule arquivos não alterados. Se você editar um arquivo manualmente, o `push` detectará a mudança mesmo se você não atualizar o hash (ele recalcula o hash local), mas o `summary.json` deve ser mantido atualizado para consistência.
|
|
82
|
+
- **Acoplamento Físico**: O Sauron CLI mapeia domínios do banco de dados na nuvem com base na subpasta física no disco local (usando o diretório pai do arquivo). Arquivos na raiz do wiki sempre pertencerão ao domínio genérico `.`. É obrigatória a organização física em pastas para manter a separação lógica na nuvem.
|
|
83
|
+
- **Ignorar summary.md**: O arquivo `summary.md` é uma página especial/reservada. Nunca adicione o `summary.md` como uma entrada do tipo `"file"` dentro do `summary.json`, caso contrário o CLI tentará excluí-lo e falhará com erro 422.
|
|
84
|
+
|
|
85
|
+
### Schema Obrigatório
|
|
86
|
+
|
|
87
|
+
O JSON deve ser um **array de objetos** seguindo rigorosamente estes formatos:
|
|
88
|
+
|
|
89
|
+
#### Entrada de Pasta (Domínio)
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"type": "folder",
|
|
93
|
+
"name": "Título Original",
|
|
94
|
+
"slug": "titulo-original",
|
|
95
|
+
"path": "titulo-original",
|
|
96
|
+
"id": "id-do-dominio"
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
#### Entrada de Arquivo (Documento)
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"type": "file",
|
|
104
|
+
"name": "Título Original do Documento",
|
|
105
|
+
"slug": "titulo-original-do-documento",
|
|
106
|
+
"path": "slug-do-dominio/titulo-original-do-documento.md",
|
|
107
|
+
"id": "id-do-kb",
|
|
108
|
+
"domainId": "id-do-dominio-pai",
|
|
109
|
+
"orgId": "id-da-organizacao",
|
|
110
|
+
"contentLength": 1234,
|
|
111
|
+
"contentHash": "sha256-checksum"
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 7. VALIDAÇÃO — Checklist Mental
|
|
118
|
+
|
|
119
|
+
Antes de finalizar qualquer resposta que envolva código, pergunte-se:
|
|
120
|
+
|
|
121
|
+
- [ ] Criei ou modifiquei um arquivo? → Wiki precisa saber.
|
|
122
|
+
- [ ] Conectei a uma API externa? → Wiki precisa documentar.
|
|
123
|
+
- [ ] Alterei fluxo de login/sessão? → Wiki MUST refletir.
|
|
124
|
+
- [ ] Criei uma nova página/rota? → `summary.json` precisa do registro de roteamento seguindo o **padrão rígido**.
|
|
125
|
+
- [ ] Tomei uma decisão técnica (lib X vs Y, abordagem A vs B)? → Wiki precisa da justificativa.
|
|
126
|
+
- [ ] Adicionei/alterei uma variável de ambiente? → Wiki precisa do registro.
|
|
127
|
+
|
|
128
|
+
Se qualquer checkbox for `true` e o wiki não foi atualizado, **a tarefa NÃO está completa**.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wiki
|
|
3
|
+
description: Project Memory and Documentation System - ensures every action, decision, and evolution is recorded, explained, and traceable.
|
|
4
|
+
allowed-tools: Read, Write, Edit, list_dir
|
|
5
|
+
version: 3.0
|
|
6
|
+
priority: MANDATORY
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 🧠 Wiki & Project Memory System
|
|
10
|
+
|
|
11
|
+
> **MANDATORY SKILL** - Build a living knowledge system. Nothing exists unless it is documented.
|
|
12
|
+
> **WRITE OBLIGATION** - Every functional delivery MUST include wiki updates in the SAME response turn.
|
|
13
|
+
> **SYNC PROTOCOL** - The IA updates local `.sauron/wiki/` files; `sauron pull/push` are manual user commands.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 1. Core Principles
|
|
18
|
+
|
|
19
|
+
| Principle | Rule |
|
|
20
|
+
|-----------|------|
|
|
21
|
+
| **Source of Truth** | If it's not documented, it doesn't exist. All changes must be recorded before completion. |
|
|
22
|
+
| **Decision > Impl** | Documentation is about **WHY**, not just **WHAT**. Explain context and alternatives. |
|
|
23
|
+
| **Smart Granularity** | Divide documentation into sub-pages based on modules, domains, or critical components. |
|
|
24
|
+
| **Continuous Evolution** | Pages are living organisms. They must contain current state, history, and future direction. |
|
|
25
|
+
| **Write-on-Deliver** | Wiki update is part of the delivery, not a follow-up task. Code without docs = incomplete work. |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 2. Structure & Naming Conventions
|
|
30
|
+
|
|
31
|
+
| Property | Requirement |
|
|
32
|
+
|----------|-------------|
|
|
33
|
+
| **Base Directory** | `/.sauron/wiki/` |
|
|
34
|
+
| **Root Routing File** | `summary.json` (dentro de `/.sauron/wiki/`) |
|
|
35
|
+
| **Subdirectories** | `knowledge/`, `modules/`, `manuals/`, `standards/`, `history/` (pastas físicas obrigatórias para os domínios no Sauron) |
|
|
36
|
+
| **Naming Pattern** | `{name}.md` (sem prefixos se já estiverem dentro das subpastas físicas de domínio) |
|
|
37
|
+
| **Examples** | `knowledge/architecture.md`, `modules/checkout.md`, `manuals/upholstery.md` |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 3. Reference Templates
|
|
42
|
+
|
|
43
|
+
### 3.1 Root Routing File (`summary.json`)
|
|
44
|
+
O arquivo `summary.json` é o mapa de metadados que vincula os arquivos locais ao servidor. Ele segue um **padrão rígido** (ver Seção 6 da `memory.md`).
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
[
|
|
48
|
+
{
|
|
49
|
+
"type": "folder",
|
|
50
|
+
"name": "Título Original",
|
|
51
|
+
"slug": "titulo-original",
|
|
52
|
+
"path": "titulo-original",
|
|
53
|
+
"id": "UUID-ou-ID"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"type": "file",
|
|
57
|
+
"name": "Título Original",
|
|
58
|
+
"slug": "titulo-original",
|
|
59
|
+
"path": "slug-do-dominio/titulo-original.md",
|
|
60
|
+
"id": "UUID-ou-ID",
|
|
61
|
+
"domainId": "ID-do-pai",
|
|
62
|
+
"orgId": "ID-da-organizacao",
|
|
63
|
+
"contentLength": 1234,
|
|
64
|
+
"contentHash": "sha256-checksum"
|
|
65
|
+
}
|
|
66
|
+
]
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 3.2 Sub-pages (`{name}.md`)
|
|
70
|
+
```markdown
|
|
71
|
+
# [Module / Page Name]
|
|
72
|
+
|
|
73
|
+
## 1. Context
|
|
74
|
+
Clear description of what this part of the system is.
|
|
75
|
+
|
|
76
|
+
## 2. Responsibility
|
|
77
|
+
What this part does and what it DOES NOT do.
|
|
78
|
+
|
|
79
|
+
## 3. Architectural Decisions
|
|
80
|
+
### Decision 1
|
|
81
|
+
- **Problem**:
|
|
82
|
+
- **Options Considered**:
|
|
83
|
+
- Option A
|
|
84
|
+
- Option B
|
|
85
|
+
- **Choice**:
|
|
86
|
+
- **Justification**:
|
|
87
|
+
- **Trade-offs**:
|
|
88
|
+
|
|
89
|
+
(repeat as necessary)
|
|
90
|
+
|
|
91
|
+
## 4. Change History
|
|
92
|
+
### [Date] - [Change Title]
|
|
93
|
+
- **What was done**:
|
|
94
|
+
- **Why it was done**:
|
|
95
|
+
- **Impact on the system**:
|
|
96
|
+
- **Files affected**:
|
|
97
|
+
|
|
98
|
+
## 5. Current State
|
|
99
|
+
Objective technical description of the implementation as it stands today.
|
|
100
|
+
|
|
101
|
+
## 6. Next Steps (Optional)
|
|
102
|
+
Possible future evolutions.
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 4. Update Protocol (MANDATORY)
|
|
108
|
+
|
|
109
|
+
Whenever a relevant action is performed, the AI **MUST**:
|
|
110
|
+
|
|
111
|
+
1. **Identify Scope**: Determine which page in `/.sauron/wiki/` is affected.
|
|
112
|
+
2. **Register Change**: Add a specific entry to the **Change History** of the corresponding page.
|
|
113
|
+
3. **Update Current State**: Ensure the technical description reflects reality after the modification.
|
|
114
|
+
4. **Register Decisions**: Document technical or strategic choices using the **Architectural Decisions** format.
|
|
115
|
+
5. **Update Routing**: If a new page was created, register it in `summary.json` with its metadata immediately.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 5. Mandatory Write Triggers
|
|
120
|
+
|
|
121
|
+
> 🔴 These events ALWAYS require a wiki update in the SAME response turn as the code delivery.
|
|
122
|
+
|
|
123
|
+
| Trigger Event | Wiki Action Required |
|
|
124
|
+
|---------------|---------------------|
|
|
125
|
+
| **External API integrated** | Create `{name}.md` under the corresponding folder (e.g. `integrations/` or `modules/`) with: URL, auth method, request/response shapes, error handling, env vars. |
|
|
126
|
+
| **New route/page created** | Register in `summary.json` System Map + create `{name}.md` under the corresponding folder with layout, components, and behavior. |
|
|
127
|
+
| **Authentication flow changed** | Update auth-related page with full flow: credentials, tokens, cookies, middleware, session lifecycle. |
|
|
128
|
+
| **New UI component delivered** | Register in the parent module page with: props, behavior, dependencies, visual state. |
|
|
129
|
+
| **Architectural decision made** | Document in the relevant page using the Decision template (Problem → Options → Choice → Justification). |
|
|
130
|
+
| **Environment variable added/changed** | Register in relevant infrastructure/config page with: name, purpose, example value. |
|
|
131
|
+
| **Database schema changed** | Update `module-data-schema.md` with the change, including SQL and reasoning. |
|
|
132
|
+
| **Critical bug resolved** | Register root cause and solution in the affected module page. |
|
|
133
|
+
| **Middleware/security layer added** | Document the protection boundary, what it intercepts, and its redirect logic. |
|
|
134
|
+
| **Configuration/settings page created** | Document available options, their purpose, and current state (even if mocked). |
|
|
135
|
+
|
|
136
|
+
### Self-Check Before Responding
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
Before writing your response to the user, ask yourself:
|
|
140
|
+
|
|
141
|
+
1. Did I create or modify any file? → Wiki needs to know.
|
|
142
|
+
2. Did I connect to an external API? → Wiki needs full documentation.
|
|
143
|
+
3. Did I change login/session flow? → Wiki MUST reflect this.
|
|
144
|
+
4. Did I create a new page/route? → summary.json needs the registration.
|
|
145
|
+
5. Did I make a technical decision? → Wiki needs the justification.
|
|
146
|
+
6. Did I add/change an env variable? → Wiki needs the record.
|
|
147
|
+
|
|
148
|
+
If ANY answer is YES and the wiki was NOT updated → THE TASK IS NOT COMPLETE.
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## 6. AI Behavior & Constraints
|
|
154
|
+
|
|
155
|
+
| Rule | Action |
|
|
156
|
+
|------|--------|
|
|
157
|
+
| **Never skip** | Do not modify the system without documenting. |
|
|
158
|
+
| **Never omit** | Always justify decisions; no change can be implicit. |
|
|
159
|
+
| **Never overwrite** | History must never be deleted; append only. |
|
|
160
|
+
| **Never assume** | Do not use context that isn't documented. |
|
|
161
|
+
| **Never defer** | Wiki updates happen NOW, not "later" or "next turn". |
|
|
162
|
+
| **Clarity > Brevity** | Prioritize deep understanding over short summaries. |
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## 7. Vision/Goal
|
|
167
|
+
|
|
168
|
+
Transform the project into a system where:
|
|
169
|
+
- Code is **Executable**.
|
|
170
|
+
- Documentation is **Explainable**.
|
|
171
|
+
- Decision History is **Auditable**.
|
|
172
|
+
- No session knowledge is **Lost**.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"type": "folder",
|
|
4
|
+
"name": "History",
|
|
5
|
+
"slug": "history",
|
|
6
|
+
"path": "history",
|
|
7
|
+
"id": "domain-history"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"type": "folder",
|
|
11
|
+
"name": "Knowledge",
|
|
12
|
+
"slug": "knowledge",
|
|
13
|
+
"path": "knowledge",
|
|
14
|
+
"id": "domain-knowledge"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"type": "folder",
|
|
18
|
+
"name": "Manuals",
|
|
19
|
+
"slug": "manuals",
|
|
20
|
+
"path": "manuals",
|
|
21
|
+
"id": "domain-manuals"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"type": "folder",
|
|
25
|
+
"name": "Modules",
|
|
26
|
+
"slug": "modules",
|
|
27
|
+
"path": "modules",
|
|
28
|
+
"id": "domain-modules"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"type": "folder",
|
|
32
|
+
"name": "Standards",
|
|
33
|
+
"slug": "standards",
|
|
34
|
+
"path": "standards",
|
|
35
|
+
"id": "domain-standards"
|
|
36
|
+
}
|
|
37
|
+
]
|