jarvis-ai-framework 8.2.0 → 8.3.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/AGENTS.md +2 -0
- package/README.md +11 -0
- package/bin/README.md +3 -3
- package/bin/commands/fork.js +562 -0
- package/bin/commands/init.js +62 -1
- package/bin/lib/cli/program.js +27 -0
- package/bin/lib/core/company-profile.js +92 -0
- package/bin/lib/core/sync-engine.js +164 -1
- package/package.json +2 -2
- package/rules/AGENTS.md +1 -0
- package/rules/company-overlay-rules.md +15 -0
- package/skills/AGENTS.md +3 -0
- package/skills/SKILLS-ROADMAP.md +5 -0
- package/skills/jarvis-fork/SKILL.md +184 -0
- package/skills/jarvis-init/SKILL.md +11 -2
- package/templates/ENV-template.md +11 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jarvis-fork
|
|
3
|
+
description: >
|
|
4
|
+
Ajusta o Jarvis a uma empresa sem editar o core: conduz uma conversa curta até achar onde um
|
|
5
|
+
workflow, skill, agente, rule ou template do core não está servindo, propõe o menor ajuste,
|
|
6
|
+
simula o efeito e, só com o Sim, grava o fork no overlay da empresa ($IDE/overlays/{COMPANY_PROFILE}/)
|
|
7
|
+
pelo CLI `jarvis fork`. Também lista (--list), atualiza (--update) e remove (--delete) forks, e
|
|
8
|
+
pergunta se o ajuste é só da empresa ou vale para o core (abre a issue pelo jarvis-report-issue).
|
|
9
|
+
Trigger: Use quando um comando do Jarvis insiste num fluxo que não é o da empresa (base da
|
|
10
|
+
branch, entrega, gates, template de MR, regra interna) ou quando alguém pede para "customizar
|
|
11
|
+
o Jarvis para este cliente".
|
|
12
|
+
license: AGPL-3.0
|
|
13
|
+
compatibility: Designed for Claude Code (or similar products)
|
|
14
|
+
allowed-tools: Read Write Edit Glob Grep Bash
|
|
15
|
+
metadata:
|
|
16
|
+
author: jarvis-team
|
|
17
|
+
version: "1.0"
|
|
18
|
+
area: global
|
|
19
|
+
# Campos Claude Code-specific (não fazem parte da spec oficial agentskills.io):
|
|
20
|
+
argument-hint: "[artefato] [--list|--update|--delete]"
|
|
21
|
+
disable-model-invocation: false
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Jarvis Fork - Fork guiado de um artefato do core para o overlay da empresa
|
|
25
|
+
|
|
26
|
+
Você é quem ajuda a pessoa a descobrir **onde, exatamente,** um comando do core não está ajudando nesta empresa, e a corrigir isso com o menor fork possível. A parte mecânica (copiar, carimbar, listar, comparar, remover) é do CLI `jarvis fork`; a sua parte é a conversa.
|
|
27
|
+
|
|
28
|
+
## Objetivo
|
|
29
|
+
|
|
30
|
+
Deixar a empresa com o fluxo dela sem copiar e editar o framework: o core continua intacto, o overlay (`$IDE/overlays/{COMPANY_PROFILE}/`) guarda só o que foi substituído, com carimbo de origem, e o `jarvis init --upgrade` não apaga nada disso. Cada fork nasce de uma dor concreta, e cada dor que todo cliente tem vira candidata a extension point do core.
|
|
31
|
+
|
|
32
|
+
## Entrada
|
|
33
|
+
|
|
34
|
+
- `$ARGUMENTS`:
|
|
35
|
+
- `{artefato}`: nome de workflow, skill ou agente (`eng.start`, `eng-global-pr`, `eng.agent`), ou caminho de rule/template (`rules/engineering/eng-rules.md`, `rules-on-demand/engineering/eng.pr-rules.md`, `templates/pull-request.md`)
|
|
36
|
+
- `--list`: o que está forkado no overlay ativo (só lista; não compara com o core)
|
|
37
|
+
- `{artefato} --update`: retoma a conversa sobre um fork que já existe
|
|
38
|
+
- `{artefato} --delete`: remove o fork; o core volta a valer
|
|
39
|
+
|
|
40
|
+
## Recursos
|
|
41
|
+
|
|
42
|
+
- **ENV**: `$IDE/ENV.md` (`COMPANY_PROFILE`: vazio = `stark-industries`, o overlay padrão)
|
|
43
|
+
- **Rule de precedência**: `$IDE/rules/company-overlay-rules.md` (overlay > especialização de stack > core; é o que faz o fork valer na chamada)
|
|
44
|
+
- **CLI**: `jarvis fork {nome} [--candidate]`, `jarvis fork --list`, `jarvis fork {nome} --update [--diff]`, `jarvis fork {nome} --delete` (o único que grava em `overlays/`)
|
|
45
|
+
- **Sessões recentes**: `$SESSIONS_DIR/eng/*/` (architecture.md, plan.md, gate-checklist.md) que citem o artefato
|
|
46
|
+
- **Custo**: `jarvis tokens` (quanto contexto o fork acrescenta)
|
|
47
|
+
|
|
48
|
+
## Pré-requisito
|
|
49
|
+
|
|
50
|
+
- `$IDE/ENV.md` existe (`jarvis init` + `/jarvis-init`). Sem ele, pare: `⛔ Sem ENV.md. Rode jarvis init e /jarvis-init antes de forkar.`
|
|
51
|
+
- `COMPANY_PROFILE` vazio ou inválido não bloqueia: vale o default `stark-industries`, com o aviso do CLI. Se a pessoa quer um perfil próprio, sugira o `/jarvis-init` antes (ou depois, movendo os forks).
|
|
52
|
+
|
|
53
|
+
## Quando Usar
|
|
54
|
+
|
|
55
|
+
- Um comando do core assume um fluxo que não é o da empresa (de onde nasce a branch, como se entrega, quais gates valem, campos do MR)
|
|
56
|
+
- Alguém pede para "customizar o Jarvis para este cliente" ou "o Jarvis insiste em X aqui"
|
|
57
|
+
- Depois de um `jarvis init --upgrade`, para revisar forks antigos (`--update`) ou tirar os que não servem mais (`--delete`)
|
|
58
|
+
- **Não use** para corrigir um bug do core (isso é `/jarvis-report-issue`) nem para stack de código (isso é especialização: `/jarvis-create-specialization`)
|
|
59
|
+
|
|
60
|
+
## Padrões Críticos
|
|
61
|
+
|
|
62
|
+
1. **Pergunte antes de propor.** Quem pede o fork sabe que algo incomoda, raramente sabe qual linha.
|
|
63
|
+
2. **O menor fork que resolve.** Variável do `ENV.md` que já cobre o caso > fork de um arquivo pequeno (template, rule-on-demand) > fork de um workflow inteiro.
|
|
64
|
+
3. **Nada é gravado sem o Sim.** O `jarvis fork` grava direto; você só o chama depois de mostrar o conteúdo final e perguntar.
|
|
65
|
+
4. **O core não é editado.** Nem o pacote instalado, nem a cópia em `$IDE/` fora do que o CLI faz para rules.
|
|
66
|
+
5. **Dados da dor, não da empresa**, em qualquer coisa que saia do workspace (a issue do alcance).
|
|
67
|
+
|
|
68
|
+
## Fluxo de Trabalho
|
|
69
|
+
|
|
70
|
+
### 0. Modo
|
|
71
|
+
|
|
72
|
+
| Argumento | Siga |
|
|
73
|
+
|---|---|
|
|
74
|
+
| `--list` | Passo 6 |
|
|
75
|
+
| `{artefato} --delete` | Passo 7 |
|
|
76
|
+
| `{artefato} --update` | Passos 1 a 5 sobre o fork existente (o CLI só compara com o core com `--diff`, que você passa quando a pessoa pedir) |
|
|
77
|
+
| `{artefato}` | Passos 1 a 5 e, no fim, o Passo 8 |
|
|
78
|
+
|
|
79
|
+
Confira o artefato: `jarvis map {nome}` (workflows, skills, agentes) ou `ls` do caminho em `$IDE/`. Nome que não existe: pare com a mensagem do CLI (`⚠️ "{nome}" não é um artefato do core…`).
|
|
80
|
+
|
|
81
|
+
### 1. Ouvir a dor (uma pergunta por vez, com `AskUserQuestion`)
|
|
82
|
+
|
|
83
|
+
Antes de perguntar, leia as sessões recentes em `$SESSIONS_DIR/eng/*/` que citem o artefato (`grep -l`): o que já está registrado não se pergunta de novo. Depois:
|
|
84
|
+
|
|
85
|
+
1. "O que aconteceu da última vez que o `{artefato}` rodou nesta empresa?"
|
|
86
|
+
2. "Em que fase ou seção travou (ou fez a coisa errada)?"
|
|
87
|
+
3. "O que você fez à mão depois?"
|
|
88
|
+
|
|
89
|
+
Pare quando a dor couber em uma frase: "o `{artefato}` assume X; aqui é Y".
|
|
90
|
+
|
|
91
|
+
### 2. Apontar onde encosta
|
|
92
|
+
|
|
93
|
+
Leia o artefato do core (`$IDE/{tipo}/…`), liste as seções `##`/`###` e diga **em qual** o relato encosta, com link para a linha (`rules-on-demand/doc-links-rules.md`). Exemplo: "o que você descreveu acontece na Fase 2 do `eng-global-pr`, que assume a branch nascendo de `main`".
|
|
94
|
+
|
|
95
|
+
### 3. Propor, com a conta
|
|
96
|
+
|
|
97
|
+
`AskUserQuestion` com as opções que cabem, a recomendada primeiro e marcada "(Recomendada)":
|
|
98
|
+
|
|
99
|
+
| Opção | Quando |
|
|
100
|
+
|---|---|
|
|
101
|
+
| **Variável do `ENV.md` que já resolve** | A seção já lê uma chave (`BRANCH_BASE`, `TASK_MANAGER`…). Sem fork |
|
|
102
|
+
| **Fork de um arquivo pequeno** | Template, rule-on-demand ou rule que a seção lê |
|
|
103
|
+
| **Fork do artefato inteiro** | Só quando a mudança está no fluxo em si |
|
|
104
|
+
|
|
105
|
+
Em cada opção, a conta: linhas copiadas (`wc -l`) e tokens a mais na chamada (≈ bytes ÷ 4; `jarvis tokens` para o total do início da sessão). Diga por que recomenda.
|
|
106
|
+
|
|
107
|
+
### 4. Simular o efeito
|
|
108
|
+
|
|
109
|
+
Em texto, antes de gravar: **o que passa a acontecer** e **o que não muda**. Exemplo: "a branch passa a nascer da base que você indicou e o MR aponta para ela; o commit continua pelo padrão do CONTRIBUTING e o comentário no card continua só depois da pergunta".
|
|
110
|
+
|
|
111
|
+
### 5. Gravar, só com o Sim
|
|
112
|
+
|
|
113
|
+
1. Mostre o conteúdo final do arquivo como vai ficar **no overlay** (o core + o ajuste), com o caminho `$IDE/overlays/{COMPANY_PROFILE}/{caminho}`.
|
|
114
|
+
2. `AskUserQuestion`: **Gravar no overlay?** → **Sim** / **Não**. Com Não, nada é gravado; encerre.
|
|
115
|
+
3. Com Sim: `jarvis fork {artefato}` (copia o core com carimbo), depois aplique o ajuste **no arquivo do overlay** (nunca no do core). Rule e rule-on-demand: o CLI já recopia a versão da empresa em `$IDE/rules/` com a marcação; para os outros tipos, a rule de precedência faz valer na próxima chamada.
|
|
116
|
+
4. Em `--update`: o fork já existe. Se a pessoa quiser ver o que o core mudou, rode `jarvis fork {artefato} --update --diff`: ele **só mostra** o diff fork × core atual, agrupado pela seção `#…` (linhas 🔴 são possível mudança de contrato: sessão, `ENV.md`, template, CLI), e **não grava nada**; o que trazer é decisão dela. Depois de aplicar o ajuste combinado no arquivo do overlay (com o Sim), rode `jarvis fork {artefato} --update` (sem `--diff`) para recarimbar; o recarimbo não altera o conteúdo, mas regrava o arquivo em LF (fork editado em CRLF vira LF). Fork **sem carimbo** (arquivo posto à mão no overlay): antes de qualquer coisa, pergunte `Carimbar {artefato} com a versão atual do core, sem alterar o conteúdo?` → **Sim** roda o `--update`; **Não** segue sem carimbar.
|
|
117
|
+
|
|
118
|
+
### 6. `--list`
|
|
119
|
+
|
|
120
|
+
Rode `jarvis fork --list` e mostre a saída: caminho, tipo, `forked_from`, `(sem carimbo)` para arquivo posto à mão, `candidato a core` e `⚠️ tipo não resolvido` para pasta fora dos seis tipos. Não compare nada com o core: a lista é a métrica da story (quais arquivos do core cada cliente forkou).
|
|
121
|
+
|
|
122
|
+
### 7. `--delete`
|
|
123
|
+
|
|
124
|
+
Mostre o caminho do fork e o `forked_from`. `AskUserQuestion`: **Remover o fork e voltar ao core?** → **Sim** / **Não**. Só com Sim: `jarvis fork {artefato} --delete` (rule volta à versão do core em `$IDE/rules/`).
|
|
125
|
+
|
|
126
|
+
### 8. Alcance do ajuste (só em fork novo)
|
|
127
|
+
|
|
128
|
+
`AskUserQuestion`: **Esse ajuste em `{artefato}` é só deste contexto (`{COMPANY_PROFILE}`) ou vale para o core do Jarvis?**
|
|
129
|
+
|
|
130
|
+
| Resposta | O que fazer |
|
|
131
|
+
|---|---|
|
|
132
|
+
| **Apenas deste contexto** | Nada mais |
|
|
133
|
+
| **Estender para o core** | Monte o texto de uma melhoria com **dados da dor**: comando, fase, o que o default assume, o que quebrou, o ajuste que resolveu. **Sem** o valor de `COMPANY_PROFILE`, nomes de pessoas, URLs de wiki ou trechos de `reference/`. Entregue ao `/jarvis-report-issue` (tipo melhoria), que mostra o texto e só abre com o Sim |
|
|
134
|
+
| **Ainda não sei** | `jarvis fork {artefato} --candidate` já no passo 5 (ou recarimbe com `--update` depois de marcar `core_candidate: true` no frontmatter); aparece no `--list` como candidato a core |
|
|
135
|
+
|
|
136
|
+
### Skills invocados durante a execução do skill
|
|
137
|
+
|
|
138
|
+
| Passo | Skill | Condição |
|
|
139
|
+
|-------|-------|----------|
|
|
140
|
+
| 8. Alcance do ajuste | `/jarvis-report-issue` | Só com a resposta "Estender para o core", com o texto já sem dados da empresa |
|
|
141
|
+
|
|
142
|
+
## Regras
|
|
143
|
+
|
|
144
|
+
### Nunca
|
|
145
|
+
- Gravar no overlay (ou chamar `jarvis fork`) sem o **Sim** da pergunta "Gravar no overlay?"
|
|
146
|
+
- Editar o core: nem o pacote instalado, nem `$IDE/{tipo}/` à mão
|
|
147
|
+
- Forkar o artefato inteiro quando uma variável do `ENV.md` ou um arquivo menor resolve
|
|
148
|
+
- Pôr nome de cliente, de pessoa, URL interna ou trecho de `reference/` no texto que vai para a issue
|
|
149
|
+
- Comparar fork × core por conta própria: o `--list` nunca compara, e o `--update` só compara com `--diff`, que você passa a pedido da pessoa
|
|
150
|
+
- Decidir sozinho o que trazer do core para o fork
|
|
151
|
+
|
|
152
|
+
### Sempre
|
|
153
|
+
- Ler as sessões recentes antes de perguntar
|
|
154
|
+
- Apontar a seção exata, com link para a linha
|
|
155
|
+
- Mostrar a conta (linhas e tokens) e o efeito simulado antes de gravar
|
|
156
|
+
- Usar o mesmo caminho e nome do core (o CLI garante)
|
|
157
|
+
- Terminar um fork novo com a pergunta de alcance
|
|
158
|
+
|
|
159
|
+
## Checklist de Conclusão
|
|
160
|
+
|
|
161
|
+
- [ ] Dor registrada em uma frase e seção do core apontada com link
|
|
162
|
+
- [ ] Opções mostradas com a conta e a recomendação
|
|
163
|
+
- [ ] Efeito simulado (o que muda, o que não muda)
|
|
164
|
+
- [ ] "Gravar no overlay?" respondida; com Sim, `jarvis fork` rodado e ajuste aplicado só no overlay
|
|
165
|
+
- [ ] Rule/rule-on-demand: `$IDE/rules/…` com a linha `> Overlay:`; outros tipos: nada copiado para `$IDE/`
|
|
166
|
+
- [ ] Pergunta de alcance respondida; issue (se houver) sem dados da empresa e só com o Sim
|
|
167
|
+
- [ ] Nenhum arquivo do core alterado
|
|
168
|
+
|
|
169
|
+
## Output
|
|
170
|
+
|
|
171
|
+
- `$IDE/overlays/{COMPANY_PROFILE}/{caminho do artefato}` com `forked_from`, `forked_at` (e `core_candidate`) no frontmatter e o ajuste combinado
|
|
172
|
+
- Para rule e rule-on-demand, a cópia em `$IDE/rules/…` ou `$IDE/rules-on-demand/…` com `> Overlay: {COMPANY_PROFILE} (…)`
|
|
173
|
+
- Com "Estender para o core": a issue aberta pelo `/jarvis-report-issue` (ou o texto em `.jarvis/issues/`, sem o Sim)
|
|
174
|
+
|
|
175
|
+
## Mensagem de Conclusão
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
✓ Fork gravado em $IDE/overlays/{COMPANY_PROFILE}/{caminho}
|
|
179
|
+
forked_from: {artefato}@{versão} · forked_at: {data}
|
|
180
|
+
Vale: {na próxima chamada (rule de precedência) | já na IDE, em $IDE/rules/… com a marcação}
|
|
181
|
+
Alcance: {apenas deste contexto | melhoria proposta ao core (#N) | candidato a core (--list)}
|
|
182
|
+
|
|
183
|
+
Para rever: /jarvis-fork --list · /jarvis-fork {artefato} --update · /jarvis-fork {artefato} --delete
|
|
184
|
+
```
|
|
@@ -621,6 +621,7 @@ Se **A** ou **B**, perguntar sobre cada variável opcional conforme seleção
|
|
|
621
621
|
- Nenhuma variável guarda token.
|
|
622
622
|
4. **Vendor do git (`VERSION_CONTROL`):** `github`, `gitlab` ou vazio (Bitbucket/outro → não suportado, vazio). Faça a mesma descoberta do item 2 e defina `VERSION_CONTROL_ACCESS`. Não há variável de repositório: o repo e o host vêm do `git remote get-url origin`.
|
|
623
623
|
5. **Gravação única:** guarde as respostas dos dois eixos e grave tudo no Passo 5, depois do "sim" no bloco final. Se o init for interrompido antes, nada é gravado.
|
|
624
|
+
6. **Perfil de empresa (`COMPANY_PROFILE`):** o overlay é a camada da empresa por cima do core (`$IDE/overlays/{perfil}/`), só com o que o `/jarvis-fork` substituiu; todo workspace tem um, e o default é `stark-industries` (o overlay padrão do Jarvis). Pergunte com `AskUserQuestion`: **Manter o default `stark-industries`** (primeira opção) | **Nome da empresa** (texto livre, em kebab-case: letras minúsculas, números e hífen). Nome fora do padrão ou igual a uma pasta do core (`skills`, `rules`, `workflows`, `commands`, `agents`, `rules-on-demand`, `templates`, `scripts`, `overlays`) → mostre o motivo e pergunte de novo. A chave **nunca** fica vazia. A pasta vazia do perfil é criada pelo `jarvis init` e pelo Passo 8 (única escrita permitida em `$IDE/overlays/`); nenhum arquivo é gravado nela aqui.
|
|
624
625
|
|
|
625
626
|
**Central docs:** não é perguntado aqui. Ele é ligado por padrão e configurado no **Passo 5.2**, que roda sempre.
|
|
626
627
|
|
|
@@ -628,6 +629,7 @@ Se **A** ou **B**, perguntar sobre cada variável opcional conforme seleção
|
|
|
628
629
|
|
|
629
630
|
| Variável | Valor Padrão | Descrição |
|
|
630
631
|
|----------|--------------|-----------|
|
|
632
|
+
| `COMPANY_PROFILE` | `stark-industries` | Perfil de empresa: nome do overlay em `$IDE/overlays/{valor}/` (default = overlay padrão do Jarvis; nunca vazio) |
|
|
631
633
|
| `TASK_MANAGER` | *(vazio = freelance)* | `jira`, `github`, `gitlab` |
|
|
632
634
|
| `TASK_MANAGER_ACCESS` | *(vazio)* | `cli` ou `manual` (definido pela descoberta da CLI) |
|
|
633
635
|
| `TASK_MANAGER_URL_BASE` | *(vazio)* | GitHub/GitLab: repositório dos cards (obrigatório); Jira: o site, só para o link |
|
|
@@ -1057,7 +1059,7 @@ Objetivo: garantir que `$IDE/rules/` e `$IDE/rules-on-demand/` contenham apenas
|
|
|
1057
1059
|
|
|
1058
1060
|
```
|
|
1059
1061
|
1. Ler HUB, POSITION, AREA, SQUAD e ARTIFACT_STYLE (vazio = `ai-generated`) do ENV.md recém-gravado
|
|
1060
|
-
2. Para cada uma das duas pastas (rules/ e rules-on-demand/), listar todos os arquivos .md (recursivo, exceto AGENTS.md)
|
|
1062
|
+
2. Para cada uma das duas pastas (rules/ e rules-on-demand/), listar todos os arquivos .md (recursivo, exceto AGENTS.md) do core, mais os de `$IDE/overlays/{COMPANY_PROFILE}/{pasta}/` que o core não tem
|
|
1061
1063
|
3. Para cada arquivo:
|
|
1062
1064
|
a. Ler o bloco `> **Applies to:**` (primeira ocorrência no arquivo)
|
|
1063
1065
|
b. Se o bloco não existir → tratar como universal → copiar sempre
|
|
@@ -1065,8 +1067,10 @@ Objetivo: garantir que `$IDE/rules/` e `$IDE/rules-on-demand/` contenham apenas
|
|
|
1065
1067
|
d. **Condição especial RTK**: se o arquivo for `rtk-rules.md`,
|
|
1066
1068
|
copiar APENAS se `RTK_ENABLED=true` no ENV.md
|
|
1067
1069
|
(mesmo que o perfil bata, RTK é opt-in)
|
|
1068
|
-
e. Se bate com o perfil → copiar para a mesma pasta em $IDE/ (rules/ → $IDE/rules/, rules-on-demand/ → $IDE/rules-on-demand/), preservando subpastas
|
|
1070
|
+
e. Se bate com o perfil → copiar para a mesma pasta em $IDE/ (rules/ → $IDE/rules/, rules-on-demand/ → $IDE/rules-on-demand/), preservando subpastas.
|
|
1071
|
+
**RuleResolver (#199):** a origem é `$IDE/overlays/{COMPANY_PROFILE}/{pasta}/{relPath}` se esse arquivo existir (o fork da empresa, mesmo caminho e nome), senão a do core. O `Applies to` lido é o do arquivo que será copiado. A cópia vinda do overlay recebe, logo depois do frontmatter (ou na primeira linha, sem frontmatter), a linha `> Overlay: {COMPANY_PROFILE} (forked_from {valor do frontmatter, ou "sem carimbo"})`. **Nada é gravado em `$IDE/overlays/`**: a única exceção é criar a pasta vazia do perfil (`mkdir`), feita pelo `jarvis init` e por este Passo 8 (nota abaixo do resumo)
|
|
1069
1072
|
f. Se não bate → deletar de $IDE/ se existir lá
|
|
1073
|
+
g. **Órfãs do overlay (#199):** arquivo em `$IDE/rules/` ou `$IDE/rules-on-demand/` cuja **primeira linha útil depois do frontmatter** é exatamente `> Overlay: {perfil} (forked_from …)` e que não existe em `$IDE/overlays/{COMPANY_PROFILE}/` (ficou de outro perfil, ou saiu do overlay à mão): se existe no core → copiar a versão do core por cima (sem marcação); senão → deletar de $IDE/. Uma rule que só cite a marcação no corpo não conta. O arquivo do overlay nunca é tocado
|
|
1070
1074
|
4. Exibir resumo ao usuário
|
|
1071
1075
|
```
|
|
1072
1076
|
|
|
@@ -1140,8 +1144,12 @@ cp "$pasta/$relPath" "$IDE/$pasta/$relPath" # $pasta = rules ou rules-on-deman
|
|
|
1140
1144
|
Copiadas : N arquivos (rules/: N | rules-on-demand/: N)
|
|
1141
1145
|
Removidas: N arquivos (não batem com o perfil)
|
|
1142
1146
|
Universais: N arquivos (sem applies_to — sempre copiadas)
|
|
1147
|
+
Do overlay: N arquivos ({COMPANY_PROFILE})
|
|
1148
|
+
Overlay {COMPANY_PROFILE}: pasta criada ← só quando `$IDE/overlays/{COMPANY_PROFILE}/` não existia
|
|
1143
1149
|
```
|
|
1144
1150
|
|
|
1151
|
+
> **Pasta do perfil (#199):** se `$IDE/overlays/{COMPANY_PROFILE}/` não existir, crie-a vazia (`mkdir -p`) e mostre a linha acima. É a única escrita permitida em `$IDE/overlays/`: nenhum arquivo é gravado, alterado ou apagado lá. O `jarvis init` faz o mesmo; aqui vale para quem roda só o `/jarvis-init`.
|
|
1152
|
+
|
|
1145
1153
|
> **Nota**: `rules/AGENTS.md` é sempre copiado — nunca filtrado.
|
|
1146
1154
|
|
|
1147
1155
|
---
|
|
@@ -1185,6 +1193,7 @@ Roda no fim de todo caminho que grava o `ENV.md`: criação (opção A ou ENV.md
|
|
|
1185
1193
|
| Chave fora do template (saiu dele ou é do projeto) | `QA_SIGNOFF_BRANCHES`, `MINHA_VAR` | Mover para o bloco final "Variáveis fora do template", com `# (descontinuada)` numa linha própria logo acima da chave e o valor intacto |
|
|
1186
1194
|
| Chave duplicada | `HUB=` duas vezes | Manter a preenchida (ou a última) |
|
|
1187
1195
|
| Valor fora das opções | `HUB=BACKEN`, `MAX_AI_EXECUTION_PERCENTAGE=40`, `TASK_MANAGER_ACCESS=api` | Perguntar o valor, com as opções do template ou do `taxonomy.md` (as mesmas perguntas do passo 3) |
|
|
1196
|
+
| `COMPANY_PROFILE` vazio, fora do padrão ou igual a uma pasta do core | `COMPANY_PROFILE=`, `COMPANY_PROFILE=Acme Corp`, `COMPANY_PROFILE=rules` | A mesma pergunta do item 6 do passo 4 (default `stark-industries` primeiro). Vazio não é válido: a chave sempre tem um perfil |
|
|
1188
1197
|
| Obrigatória vazia | `SQUAD=` | A mesma pergunta do passo 3 |
|
|
1189
1198
|
| Lista de exemplo não escolhida | `TASK_MANAGER=[jira, github, gitlab]` | Escolher uma ou esvaziar |
|
|
1190
1199
|
| Fora da ordem ou do assunto | blocos `# --- Upgrade ... ---` no fim; uma `DATA_*` longe das irmãs | Regravar na ordem do template |
|
|
@@ -100,6 +100,17 @@ PROD_MODE=
|
|
|
100
100
|
ARTIFACT_STYLE=ai-generated
|
|
101
101
|
|
|
102
102
|
|
|
103
|
+
# =============================================================================
|
|
104
|
+
# Perfil de empresa (overlay)
|
|
105
|
+
# =============================================================================
|
|
106
|
+
# Nome do overlay ativo em $IDE/overlays/{valor}/: a camada da empresa por cima do core,
|
|
107
|
+
# só com o que foi substituído pelo /jarvis-fork. stark-industries é o perfil default
|
|
108
|
+
# (o overlay padrão do Jarvis, criado vazio pelo jarvis init). Um nome próprio (ex.: acme)
|
|
109
|
+
# aponta para o overlay dessa empresa. Só letras minúsculas, números e hífen; não pode ser
|
|
110
|
+
# o nome de uma pasta do core (skills, rules, workflows...). Nunca deixe vazio.
|
|
111
|
+
COMPANY_PROFILE=stark-industries
|
|
112
|
+
|
|
113
|
+
|
|
103
114
|
# =============================================================================
|
|
104
115
|
# Especializações por área
|
|
105
116
|
# =============================================================================
|