ll-skills 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.
Files changed (27) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +105 -0
  3. package/agents/ll-implementador.md +23 -0
  4. package/bin/install.js +475 -0
  5. package/hooks/ll-skills-check-update.js +157 -0
  6. package/package.json +38 -0
  7. package/skills/ll-atualizar/SKILL.md +68 -0
  8. package/skills/ll-decidir-antes/SKILL.md +81 -0
  9. package/skills/ll-decidir-antes/referencias/protocolo-entrevista.md +112 -0
  10. package/skills/ll-decidir-antes/referencias/template-spec.md +238 -0
  11. package/skills/ll-desarmar/SKILL.md +254 -0
  12. package/skills/ll-desarmar/referencias/execucao-adversarial.md +217 -0
  13. package/skills/ll-desarmar/referencias/humanos-e-substitutos.md +116 -0
  14. package/skills/ll-desarmar/referencias/placar-e-realimentacao.md +140 -0
  15. package/skills/ll-orquestrar/SKILL.md +100 -0
  16. package/skills/ll-pesquisar/SKILL.md +159 -0
  17. package/skills/ll-pesquisar/referencias/frente-de-pesquisa.md +147 -0
  18. package/skills/ll-pesquisar/referencias/sintese-e-fontes.md +148 -0
  19. package/skills/ll-pesquisar-mercado/SKILL.md +112 -0
  20. package/skills/ll-pesquisar-mercado/referencias/dossie.md +375 -0
  21. package/skills/ll-pesquisar-mercado/referencias/indice-e-fechamento.md +122 -0
  22. package/skills/ll-pesquisar-mercado/referencias/padroes-de-pesquisa.md +149 -0
  23. package/skills/ll-verificar-entrega/SKILL.md +73 -0
  24. package/skills/ll-verificar-entrega/referencias/briefs-auditoria.md +291 -0
  25. package/skills/ll-voltar-do-futuro/SKILL.md +239 -0
  26. package/skills/ll-voltar-do-futuro/referencias/anti-padroes-e-fundamentos.md +201 -0
  27. package/skills/ll-voltar-do-futuro/referencias/vetores-e-testes.md +228 -0
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ // Hook SessionStart do ll-skills. Instalado em <configDir>/hooks/ pelo bin/install.js.
5
+ //
6
+ // Modo leitor (sem argumentos, foreground, sem rede):
7
+ // lê o cache da execução anterior e, se houver versão mais nova registrada para a
8
+ // versão instalada agora, emite um systemMessage curto. Depois dispara o modo worker
9
+ // em background e sai.
10
+ //
11
+ // Modo worker (--worker, background, com rede):
12
+ // consulta a versão publicada (`npm view ll-skills version`); se o pacote ainda não
13
+ // está no registro e a instalação veio de `npx github:`, cai para `git ls-remote` e
14
+ // compara o SHA. Regrava o cache.
15
+ //
16
+ // Regra de ouro: nunca atrasar o início da sessão, nada em stderr, nada fora do
17
+ // próprio cache. Qualquer falha termina em silêncio com exit 0.
18
+
19
+ const fs = require('fs');
20
+ const path = require('path');
21
+ const os = require('os');
22
+ const { spawn, execFileSync } = require('child_process');
23
+
24
+ const PKG_NAME = 'll-skills';
25
+ const REPO_URL = 'https://github.com/allangdy/ll-skills.git';
26
+ const CONFIG_DIR = path.dirname(__dirname); // <configDir>/hooks/<este arquivo>
27
+ const STATE_DIR = path.join(CONFIG_DIR, 'll-skills');
28
+ const CACHE_DIR = path.join(process.env.XDG_CACHE_HOME || path.join(os.homedir(), '.cache'), 'll-skills');
29
+ const CACHE_FILE = path.join(CACHE_DIR, 'update-check.json');
30
+ const CHECK_INTERVAL = 6 * 60 * 60; // segundos entre consultas de rede
31
+ const NET_TIMEOUT = 10000;
32
+
33
+ function readText(file) {
34
+ try {
35
+ return fs.readFileSync(file, 'utf8').trim();
36
+ } catch {
37
+ return null;
38
+ }
39
+ }
40
+
41
+ function readJson(file) {
42
+ try {
43
+ return JSON.parse(fs.readFileSync(file, 'utf8'));
44
+ } catch {
45
+ return null;
46
+ }
47
+ }
48
+
49
+ function parseSemver(v) {
50
+ const m = /^v?(\d+)\.(\d+)\.(\d+)/.exec(String(v || ''));
51
+ return m ? [Number(m[1]), Number(m[2]), Number(m[3])] : null;
52
+ }
53
+
54
+ function semverNewer(candidate, current) {
55
+ const a = parseSemver(candidate);
56
+ const b = parseSemver(current);
57
+ if (!a || !b) return false;
58
+ for (let i = 0; i < 3; i++) {
59
+ if (a[i] > b[i]) return true;
60
+ if (a[i] < b[i]) return false;
61
+ }
62
+ return false;
63
+ }
64
+
65
+ function writeCache(obj) {
66
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
67
+ const tmp = `${CACHE_FILE}.tmp.${process.pid}`;
68
+ fs.writeFileSync(tmp, JSON.stringify(obj) + '\n');
69
+ fs.renameSync(tmp, CACHE_FILE);
70
+ }
71
+
72
+ function npmLatest() {
73
+ try {
74
+ const out = execFileSync('npm', ['view', PKG_NAME, 'version'], {
75
+ timeout: NET_TIMEOUT,
76
+ stdio: ['ignore', 'pipe', 'ignore'],
77
+ encoding: 'utf8',
78
+ env: { ...process.env, GIT_TERMINAL_PROMPT: '0', npm_config_update_notifier: 'false' },
79
+ }).trim();
80
+ return parseSemver(out) ? out : null;
81
+ } catch {
82
+ return null;
83
+ }
84
+ }
85
+
86
+ function gitRemoteSha() {
87
+ try {
88
+ const out = execFileSync('git', ['ls-remote', REPO_URL, 'HEAD'], {
89
+ timeout: NET_TIMEOUT,
90
+ stdio: ['ignore', 'pipe', 'ignore'],
91
+ encoding: 'utf8',
92
+ env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
93
+ });
94
+ const sha = out.split(/\s/)[0];
95
+ return /^[0-9a-f]{40}$/.test(sha) ? sha : null;
96
+ } catch {
97
+ return null;
98
+ }
99
+ }
100
+
101
+ function worker(installed) {
102
+ const now = Math.floor(Date.now() / 1000);
103
+ const cache = { checked: now, installed, latest: null, update_available: false, method: null };
104
+
105
+ const latest = npmLatest();
106
+ if (latest) {
107
+ cache.latest = latest;
108
+ cache.method = 'npm';
109
+ cache.update_available = semverNewer(latest, installed);
110
+ writeCache(cache);
111
+ return;
112
+ }
113
+
114
+ // Pacote ainda não publicado: só há referência remota confiável se a instalação veio do GitHub.
115
+ const info = readJson(path.join(STATE_DIR, 'install.json'));
116
+ if (info && info.source === 'github' && info.sha) {
117
+ const remote = gitRemoteSha();
118
+ if (remote) {
119
+ cache.method = 'git';
120
+ cache.latest = remote.slice(0, 7);
121
+ cache.update_available = !remote.startsWith(info.sha);
122
+ }
123
+ }
124
+ writeCache(cache);
125
+ }
126
+
127
+ function reader(installed) {
128
+ const cache = readJson(CACHE_FILE);
129
+ if (cache && cache.update_available && cache.installed === installed && cache.latest) {
130
+ process.stdout.write(
131
+ JSON.stringify({
132
+ systemMessage: `ll-skills desatualizado (instalado ${installed}, disponível ${cache.latest}) — rode /ll-atualizar`,
133
+ }) + '\n'
134
+ );
135
+ }
136
+
137
+ const now = Math.floor(Date.now() / 1000);
138
+ const checked = cache && Number.isFinite(cache.checked) ? cache.checked : 0;
139
+ if (now - checked >= CHECK_INTERVAL) {
140
+ const child = spawn(process.execPath, [__filename, '--worker'], { detached: true, stdio: 'ignore' });
141
+ child.unref();
142
+ }
143
+ }
144
+
145
+ function main() {
146
+ const installed = readText(path.join(STATE_DIR, 'VERSION'));
147
+ if (!installed) return;
148
+ if (process.argv[2] === '--worker') worker(installed);
149
+ else reader(installed);
150
+ }
151
+
152
+ try {
153
+ main();
154
+ } catch {
155
+ /* silêncio */
156
+ }
157
+ process.exit(0);
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "ll-skills",
3
+ "version": "1.0.0",
4
+ "description": "Pipeline de desenvolvimento orientado a evidência para Claude Code: pesquisa de mercado, premortem, POCs desarmadoras, spec por entrevista e verificação de entrega",
5
+ "bin": {
6
+ "ll-skills": "bin/install.js"
7
+ },
8
+ "files": [
9
+ "bin",
10
+ "skills",
11
+ "agents",
12
+ "hooks",
13
+ "CHANGELOG.md",
14
+ "README.md"
15
+ ],
16
+ "scripts": {
17
+ "test": "bash scripts/smoke-test.sh"
18
+ },
19
+ "engines": {
20
+ "node": ">=18"
21
+ },
22
+ "type": "commonjs",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "git+https://github.com/allangdy/ll-skills.git"
26
+ },
27
+ "homepage": "https://github.com/allangdy/ll-skills#readme",
28
+ "bugs": {
29
+ "url": "https://github.com/allangdy/ll-skills/issues"
30
+ },
31
+ "keywords": [
32
+ "claude-code",
33
+ "skills",
34
+ "agents"
35
+ ],
36
+ "author": "allangdy",
37
+ "license": "MIT"
38
+ }
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: ll-atualizar
3
+ description: Atualiza o ll-skills para a última versão publicada, mostrando o changelog do que mudou antes de aplicar. Use quando o pedido for "atualizar o ll-skills", "atualiza as skills", "ll-skills desatualizado", "tem versão nova do ll-skills?" ou quando o aviso de sessão disser que o ll-skills está desatualizado.
4
+ ---
5
+
6
+ # Atualizar o ll-skills
7
+
8
+ O ll-skills é distribuído como pacote npm e instalado por `npx ll-skills@latest`, que copia
9
+ as skills `ll-*` para `~/.claude/skills/` e grava a versão instalada. Este fluxo compara a
10
+ versão instalada com a publicada, mostra o que mudou entre elas e aplica a atualização
11
+ rodando o instalador de novo.
12
+
13
+ Toda mutação acontece pelo instalador. Nada em `~/.claude/skills/ll-*`, `~/.claude/ll-skills/`
14
+ ou `~/.claude/settings.json` é editado à mão.
15
+
16
+ ## 1. Versão instalada
17
+
18
+ ```bash
19
+ cat "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/ll-skills/VERSION"
20
+ ```
21
+
22
+ Se o arquivo não existir, o ll-skills não está instalado por este mecanismo. Diga isso,
23
+ indique `npx ll-skills@latest` e pare.
24
+
25
+ ## 2. Versão publicada
26
+
27
+ ```bash
28
+ npm view ll-skills version
29
+ ```
30
+
31
+ Sem rede, ou se o npm devolver `E404` (pacote ainda não publicado): diga que não deu para
32
+ consultar o registro e pare — não adivinhe.
33
+
34
+ **Se as versões coincidirem**: diga que o ll-skills já está na última versão, cite a
35
+ versão, e encerre. Nada mais a fazer.
36
+
37
+ ## 3. Changelog
38
+
39
+ ```bash
40
+ curl -sf https://raw.githubusercontent.com/allangdy/ll-skills/main/CHANGELOG.md
41
+ ```
42
+
43
+ O arquivo segue Keep a Changelog: uma seção `## [x.y.z] - data` por versão, da mais nova
44
+ para a mais antiga. Mostre apenas as seções com versão maior que a instalada e menor ou
45
+ igual à publicada, do mais antigo ao mais recente. Se a chamada falhar, siga para a
46
+ atualização avisando que o changelog não pôde ser carregado.
47
+
48
+ ## 4. Aplicar
49
+
50
+ ```bash
51
+ npx --yes ll-skills@latest
52
+ ```
53
+
54
+ O instalador sobrescreve as skills, poda arquivos órfãos da versão anterior, atualiza o
55
+ hook de aviso e regrava `VERSION`. Se falhar, mostre a saída de erro e pare — não tente
56
+ contornar copiando arquivos à mão.
57
+
58
+ ## 5. Confirmar e encerrar
59
+
60
+ Releia `VERSION` e confirme que agora bate com a versão publicada. Reporte:
61
+
62
+ - versão antiga → versão nova
63
+ - resumo do changelog aplicado
64
+ - que a sessão atual ainda carrega as skills antigas: skills novas ou renomeadas só
65
+ aparecem depois de reiniciar o Claude Code (conteúdo alterado de uma skill que já
66
+ existia é lido na próxima invocação)
67
+
68
+ Se `VERSION` não mudou, diga isso claramente em vez de declarar sucesso.
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: ll-decidir-antes
3
+ description: Prepara uma implementação longa (horas ou dias de agente autônomo) decidindo tudo o que importa antes do código — levanta evidência com subagentes, entrevista o usuário via AskUserQuestion sobre as decisões irreversíveis em ordem de impacto, e consolida SPEC.md + PROGRESS.md com protocolo anti-drift embutido, prontos para handoff. Use quando o pedido for criar uma spec antes de implementar, fazer perguntas antes de começar, preparar uma tarefa longa para um agente, conduzir uma entrevista de decisões ou montar um handoff para implementação autônoma.
4
+ ---
5
+
6
+ # decidir-antes
7
+
8
+ Dado "quero implementar X", esta skill conduz: (1) levantamento de evidência, (2) construção da fila de decisões, (3) entrevista via AskUserQuestion, (4) escrita de `SPEC.md` + `PROGRESS.md`, (5) handoff. Ela NÃO implementa nada — o entregável é a spec que sustenta um implementador autônomo por horas ou dias sem drift, e a instrução de partida que o dispara.
9
+
10
+ Artefatos, por padrão em `docs/spec-<slug>/`:
11
+
12
+ | Arquivo | Papel | Mutabilidade |
13
+ |---|---|---|
14
+ | `mapas/*.md` | evidência condensada dos subagentes | escritos uma vez |
15
+ | `FILA.md` | inventário de decisões + fila da entrevista | vivo durante a entrevista |
16
+ | `SPEC.md` | contrato de implementação, ordenado por precedência | append-only após aprovação |
17
+ | `PROGRESS.md` | estado do implementador | mutável, do implementador |
18
+ | `decisoes/` | ambiguidades da execução aguardando o humano | criadas pelo implementador |
19
+
20
+ Na primeira interação, confirme com o usuário em uma única troca: o corte de escopo do trabalho (o que está dentro e fora) e o local dos artefatos. Depois disso, os pontos de contato com o humano são as perguntas da entrevista e o handoff — nada entre eles.
21
+
22
+ ## Fase 1 — Evidência
23
+
24
+ Nenhuma pergunta sem lastro. Antes de formular qualquer decisão:
25
+
26
+ - **Os artefatos das etapas anteriores vêm primeiro**, antes de mapear qualquer coisa nova. Procure no repo e leia direto, sem subagente — já são evidência condensada e citável: `docs/README.md` (o índice do dossiê, com o **Estado da decisão** no topo) e `docs/decisoes-em-aberto.md` da pesquisa de mercado; `docs/premortem/premortem.md` e `docs/premortem/placar.md`; SPECs anteriores e suas decisões `DEC-NNN`. Eles se citam pelo caminho e pela seção, como os mapas se citam por `arquivo:linha`. Nada disso existir é normal — a skill roda sozinha; o que não pode é existir e ser remapeado do zero.
27
+ - Delegue o mapeamento a subagentes — um por material (código atual, protótipo/design, documentos do pedido). A sessão principal lê apenas os mapas condensados que eles produzem, nunca os fontes inteiros: sessões que abrem tudo morrem por estouro de contexto antes de decidir qualquer coisa. Fontes abertos na sessão principal só sob demanda, no trecho exato que uma pergunta exigir.
28
+ - Cada mapa registra fatos com `arquivo:linha` — é essa citação que as perguntas vão carregar.
29
+ - O lastro tem dois tipos: **interno** (os mapas do projeto) e **externo** — decisões que dependem de conhecimento de fora do projeto (escolha de tecnologia ou biblioteca, padrão de mercado, limites e preços de API) exigem pesquisa web por subagente antes da pergunta. Recomendação de memória ou opinião não sustenta pergunta.
30
+ - Leia `referencias/protocolo-entrevista.md` agora: ele traz o brief-modelo dos mapeadores e pesquisadores, o formato dos itens da fila e o protocolo de pergunta das fases 2 e 3.
31
+
32
+ ## Fase 2 — Fila de decisões
33
+
34
+ Construa `FILA.md`: um item por coisa decidível pelo usuário (não por detalhe), com evidência dos dois lados, camada/impacto, dependências e status `PENDENTE`. Divergências entre o que existe e o que foi pedido entram nas duas direções — adição e subtração são ambas decisões do dono, nunca descarte silencioso.
35
+
36
+ Antes de classificar, aplique a herança dos artefatos anteriores:
37
+
38
+ - Decisão **já tomada** neles **não vira pergunta**: entra na spec como contrato herdado, com a fonte citada (`docs/README.md` §Estado da decisão, `docs/premortem/placar.md`, `DEC-014` da spec anterior). Não re-litigar atravessa as skills, não só a entrevista — re-perguntar o que o dono já fechou queima a confiança na fila inteira. Só volta a ser pergunta se a evidência nova a contradiz, e aí a pergunta é essa: a contradição, com os dois registros lado a lado.
39
+ - Falha **CONFIRMADA** no placar do premortem entra como **restrição de desenho**, não como risco a discutir: as opções que a ignoram não são oferecidas, e a rota de saída quantificada no placar vira o custo declarado das que sobram.
40
+ - **Pendência com dono** nesses artefatos vira item da fila apenas se o dono for o usuário; dono implementador ou agente vira pendência da spec, com o marco em que fecha.
41
+
42
+ Classificação de cada item — o coração da skill:
43
+
44
+ - **Vira PERGUNTA** (one-way door) se qualquer um valer: mudar depois exige reescrever mais de um módulo; a resposta condiciona ou redesenha outras decisões da fila; é preferência do usuário que nenhuma evidência revela.
45
+ - **Vira ASSUNÇÃO** (two-way door) caso contrário: decida você, com o default mais barato de reverter, e registre com porquê. Assunções entram na spec marcadas — são o único tipo de decisão que o implementador pode escalar por evidência contrária.
46
+
47
+ Ordene a fila: primeiro a pergunta que re-precifica todas as outras (sequenciamento, big-bang vs incremental, corte de escopo); depois por impacto estrutural descendente; dentro do nível, o que desbloqueia ou poda mais itens.
48
+
49
+ Marque em cada PERGUNTA o lastro: `interno` (os mapas bastam) ou `externo` (exige pesquisa web). As externas disparam subagentes de pesquisa em background já nesta fase — a entrevista segue com as internas e nunca bloqueia esperando pesquisa; cada pergunta externa entra na fila quando o comparativo dela chegar.
50
+
51
+ ## Fase 3 — Entrevista
52
+
53
+ Siga o protocolo de `referencias/protocolo-entrevista.md`. O núcleo inviolável:
54
+
55
+ - AskUserQuestion, cabeçalho "PERGUNTA N/M". Impacto ALTO: uma decisão por chamada. Impacto baixo: até 4 por chamada, sempre uma decisão por pergunta.
56
+ - Toda pergunta carrega a evidência dos dois lados (com `arquivo:linha`), sua análise honesta com posição própria, e opções com custo/consequência; a recomendada vem primeiro com "(Recomendada)" no label — ela informa, o usuário decide.
57
+ - Registre a resposta em `FILA.md` imediatamente (literal, com data) e re-avalie a fila após CADA resposta: respostas desdobram itens novos, decidem outros "por regra" e podam perguntas sem objeto. Commit por bloco quando em repo git.
58
+ - Sem resposta = `PENDENTE`. Você não decide nenhuma one-way door sozinho — nem as "óbvias". Decisão contra a sua recomendação: registro fiel com as consequências, sem re-litigar.
59
+ - 3 a 5 decisões ALTO por sessão de perguntas; ao atingir o limite, ofereça pausa. A fila vive no arquivo, não na conversa: qualquer sessão retoma do próximo `PENDENTE` sem re-derivar nada.
60
+
61
+ A entrevista termina quando a fila zera os `PENDENTE` — por resposta, por regra ou por delegação explícita do usuário ("você decide" vira assunção registrada).
62
+
63
+ ## Fase 4 — SPEC.md + PROGRESS.md
64
+
65
+ Leia `referencias/template-spec.md` e escreva os dois arquivos a partir dele. Regras que nascem nesta fase:
66
+
67
+ - Critério de aceite sem comando de verificação executável não entra como critério — entra como pendência com dono nomeado e marco. Requisito sem verificação é requisito que vaza.
68
+ - Decisão que cita um entregável nomeia o entregável (arquivo, rota, migração, tela); pendência tem dono e marco. Referência vaga hoje é re-pergunta garantida na semana 2 da execução.
69
+ - A spec é curta e densa: detalhe fino fica nos mapas e entra por referência de caminho. O protocolo de execução (seção 7) vai completo no SPEC.md — o implementador não conhece esta skill; a spec é tudo o que ele tem.
70
+
71
+ ## Fase 5 — Handoff
72
+
73
+ Apresente ao usuário: contagem de decisões (perguntadas / assumidas / herdadas / contra a recomendação), riscos aceitos conscientemente, pendências com dono, e a instrução de partida do implementador:
74
+
75
+ <instrucao-de-partida>
76
+ Implemente <caminho>/SPEC.md até o fim.
77
+
78
+ Leia a spec inteira antes de qualquer código. Ela é autossuficiente e as decisões da seção 3 são contrato — nada é re-decidido. A seção 7 é o seu protocolo de operação e prevalece sobre instruções genéricas de sessão. Estado vive em PROGRESS.md e no git, não na conversa. Trabalhe um marco por vez até todos estarem `passes: true` com os comandos de verificação passando. Antes de delegar trabalho a subagentes, invoque a skill `ll-orquestrar` (ll-skills) pela ferramenta Skill — ela rege decomposição, briefs, roteamento de modelos e verificação. Se ela não existir no seu ambiente: delegue apenas subtarefas grandes e genuinamente independentes, com brief autossuficiente (objetivo, contrato de saída, limites), e verifique resultados com evidência. Suas liberdades estão na seção 5b; use seu melhor julgamento dentro delas. Tudo fora delas: escale conforme a seção 7. Ao final, a entrega é auditada pela skill `ll-verificar-entrega` — o VERIFICACAO.md dela, não o seu relato, é o que fecha o trabalho.
79
+ </instrucao-de-partida>
80
+
81
+ Rota preferida: dispare o agente **`ll-implementador`** do ll-skills (ele parte com a `ll-orquestrar` pré-carregada) com a instrução acima. Qualquer sessão ou agente com a instrução também serve — a spec é autossuficiente. Você entrega a spec e para aqui; quando o implementador declarar pronto, o caminho é `ll-verificar-entrega`.
@@ -0,0 +1,112 @@
1
+ # Protocolo — evidência, fila e entrevista
2
+
3
+ Leitor: o agente que conduz a skill `ll-decidir-antes`, nas fases 1 a 3. O objetivo final destas fases é que nenhuma one-way door chegue à spec sem resposta do usuário, e nenhuma two-way door vire pergunta.
4
+
5
+ ## 1. Brief-modelo do subagente mapeador
6
+
7
+ Um subagente por material. Subagentes não veem esta conversa: o brief carrega tudo. Adapte:
8
+
9
+ <brief-mapeador>
10
+ Você mapeia <material> para uma entrevista de decisões que precede uma implementação longa. Cada afirmação sua pode virar a evidência de um lado de uma decisão apresentada ao dono do projeto — precisão de citação importa mais que prosa.
11
+
12
+ Contexto: o pedido é "<pedido do usuário, resumido>". O mapa alimenta a construção de um inventário de decisões; outro agente fará as perguntas.
13
+
14
+ Material: <caminhos exatos; nada além deles>.
15
+
16
+ Instruções: percorra o material inteiro. Para cada capacidade, comportamento, contrato ou estrutura relevante ao pedido, registre o fato com `arquivo:linha` (ou tela/rota, para protótipos). Cubra tudo o que encontrar e rotule cada achado com confiança (alta/média/baixa) — a filtragem é do orquestrador, não sua.
17
+
18
+ Contrato de saída: escreva `<raiz>/mapas/<nome>.md` com seções por área do sistema; fatos em bullets no formato `arquivo:linha — fato`; seção final "Lacunas e incertezas" com o que você não conseguiu confirmar. Responda ao orquestrador só com o caminho do mapa e 3 linhas de sumário.
19
+
20
+ Limites: não proponha decisões nem soluções; o mapa cabe em ~200 linhas — condense, não transcreva.
21
+
22
+ Sucesso: o orquestrador consegue citar seu mapa numa pergunta ao dono sem reabrir o fonte.
23
+ </brief-mapeador>
24
+
25
+ Quando o material é visual (protótipo, site), o mapeador navega e captura telas por conta própria e as descreve no mapa — screenshots ficam com ele, nunca voltam à sessão principal.
26
+
27
+ ## 2. FILA.md — esqueleto
28
+
29
+ <esqueleto-fila>
30
+ # Fila de decisões — <pedido> (<data>)
31
+
32
+ ## Estado
33
+ - Fase: <1 evidência | 2 fila | 3 entrevista | 4 spec> — <última ação> / <próximo passo concreto>
34
+ - Entrevista: <d> DECIDIDAS · <a> ASSUMIDAS · <p> PENDENTES · próxima: Q-NNN
35
+ - Notas de retomada: <o que uma sessão nova precisa saber para continuar>
36
+
37
+ ## Sumário executivo
38
+ <escrito no fechamento da entrevista — ver §6>
39
+
40
+ ## Ordem da entrevista
41
+ Q-003 (kickoff) → Q-001 → Q-007 → ...
42
+
43
+ ## Itens
44
+ ### Q-001 — <título decidível, não descritivo>
45
+ - **Classe:** PERGUNTA | ASSUNÇÃO · **Camada:** dominio|contrato|arquitetura|ui · **Impacto:** ALTO|MÉDIO|BAIXO
46
+ - **Lastro:** interno | externo — pesquisa: <em andamento | `mapas/pesquisa-<tema>.md`>
47
+ - **Lado A (pedido/protótipo):** <evidência com arquivo:linha ou tela>
48
+ - **Lado B (sistema atual):** <evidência com arquivo:linha, ou "inexistente">
49
+ - **Depende de:** Q-x · **Condiciona:** Q-y, Q-z
50
+ - **Status:** PENDENTE
51
+ → DECIDIDA — <resposta literal do usuário> (<data>) [contra a recomendação — registro fiel; NÃO re-litigar] [risco aceito: <qual>]
52
+ → ASSUMIDA — <default> porque <porquê em 1 linha>
53
+ → DECIDIDA POR REGRA — segue Q-x (<data>)
54
+ → HERDADA — <decisão fechada em etapa anterior> (fonte: <artefato §seção>) — contrato, não pergunta
55
+ </esqueleto-fila>
56
+
57
+ O bloco Estado é atualizado a cada checkpoint. O git é o registro durável, não a conversa: commit por bloco de respostas (`docs(spec): fila — decisões Q-x..Q-y (bloco N)`).
58
+
59
+ ## 3. Classificação e ordenação
60
+
61
+ O teste de classe está no SKILL.md (fase 2). Refinamentos:
62
+
63
+ - Em dúvida entre PERGUNTA e ASSUNÇÃO, olhe o fan-out: item que condiciona 3+ outros é pergunta mesmo que pareça reversível — a resposta redesenha a fila.
64
+ - A pergunta de kickoff vem antes de tudo quando existir: sequenciamento (big-bang vs incremental), corte de escopo (mínimo vs completo). Ela muda o PREÇO de todas as opções seguintes — as descrições de custo das perguntas posteriores citam a resposta dela.
65
+ - Ordem dentro da fila: domínio/identidade/schema → contratos (API, permissões, vocabulário transversal) → navegação/estados globais → item local por tela ou módulo. Dentro de cada nível, primeiro o que desbloqueia ou poda mais itens (use Depende/Condiciona).
66
+ Lastro externo — decisões que dependem de conhecimento de fora do projeto (qual framework, qual biblioteca, padrão de mercado, limites e preços de API):
67
+
68
+ - Ao classificar o item, marque `Lastro: externo` e dispare imediatamente um subagente de pesquisa web em background (um por tema; para comparativos disputados, um por opção e um consolidador). A entrevista segue com os itens internos — nunca trava esperando pesquisa, e a pergunta externa entra na fila quando o comparativo chegar.
69
+ - A pergunta externa só é feita quando a recomendação puder ser sustentada: cada opção com seus trade-offs reais e fontes, e a "(Recomendada)" com justificativa rastreável ao arquivo de pesquisa — nunca de memória ou opinião.
70
+
71
+ <brief-pesquisador>
72
+ Você pesquisa <tema> para sustentar uma decisão que será apresentada ao dono do projeto. Contexto: <pedido + restrições relevantes do projeto, ex.: stack atual, orçamento>. Instruções: levante as opções viáveis (<lista, se já conhecida>) com trade-offs reais — maturidade, limites, preço, encaixe com <restrição> — cobrindo prós e contras de todas e rotulando cada afirmação com a fonte (URL) e confiança. Contrato de saída: escreva `<raiz>/mapas/pesquisa-<tema>.md` com uma seção por opção, tabela comparativa final com pontuação justificada, e sua recomendação com porquê. Limites: sem decisão final — quem decide é o dono; ~150 linhas. Sucesso: o orquestrador monta a pergunta e as descrições de custo citando só o seu arquivo.
73
+ </brief-pesquisador>
74
+
75
+ ## 4. Anatomia da chamada AskUserQuestion
76
+
77
+ Texto da pergunta — autossuficiente; o usuário decide lendo só a pergunta:
78
+
79
+ 1. Cabeçalho: `PERGUNTA N/M — <título> (impacto ALTO|MÉDIO|BAIXO)`. M é o total corrente da fila; quando desdobramentos criarem itens, M cresce — anuncie ("éramos 14, a resposta de Q-005 criou 2 itens: agora 16").
80
+ 2. O que está em jogo, em 1–3 frases.
81
+ 3. Evidência dos dois lados, citada do item (`arquivo:linha`, tela do protótipo).
82
+ 4. Contexto novo de decisões anteriores da própria bateria, quando condicionarem esta ("com Q-003 = big-bang, migrações saem sem backfill — isso barateia a opção 1").
83
+ 5. "Minha análise honesta: ..." — sua posição própria e o porquê, antes das opções.
84
+
85
+ Opções — 2 a 4, mutuamente exclusivas:
86
+
87
+ - A recomendada vem PRIMEIRA, com "(Recomendada)" no label. Label ≤ ~5 palavras; a description diz a consequência e o custo concretos ("migração dos grants + deploy ordenado — barato sob big-bang"), nunca só o nome da alternativa.
88
+ - Menu canônico quando a decisão compara algo novo com o existente: Adotar / Adaptar: \<como\> / Manter o atual / Cortar do escopo.
89
+ - Opção de escape quando fizer sentido: "Tanto faz — decida na implementação" (vira ASSUMIDA com as alternativas registradas); em ação destrutiva ou externa: "Não — eu mesmo executo".
90
+ - `multiSelect` só para inventário de fatos independentes e combináveis (quais claims são reais, quais integrações entram) — nunca para alternativas excludentes.
91
+
92
+ Lotes: impacto ALTO = 1 pergunta por chamada, sempre — você nunca agrupa itens ALTO por conta própria (o usuário pode responder em lote se quiser). Impacto baixo (ui-local, config) = até 4 perguntas por chamada, cada uma com uma única decisão. Fundir duas decisões numa pergunta destrói a rastreabilidade da resposta.
93
+
94
+ Fadiga: 3–5 decisões ALTO por sessão de perguntas; no limite, ofereça pausa com o Estado da fila atualizado — a retomada é barata porque a fila vive no arquivo.
95
+
96
+ ## 5. Depois de cada resposta
97
+
98
+ 1. **Registre imediatamente** no item: resposta literal, data. Contra a recomendação: marque "contra a recomendação — registro fiel; NÃO re-litigar" e anote as consequências que você apresentou. Risco aceito conscientemente: marque no item e liste no sumário.
99
+ 2. **Nomeie o que a resposta cita.** Se a decisão referencia um entregável ("o CTA", "a tela de billing", "a coluna nova"), o registro nomeia arquivo/rota/migração/tela. Referência que ainda não existe e não tem nome: pergunte qual/onde na sequência, antes de registrar — decisão com referência órfã é re-pergunta garantida na execução.
100
+ 3. **Pendência descoberta** (algo a fazer que não é decisão): registre com dono proposto (humano ou implementador) e marco em que fecha. Pendência sem dono não existe — ela some.
101
+ 4. **Re-avalie a fila**: remova perguntas que ficaram sem objeto; decida itens "por regra" de resposta anterior (registre `DECIDIDA POR REGRA — segue Q-x`); desdobramentos viram itens novos — inclusive "nascidos DECIDIDOS" quando a resposta livre já os fecha.
102
+ 5. **Commit por bloco** (3–6 respostas ou fechamento de nível).
103
+
104
+ Casos especiais:
105
+
106
+ - **Resposta livre ("Other") é redesenho de primeira classe**: registre verbatim e trate como redirecionamento — pode criar itens, matar itens, ou redirecionar o processo (pedido de pesquisa, de opinião sem viés). Pedido de arbitragem sem viés (copy, naming): subagentes juízes cegos, um por alternativa, sem saber a autoria; re-apresente a MESMA pergunta numerada com o veredito ("PERGUNTA 6/16 (retomada)").
107
+ - **"Não entendi"** ou contra-pergunta: reformule e re-pergunte com contexto melhor — a falha foi da pergunta, não do usuário. Nunca siga com uma resposta que você intuiu.
108
+ - **Delegação** ("você decide"): vira ASSUMIDA com default e porquê — entra na spec como assunção, escalável por evidência contrária.
109
+
110
+ ## 6. Fechamento da entrevista
111
+
112
+ Com zero `PENDENTE`, escreva o Sumário executivo no topo da FILA.md: contagens (por classe, camada, impacto), decisões herdadas de etapas anteriores com a fonte de cada uma, decisões contra a recomendação, respostas livres registradas verbatim, riscos aceitos conscientemente, pendências com dono, e a linha "Consumo: este arquivo alimenta SPEC.md; em conflito, SPEC.md prevalece". Commit de fechamento. Siga para a fase 4 do SKILL.md.