context-first-cli 1.4.0 → 1.5.2

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.
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadAiProperties = loadAiProperties;
7
+ exports.getBasePath = getBasePath;
8
+ exports.isAutoCloneEnabled = isAutoCloneEnabled;
9
+ const promises_1 = __importDefault(require("fs/promises"));
10
+ const path_1 = __importDefault(require("path"));
11
+ /**
12
+ * Parse ai.properties.md file into a key-value object
13
+ */
14
+ async function loadAiProperties(orchestratorPath) {
15
+ try {
16
+ const propertiesPath = path_1.default.join(orchestratorPath, 'ai.properties.md');
17
+ const content = await promises_1.default.readFile(propertiesPath, 'utf-8');
18
+ const properties = {};
19
+ // Parse simple key=value lines
20
+ const lines = content.split('\n');
21
+ for (const line of lines) {
22
+ const trimmed = line.trim();
23
+ // Skip empty lines, comments, and markdown headers
24
+ if (!trimmed || trimmed.startsWith('#') || trimmed.startsWith('//')) {
25
+ continue;
26
+ }
27
+ // Parse key=value
28
+ const match = trimmed.match(/^([a-zA-Z_][a-zA-Z0-9_.]*)=(.*)$/);
29
+ if (match) {
30
+ const [, key, value] = match;
31
+ // Convert string booleans to actual booleans
32
+ if (value.toLowerCase() === 'true') {
33
+ properties[key] = true;
34
+ }
35
+ else if (value.toLowerCase() === 'false') {
36
+ properties[key] = false;
37
+ }
38
+ else {
39
+ properties[key] = value;
40
+ }
41
+ }
42
+ }
43
+ return properties;
44
+ }
45
+ catch (error) {
46
+ return null;
47
+ }
48
+ }
49
+ /**
50
+ * Get the base path where repositories should be located
51
+ */
52
+ function getBasePath(properties) {
53
+ if (!properties || !properties.base_path) {
54
+ return null;
55
+ }
56
+ // Expand ~ to home directory
57
+ let basePath = properties.base_path;
58
+ if (basePath.startsWith('~')) {
59
+ basePath = basePath.replace('~', process.env.HOME || '~');
60
+ }
61
+ return basePath;
62
+ }
63
+ /**
64
+ * Check if auto_clone is enabled
65
+ */
66
+ function isAutoCloneEnabled(properties) {
67
+ if (!properties) {
68
+ return false;
69
+ }
70
+ return properties.auto_clone === true;
71
+ }
72
+ //# sourceMappingURL=ai-properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-properties.js","sourceRoot":"","sources":["../../src/utils/ai-properties.ts"],"names":[],"mappings":";;;;;AAuBA,4CAqCC;AAKD,kCAYC;AAKD,gDAMC;AAxFD,2DAA6B;AAC7B,gDAAwB;AAmBxB;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,gBAAwB;IAC7D,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,cAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAE3D,MAAM,UAAU,GAAiB,EAAE,CAAC;QAEpC,+BAA+B;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,mDAAmD;YACnD,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpE,SAAS;YACX,CAAC;YAED,kBAAkB;YAClB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAChE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;gBAE7B,6CAA6C;gBAC7C,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;oBACnC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACzB,CAAC;qBAAM,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;oBAC3C,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,UAA+B;IACzD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAC7B,IAAI,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC;IACpC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,UAA+B;IAChE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,UAAU,CAAC,UAAU,KAAK,IAAI,CAAC;AACxC,CAAC"}
@@ -48,10 +48,6 @@ export declare function loadWorkspaceMetadata(workspacePath: string): Promise<Wo
48
48
  * Save workspace metadata
49
49
  */
50
50
  export declare function saveWorkspaceMetadata(workspacePath: string, metadata: WorkspaceMetadata): Promise<void>;
51
- /**
52
- * Get the workspaces directory path
53
- */
54
- export declare function getWorkspacesDir(): string;
55
51
  /**
56
52
  * Ensure a directory exists
57
53
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,GAAG,aAAa,GAAG,SAAS,CAAC;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAQ3F;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAgB/H;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQ5F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAQpG;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7G;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAGpD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,gBAAgB,GAAG,aAAa,GAAG,SAAS,CAAC;IACnD,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAQ3F;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,GAAE,MAAsB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAgB/H;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQ5F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAQpG;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7G;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM9D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAGpD"}
@@ -8,7 +8,6 @@ exports.findConfig = findConfig;
8
8
  exports.loadManifest = loadManifest;
9
9
  exports.loadWorkspaceMetadata = loadWorkspaceMetadata;
10
10
  exports.saveWorkspaceMetadata = saveWorkspaceMetadata;
11
- exports.getWorkspacesDir = getWorkspacesDir;
12
11
  exports.ensureDir = ensureDir;
13
12
  exports.pathExists = pathExists;
14
13
  exports.exitWithError = exitWithError;
@@ -79,12 +78,6 @@ async function saveWorkspaceMetadata(workspacePath, metadata) {
79
78
  const metadataPath = path_1.default.join(workspacePath, '.workspace.json');
80
79
  await promises_1.default.writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf-8');
81
80
  }
82
- /**
83
- * Get the workspaces directory path
84
- */
85
- function getWorkspacesDir() {
86
- return path_1.default.join(process.env.HOME || process.env.USERPROFILE || '/tmp', '.context-workspaces');
87
- }
88
81
  /**
89
82
  * Ensure a directory exists
90
83
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "context-first-cli",
3
- "version": "1.4.0",
3
+ "version": "1.5.2",
4
4
  "description": "A generic CLI to manage the Context-First development methodology across any project.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -140,9 +140,20 @@ Se houver desvios justificados:
140
140
  - **Documentação**: [Onde foi documentado]
141
141
  ```
142
142
 
143
- ## 📄 Relatório de Validação
143
+ ## 📄 Salvamento do Relatório de Validação
144
144
 
145
- Crie `./.sessions/<ISSUE-ID>/check-report.md`:
145
+ **PRIORIDADE 1: Usar MCP (Model Context Protocol)**
146
+
147
+ - Leia `ai.properties.md` do orchestrator para identificar o `task_management_system`
148
+ - Use o MCP apropriado para adicionar o relatório à issue:
149
+ - Adicione como comentário na issue
150
+ - Atualize labels/tags conforme resultado (ex: "validated", "needs-adjustment", "blocked")
151
+ - Se houver conflitos críticos, atualize status da issue
152
+ - Informe ao usuário: "✅ Relatório de validação adicionado à issue [ID]"
153
+
154
+ **FALLBACK: Criar arquivo .md apenas se MCP falhar**
155
+
156
+ Se o MCP não estiver disponível ou falhar, crie `./.sessions/<ISSUE-ID>/check-report.md`:
146
157
 
147
158
  ```markdown
148
159
  # Relatório de Validação - [ISSUE-ID]
@@ -174,14 +185,17 @@ Crie `./.sessions/<ISSUE-ID>/check-report.md`:
174
185
  - [ ] Bloqueado
175
186
  ```
176
187
 
188
+ Informe ao usuário: "⚠️ Relatório salvo localmente em .sessions/ (task manager não disponível)"
189
+
177
190
  ## 🚨 Ação em Caso de Conflitos
178
191
 
179
192
  Se conflitos críticos forem encontrados:
180
193
  1. 🛑 **PARE** o processo atual
181
194
  2. 📝 **DOCUMENTE** todos os conflitos
182
195
  3. 💬 **ALERTE** o usuário e stakeholders
183
- 4. 🔄 **AJUSTE** o plano/implementação conforme necessário
184
- 5. **REVALIDE** após ajustes
196
+ 4. **Via MCP**: Atualize status da issue para "Bloqueado" ou "Requer Ajustes"
197
+ 5. 🔄 **AJUSTE** o plano/implementação conforme necessário
198
+ 6. ✅ **REVALIDE** após ajustes
185
199
 
186
200
  ---
187
201
 
@@ -6,7 +6,7 @@ Você é um especialista em produto responsável por coletar e documentar novas
6
6
 
7
7
  **Este comando é APENAS para planejamento e documentação:**
8
8
  - ✅ Coletar e entender requisitos
9
- - ✅ Criar issue no task manager (se configurado)
9
+ - ✅ Criar issue no task manager via MCP
10
10
  - ✅ Fazer perguntas de esclarecimento
11
11
  - ❌ **NÃO implementar código**
12
12
  - ❌ **NÃO fazer edits em arquivos de código**
@@ -24,7 +24,7 @@ Antes de iniciar, carregue o contexto consultando:
24
24
 
25
25
  ## Seu Objetivo
26
26
 
27
- Entender a solicitação do usuário e capturá-la como issue para refinamento posterior.
27
+ Entender a solicitação do usuário e capturá-la como issue no task manager (via MCP).
28
28
 
29
29
  **Nesta fase, você NÃO precisa:**
30
30
  - ❌ Escrever especificação completa
@@ -80,13 +80,29 @@ Apenas certifique-se de que a ideia esteja **adequadamente compreendida**.
80
80
  - Faça ajustes conforme feedback
81
81
  - Obtenha aprovação final
82
82
 
83
- 4. **Salvamento**
84
- - **Se task manager estiver configurado**:
85
- - Use o MCP apropriado para criar a issue (ex: Linear, Jira)
86
- - Todos os dados ficam no task manager
87
- - **Se não houver task manager**:
88
- - Crie arquivo em `./.sessions/<ISSUE-ID>/collect.md`
89
- - Inclua data, tipo e conteúdo completo
83
+ 4. **Salvamento da Issue**
84
+
85
+ **PRIORIDADE 1: Usar MCP (Model Context Protocol)**
86
+
87
+ Verifique se MCP configurado para task manager:
88
+ - Leia `ai.properties.md` do orchestrator para identificar o `task_management_system`
89
+ - Se `task_management_system=jira`: Use MCP do Jira para criar a issue
90
+ - Se `task_management_system=linear`: Use MCP do Linear para criar a issue
91
+ - Se `task_management_system=github`: Use MCP do GitHub para criar a issue
92
+
93
+ **Ao usar MCP:**
94
+ - Crie a issue diretamente no task manager
95
+ - Obtenha o ID da issue criada (ex: FIN-123, LIN-456)
96
+ - Informe ao usuário: "✅ Issue [ID] criada no [task manager]"
97
+ - **NÃO crie arquivo .md**
98
+
99
+ **FALLBACK: Criar arquivo .md apenas se MCP falhar**
100
+
101
+ Se o MCP não estiver disponível ou falhar:
102
+ - Crie arquivo em `./.sessions/<ISSUE-ID>/collect.md`
103
+ - Use formato de ID manual: `LOCAL-001`, `LOCAL-002`, etc.
104
+ - Inclua data, tipo e conteúdo completo
105
+ - Informe ao usuário: "⚠️ Issue salva localmente em .sessions/ (task manager não disponível)"
90
106
 
91
107
  ## Perguntas de Esclarecimento
92
108
 
@@ -28,11 +28,19 @@ Refinar a issue coletada, esclarecendo:
28
28
 
29
29
  ### 1. Carregar Issue
30
30
 
31
- **Se task manager configurado**:
32
- - Leia a issue usando o MCP apropriado
31
+ **PRIORIDADE 1: Usar MCP (Model Context Protocol)**
32
+
33
+ - Leia `ai.properties.md` do orchestrator para identificar o `task_management_system`
34
+ - Use o MCP apropriado para buscar a issue:
35
+ - `task_management_system=jira`: Use MCP do Jira
36
+ - `task_management_system=linear`: Use MCP do Linear
37
+ - `task_management_system=github`: Use MCP do GitHub
38
+ - Carregue todos os dados da issue (título, descrição, labels, etc.)
39
+
40
+ **FALLBACK: Se MCP não estiver disponível ou falhar**
33
41
 
34
- **Senão**:
35
42
  - Leia `./.sessions/<ISSUE-ID>/collect.md`
43
+ - Se o arquivo não existir, informe o erro ao usuário
36
44
 
37
45
  ### 2. Análise de Escopo
38
46
 
@@ -110,9 +118,19 @@ Forneça estimativa de esforço:
110
118
 
111
119
  Liste perguntas que ainda precisam ser respondidas antes de iniciar a implementação.
112
120
 
113
- ## 📄 Documentação do Refinamento
121
+ ## 📄 Salvamento do Refinamento
122
+
123
+ **PRIORIDADE 1: Atualizar via MCP**
114
124
 
115
- Crie/atualize `./.sessions/<ISSUE-ID>/refine.md`:
125
+ - Use o MCP do task manager para atualizar a issue
126
+ - Adicione os critérios de aceitação como comentário ou campo customizado
127
+ - Atualize labels/tags se necessário (ex: "refined", "ready-for-spec")
128
+ - Adicione estimativa se o task manager suportar
129
+ - Informe ao usuário: "✅ Issue [ID] atualizada com refinamento"
130
+
131
+ **FALLBACK: Criar arquivo .md apenas se MCP falhar**
132
+
133
+ Se o MCP não estiver disponível ou falhar, crie/atualize `./.sessions/<ISSUE-ID>/refine.md`:
116
134
 
117
135
  ```markdown
118
136
  # [Título da Issue] - Refinamento
@@ -153,6 +171,8 @@ Crie/atualize `./.sessions/<ISSUE-ID>/refine.md`:
153
171
  - [Risco 2 e mitigação]
154
172
  ```
155
173
 
174
+ Informe ao usuário: "⚠️ Refinamento salvo localmente em .sessions/ (task manager não disponível)"
175
+
156
176
  ## 🔍 Validação
157
177
 
158
178
  Valide o refinamento contra:
@@ -203,12 +203,20 @@ Justificativa: [Por que ficam para depois]
203
203
 
204
204
  ## 📄 Salvamento do PRD
205
205
 
206
- **Se task manager configurado**:
207
- - Adicione o PRD como comentário na issue
208
- - Ou anexe como arquivo
206
+ **PRIORIDADE 1: Usar MCP (Model Context Protocol)**
209
207
 
210
- **Senão**:
208
+ - Leia `ai.properties.md` do orchestrator para identificar o `task_management_system`
209
+ - Use o MCP apropriado para atualizar a issue com o PRD:
210
+ - Adicione o PRD completo como comentário na issue
211
+ - Ou anexe como arquivo (se o task manager suportar)
212
+ - Atualize status/labels (ex: "spec-ready", "ready-for-dev")
213
+ - Informe ao usuário: "✅ PRD adicionado à issue [ID]"
214
+
215
+ **FALLBACK: Criar arquivo .md apenas se MCP falhar**
216
+
217
+ Se o MCP não estiver disponível ou falhar:
211
218
  - Salve em `./.sessions/<ISSUE-ID>/prd.md`
219
+ - Informe ao usuário: "⚠️ PRD salvo localmente em .sessions/ (task manager não disponível)"
212
220
 
213
221
  ## 🔍 Revisão e Aprovação
214
222
 
@@ -216,7 +224,8 @@ Antes de finalizar:
216
224
  1. Revise o PRD com stakeholders
217
225
  2. Valide contra metaspecs (se disponíveis)
218
226
  3. Obtenha aprovação para iniciar implementação
219
- 4. Atualize a issue no task manager com status "Pronto para Desenvolvimento"
227
+ 4. **Via MCP**: Atualize a issue no task manager com status "Pronto para Desenvolvimento"
228
+ 5. **Fallback**: Documente aprovação em `./.sessions/<ISSUE-ID>/prd.md`
220
229
 
221
230
  ---
222
231