stealthos-cli 0.1.0-alpha.2 → 0.1.0-alpha.4

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.
Files changed (178) hide show
  1. package/ai/CONTRACT.md +110 -0
  2. package/ai/INDEX.md +203 -0
  3. package/ai/README.md +434 -0
  4. package/ai/ROUTER.md +288 -0
  5. package/ai/agents/README.md +103 -0
  6. package/ai/agents/architect.md +59 -0
  7. package/ai/agents/backend-engineer.md +62 -0
  8. package/ai/agents/founder.md +45 -0
  9. package/ai/agents/frontend-engineer.md +61 -0
  10. package/ai/agents/product-manager.md +56 -0
  11. package/ai/agents/qa-engineer.md +53 -0
  12. package/ai/agents/researcher.md +74 -0
  13. package/ai/agents/reviewer.md +73 -0
  14. package/ai/agents/security-engineer.md +59 -0
  15. package/ai/agents/sre-engineer.md +70 -0
  16. package/ai/agents/tech-lead.md +70 -0
  17. package/ai/architecture/README.md +35 -0
  18. package/ai/architecture/components.md +24 -0
  19. package/ai/architecture/containers.md +30 -0
  20. package/ai/architecture/event-flows.md +36 -0
  21. package/ai/architecture/sequence-diagrams.md +38 -0
  22. package/ai/architecture/system-context.md +46 -0
  23. package/ai/architecture/threat-modeling.md +40 -0
  24. package/ai/blueprints/README.md +67 -0
  25. package/ai/blueprints/_schema.json +40 -0
  26. package/ai/blueprints/ai-platform.json +28 -0
  27. package/ai/blueprints/crm.json +22 -0
  28. package/ai/blueprints/game.json +25 -0
  29. package/ai/blueprints/mobile.json +24 -0
  30. package/ai/blueprints/realtime.json +22 -0
  31. package/ai/blueprints/saas.json +25 -0
  32. package/ai/blueprints/telemetry.json +30 -0
  33. package/ai/blueprints/web.json +23 -0
  34. package/ai/bootstrap/discovery-questions.md +117 -0
  35. package/ai/bootstrap/dispatcher.md +85 -0
  36. package/ai/bootstrap/existing-project.md +191 -0
  37. package/ai/bootstrap/new-project.md +127 -0
  38. package/ai/bootstrap/tech-mapping.md +164 -0
  39. package/ai/clients/README.md +114 -0
  40. package/ai/clients/antigravity.md +125 -0
  41. package/ai/clients/claude-code.md +65 -0
  42. package/ai/clients/cline.md +69 -0
  43. package/ai/clients/codex-aider-cli.md +82 -0
  44. package/ai/clients/continue.md +67 -0
  45. package/ai/clients/copilot.md +49 -0
  46. package/ai/clients/cursor.md +81 -0
  47. package/ai/clients/snippets/mcp-absolute-paths.json +9 -0
  48. package/ai/clients/snippets/mcp-http.json +7 -0
  49. package/ai/clients/snippets/mcp-stdio.json +9 -0
  50. package/ai/clients/trae.md +69 -0
  51. package/ai/clients/windsurf.md +71 -0
  52. package/ai/core/pipeline/execution-engine.md +157 -0
  53. package/ai/engineering/README.md +32 -0
  54. package/ai/engineering/observability/incident-response.md +82 -0
  55. package/ai/evals/protocol-tests.md +150 -0
  56. package/ai/evolution/agent-evolution.md +161 -0
  57. package/ai/evolution/improvements.md +91 -0
  58. package/ai/evolution/learnings.md +49 -0
  59. package/ai/evolution/patterns-discovered.md +48 -0
  60. package/ai/execution/README.md +33 -0
  61. package/ai/execution/backlog.md +27 -0
  62. package/ai/execution/milestones.md +26 -0
  63. package/ai/execution/roadmap.md +30 -0
  64. package/ai/execution/sprint.md +42 -0
  65. package/ai/governance/README.md +34 -0
  66. package/ai/governance/architecture-principles.md +99 -0
  67. package/ai/governance/definition-of-done.md +88 -0
  68. package/ai/governance/definition-of-ready.md +69 -0
  69. package/ai/governance/engineering-principles.md +70 -0
  70. package/ai/governance/quality-gates.md +85 -0
  71. package/ai/governance/security-policies.md +84 -0
  72. package/ai/hooks/enforce-audit.ps1 +41 -0
  73. package/ai/hooks/enforce-audit.sh +39 -0
  74. package/ai/hooks/guard-edit.ps1 +182 -0
  75. package/ai/hooks/guard-edit.sh +161 -0
  76. package/ai/hooks/inject-os-reminder.ps1 +40 -0
  77. package/ai/hooks/inject-os-reminder.sh +16 -0
  78. package/ai/manifest.json +238 -0
  79. package/ai/memory/_detected-stack.json +33 -0
  80. package/ai/memory/_summary.md +49 -0
  81. package/ai/memory/archive/.gitkeep +3 -0
  82. package/ai/memory/completed-tasks.md +156 -0
  83. package/ai/memory/decisions.md +257 -0
  84. package/ai/memory/errors-and-solutions.md +41 -0
  85. package/ai/memory/known-issues.md +40 -0
  86. package/ai/memory/pending-tasks.md +37 -0
  87. package/ai/memory/project-context.md +67 -0
  88. package/ai/operating-system/architecture.md +54 -0
  89. package/ai/operating-system/coding-standards.md +84 -0
  90. package/ai/operating-system/folder-structure.md +126 -0
  91. package/ai/operating-system/performance-rules.md +86 -0
  92. package/ai/operating-system/quality-control.md +81 -0
  93. package/ai/operating-system/security-rules.md +91 -0
  94. package/ai/operating-system/workflow.md +86 -0
  95. package/ai/product/README.md +24 -0
  96. package/ai/product/business-rules.md +26 -0
  97. package/ai/product/personas.md +29 -0
  98. package/ai/product/user-journeys.md +30 -0
  99. package/ai/product/vision.md +35 -0
  100. package/ai/rules/behavior.md +45 -0
  101. package/ai/rules/do.md +47 -0
  102. package/ai/rules/dont.md +46 -0
  103. package/ai/rules/execution-flow.md +125 -0
  104. package/ai/rules/structural-constraints.md +59 -0
  105. package/ai/rules/structure-canon.md +116 -0
  106. package/ai/runtime.md +179 -0
  107. package/ai/scripts/detect-stack.ps1 +166 -0
  108. package/ai/scripts/detect-stack.sh +172 -0
  109. package/ai/scripts/init-ai-os.ps1 +170 -0
  110. package/ai/scripts/init-ai-os.sh +99 -0
  111. package/ai/scripts/lint-os.ps1 +99 -0
  112. package/ai/scripts/lint-os.sh +85 -0
  113. package/ai/scripts/start-os.ps1 +151 -0
  114. package/ai/scripts/start-os.sh +141 -0
  115. package/ai/server/README.md +105 -0
  116. package/ai/server/aios-server.mjs +2134 -0
  117. package/ai/server/package-lock.json +802 -0
  118. package/ai/server/package.json +31 -0
  119. package/ai/server/src/analyzer/graph-builder.ts +92 -0
  120. package/ai/server/src/analyzer/index.ts +191 -0
  121. package/ai/server/src/analyzer/module-mapper.ts +171 -0
  122. package/ai/server/src/analyzer/smell-detector.ts +54 -0
  123. package/ai/server/src/analyzer/stack-detector.ts +70 -0
  124. package/ai/server/src/index.ts +16 -0
  125. package/ai/server/src/packager/context-builder.ts +217 -0
  126. package/ai/server/src/packager/index.ts +3 -0
  127. package/ai/server/src/packager/memory-injector.ts +128 -0
  128. package/ai/server/src/packager/module-summarizer.ts +60 -0
  129. package/ai/server/src/packager/token-estimator.ts +26 -0
  130. package/ai/server/src/snapshot/index.ts +3 -0
  131. package/ai/server/src/snapshot/snapshot-creator.ts +206 -0
  132. package/ai/server/src/snapshot/snapshot-diff.ts +86 -0
  133. package/ai/server/src/snapshot/snapshot-restore.ts +14 -0
  134. package/ai/server/src/types.ts +94 -0
  135. package/ai/server/tsconfig.json +26 -0
  136. package/ai/skills/architecture-design.md +82 -0
  137. package/ai/skills/backend-engineering.md +57 -0
  138. package/ai/skills/database-design.md +76 -0
  139. package/ai/skills/frontend-engineering.md +63 -0
  140. package/ai/skills/performance.md +73 -0
  141. package/ai/skills/scalability.md +84 -0
  142. package/ai/skills/security.md +71 -0
  143. package/ai/skills/testing.md +77 -0
  144. package/ai/specs/ADR/ADR-0002-typescript-runtime.md +103 -0
  145. package/ai/specs/ADR/ADR-0004-runtime-orchestrator.md +94 -0
  146. package/ai/specs/ADR/ADR-0005-workflow-engine.md +105 -0
  147. package/ai/specs/ADR/ADR-0006-runtime-state.md +104 -0
  148. package/ai/specs/ADR/ADR-0007-state-compiler-drift-context-layers-artifact-index.md +82 -0
  149. package/ai/specs/ADR/ADR-0008-intent-runtime-discovery-branching.md +93 -0
  150. package/ai/specs/ADR/ADR-0009-confidence-system-maturity-tracking.md +113 -0
  151. package/ai/specs/ADR/ADR-0010-structural-architecture-standards.md +121 -0
  152. package/ai/specs/ADR/ADR-0011-mcp-prompts.md +86 -0
  153. package/ai/specs/ADR/ADR-0012-stealthos-hybrid-architecture.md +174 -0
  154. package/ai/specs/ADR/_TEMPLATE.md +60 -0
  155. package/ai/specs/BRD/_TEMPLATE.md +50 -0
  156. package/ai/specs/PRD/_TEMPLATE.md +72 -0
  157. package/ai/specs/README.md +43 -0
  158. package/ai/specs/RFC/RFC-0001-runtime-orchestrator.md +149 -0
  159. package/ai/specs/RFC/RFC-0002-runtime-orchestrator-extended.md +134 -0
  160. package/ai/specs/RFC/_TEMPLATE.md +61 -0
  161. package/ai/specs/RUNBOOKS/_TEMPLATE.md +68 -0
  162. package/ai/specs/SDD/_TEMPLATE.md +104 -0
  163. package/ai/specs/TASKS/_TEMPLATE.md +52 -0
  164. package/ai/tools/debugging.md +64 -0
  165. package/ai/tools/dependency-analysis.md +46 -0
  166. package/ai/tools/internet-research.md +42 -0
  167. package/ai/tools/mcp-discovery.md +44 -0
  168. package/ai/workflows/_schema.json +81 -0
  169. package/ai/workflows/init.json +148 -0
  170. package/ai/workflows/sync.json +71 -0
  171. package/ai/workflows/work.json +91 -0
  172. package/bin.cjs +7 -0
  173. package/package.json +9 -3
  174. package/scripts/bundle-ai.mjs +58 -0
  175. package/src/cli.mjs +1 -1
  176. package/src/commands/install.mjs +35 -11
  177. package/src/lib/resolve-source.mjs +27 -10
  178. package/stealthos +0 -2
@@ -0,0 +1,93 @@
1
+ ---
2
+ id: ADR-0008
3
+ slug: intent-runtime-discovery-branching
4
+ status: accepted
5
+ date: 2026-05-16
6
+ deciders: [user, tech-lead]
7
+ related:
8
+ - RFC-0002 (extensão consolidada)
9
+ - ADR-0007 (Fase 3 — State Compiler)
10
+ ---
11
+
12
+ # ADR-0008 — Intent Runtime para /work + Discovery Runtime ramificado em /init (Fase 4)
13
+
14
+ ## Contexto
15
+
16
+ Sob ADR-0005 (Fase 1), `/work` é pipeline linear de tools. Sob ADR-0007 (Fase 3), consome `runtime-context.json`. Mas ainda falta o **pipeline operacional completo** descrito na análise externa: Intent → Gap Analysis → Clarification (pause) → Plan → Approval (pause) → Execute → Validate → Memory Update → Snapshot. E `/init` precisa **ramificar** entre projeto novo (Discovery Runtime) vs existente (Reverse Engineering Runtime).
17
+
18
+ Esta ADR cobre **Fase 4** do RFC-0002.
19
+
20
+ ## Decisão
21
+
22
+ **Decidimos estender o Workflow Engine com 2 capacidades:**
23
+
24
+ 1. **Pause-for-input** — step pode declarar `pause_for: { reason, prompt, expected_input? }`. Quando alcançado:
25
+ - Engine salva snapshot da execução em `.ai/runtime/paused-executions/<execution_id>.json`.
26
+ - Retorna `{ status: "paused", execution_id, pause_info, steps_completed }`.
27
+ - Cliente externo (Claude AskUserQuestion, Gemini Function Calling pause, etc.) mostra `prompt` ao usuário e chama `aios_resume_workflow({execution_id, user_input})`.
28
+ - Engine recarrega state, deserializa, continua do step seguinte com `ctx.resumed_input` populado.
29
+
30
+ 2. **Branches condicionais** — step pode ter `branches: [{ when: "<expr>", steps: [...] }, { default: true, steps: [...] }]`. Avaliação simples: `when` é dotted-path com operador (`==`, `!=`, `in`) comparado a literal. Ex.: `state.identity.maturity == "empty"`.
31
+
32
+ **Workflow `work` v3.0.0 (Intent Runtime completo)**:
33
+ 1. `load_runtime_context` — base operacional consolidada.
34
+ 2. `classify_intent` — refina classify_task.
35
+ 3. `gap_analysis` — heurística: arquivos/specs ausentes para o intent.
36
+ 4. `clarification` (pause_for, opcional se complex) — questiona ambiguidades.
37
+ 5. `generate_plan` — pseudo-step que retorna template; LLM externa preenche.
38
+ 6. `approval` (pause_for) — pede OK do usuário.
39
+ 7. `execute` — placeholder; execução real é da LLM externa via tool calls subsequentes.
40
+ 8. `validate` — `aios_lint` + `aios_validate_audit` no resultado.
41
+ 9. `memory_update` — state.rotating.active_focus + sugestão append em completed-tasks.
42
+ 10. `post_snapshot` — snapshot final.
43
+
44
+ **Workflow `init` v3.0.0 (ramificado)** — usa `branches`:
45
+ - Branch A `when: state.identity.maturity == "empty"` → Discovery Runtime (perguntas extensas).
46
+ - Branch default → Reverse Engineering Runtime (steps atuais do init v2).
47
+
48
+ **3 tools novas**: `aios_resume_workflow`, `aios_list_paused_executions`, `aios_cancel_paused_execution`.
49
+
50
+ ## Consequências
51
+
52
+ ### Positivas
53
+ - `/work` vira **runtime operacional completo** (não pipeline linear).
54
+ - Discovery em projeto novo deixa de exigir intervenção manual.
55
+ - Pausa-resume permite workflows multi-turno preservando estado.
56
+ - Cliente externo decide UI da pausa (AskUserQuestion, prompt customizado, etc.) — engine só declara intenção.
57
+
58
+ ### Negativas / Trade-offs aceitos
59
+ - Estado de execução pausada vive em disco; precisa expiração (TTL 30 min default). Tool `aios_list_paused_executions` ajuda gestão.
60
+ - `branches` é mini-expression language; risco de virar DSL. Limito a `==`, `!=`, `in` e literal vs dotted-path.
61
+ - Workflow `work` v3 tem steps que são "placeholders" (`generate_plan`, `execute`) — LLM externa precisa entender que esses são marcadores. Documentado no workflow JSON.
62
+
63
+ ### Neutras
64
+ - Workflows v2 (init/sync/work atuais) continuam válidos; v3 é opt-in via nome `work-v3` se preferir parallel. Decisão: substituir direto (mantém UX dos 3 commands).
65
+
66
+ ## Alternativas consideradas
67
+
68
+ ### A — Pause-for-input via MCP notifications nativas
69
+ - Pros: idiomático MCP.
70
+ - Cons: nem todo cliente MCP suporta server-initiated notifications interativas.
71
+ - **Descartada**: status:paused + execution_id é portável.
72
+
73
+ ### B — Branches via expressões JavaScript completas
74
+ - Pros: máxima expressividade.
75
+ - Cons: eval security; vira motor de scripts.
76
+ - **Descartada**: 3 operadores são suficientes.
77
+
78
+ ### C — Pular Fase 4 / manter work como pipeline linear
79
+ - Pros: zero custo.
80
+ - Cons: usuário aprovou expansão; análise externa pediu explicitamente.
81
+ - **Descartada**.
82
+
83
+ ## Impacto futuro
84
+
85
+ - Fase 5 (Confidence) pode usar `pause_for` para perguntar sobre low-confidence categories.
86
+ - Se branches virarem onerosos, podemos converter para "sub-workflows" (workflow chama outro workflow).
87
+ - `paused-executions/` precisa cleanup periódico → adicionar step `prune_expired` em `sync` futuro.
88
+
89
+ ## Referências
90
+
91
+ - RFC-0002 (Fase 4)
92
+ - ADR-0005 (engine base)
93
+ - ADR-0007 (runtime-context consumido por work v3)
@@ -0,0 +1,113 @@
1
+ ---
2
+ id: ADR-0009
3
+ slug: confidence-system-maturity-tracking
4
+ status: accepted
5
+ date: 2026-05-16
6
+ deciders: [user, tech-lead]
7
+ related:
8
+ - RFC-0002 (extensão consolidada)
9
+ - ADR-0006 (state.json — onde confidence vive)
10
+ - ADR-0007 (runtime-context — onde flags aparecem)
11
+ ---
12
+
13
+ # ADR-0009 — Confidence System + Maturity Tracking (Fase 5)
14
+
15
+ ## Contexto
16
+
17
+ Sob ADR-0008, o runtime tem ciclo operacional completo. Mas a LLM ainda **assume com mesma confiança** fatos sólidos (architecture, decisions registradas) e inferências fracas (telemetria de módulos novos, padrões emergentes). Custo: erros de "alta convicção" em áreas mal compreendidas.
18
+
19
+ Análise externa propõe **Confidence System** registrando confiança por categoria. LLM consulta → faz mais perguntas onde confidence é baixa.
20
+
21
+ Esta ADR cobre **Fase 5** do RFC-0002 (última).
22
+
23
+ ## Decisão
24
+
25
+ **Estendemos `state.json` com bloco `confidence`** e adicionamos **3 tools MCP**:
26
+
27
+ ### Schema extension
28
+ ```json
29
+ {
30
+ "confidence": {
31
+ "categories": {
32
+ "architecture": { "level": "high", "reason": "...", "updated_at": "..." },
33
+ "modules": { "level": "medium", "reason": "...", "updated_at": "..." },
34
+ "telemetry": { "level": "low", "reason": "...", "updated_at": "..." },
35
+ "decisions": { "level": "high", "reason": "...", "updated_at": "..." },
36
+ "domain": { "level": "medium", "reason": "...", "updated_at": "..." }
37
+ },
38
+ "default_level": "medium"
39
+ }
40
+ }
41
+ ```
42
+
43
+ Levels: `low | medium | high`. Nova categoria pode ser criada por `aios_confidence_set`.
44
+
45
+ ### Tools
46
+ - `aios_confidence_get({ category? })` — retorna toda confidence ou uma categoria.
47
+ - `aios_confidence_set({ category, level, reason })` — registra/atualiza.
48
+ - `aios_confidence_assess()` — heurística que olha state + project-state + drift e propõe níveis. Retorna sugestões; usuário/LLM aplica via set.
49
+
50
+ ### Integração com runtime-context (ADR-0007)
51
+ `aios_compile_runtime_context` ganha bloco `low_confidence_flags`: top-3 categorias com `level=low`, expostas para LLM ler sem precisar puxar state. Ex.:
52
+ ```json
53
+ {
54
+ "low_confidence_flags": [
55
+ { "category": "telemetry", "reason": "módulo telemetry-injector adicionado mas sem SDD" },
56
+ { "category": "modules", "reason": "16 orphan modules detectados em drift" }
57
+ ]
58
+ }
59
+ ```
60
+
61
+ LLM externa orientada a **perguntar antes de assumir** quando categoria do escopo está com low confidence.
62
+
63
+ ### Maturity Tracking (lightweight)
64
+ `identity.maturity` (já existe sob ADR-0006: empty|minimal|partial|mature) ganha regra heurística em `aios_confidence_assess`:
65
+ - `empty`: sem state.identity.project_name + sem ADRs.
66
+ - `minimal`: project_name preenchido + ≤2 ADRs.
67
+ - `partial`: 3-9 ADRs + project-state.json existe.
68
+ - `mature`: ≥10 ADRs + project-state com >10 módulos + ≥3 syncs em workflow_history.
69
+
70
+ Tool sugere upgrade; não força.
71
+
72
+ ## Consequências
73
+
74
+ ### Positivas
75
+ - LLM tem sinal explícito para fazer mais perguntas em zonas frágeis.
76
+ - Drift detection (ADR-0007) agora pode rebaixar confidence automaticamente (ex.: detectar orphan modules → confidence.modules ← medium).
77
+ - Maturity tracking permite UX adaptativa (init em projeto `empty` é mais didático que `mature`).
78
+
79
+ ### Negativas / Trade-offs aceitos
80
+ - Mais um bloco no state.json para manter. Aceitável: tools fazem set automático.
81
+ - Heurística de `assess` é opinion: pode discordar do usuário. Mitigação: `assess` apenas sugere, não escreve.
82
+ - `low_confidence_flags` adiciona ~200 tokens ao runtime-context. Ainda muito abaixo do budget 4000.
83
+
84
+ ### Neutras
85
+ - Categorias são strings livres — extensível sem mudança de schema.
86
+
87
+ ## Alternativas consideradas
88
+
89
+ ### A — Confidence numérico (0-1)
90
+ - Pros: granularidade.
91
+ - Cons: usuário precisa traduzir 0.6 → "low? medium?"; mais ruído.
92
+ - **Descartada**: 3 níveis bastam.
93
+
94
+ ### B — Confidence por arquivo individual
95
+ - Pros: precisão.
96
+ - Cons: explode em projetos grandes.
97
+ - **Descartada**: agregação por categoria é suficiente.
98
+
99
+ ### C — Esperar caso de uso para implementar
100
+ - Pros: evita over-engineering.
101
+ - Cons: usuário aprovou explicitamente "Adotar TUDO incluindo Confidence System (Fase 5)".
102
+ - **Descartada por aprovação**.
103
+
104
+ ## Impacto futuro
105
+
106
+ - Workflows futuros podem ter `pause_for` condicional baseado em confidence (ex.: pausa se categoria envolvida está low).
107
+ - Confidence pode ser exportado como métrica de qualidade do conhecimento do projeto.
108
+
109
+ ## Referências
110
+
111
+ - RFC-0002 (Fase 5)
112
+ - ADR-0006 (state.json — host do bloco confidence)
113
+ - ADR-0007 (runtime-context — local dos flags)
@@ -0,0 +1,121 @@
1
+ ---
2
+ id: ADR-0010
3
+ slug: structural-architecture-standards
4
+ status: accepted
5
+ date: 2026-05-16
6
+ deciders: [user, tech-lead]
7
+ related:
8
+ - ADR-0004 (Runtime Orchestrator base)
9
+ - ADR-0006 (state.json — identity ganha campo structural_profile)
10
+ - ADR-0007 (artifact_list — blueprints aparecem como artifacts)
11
+ ---
12
+
13
+ # ADR-0010 — Structural Architecture Standards: Canon, Constraints, Blueprints, Composition Engine
14
+
15
+ ## Contexto
16
+
17
+ Sob ADR-0004..0009 entregamos o Runtime Operacional. A próxima carência identificada é estrutural: projetos modernos são **híbridos** (saas + telemetry + crm + mobile + …) e estruturas tradicionais (`controllers/services/models`) viram caos rápido. A análise externa de 2026-05-16 propõe **AI-Native Project Architecture Standards** com 3 camadas:
18
+
19
+ 1. **Structural Canon** — regras universais (domain-first, vertical slice, isolated runtime contexts, contracts required, etc.).
20
+ 2. **Structural Blueprints** — fragmentos por tipo de projeto (web, saas, crm, mobile, game, ai-platform, telemetry, realtime).
21
+ 3. **Composition Engine** — compõe blueprints híbridos via union semântica.
22
+
23
+ Convergência com pesquisa (2026): Modular Monolith + Vertical Slice Architecture é state-of-the-art; AI-native monorepos exigem instruções por-path e boundaries explícitos.
24
+
25
+ ## Decisão
26
+
27
+ **Adotamos uma camada de Standards estruturais** com 3 artefatos + 3 tools MCP:
28
+
29
+ ### Artefatos
30
+ - `.ai/rules/structure-canon.md` — princípios universais (domain-first, modular by responsibility, vertical slice, isolated boundaries, contracts required, AI-navigable).
31
+ - `.ai/rules/structural-constraints.md` — limites operacionais (max module deps, max file lines, depth, naming).
32
+ - `.ai/blueprints/_schema.json` — schema dos blueprints (JSON).
33
+ - `.ai/blueprints/README.md` — guia de composição.
34
+ - `.ai/blueprints/{web,saas,crm,mobile,game,ai-platform,telemetry,realtime}.json` — 8 blueprints declarativos.
35
+
36
+ ### Schema blueprint
37
+ ```json
38
+ {
39
+ "id": "saas",
40
+ "description": "...",
41
+ "extends": ["web"],
42
+ "folders": ["billing/", "tenancy/", "subscriptions/", "permissions/", "audit/"],
43
+ "modules": ["billing", "tenancy", "permissions", "audit"],
44
+ "packages_recommended": ["auth-sdk", "stripe-adapter"],
45
+ "integrations_recommended": ["stripe", "sendgrid"],
46
+ "notes": "..."
47
+ }
48
+ ```
49
+
50
+ ### Tools MCP (3)
51
+ - `aios_list_blueprints()` — lista os 8 blueprints disponíveis.
52
+ - `aios_get_blueprint({name})` — devolve o blueprint completo.
53
+ - `aios_compose_structure({types: ["saas","telemetry","realtime"]})` — faz union semântica (dedup, resolve `extends` transitivo) e retorna estrutura final consolidada: folders, modules, packages, integrations, applicable_constraints.
54
+
55
+ ### Princípios do Canon (resumo)
56
+ 1. **Domain-first**: organizar por bounded context (telemetry/, tracking/, billing/), não por tipo de arquivo.
57
+ 2. **Modular Monolith + Vertical Slice**: cada módulo é self-contained (application/domain/infrastructure/contracts/events/tests/docs).
58
+ 3. **Boundaries explícitos**: módulo só conversa com outro via API pública (contracts).
59
+ 4. **No global utils**: utils ficam em packages tipados (`packages/utils/`) ou no próprio módulo.
60
+ 5. **AI-navigable**: cada módulo tem `index.ts` + `README.md` curto descrevendo responsabilidade.
61
+ 6. **Contracts required**: APIs entre módulos têm tipos compartilhados em `packages/contracts/`.
62
+ 7. **Evolutionary**: estrutura cresce com o projeto; não força tudo no início.
63
+
64
+ ### Constraints (defaults razoáveis)
65
+ - `max_module_dependencies`: 5
66
+ - `max_file_lines`: 500
67
+ - `max_folder_depth`: 4
68
+ - `require_module_readme`: true
69
+ - `require_module_index`: true
70
+ - `forbid_global_singletons`: true
71
+ - `forbid_circular_module_deps`: true
72
+
73
+ `state.identity.structural_profile` (novo campo, opcional) registra os tipos compostos (`["saas", "telemetry"]`).
74
+
75
+ ## Consequências
76
+
77
+ ### Positivas
78
+ - Projeto novo recebe estrutura inicial **composta** (não copy-paste de template gigante).
79
+ - IA tem **vocabulário comum** para navegar projetos (módulos por domínio, não por camada).
80
+ - Hibridização: SaaS + Telemetry + Realtime pode ser composto sem inventar pasta nova.
81
+ - Constraints auditáveis (drift detection futura pode reportar violação).
82
+ - Pesquisa 2026 confirma: AI agents performam melhor com path-aware boundaries.
83
+
84
+ ### Negativas / Trade-offs aceitos
85
+ - Adicionar `.ai/blueprints/` e `.ai/rules/structure-canon.md` aumenta superfície de leitura. Mitigação: tier `on-demand` no manifest.
86
+ - Blueprints são templates; podem virar dogma. Mitigação: composition engine encoraja mistura, não substituição.
87
+ - Constraints como números (5 deps, 500 linhas) são heurísticas. Aceitável: customizáveis por projeto.
88
+
89
+ ### Neutras
90
+ - Blueprints em JSON (zero-deps); README.md em markdown.
91
+ - `structural_profile` em state.json é optional — projetos legados não quebram.
92
+
93
+ ## Alternativas consideradas
94
+
95
+ ### A — Templates fixos (1 estrutura por tipo)
96
+ - Pros: simples.
97
+ - Cons: não escala para híbridos (saas+telemetry+crm).
98
+ - **Descartada**: análise externa explicitamente rejeita.
99
+
100
+ ### B — Schema OpenAPI-like para estrutura
101
+ - Pros: muito formal.
102
+ - Cons: over-engineering; nossa necessidade é declaração simples.
103
+ - **Descartada**.
104
+
105
+ ### C — Não criar (deixar projeto definir)
106
+ - Pros: zero overhead.
107
+ - Cons: cada projeto reinventa; IA não tem vocabulário comum.
108
+ - **Descartada**: usuário aprovou implementação explícita.
109
+
110
+ ## Impacto futuro
111
+
112
+ - Workflow `init` v4 (futuro) pode chamar `aios_compose_structure` se usuário declarar tipos.
113
+ - Drift detection (ADR-0007) pode ser estendida com **structural drift**: módulo cresceu além do `max_file_lines`, viola circular_dep, etc.
114
+ - Blueprints novos podem ser adicionados sem mudança de código (engine lê `.ai/blueprints/*.json`).
115
+
116
+ ## Referências
117
+
118
+ - RFC-0001/0002 (Runtime Orchestrator — base)
119
+ - Pesquisa 2026: Milan Jovanović "Vertical Slices Inside Modular Monolith", Spectro Cloud "AI Turning 2026 into Year of Monorepo", d4b "AI agents in monorepos"
120
+ - ADR-0006 (state.identity ganha structural_profile)
121
+ - ADR-0007 (artifact_list inclui blueprints)
@@ -0,0 +1,86 @@
1
+ ---
2
+ id: ADR-0011
3
+ slug: mcp-prompts
4
+ status: accepted
5
+ date: 2026-05-16
6
+ deciders: [user, tech-lead]
7
+ related:
8
+ - ADR-0004 (Runtime Orchestrator)
9
+ - ADR-0005 (Workflow Engine)
10
+ - ADR-0008 (Intent Runtime + Discovery Branching)
11
+ ---
12
+
13
+ # ADR-0011 — MCP Prompts como discovery mechanism cross-IDE
14
+
15
+ ## Contexto
16
+
17
+ Os 3 comandos canônicos (`/init`, `/sync`, `/work`) eram expostos apenas via `.claude/commands/*.md` — um mecanismo **proprietário do Claude Code CLI**. Em qualquer outra IDE (Antigravity, Cursor, Windsurf, Cline, Continue, Copilot, TRAE, Gemini CLI) digitar `/init` no chat era tratado como texto literal, e o usuário precisava recorrer a linguagem natural ("inicialize o conhecimento do projeto") para que a LLM acertasse a tool MCP. Isso quebra a promessa "conecte o MCP e use" — o produto parecia incompleto fora do Claude Code.
18
+
19
+ O servidor MCP `ai-os` (`.ai/server/aios-server.mjs`) já expunha 36 tools via `tools/list` + `tools/call`, mas declarava capabilities apenas `{ tools: {} }`. O protocolo MCP (spec 2024-11-05) define um segundo primitivo, **Prompts**, que IDEs MCP-compatíveis renderizam **nativamente** no autocomplete de `/` (no Claude Code aparecem como `/mcp__<server>__<prompt>`; outras IDEs adotaram convenções similares).
20
+
21
+ ## Decisão
22
+
23
+ **Expor os 3 workflows canônicos também como MCP Prompts**, mantendo as tools intactas. Adotamos o modelo **híbrido** (decidido com o usuário em 2026-05-16):
24
+
25
+ 1. `capabilities` do servidor passa a declarar `{ tools: {}, prompts: {} }`.
26
+ 2. Novos métodos JSON-RPC:
27
+ - `prompts/list` → enumera prompts derivados de `.ai/workflows/*.json` (whitelist: `init`, `sync`, `work`).
28
+ - `prompts/get` → retorna `{ description, messages: [{ role: "user", content: { type, text } }] }`.
29
+ 3. **Conteúdo híbrido** do prompt retornado:
30
+ - Cabeçalho com nome + versão + descrição do workflow.
31
+ - **Ação**: bloco JSON com a chamada exata a `aios_run_workflow` (a LLM cliente executa).
32
+ - **Garantias**: lista dos `guarantees` do workflow.
33
+ - **Contexto enriquecido**: snapshot compacto de `state.identity` / `state.lifecycle` / `maturity`.
34
+ - **ROUTER hint** (quando `intent` for fornecido): rotas casadas + arquivos condicionais.
35
+ - **Lembrete de protocolo**: `OS:loaded(...)` + classificação + `[OS Audit]`.
36
+ 4. **Argumentos** dos prompts:
37
+ - `init`, `sync`: `intent` (opcional).
38
+ - `work`: `intent` (required = true na descriptor; tool aceita ausente como fallback).
39
+
40
+ ## Por que híbrido (vs. inline-execute)
41
+
42
+ Considerados:
43
+ - **Apenas instrução** (LLM faz tool call) — simples, mas perde a chance de injetar contexto que economiza reads.
44
+ - **Inline-execute no servidor** — 1 round-trip, mas perde os pause/resume interativos do `work` v3 (clarification + approval) e quebra o contrato do Workflow Engine de ADR-0005.
45
+ - **Híbrido (escolhido)** — instrução pra LLM chamar a tool + estado/ROUTER pré-carregados como contexto. Robusto, preserva pause/resume, e dá ao prompt valor além de "atalho pra digitar a tool call".
46
+
47
+ ## Consequências
48
+
49
+ **Positivas:**
50
+ - IDEs MCP-aware (Claude Code, Cursor recente, e quem implementar o primitivo Prompts no futuro) expõem `/init`, `/sync`, `/work` **só conectando o MCP** — sem stub específico.
51
+ - Contexto enriquecido reduz round-trips: a LLM já recebe `state.identity` + ROUTER hint no `prompts/get`, evita ler 3 arquivos manualmente.
52
+ - `tools/list` permanece com 36 tools — zero regressão para clientes existentes.
53
+ - Versão do server bumps `1.0.0` → `1.1.0` (minor: feature add).
54
+
55
+ **Negativas / limitações:**
56
+ - IDEs sem suporte a MCP Prompts (Windsurf, Cline, Continue, Copilot, TRAE em versões antigas) continuam dependentes de linguagem natural ou snippet de instrução nos stubs (resolvido por Fase 2 — fora do escopo desta ADR).
57
+ - A whitelist `PROMPT_WORKFLOWS` é estática; adicionar um 4º prompt requer editar o servidor (intencional: prompts são produto, tools são API).
58
+ - O conteúdo do prompt é gerado em runtime — depende de `state.json` legível. Falhas são tratadas como `null` (graceful).
59
+
60
+ ## Implementação
61
+
62
+ - `.ai/server/aios-server.mjs`:
63
+ - Bloco `MCP Prompts (ADR-0011)` adicionado antes de `handleRpc`.
64
+ - Helpers: `listMcpPrompts()`, `buildRouterHint(intent)`, `getMcpPrompt(name, args)`.
65
+ - Constante `PROMPT_WORKFLOWS = ["init", "sync", "work"]`.
66
+ - `initialize` declara `capabilities.prompts = {}`.
67
+ - `handleRpc` aceita `prompts/list` e `prompts/get`.
68
+
69
+ ## Validação
70
+
71
+ Testado via HTTP em port 47791 (2026-05-16):
72
+
73
+ | Chamada | Resultado |
74
+ |---|---|
75
+ | `initialize` | `capabilities.prompts: {}`, `serverInfo.version: 1.1.0` ✅ |
76
+ | `prompts/list` | retorna 3 prompts (init, sync, work) com `arguments` ✅ |
77
+ | `prompts/get init` | retorna messages com instrução + state.identity ✅ |
78
+ | `prompts/get work {intent}` | retorna messages com ROUTER hint matched ✅ |
79
+ | `prompts/get unknown` | erro `-32000: Unknown prompt` ✅ |
80
+ | `tools/list` (retrocompat) | 36 tools, sem alteração ✅ |
81
+
82
+ ## Próximas fases (fora desta ADR)
83
+
84
+ - **Fase 2** — snippet de instrução universal para stubs (`CLAUDE.md`, `GEMINI.md`, `GPT.md`, `AGENTS.md`, `.cursorrules`, `.clinerules`, `.windsurfrules`, `.continue/rules/ai-os.md`, `.trae/rules/project_rules.md`, `.github/copilot-instructions.md`) — cópia controlada via script.
85
+ - **Fase 3** — padronizar nome MCP `ai-os` em todos os 8 configs.
86
+ - **Fase 4** — reescrever `.ai/clients/README.md` linhas 54-85 (tabela "slash não porta" → "slash porta via MCP Prompts onde suportado").
@@ -0,0 +1,174 @@
1
+ ---
2
+ id: ADR-0012
3
+ slug: stealthos-hybrid-architecture
4
+ status: accepted
5
+ date: 2026-05-16
6
+ deciders: [user, tech-lead]
7
+ related:
8
+ - ADR-0011 (MCP Prompts cross-IDE)
9
+ - ADR-0008 (Intent Runtime)
10
+ - ADR-0010 (Structural Architecture Standards)
11
+ ---
12
+
13
+ # ADR-0012 — StealthOS Hybrid Architecture (daemon global + projeto leve)
14
+
15
+ ## Contexto
16
+
17
+ O harness hoje despeja **toda a árvore `.ai/`** (~50 arquivos: server, manual, workflows, memory, snapshots, context) dentro do projeto do usuário. Isso polui o repo-alvo, viaja no git, conflita com convenções alheias e dificulta atualização do OS (cada projeto carrega sua própria cópia, divergindo do canônico).
18
+
19
+ O usuário definiu a visão do produto **StealthOS**: "assistente de desenvolvimento que **não interfere no projeto**". A descrição literal: *"fora dele será o ambiente onde o usuário vai construir os projetos, e o StealthOS não pode interferir no funcionamento do projeto"*.
20
+
21
+ Considerados 3 modelos:
22
+ - **A — In-project** (estado atual): tudo dentro do projeto. Auto-contido mas invasivo.
23
+ - **B — Daemon global puro**: nada no projeto exceto 1 arquivo. Refator gigante; IDEs perdem capacidade de auto-detectar stubs.
24
+ - **C — Híbrido** (escolhido): daemon global + state fora do projeto + stubs IDE leves dentro (necessários porque IDEs como Claude Code, Cursor, Antigravity só auto-detectam configs na raiz do projeto).
25
+
26
+ ## Decisão
27
+
28
+ **Adotar o Modelo C — StealthOS Hybrid Architecture**:
29
+
30
+ ### Layout `~/.stealthos/` (instalado uma vez por máquina)
31
+
32
+ ```
33
+ ~/.stealthos/
34
+ ├── server/ # aios-server.mjs + dist + node_modules
35
+ ├── manual/ # hub master (capítulos do .manual\ atual)
36
+ ├── templates/ # stubs por IDE (claude-code/, cursor/, ...)
37
+ ├── workflows/ # init.json, sync.json, work.json (canônicos)
38
+ ├── projects/
39
+ │ └── <project_hash>/ # state por projeto, fora do dir do projeto
40
+ │ ├── state.json
41
+ │ ├── runtime/
42
+ │ ├── snapshots/
43
+ │ ├── memory/
44
+ │ └── context/
45
+ └── VERSION
46
+ ```
47
+
48
+ ### Layout do projeto do usuário (mínimo necessário)
49
+
50
+ ```
51
+ meu-projeto/
52
+ ├── .stealthos.yml # registro do projeto (hash, IDEs ativas, modo)
53
+ ├── CLAUDE.md # stub IDE (só se Claude Code marcado)
54
+ ├── .claude/ # idem
55
+ ├── GEMINI.md # só se Antigravity marcado
56
+ ├── .gemini/ # idem
57
+ └── src/ # código do usuário, intocado
58
+ ```
59
+
60
+ Quem marcou só Claude Code: **3 itens** (`.stealthos.yml`, `CLAUDE.md`, `.claude/`). Quem marcou Cursor: **3 itens**. Quem marcou 5 IDEs: **~9 itens**. Versus os **14 atuais**.
61
+
62
+ ### Project hash
63
+
64
+ ```
65
+ project_hash = sha256(normalize(absolute_project_path)).slice(0, 12)
66
+ ```
67
+
68
+ Determinístico, estável entre sessões, único por path absoluto. Mover o projeto = novo hash (intencional — força revalidação).
69
+
70
+ ### Server resolution
71
+
72
+ Servidor passa a aceitar 2 modos via `STEALTHOS_MODE` env var ou `.stealthos.yml`:
73
+
74
+ - **`embedded`** (retrocompat, padrão até v2.0): state em `<project>/.ai/runtime/` — modo atual.
75
+ - **`hybrid`** (novo, padrão a partir de v2.0): state em `${STEALTHOS_HOME}/projects/<hash>/`, onde `STEALTHOS_HOME` default = `~/.stealthos`.
76
+
77
+ O servidor lê `cwd` no startup, calcula `project_hash`, resolve `STATE_PATH` dinamicamente.
78
+
79
+ ## Mecanismo `.stealthos.yml`
80
+
81
+ ```yaml
82
+ # StealthOS project registry — leve, versionável, ~15 linhas
83
+ version: 1
84
+ project_hash: a3f7c9e2d1b8
85
+ project_name: TripPlanner
86
+ mode: hybrid # ou 'embedded'
87
+ ides:
88
+ - claude-code
89
+ - antigravity
90
+ stack: node
91
+ created_at: 2026-05-16T18:00:00Z
92
+ stealthos_version: ">=2.0.0"
93
+ ```
94
+
95
+ ## Migration path (versões do servidor)
96
+
97
+ | Versão | Capabilities | State |
98
+ |---|---|---|
99
+ | v1.0 | tools/* | embedded |
100
+ | v1.1 | tools/* + prompts/* (ADR-0011) | embedded |
101
+ | **v1.2 (atual)** | tools/* + prompts/* + `STEALTHOS_MODE` | embedded OU hybrid |
102
+ | **v2.0** (futura) | idem | hybrid default; embedded como flag |
103
+
104
+ ## Consequências
105
+
106
+ **Positivas:**
107
+ - Projeto-alvo limpo (~3-9 itens vs 14). Alinhado com visão "não interfere".
108
+ - Update do StealthOS = atualizar `~/.stealthos/server/` — atinge todos os projetos.
109
+ - State pesado (snapshots, memory) **não viaja no git** do projeto-alvo.
110
+ - Múltiplos projetos isolados por hash sem cross-contamination.
111
+ - Caminho natural pra modo SaaS futuro: `~/.stealthos/` vira API hospedada.
112
+
113
+ **Negativas / mitigadas:**
114
+ - **cwd-dependent**: IDE em monorepo pode confundir cwd → hash errado. **Mitigação**: `.stealthos.yml` no projeto serve como ground-truth do hash (server lê primeiro).
115
+ - **Migration**: projetos existentes em modo embedded continuam funcionando (retrocompat). `stealthos migrate <project>` (futuro) move state pra hybrid.
116
+ - **Discoverability do server**: stubs IDE precisam apontar pro `~/.stealthos/server/aios-server.mjs` (path absoluto resolvido por scaffolder).
117
+
118
+ ## Implementação por fases
119
+
120
+ 1. **Esta ADR** — decisão registrada.
121
+ 2. **Etapa 2 (scaffolder)** — `packages/create-stealthos/` que:
122
+ - Pergunta IDEs + stack + novo/existente.
123
+ - Escreve `.stealthos.yml` (modo `embedded` enquanto v1.2 não saiu).
124
+ - Copia stubs IDE selecionados (placeholders substituídos por cwd).
125
+ - Configura MCP em cada IDE (usa caminho do `~/.stealthos/server/` se já instalado, senão usa `.ai/server/` do projeto fallback).
126
+ 3. **Etapa 3 (server v1.2)** — sessão separada. Refator:
127
+ - Introduzir `STEALTHOS_HOME` (default `~/.stealthos`).
128
+ - `STEALTHOS_MODE=hybrid` resolve state path por hash.
129
+ - `STATE_PATH`, `WORKFLOWS_DIR`, `RUNTIME_DIR` viram funções resolvidas em runtime.
130
+ 4. **Etapa 4 (validação cross-OS)** — Windows + Linux VM + projeto novo + projeto existente.
131
+ 5. **Etapa 5 (publish npm)** — `create-stealthos@1.0.0` no npm.
132
+
133
+ ## Validação desta ADR
134
+
135
+ ### Etapa 3 — server v1.2 (concluída 2026-05-16)
136
+
137
+ Refator do `.ai/server/aios-server.mjs` para multi-tenant. Mudanças:
138
+
139
+ - Novos imports: `createHash` (crypto), `homedir` (os).
140
+ - Novos constants:
141
+ - `STEALTHOS_MODE = process.env.STEALTHOS_MODE || "embedded"`
142
+ - `STEALTHOS_HOME = process.env.STEALTHOS_HOME || ~/.stealthos`
143
+ - `PROJECT_ROOT` resolve por modo (embedded: `__dirname/../..`; hybrid: `STEALTHOS_PROJECT_DIR || process.cwd()`)
144
+ - `PROJECT_HASH = sha256(absolute(PROJECT_ROOT)).slice(0, 12)`
145
+ - `KB_DIR` (knowledge base canônico): `STEALTHOS_HOME` em hybrid, `<project>/.ai` em embedded
146
+ - `PROJECT_STATE_DIR` (state por projeto): `${STEALTHOS_HOME}/projects/${PROJECT_HASH}` em hybrid, `<project>/.ai` em embedded
147
+ - `AI_DIR` mantido como alias para `KB_DIR` (retrocompat).
148
+ - Refatorados: `WORKFLOWS_DIR` → KB, `RUNTIME_DIR/STATE_PATH/PAUSED_DIR/ARTIFACTS_INDEX_PATH/RUNTIME_CONTEXT_PATH` → PROJECT_STATE, `BLUEPRINTS_DIR` → KB.
149
+ - Refatoradas referências inline a `AI_DIR`: `memory/`, `snapshots/`, `context/`, `specs/`, `architecture/`, `product/`, `artifacts/`, `.runtime/` → todas para `PROJECT_STATE_DIR`.
150
+ - `safeResolve` refatorado com lista de prefixos `PROJECT_STATE_PREFIXES` (`memory|runtime|snapshots|context|artifacts|specs|architecture|product`) — paths com esses prefixos resolvem em PROJECT_STATE; o resto em KB.
151
+ - `aios_health` agora reporta `mode`, `stealthos_home`, `project_hash`, `kb_dir`, `kb_exists`, `project_state_dir`, `project_state_exists`.
152
+ - Startup banner indica modo.
153
+ - `serverInfo.version: "1.1.0" → "1.2.0"`.
154
+
155
+ ### Testes realizados (HTTP em portas isoladas)
156
+
157
+ | Cenário | Comando | Resultado |
158
+ |---|---|---|
159
+ | **Embedded** (regressão zero) | `node aios-server.mjs --http --port 47792` no Harness | health.mode=embedded, KB+state ambos em `<Harness>/.ai`, 36 tools, 3 prompts ✓ |
160
+ | Embedded — `aios_read CONTRACT.md` | read KB path | retornado, conteúdo OK ✓ |
161
+ | Embedded — `aios_read memory/project-context.md` | read PROJECT_STATE path | retornado, conteúdo OK ✓ |
162
+ | Embedded — `aios_state_get identity` | leu state.json local | retornou identity real do projeto ✓ |
163
+ | **Hybrid** (projeto fake 1) | `STEALTHOS_MODE=hybrid STEALTHOS_HOME=sthome STEALTHOS_PROJECT_DIR=fake-project` | hash `55442f48c00f`, projects/<hash>/ auto-criado ✓ |
164
+ | Hybrid — `aios_list_workflows` | leu de sthome/workflows/ | retornou `init.json` (versão "hybrid-test") ✓ |
165
+ | Hybrid — `aios_state_set identity.project_name="hybrid-test"` | grava em projects/55442f48c00f/runtime/state.json | gravado ✓ |
166
+ | **Isolamento entre projetos** | Subir 2º server com `STEALTHOS_PROJECT_DIR=fake-project-2` | hash distinto `2b73b6fa31c1`, state.identity.project_name=null (não vê state do 1º projeto) ✓ |
167
+ | Coabitação em sthome | `ls sthome/projects/` | lista `55442f48c00f` e `2b73b6fa31c1` lado a lado ✓ |
168
+
169
+ Conclusão: refator multi-tenant funcional. Modo embedded sem regressão (Harness continua operando normalmente). Modo hybrid isola state por hash de cwd. Workflows + manifest + ROUTER lidos de KB. State + memory + snapshots + context gravam em PROJECT_STATE.
170
+
171
+ ## Notas
172
+
173
+ - Nome do produto: **StealthOS** (com L). Confirmado pelo usuário em 2026-05-16.
174
+ - Nome do pacote npm: `create-stealthos` (convenção `create-*` para scaffolders, alinhado com `create-react-app`, `create-vite`).
@@ -0,0 +1,60 @@
1
+ ---
2
+ id: ADR-NNNN
3
+ slug: <slug-kebab>
4
+ status: proposed # proposed | accepted | superseded-by-NNNN | deprecated
5
+ date: AAAA-MM-DD
6
+ deciders: [founder, architect, ...]
7
+ related:
8
+ - PRD-NNNN
9
+ - SDD-NNNN
10
+ ---
11
+
12
+ # ADR-NNNN — <Decisão em frase curta>
13
+
14
+ ## Contexto
15
+ O que motivou a decisão? Restrições, requisitos, problema. Cite dados, não opinião.
16
+
17
+ ## Decisão
18
+ **Decidimos X.**
19
+ Frase clara, acionável.
20
+
21
+ ## Consequências
22
+
23
+ ### Positivas
24
+ - ...
25
+
26
+ ### Negativas / Trade-offs aceitos
27
+ - ...
28
+
29
+ ### Neutras
30
+ - ...
31
+
32
+ ## Alternativas consideradas
33
+
34
+ ### Alternativa A — <nome>
35
+ - Pros: ...
36
+ - Cons: ...
37
+ - **Descartada** porque: ...
38
+
39
+ ### Alternativa B — <nome>
40
+ - Pros: ...
41
+ - Cons: ...
42
+ - **Descartada** porque: ...
43
+
44
+ ## Critérios de decisão
45
+ | Critério | Peso | Alt-A | Alt-B | Escolhida |
46
+ |---|---|---|---|---|
47
+ | Performance | Alto | Médio | Alto | Alta |
48
+ | Custo | Médio | Baixo | Médio | Baixo |
49
+ | Manutenibilidade | Alto | Médio | Alto | Alto |
50
+
51
+ ## Impacto futuro
52
+ O que precisaríamos mudar se essa decisão se mostrar errada? Quão caro reverter?
53
+
54
+ ## Referências
55
+ - Links, PRs, issues, papers, benchmarks externos.
56
+
57
+ ---
58
+
59
+ > **Lembrete**: ADR aceito não se edita. Mudança = novo ADR com `supersedes: ADR-NNNN`.
60
+ > Espelho histórico desta decisão também aparece em `.ai/memory/decisions.md` (append-only).