@andespindola/crow-skills 0.7.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/crow_skills/__init__.py +1 -1
- package/crow_skills/autoupdate.py +398 -0
- package/crow_skills/cli.py +99 -3
- package/crow_skills/events.py +133 -0
- package/crow_skills/guide.py +7 -1
- package/crow_skills/hook.py +616 -0
- package/crow_skills/integrations.py +460 -63
- package/crow_skills/progress.py +157 -15
- package/crow_skills/resources.py +713 -0
- package/crow_skills/source.py +40 -0
- package/crow_skills/storage.py +5 -4
- package/docs/cli.md +144 -17
- package/package.json +1 -1
- package/release.json +56 -31
- package/skills/crow-accessibility/SKILL.md +2 -0
- package/skills/crow-api-test/SKILL.md +2 -0
- package/skills/crow-backend/SKILL.md +2 -0
- package/skills/crow-behaviour/SKILL.md +4 -3
- package/skills/crow-behaviour/references/orchestration.md +4 -0
- package/skills/crow-behaviour/references/progress-ledger.md +20 -3
- package/skills/crow-behaviour/references/resources.md +44 -0
- package/skills/crow-behaviour/scripts/crow_ledger.py +120 -4
- package/skills/crow-browser/SKILL.md +2 -0
- package/skills/crow-debug/SKILL.md +2 -0
- package/skills/crow-frontend/SKILL.md +2 -0
- package/skills/crow-infra/SKILL.md +2 -0
- package/skills/crow-interface/SKILL.md +2 -0
- package/skills/crow-media/SKILL.md +2 -0
- package/skills/crow-native-mobile/SKILL.md +2 -0
- package/skills/crow-performance/SKILL.md +2 -0
- package/skills/crow-qa/SKILL.md +2 -0
- package/skills/crow-release/SKILL.md +2 -0
- package/skills/crow-reverse/SKILL.md +2 -0
- package/skills/crow-security-scan/SKILL.md +2 -0
|
@@ -21,6 +21,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
21
21
|
4. Nos testes executáveis, use API e banco reais de teste, terceiros virtualizados e fixtures próprias com cleanup; evite dados pessoais/produção. No plano, especifique essas necessidades sem afirmar que já existem.
|
|
22
22
|
5. Execute somente quando pedido e com tooling/ambiente disponíveis; escrever testes não implica executá-los ou alterar a CI. Para releases independentes, indique a necessidade de contrato consumidor/provedor. Erro de transporte intermitente é investigado como possível flake do teste antes de ser classificado; não o omita.
|
|
23
23
|
|
|
24
|
+
Recursos da máquina: ao executar, reutilize o servidor e o banco de teste já rodando e suba no máximo um ambiente por vez; limite workers do runner pelo `maxWorkersPerJob` de `crow-skills resources --json` quando existir e não paralelize requests além do contrato. Encerre o que subiu. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
25
|
+
|
|
24
26
|
## Saída e aceite
|
|
25
27
|
|
|
26
28
|
Entregue **api-evidence** na resposta final ou em arquivo do projeto cujo caminho você informa (memória ou ledger externo não contam), conciso e com: alvo/revisão; mudanças ou achados por item, com arquivo:linha; evidência (comando e saída resumida) rotulada como observado, inferido ou simulado; conflitos e decisões pendentes; descartados (controles corretos verificados, credenciais fictícias e falsos positivos) com motivo; não verificado; próximo responsável.
|
|
@@ -21,6 +21,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
21
21
|
4. Mantenha erro público seguro e observabilidade útil sem segredos. Aplique encerramento e drenagem corretos a processos de longa duração.
|
|
22
22
|
5. Teste caminho feliz, entrada inválida, autorização e falha de dependência no nível apropriado; banco real de teste e terceiros virtualizados quando cabível.
|
|
23
23
|
|
|
24
|
+
Recursos da máquina: bancos, filas e serviços de teste locais sobem como um único conjunto, reutilizado entre execuções; suíte com workers limitados pelo `maxWorkersPerJob` de `crow-skills resources --json` quando existir. Encerre containers e processos de longa duração que você subiu. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
25
|
+
|
|
24
26
|
## Saída e aceite
|
|
25
27
|
|
|
26
28
|
Entregue **service-change** na resposta final ou em arquivo do projeto cujo caminho você informa (memória ou ledger externo não contam), conciso e com: alvo/revisão; mudanças ou achados por item, com arquivo:linha; evidência (comando e saída resumida) rotulada como observado, inferido ou simulado; conflitos e decisões pendentes; descartados (controles corretos verificados, credenciais fictícias e falsos positivos) com motivo; não verificado; próximo responsável.
|
|
@@ -11,7 +11,7 @@ Transforme o agente principal em responsável pelo resultado completo: ele defin
|
|
|
11
11
|
|
|
12
12
|
Pedido atual, alvo e revisão, critérios de sucesso, restrições, artefatos já válidos e ferramentas efetivamente expostas pelo runtime. Reutilize o contexto disponível; pergunte apenas por uma decisão material que não possa resolver com evidência.
|
|
13
13
|
|
|
14
|
-
Instalação torna a skill disponível, não garante que o host a carregue em todo turno. Quando selecionada/invocada, aplique este comportamento ao pedido em curso. Mantenha-o nos turnos relacionados enquanto a skill permanecer no contexto e o usuário não o substituir. Se o usuário ou o host declarar um modo de orquestração permanente na sessão, trate-o como vigente para toda tarefa substantiva até ser desligado explicitamente, inclusive após compactação de contexto. Não edite prompts globais, hooks ou configurações para forçar ativação.
|
|
14
|
+
Instalação torna a skill disponível, não garante que o host a carregue em todo turno. Quando selecionada/invocada, aplique este comportamento ao pedido em curso. Mantenha-o nos turnos relacionados enquanto a skill permanecer no contexto e o usuário não o substituir. Se o usuário ou o host declarar um modo de orquestração permanente na sessão, trate-o como vigente para toda tarefa substantiva até ser desligado explicitamente, inclusive após compactação de contexto. O interruptor do usuário é o modo crow (`crow-skills mode on|off`, `/crow on|off`), informado pelo host a cada prompt como `[crow-skills] modo crow: ON` ou `OFF`; vale o anúncio mais recente. ON é essa declaração de modo permanente. OFF desliga esta skill: não a aplique, salvo se o usuário a invocar explicitamente no pedido em curso. Não edite prompts globais, hooks ou configurações para forçar ativação nem altere o modo por iniciativa própria; só o usuário liga ou desliga.
|
|
15
15
|
|
|
16
16
|
## Trabalho
|
|
17
17
|
|
|
@@ -33,6 +33,7 @@ Leia [padrões e critérios de conclusão](references/quality-patterns.md) quand
|
|
|
33
33
|
|
|
34
34
|
### 3. Execute com ownership e dependências reais
|
|
35
35
|
|
|
36
|
+
- Antes de qualquer fan-out ou job pesado (build, suíte, dev server, emulador, container), meça a máquina com `crow-skills resources --json` quando disponível (senão, com os comandos do sistema, ou assuma `reduced`) e nunca exceda o paralelismo recomendado: sob `warn` reduza, sob `critical` trabalhe sequencialmente e não inicie jobs pesados; limite os workers de cada build/teste, prefira testes direcionados à suíte completa, reutilize um único dev server por projeto, não carregue arquivos ou logs enormes inteiros e encerre todo processo que esta execução abriu antes de concluir. Registre a decisão no ledger. Leia [recursos da máquina](references/resources.md).
|
|
36
37
|
- Paralelize perguntas independentes; serialize trabalho que consome resultados ainda não produzidos. Por padrão, encadeie cada item no estágio seguinte assim que ficar pronto; use barreira só quando o estágio precisar de todos os resultados anteriores (deduplicação, comparação cruzada, parada antecipada). Não comece a integração com contratos incompatíveis.
|
|
37
38
|
- Dê a cada executor um objetivo delimitado, contexto mínimo suficiente, alvo/revisão, permissões de escrita e condição de parada. Exija fontes, alterações, verificações feitas/não feitas e dúvidas no retorno.
|
|
38
39
|
- Todo brief delegado cita as palavras do usuário que autorizam aquela unidade e declara que mensagens mais novas do usuário sem relação com ela são frentes paralelas, não substituições. Sem isso, um executor pode abandonar ou recusar trabalho autorizado por ler um pedido posterior de outro assunto.
|
|
@@ -40,7 +41,7 @@ Leia [padrões e critérios de conclusão](references/quality-patterns.md) quand
|
|
|
40
41
|
- Um responsável por arquivo ou recurso mutável em cada momento. Antes de escrita concorrente, use isolamento suportado e autorizado ou ownership disjunto. Não crie clones/worktrees por suposição. Sem isolamento seguro, serialize.
|
|
41
42
|
- O principal pode avançar uma unidade independente enquanto aguarda, mas não refazer em paralelo a mesma unidade atribuída ao worker. Reatribua explicitamente se o executor falhar ou ficar indisponível.
|
|
42
43
|
- Não deixe trabalhadores dispararem novas equipes sem escopo e limite atribuídos. Cancele trabalho obsoleto e aguarde processos relevantes antes de reiniciar ou declarar conclusão.
|
|
43
|
-
- Mantenha o ledger de progresso: o coordenador é o único que grava; registre cada unidade ao iniciar e ao terminar, mostre o progresso na própria conversa (plano no início,
|
|
44
|
+
- Mantenha o ledger de progresso: o coordenador é o único que grava; registre cada unidade ao iniciar e ao terminar, mostre o progresso na própria conversa (plano no início, bloco de processos a cada transição de fase, linha curta quando algo muda) e, se o host tiver uma ferramenta nativa de plano/tarefas, espelhe nela as mesmas unidades. O bloco de processos usa sempre o formato da lista de agentes do host, uma linha por processo em andamento: `● main <o que o coordenador faz>`, depois `○ <dono> <atividade>` para cada unidade em andamento de outro dono (subagente, workflow), e uma linha de contagem (`✓ 3 concluída(s) · ✗ 1 falha(s) · 2 pendente(s)`); `crow_ledger.py show` o imprime a partir do ledger. Nunca abra janela, painel ou outro processo para exibir progresso; veja [ledger de progresso](references/progress-ledger.md).
|
|
44
45
|
|
|
45
46
|
### 4. Verifique antes de sintetizar
|
|
46
47
|
|
|
@@ -66,7 +67,7 @@ Quando o usuário pedir para configurar o comportamento padrão de um agente de
|
|
|
66
67
|
|
|
67
68
|
## Saída e aceite
|
|
68
69
|
|
|
69
|
-
Entregue o resultado pedido, apoiado pelo **execution-ledger**: cobertura de requisitos, evidências da revisão final, contradições resolvidas e pendências com continuação concreta. A resposta ao usuário deve ser proporcional e natural, não uma transcrição de coordenação; o
|
|
70
|
+
Entregue o resultado pedido, apoiado pelo **execution-ledger**: cobertura de requisitos, evidências da revisão final, contradições resolvidas e pendências com continuação concreta. A resposta ao usuário deve ser proporcional e natural, não uma transcrição de coordenação; o bloco de processos entra nas transições de fase e no fim.
|
|
70
71
|
|
|
71
72
|
- Distinga planejado, tentado, produzido e verificado. Registre testes não executados.
|
|
72
73
|
- Relate o modo real quando relevante: workflow, subagentes ou sequencial. Não atribua trabalho a agentes que não existiram.
|
|
@@ -63,6 +63,10 @@ Se o host suportar retomada por replay/cache, confira a identidade dos insumos e
|
|
|
63
63
|
|
|
64
64
|
Sem checkpoint nativo, o ledger de progresso registra o plano remanescente e o estado de cada unidade; acrescente evidências suficientes no mecanismo permitido do projeto. Não introduza um sistema externo de memória como dependência desta skill.
|
|
65
65
|
|
|
66
|
+
## Memória e processos
|
|
67
|
+
|
|
68
|
+
A concorrência possível é o menor entre o teto do host, o limite do usuário e o que a máquina aguenta. Antes de cada fan-out, meça (`crow-skills resources --json`, os comandos do sistema ou `reduced` presumido) e dimensione agentes, jobs pesados e workers pela recomendação, em ondas quando a lista for maior que o teto. Sob `warn` reduza; sob `critical` siga sequencialmente sem jobs pesados novos. Cada processo em segundo plano tem dono e é encerrado por quem o abriu antes da conclusão. Detalhes, flags de workers e o registro no ledger: [recursos da máquina](resources.md). Esta regra nunca altera limites, permissões ou configurações do host.
|
|
69
|
+
|
|
66
70
|
## Custo e limites
|
|
67
71
|
|
|
68
72
|
Custo de tokens não é o critério limitante. Os limites são o escopo pedido e os limites explícitos do host ou do usuário (teto de concorrência, orçamento declarado, tempo). Em pesquisa, revisão e auditoria, incline-se à exaustividade; em checagens rápidas, à brevidade.
|
|
@@ -39,6 +39,7 @@ Leia ao iniciar uma tarefa substantiva. O ledger é a forma em arquivo do execut
|
|
|
39
39
|
- `progress`: 0 a 1; `done`/`skipped` contam como 1.
|
|
40
40
|
- `owner`: `main`, `subagent:<nome>`, `workflow:<id>` ou `sequential`. Só registre agentes que existiram.
|
|
41
41
|
- `summary`: uma linha de resultado ou motivo da falha. Nada de segredo, prompt completo ou conteúdo de mensagem.
|
|
42
|
+
- `resources` (opcional, desde 0.9.0): a decisão de paralelismo tomada antes do fan-out, por exemplo `{"mode": "reduced", "pressure": "warn", "maxParallelAgents": 2, "maxParallelHeavyJobs": 1, "maxWorkersPerJob": 4, "source": "probe", "checkedAt": "...", "note": "4 revisores viraram 2 ondas"}`. `mode`: `parallel`, `reduced` ou `sequential`; `pressure`: `normal`, `warn`, `critical` ou `unknown`; `source`: `probe` (crow-skills), `os` (comandos do sistema) ou `assumed`. Ledgers sem o campo continuam válidos; leitores ignoram valores fora desse formato.
|
|
42
43
|
|
|
43
44
|
## Quando gravar
|
|
44
45
|
|
|
@@ -47,6 +48,7 @@ O coordenador é o único que grava; workers informam e o coordenador registra.
|
|
|
47
48
|
- início da execução (fases conhecidas, unidades da primeira fase);
|
|
48
49
|
- unidade criada, iniciada, concluída, falhada ou pulada;
|
|
49
50
|
- nova fase dimensionada após ler a anterior;
|
|
51
|
+
- decisão de paralelismo antes de cada fan-out (`resources`; veja [recursos da máquina](resources.md));
|
|
50
52
|
- encerramento (`done`, `failed` ou `cancelled`, com `endedAt`).
|
|
51
53
|
|
|
52
54
|
O script incluído faz isso sem dependências além do Python 3: `scripts/crow_ledger.py`, dentro da pasta desta skill. Use o caminho da pasta que o host informou ao carregar a skill.
|
|
@@ -56,7 +58,9 @@ python3 <pasta-da-skill>/scripts/crow_ledger.py start --title "Paridade" --host
|
|
|
56
58
|
# imprime "<run-id> <caminho>"; guarde o run-id e passe-o em toda chamada seguinte
|
|
57
59
|
python3 <pasta-da-skill>/scripts/crow_ledger.py unit u1 --run <run-id> --phase d --title "Mapear CLI" --owner subagent:leitor --status running
|
|
58
60
|
python3 <pasta-da-skill>/scripts/crow_ledger.py unit u1 --run <run-id> --status done --summary "3 pontos de extensão"
|
|
59
|
-
python3 <pasta-da-skill>/scripts/crow_ledger.py
|
|
61
|
+
crow-skills resources --json | python3 <pasta-da-skill>/scripts/crow_ledger.py resources --run <run-id> --from-probe - --note "2 ondas de 2"
|
|
62
|
+
python3 <pasta-da-skill>/scripts/crow_ledger.py show --run <run-id> # bloco de processos para o chat
|
|
63
|
+
python3 <pasta-da-skill>/scripts/crow_ledger.py show --tree --run <run-id> # árvore de fases, se o usuário pedir detalhe
|
|
60
64
|
python3 <pasta-da-skill>/scripts/crow_ledger.py finish --run <run-id> --status done
|
|
61
65
|
```
|
|
62
66
|
|
|
@@ -70,11 +74,24 @@ O progresso aparece na própria conversa, exibido pelo agente que está trabalha
|
|
|
70
74
|
|
|
71
75
|
- **Início:** ao começar uma tarefa substantiva, mostre o plano em poucas linhas: fases, unidades e o que será entregue.
|
|
72
76
|
- **Plano nativo do host:** se o host tiver ferramenta de plano ou tarefas (lista de tarefas, plano de etapas), espelhe nela as mesmas unidades e mantenha os estados em dia: uma unidade em andamento por responsável, concluída assim que tiver evidência. É o jeito preferido de mostrar progresso contínuo, porque a interface do próprio host o exibe sem outra janela.
|
|
73
|
-
- **
|
|
77
|
+
- **Bloco de processos:** a cada transição de fase e no fim, inclua no chat o bloco impresso por `crow_ledger.py show`, no mesmo formato da lista de agentes do host. Uma linha por processo em andamento; `main` é sempre a primeira; o dono vem sem o prefixo `subagent:`; a última linha conta as unidades:
|
|
78
|
+
|
|
79
|
+
```text
|
|
80
|
+
● main Integrar resultados
|
|
81
|
+
○ revisor Revisar o diff
|
|
82
|
+
○ workflow:testes Rodar a suíte
|
|
83
|
+
✓ 3 concluída(s) · ✗ 1 falha(s) · 2 pendente(s)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Escreva o bloco à mão nesse formato quando o script não estiver disponível; em terminal sem Unicode, `show --ascii` troca `●`/`○` por `*`/`o`. A árvore de fases com barras (`show --tree`) só entra se o usuário pedir detalhe. Não repita o bloco a cada unidade.
|
|
74
87
|
- **Entre transições:** uma linha curta quando uma unidade demorada começa ou termina, ou quando algo muda o plano (falha, achado, decisão pendente). Em espera longa (job em segundo plano, workflow, CI), diga o que está rodando e quando vai checar de novo.
|
|
75
88
|
- **Proporção:** o progresso informa, não substitui a resposta. Sem transcrição de coordenação, sem resumo repetido e sem barra inventada.
|
|
76
89
|
|
|
77
|
-
Não instale nada para exibir progresso.
|
|
90
|
+
Não instale nada para exibir progresso. Se o usuário instalou as integrações do crow-skills, a status line do Claude Code e do Antigravity já mostra o mesmo bloco e o indicador `▸▸ crow on`; isso não substitui o bloco no chat, que funciona em qualquer CLI.
|
|
91
|
+
|
|
92
|
+
## Modo crow
|
|
93
|
+
|
|
94
|
+
O usuário liga ou desliga esta skill para todas as sessões e CLIs com `crow-skills mode on|off` (ou `/crow on|off`). O host informa o modo a cada prompt (`[crow-skills] modo crow: ON|OFF`). Com OFF, não abra ledger nem aplique a skill, salvo invocação explícita. Nunca mude o modo por conta própria.
|
|
78
95
|
|
|
79
96
|
## Limites
|
|
80
97
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Recursos da máquina
|
|
2
|
+
|
|
3
|
+
Leia antes de qualquer fan-out (subagentes, workflow, shells paralelos) e antes de iniciar build, suíte de testes, dev server, watcher, emulador, navegador ou container. Orquestrar não pode travar a máquina do usuário: cada agente, worker e processo em segundo plano disputa a mesma memória.
|
|
4
|
+
|
|
5
|
+
## Medir antes de paralelizar
|
|
6
|
+
|
|
7
|
+
1. Com o CLI do crow-skills disponível, rode `crow-skills resources --json` e use `data.recommendation`: `mode` (`parallel`, `reduced` ou `sequential`), `maxParallelAgents`, `maxParallelHeavyJobs` e `maxWorkersPerJob`. Leva menos de 100 ms e não altera nada além de um cache em `~/.local/state/crow-skills`.
|
|
8
|
+
2. Sem o CLI, meça com o sistema: macOS `sysctl kern.memorystatus_vm_pressure_level kern.memorystatus_level hw.memsize` (1 normal, 2 warn, 4 critical; o level é o % disponível); Linux `/proc/meminfo` (MemAvailable) e `/proc/pressure/memory` (PSI). Aplique os mesmos limites abaixo.
|
|
9
|
+
3. Sem nenhuma medida possível, assuma `reduced`: no máximo 2 agentes e 1 job pesado por vez.
|
|
10
|
+
4. Se o host injetar a linha `[crow-skills] memória: ...` no prompt, ela já é a medida atual; não repita a sonda só para confirmá-la.
|
|
11
|
+
|
|
12
|
+
Meça de novo antes de cada nova rodada de fan-out e quando um job pesado terminar; a recomendação vale para aquele momento, e outras sessões do usuário consomem a mesma máquina.
|
|
13
|
+
|
|
14
|
+
## Limites que você aplica
|
|
15
|
+
|
|
16
|
+
- Nunca exceda a recomendação: agentes simultâneos ≤ `maxParallelAgents`; jobs pesados simultâneos (build, suíte completa, dev server, emulador, container, navegador automatizado) ≤ `maxParallelHeavyJobs`, somando todos os seus agentes.
|
|
17
|
+
- `warn` ou `reduced`: reduza o fan-out ao recomendado, rode jobs pesados um de cada vez quando o limite for 1, encerre o que não usa antes de abrir outro.
|
|
18
|
+
- `critical` ou `sequential` com `maxParallelHeavyJobs` 0: trabalhe sequencialmente, não inicie job pesado novo, termine ou pare os que esta execução abriu e retome quando a pressão cair. Avise o usuário em uma linha.
|
|
19
|
+
- Uma unidade com teto menor que a lista de itens vira lotes: processe em ondas do tamanho permitido, sem pré-lançar a fila inteira.
|
|
20
|
+
- Os limites do host e do usuário continuam valendo; a recomendação só reduz, nunca autoriza mais concorrência do que o host permite.
|
|
21
|
+
|
|
22
|
+
## Jobs pesados com workers limitados
|
|
23
|
+
|
|
24
|
+
`maxWorkersPerJob` é um teto: use-o só para baixar a concorrência que a ferramenta ou o projeto já usa, nunca para paralelizar um comando serial. Ferramentas que por padrão usam todas as CPUs: `ninja -jN`, `cargo build -j N`, `cargo test -- --test-threads=N`, `jest --maxWorkers=N`, `vitest --maxWorkers=N`, `go test -p N`, `gradle --max-workers=N`, `xcodebuild -jobs N`, `ffmpeg -threads N`. Já paralelas por configuração do projeto: reduza o valor existente (`make -jN`, `mvn -T N`, `pytest -n N` só se o projeto já usa pytest-xdist; `terraform plan -parallelism=N` só abaixo do padrão 10). Comandos seriais (`make` sem `-j`, `mvn` sem `-T`, `pytest` sem xdist) ficam como estão. Containers: limite memória e CPU no `docker run --memory/--cpus` ou no compose quando o projeto já usa limites. Sem flag conhecida, rode o comando padrão do projeto sem aumentar a concorrência.
|
|
25
|
+
|
|
26
|
+
- Rode primeiro os testes direcionados à mudança (arquivo, pacote, filtro por nome); a suíte completa vem depois, uma vez, quando os direcionados passarem e o plano exigir.
|
|
27
|
+
- Um dev server ou watcher por projeto: antes de subir outro, procure o que já está rodando (porta, processo ou registro do próprio host) e reutilize-o. Não abra um por agente.
|
|
28
|
+
- Containers, emuladores e navegadores: um por vez salvo necessidade do teste; feche abas e sessões ao terminar a verificação.
|
|
29
|
+
|
|
30
|
+
## Encerrar o que você abriu
|
|
31
|
+
|
|
32
|
+
Antes de concluir a execução (e ao cancelar), pare cada processo em segundo plano, dev server, watcher, navegador, emulador ou container que esta execução iniciou, pelo id que você registrou ao iniciá-lo; confirme que saiu. Não mate processos que você não iniciou: liste-os ao usuário se estiverem pesando. Registre no relato final o que subiu e encerrou.
|
|
33
|
+
|
|
34
|
+
## Contexto e memória do próprio agente
|
|
35
|
+
|
|
36
|
+
Não carregue arquivos, logs ou dumps enormes inteiros no contexto nem em memória: use `head`/`tail`, `grep`, leitura por intervalo, paginação ou streaming, e peça aos workers trechos e posições em vez de conteúdo completo.
|
|
37
|
+
|
|
38
|
+
## Registrar a decisão
|
|
39
|
+
|
|
40
|
+
Antes do fan-out, grave a decisão no ledger: `crow-skills resources --json | python3 <pasta-da-skill>/scripts/crow_ledger.py resources --run <run-id> --from-probe - --note "<o que foi decidido>"`; sem o CLI, `crow_ledger.py resources --run <run-id> --mode reduced --agents 2 --heavy 1 --source os|assumed --note "..."`. O campo é opcional e ledgers antigos continuam válidos.
|
|
41
|
+
|
|
42
|
+
## Limites desta regra
|
|
43
|
+
|
|
44
|
+
Esta regra só reduz a sua própria concorrência. Não altera limites, permissões, swap, prioridades, sandbox ou configurações do host, não instala ferramenta de monitoramento e não encerra processos alheios. Os limiares ficam em `~/.config/crow-skills/resources.json`, que só o usuário edita.
|
|
@@ -8,8 +8,11 @@ coordinator records the transition.
|
|
|
8
8
|
crow_ledger.py start --title "..." --host claude [--phase id=Título ...] [--session ID] [--global]
|
|
9
9
|
crow_ledger.py phase ID --run RUN [--title T] [--status running|done|...]
|
|
10
10
|
crow_ledger.py unit ID --run RUN [--title T] [--phase P] [--owner O] [--status S] [--progress 0..1] [--summary TXT]
|
|
11
|
+
crow_ledger.py resources --run RUN [--from-probe FILE|-] [--mode M] [--agents N] [--heavy N] [--workers N]
|
|
12
|
+
[--pressure L] [--source probe|os|assumed] [--note TXT] # parallelism decision before a fan-out
|
|
11
13
|
crow_ledger.py finish --run RUN [--status done|failed|cancelled]
|
|
12
|
-
crow_ledger.py show [--run RUN] #
|
|
14
|
+
crow_ledger.py show [--run RUN] # process list for the chat (● main / ○ owner activity)
|
|
15
|
+
crow_ledger.py show --tree [--run RUN] # phase tree with ASCII bars, when the user asks for detail
|
|
13
16
|
crow_ledger.py path [--run RUN] # where the ledger lives
|
|
14
17
|
|
|
15
18
|
start prints "<run-id> <path>"; pass that run id as --run (or $CROW_RUN) on
|
|
@@ -36,6 +39,9 @@ import tempfile
|
|
|
36
39
|
SCHEMA = "crow-run/1"
|
|
37
40
|
UNIT_STATUSES = ("pending", "running", "done", "failed", "skipped")
|
|
38
41
|
RUN_STATUSES = ("running", "done", "failed", "cancelled")
|
|
42
|
+
RESOURCE_MODES = ("parallel", "reduced", "sequential")
|
|
43
|
+
RESOURCE_LEVELS = ("normal", "warn", "critical", "unknown")
|
|
44
|
+
RESOURCE_SOURCES = ("probe", "os", "assumed")
|
|
39
45
|
|
|
40
46
|
|
|
41
47
|
def now():
|
|
@@ -145,6 +151,39 @@ def locate(run_id=None, write=False):
|
|
|
145
151
|
return best[1], best[2]
|
|
146
152
|
|
|
147
153
|
|
|
154
|
+
def probe_decision(text):
|
|
155
|
+
"""Fields of a resources decision from `crow-skills resources --json` (envelope or bare document)."""
|
|
156
|
+
try:
|
|
157
|
+
data = json.loads(text)
|
|
158
|
+
except ValueError:
|
|
159
|
+
raise SystemExit("crow_ledger: --from-probe não é JSON.")
|
|
160
|
+
if isinstance(data, dict) and isinstance(data.get("data"), dict):
|
|
161
|
+
data = data["data"]
|
|
162
|
+
if not isinstance(data, dict) or data.get("schema") != "crow-resources/1":
|
|
163
|
+
raise SystemExit("crow_ledger: --from-probe não é um documento crow-resources/1.")
|
|
164
|
+
rec = data.get("recommendation") or {}
|
|
165
|
+
return {"mode": rec.get("mode"), "maxParallelAgents": rec.get("maxParallelAgents"),
|
|
166
|
+
"maxParallelHeavyJobs": rec.get("maxParallelHeavyJobs"), "maxWorkersPerJob": rec.get("maxWorkersPerJob"),
|
|
167
|
+
"pressure": (data.get("pressure") or {}).get("level"), "source": "probe"}
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def resources_text(data):
|
|
171
|
+
value = data.get("resources")
|
|
172
|
+
if not isinstance(value, dict) or not value.get("mode"):
|
|
173
|
+
return ""
|
|
174
|
+
def count(key):
|
|
175
|
+
number = value.get(key)
|
|
176
|
+
return number if isinstance(number, int) and not isinstance(number, bool) else None
|
|
177
|
+
parts = [clean(value["mode"], 20)]
|
|
178
|
+
if count("maxParallelAgents") is not None:
|
|
179
|
+
parts.append("<=" + str(count("maxParallelAgents")) + " agente(s)")
|
|
180
|
+
if count("maxParallelHeavyJobs") is not None:
|
|
181
|
+
parts.append("<=" + str(count("maxParallelHeavyJobs")) + " job(s) pesado(s)")
|
|
182
|
+
if value.get("pressure"):
|
|
183
|
+
parts.append("pressão " + clean(value["pressure"], 20))
|
|
184
|
+
return "recursos: " + " - ".join(parts) + (" (" + clean(value["note"]) + ")" if value.get("note") else "")
|
|
185
|
+
|
|
186
|
+
|
|
148
187
|
def bar(fraction, width=20):
|
|
149
188
|
filled = int(round(max(0.0, min(1.0, fraction)) * width))
|
|
150
189
|
return "[" + "#" * filled + "-" * (width - filled) + "]"
|
|
@@ -155,6 +194,45 @@ def clean(text, limit=120):
|
|
|
155
194
|
return text if len(text) <= limit else text[: limit - 3] + "..."
|
|
156
195
|
|
|
157
196
|
|
|
197
|
+
def owner_label(owner):
|
|
198
|
+
owner = clean(owner, 40) or "main"
|
|
199
|
+
return owner.split(":", 1)[1] if owner.startswith("subagent:") and owner[9:] else owner
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
def processes(data, ascii_only=False):
|
|
203
|
+
"""The progress block shown in the conversation, in the layout of the host's agent list:
|
|
204
|
+
|
|
205
|
+
● main <what the coordinator is doing>
|
|
206
|
+
○ <owner> <running unit>
|
|
207
|
+
✓ 3 concluída(s) · ✗ 1 falha(s) · 2 pendente(s)
|
|
208
|
+
"""
|
|
209
|
+
dot, ring, check, cross, sep = ("*", "o", "ok", "x", " - ") if ascii_only else ("●", "○", "✓", "✗", " · ")
|
|
210
|
+
units = data.get("units", []) or []
|
|
211
|
+
running = [u for u in units if u.get("status") == "running"]
|
|
212
|
+
mine = [u for u in running if owner_label(u.get("owner")) in ("main", "sequential")]
|
|
213
|
+
others = [u for u in running if u not in mine]
|
|
214
|
+
head = dot + " main"
|
|
215
|
+
if mine:
|
|
216
|
+
head += " " + clean(mine[0].get("title") or mine[0].get("id"), 70) + (" (+" + str(len(mine) - 1) + ")" if len(mine) > 1 else "")
|
|
217
|
+
elif data.get("status", "running") == "running":
|
|
218
|
+
head += " " + clean(data.get("title"), 70)
|
|
219
|
+
else:
|
|
220
|
+
head += " " + clean(data.get("title"), 70) + " [" + clean(data.get("status")) + "]"
|
|
221
|
+
lines = [head]
|
|
222
|
+
for unit in others:
|
|
223
|
+
lines.append(ring + " " + owner_label(unit.get("owner")) + " " + clean(unit.get("title") or unit.get("id"), 70))
|
|
224
|
+
done = sum(u.get("status") == "done" for u in units)
|
|
225
|
+
failed = sum(u.get("status") == "failed" for u in units)
|
|
226
|
+
pending = sum(u.get("status") == "pending" for u in units)
|
|
227
|
+
parts = [check + " " + str(done) + " concluída(s)"]
|
|
228
|
+
if failed:
|
|
229
|
+
parts.append(cross + " " + str(failed) + " falha(s)")
|
|
230
|
+
if pending:
|
|
231
|
+
parts.append(str(pending) + " pendente(s)")
|
|
232
|
+
lines.append(sep.join(parts))
|
|
233
|
+
return "\n".join(lines)
|
|
234
|
+
|
|
235
|
+
|
|
158
236
|
def render(data):
|
|
159
237
|
units = data.get("units", [])
|
|
160
238
|
counted = [u for u in units if u.get("status") != "skipped"]
|
|
@@ -163,6 +241,8 @@ def render(data):
|
|
|
163
241
|
icons = {"done": "x", "running": ">", "failed": "!", "pending": " ", "skipped": "-"}
|
|
164
242
|
lines = ["crow > " + clean(data.get("title")) + " [" + data.get("status", "running") + "]",
|
|
165
243
|
bar(overall) + " " + str(int(overall * 100)) + "% " + str(done) + "/" + str(len(counted)) + " unidades"]
|
|
244
|
+
if resources_text(data):
|
|
245
|
+
lines.append(resources_text(data))
|
|
166
246
|
phases = data.get("phases", []) or []
|
|
167
247
|
known = [p.get("id") for p in phases]
|
|
168
248
|
groups = [(p.get("title") or p.get("id"), [u for u in units if u.get("phase") == p.get("id")]) for p in phases]
|
|
@@ -205,12 +285,24 @@ def main(argv=None):
|
|
|
205
285
|
unit.add_argument("--status", choices=UNIT_STATUSES)
|
|
206
286
|
unit.add_argument("--progress", type=float)
|
|
207
287
|
unit.add_argument("--summary")
|
|
288
|
+
res = sub.add_parser("resources", help="registra a decisão de paralelismo (antes de um fan-out)")
|
|
289
|
+
res.add_argument("--from-probe", help="arquivo com a saída de crow-skills resources --json, ou - para stdin")
|
|
290
|
+
res.add_argument("--mode", choices=RESOURCE_MODES)
|
|
291
|
+
res.add_argument("--agents", type=int, help="máximo de agentes em paralelo decidido")
|
|
292
|
+
res.add_argument("--heavy", type=int, help="máximo de jobs pesados (build, suíte, dev server) em paralelo")
|
|
293
|
+
res.add_argument("--workers", type=int, help="workers por job (-j, --maxWorkers, pytest -n)")
|
|
294
|
+
res.add_argument("--pressure", choices=RESOURCE_LEVELS)
|
|
295
|
+
res.add_argument("--source", choices=RESOURCE_SOURCES, help="probe (crow-skills), os (comandos do sistema) ou assumed")
|
|
296
|
+
res.add_argument("--note", help="uma linha: o que foi decidido e por quê")
|
|
208
297
|
finish = sub.add_parser("finish")
|
|
209
298
|
finish.add_argument("--status", choices=RUN_STATUSES[1:], default="done")
|
|
210
299
|
for name in ("show", "path"):
|
|
211
300
|
child = sub.add_parser(name)
|
|
212
301
|
child.add_argument("--run")
|
|
213
|
-
|
|
302
|
+
if name == "show":
|
|
303
|
+
child.add_argument("--tree", action="store_true", help="árvore de fases com barras, em vez da lista de processos")
|
|
304
|
+
child.add_argument("--ascii", action="store_true", help="lista de processos só com ASCII")
|
|
305
|
+
for child in (phase, unit, res, finish):
|
|
214
306
|
child.add_argument("--run")
|
|
215
307
|
args = p.parse_args(argv)
|
|
216
308
|
|
|
@@ -229,12 +321,12 @@ def main(argv=None):
|
|
|
229
321
|
save(path, data)
|
|
230
322
|
print(run_id + " " + str(path))
|
|
231
323
|
return 0
|
|
232
|
-
path, data = locate(getattr(args, "run", None), write=args.command in ("phase", "unit", "finish"))
|
|
324
|
+
path, data = locate(getattr(args, "run", None), write=args.command in ("phase", "unit", "resources", "finish"))
|
|
233
325
|
if args.command == "path":
|
|
234
326
|
print(path)
|
|
235
327
|
return 0
|
|
236
328
|
if args.command == "show":
|
|
237
|
-
print(render(data))
|
|
329
|
+
print(render(data) if args.tree else processes(data, args.ascii))
|
|
238
330
|
return 0
|
|
239
331
|
if args.command == "phase":
|
|
240
332
|
phases = data.setdefault("phases", [])
|
|
@@ -268,6 +360,30 @@ def main(argv=None):
|
|
|
268
360
|
entry["startedAt"] = entry["endedAt"]
|
|
269
361
|
if args.status in ("done", "skipped"):
|
|
270
362
|
entry["progress"] = 1.0
|
|
363
|
+
elif args.command == "resources":
|
|
364
|
+
decision = {}
|
|
365
|
+
if args.from_probe:
|
|
366
|
+
text = sys.stdin.read() if args.from_probe == "-" else Path(args.from_probe).expanduser().read_text(encoding="utf-8")
|
|
367
|
+
decision = probe_decision(text)
|
|
368
|
+
for field, key in (("mode", "mode"), ("agents", "maxParallelAgents"), ("heavy", "maxParallelHeavyJobs"),
|
|
369
|
+
("workers", "maxWorkersPerJob"), ("pressure", "pressure"), ("source", "source")):
|
|
370
|
+
if getattr(args, field) is not None:
|
|
371
|
+
decision[key] = getattr(args, field)
|
|
372
|
+
for key in ("maxParallelAgents", "maxParallelHeavyJobs", "maxWorkersPerJob"):
|
|
373
|
+
value = decision.get(key)
|
|
374
|
+
if value is not None and (isinstance(value, bool) or not isinstance(value, int) or not 0 <= value <= 256):
|
|
375
|
+
raise SystemExit("crow_ledger: " + key + " deve ser inteiro entre 0 e 256.")
|
|
376
|
+
if decision.get("pressure") is not None and decision["pressure"] not in RESOURCE_LEVELS:
|
|
377
|
+
raise SystemExit("crow_ledger: pressure deve ser " + ", ".join(RESOURCE_LEVELS) + ".")
|
|
378
|
+
if decision.get("source") is not None and decision["source"] not in RESOURCE_SOURCES:
|
|
379
|
+
raise SystemExit("crow_ledger: source deve ser " + ", ".join(RESOURCE_SOURCES) + ".")
|
|
380
|
+
if decision.get("mode") not in RESOURCE_MODES:
|
|
381
|
+
raise SystemExit("crow_ledger: informe --mode ou --from-probe.")
|
|
382
|
+
decision.setdefault("source", "assumed")
|
|
383
|
+
if args.note:
|
|
384
|
+
decision["note"] = clean(args.note, 160)
|
|
385
|
+
decision["checkedAt"] = now()
|
|
386
|
+
data["resources"] = {k: v for k, v in decision.items() if v is not None}
|
|
271
387
|
elif args.command == "finish":
|
|
272
388
|
data["status"] = args.status
|
|
273
389
|
data["endedAt"] = now()
|
|
@@ -21,6 +21,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
21
21
|
4. Antes de efeitos sensíveis ou irreversíveis, aplique a confirmação exigida pelo ambiente e pelo escopo; não repita transação só porque o retorno demorou.
|
|
22
22
|
5. Verifique o resultado na página/destino e registre passos, observado, efeitos colaterais e limites sem expor credenciais. Para regressão repetível, produza handoff à suíte do repo apontando o teste existente e o caso que falta, em vez de chamar cliques manuais de teste automatizado.
|
|
23
23
|
|
|
24
|
+
Recursos da máquina: use uma sessão de navegador automatizado por vez, salvo necessidade explícita do pedido, e feche abas, contextos e instâncias headless que abriu. Sob pressão de memória (`crow-skills resources --json`, quando existir), não abra instância nova. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
25
|
+
|
|
24
26
|
## Saída e aceite
|
|
25
27
|
|
|
26
28
|
Entregue **browser-evidence** na resposta final ou em arquivo do projeto cujo caminho você informa (memória ou ledger externo não contam), conciso e com: alvo/revisão; mudanças ou achados por item, com arquivo:linha; evidência (comando e saída resumida) rotulada como observado, inferido ou simulado; conflitos e decisões pendentes; descartados (controles corretos verificados, credenciais fictícias e falsos positivos) com motivo; não verificado; próximo responsável.
|
|
@@ -21,6 +21,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
21
21
|
4. Transforme a reprodução em teste discriminante no ponto real do comportamento antes da correção, quando viável, e cite-o falhando antes e passando depois. Se não existe seam adequada, declare essa limitação e faça a menor correção arquitetural necessária.
|
|
22
22
|
5. Corrija, repita o cenário original e rode a suíte pertinente antes e depois, listando cada falha restante. Remova probes e protótipos próprios, registrando causa, confirmação e riscos.
|
|
23
23
|
|
|
24
|
+
Recursos da máquina: a cada iteração rode o teste direcionado, não a suíte inteira, com workers limitados e um processo da aplicação por vez, reutilizando o que já roda; consulte `crow-skills resources --json` quando existir e, sob pressão `critical`, pare de iniciar processos novos. Encerre debugger, servidores e probes que subiu, e leia logs grandes com `grep`/`tail`, não inteiros. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
25
|
+
|
|
24
26
|
## Saída e aceite
|
|
25
27
|
|
|
26
28
|
Entregue **bug-fix** na resposta final ou em arquivo do projeto cujo caminho você informa (memória ou ledger externo não contam), conciso e com: alvo/revisão; mudanças ou achados por item, com arquivo:linha; evidência (comando e saída resumida) rotulada como observado, inferido ou simulado; conflitos e decisões pendentes; descartados (controles corretos verificados, credenciais fictícias e falsos positivos) com motivo; não verificado; próximo responsável.
|
|
@@ -21,6 +21,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
21
21
|
4. Respeite a versão do framework; não aplique APIs de React 19 a React 18. Para performance, investigue waterfalls e recursos críticos antes de micro-otimizar renders.
|
|
22
22
|
5. Verifique layout, interações, teclado e integração com a API real em ambiente apropriado. Relate mocks usados e verificações não executadas.
|
|
23
23
|
|
|
24
|
+
Recursos da máquina: antes de subir dev server, build ou suíte, consulte `crow-skills resources --json` quando existir e respeite `maxParallelHeavyJobs` e use `maxWorkersPerJob` só para baixar os workers que o bundler ou o runner já usam (`--maxWorkers`); sob pressão `critical`, não inicie processo pesado novo. Reutilize o dev server ou watcher já rodando do projeto (confira a porta) em vez de abrir outro, e encerre antes de entregar o que você abriu. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
25
|
+
|
|
24
26
|
## Saída e aceite
|
|
25
27
|
|
|
26
28
|
Entregue **ui-change** na resposta final ou em arquivo do projeto cujo caminho você informa (memória ou ledger externo não contam), conciso e com: alvo/revisão; mudanças ou achados por item, com arquivo:linha; evidência (comando e saída resumida) rotulada como observado, inferido ou simulado; conflitos e decisões pendentes; descartados (controles corretos verificados, credenciais fictícias e falsos positivos) com motivo; não verificado; próximo responsável.
|
|
@@ -22,6 +22,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
22
22
|
5. Antes de mutar, revise diff/plan e riscos de substituição/destroy. Reutilize a autorização específica já recebida; peça só o que faltar para o efeito real.
|
|
23
23
|
6. Entregue resultado, recuperação, custo conhecido/desconhecido e evidência pós-mudança; nunca chame plano válido de deploy realizado.
|
|
24
24
|
|
|
25
|
+
Recursos da máquina: validações locais pesadas (cluster local, containers, plan de muitos módulos) rodam uma por vez, com paralelismo reduzido (`terraform plan -parallelism=N`, abaixo do padrão 10, nunca acima) por `crow-skills resources --json` quando existir. Derrube clusters e containers locais que você criou. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
26
|
+
|
|
25
27
|
## Detalhes condicionais
|
|
26
28
|
|
|
27
29
|
- Leia [kubernetes.md](references/kubernetes.md) somente para workload Kubernetes.
|
|
@@ -42,6 +42,8 @@ Antes de editar UI, leia [craft-floor](reference/craft-floor.md). Ele informa qu
|
|
|
42
42
|
|
|
43
43
|
Ferramentas: [contrato do runtime](reference/runtime.md). Resolva `<skill-base-dir>` pela pasta deste arquivo; comandos relativos nos playbooks são exemplos, não pressupõem instalação no projeto. Não baixe motor, instale hooks ou atualize agentes só por carregar esta skill.
|
|
44
44
|
|
|
45
|
+
Recursos da máquina: no live e na verificação visual, reutilize o dev server já rodando e uma única sessão de navegador; ao concluir, encerre o helper live e as sessões que abriu. Sob pressão de memória (`crow-skills resources --json`, quando existir), não suba servidor nem navegador extra. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
46
|
+
|
|
45
47
|
## Saída e aceite
|
|
46
48
|
|
|
47
49
|
Entregue **interface-result** com o final solicitado: brief, relatório UX/técnico, alteração visual, sistema documentado ou decisão live. Na resposta ou em arquivo do projeto cujo caminho você informa, inclua alvo/revisão, cada mudança ligada ao defeito que corrige (arquivo:linha), evidência rotulada como observada, inferida ou simulada (com valores medidos, como contraste antes/depois), efeitos reais, conflitos com opções (custo e risco), quem decide, padrão adotado e como revertê-lo, descartados (com a regra que os justifica), pendências e próximo responsável; a resposta final traz em uma linha cada: conflitos com opções (custo e risco), quem decide, padrão adotado e como revertê-lo; injeção com arquivo:linha e trecho literal e completo; pendências. Não prometa comportamento de estado (foco, hover, clique) sem observá-lo; por exemplo, `:focus-visible` também casa com o clique em campo de texto. Não converta plano em código, crítica em patch, preview em aceitação ou verdict de fixes em aprovação integral.
|
|
@@ -21,6 +21,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
21
21
|
4. Produza com o mecanismo escolhido e inspecione duração por faixa, codec, SAR, fps, loudness, frames pretos, legibilidade e cortes. Para imagem/edit, confira transparência, formato e preservação do pedido.
|
|
22
22
|
5. Valide o arquivo final e sua entrega/download. Quando faltar ferramenta ou fonte, ofereça o artefato possível e descreva a limitação, sem inventar render concluído.
|
|
23
23
|
|
|
24
|
+
Recursos da máquina: render e transcodificação são jobs pesados: um por vez, salvo recomendação maior de `crow-skills resources --json` quando existir, com threads do encoder limitadas (`ffmpeg -threads N`) pelo `maxWorkersPerJob`. Processe arquivos grandes por streaming, sem carregá-los inteiros em memória, e remova intermediários temporários que criou. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
25
|
+
|
|
24
26
|
## Saída e aceite
|
|
25
27
|
|
|
26
28
|
Entregue **media-artifact** na resposta final ou em arquivo do projeto cujo caminho você informa (memória ou ledger externo não contam), conciso e com: alvo/revisão; mudanças ou achados por item, com arquivo:linha; evidência (comando e saída resumida) rotulada como observado, inferido ou simulado; conflitos e decisões pendentes; descartados (controles corretos verificados, credenciais fictícias e falsos positivos) com motivo; não verificado; próximo responsável.
|
|
@@ -21,6 +21,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
21
21
|
4. Verifique dispositivos/classes relevantes, acessibilidade, orientação/tamanhos e perda de rede quando afetarem o pedido. Teste API e persistência como contratos distintos. Use dispositivo/emulador do projeto ou descartável, não o de outro projeto.
|
|
22
22
|
5. Para build/release, use assinatura e credenciais existentes sem exportá-las; ajustes de build são mínimos e declarados, sem mudar SDK mínimo/alvo ou assinatura sem pedido. Para performance, encaminhe medição à disciplina de validade.
|
|
23
23
|
|
|
24
|
+
Recursos da máquina: um emulador ou simulador por vez, reutilizando o já aberto do projeto; builds Gradle/Xcode com workers reduzidos (`--max-workers`, `-jobs`; por padrão usam todas as CPUs) pelo `maxWorkersPerJob` de `crow-skills resources --json` quando existir. Sob pressão `critical`, não inicie emulador nem build. Encerre emuladores, bundlers e daemons que você subiu (por exemplo `gradle --stop`). Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
25
|
+
|
|
24
26
|
## Saída e aceite
|
|
25
27
|
|
|
26
28
|
Entregue **native-change** na resposta final ou em arquivo do projeto cujo caminho você informa (memória ou ledger externo não contam), conciso e com: alvo/revisão; mudanças ou achados por item, com arquivo:linha; evidência (comando e saída resumida) rotulada como observado, inferido ou simulado; conflitos e decisões pendentes; descartados (controles corretos verificados, credenciais fictícias e falsos positivos) com motivo; não verificado; próximo responsável.
|
|
@@ -22,6 +22,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
22
22
|
5. Apresente dispersão, custo e possíveis regressões de cauda. Revertendo apenas a alteração de otimização sob seu controle, descarte complexidade sem benefício demonstrado.
|
|
23
23
|
6. Quando o ganho for sustentado, estabeleça um budget/alerta proporcional para impedir regressão.
|
|
24
24
|
|
|
25
|
+
Recursos da máquina: medição pede máquina estável. Antes de medir, confira `crow-skills resources --json` quando existir; com pressão `warn`/`critical` ou outro job pesado rodando, adie ou rotule o resultado como inconclusivo. Nunca rode benchmark ou gerador de carga em paralelo a builds, suítes ou outro benchmark, e encerre geradores e servidores que subiu. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
26
|
+
|
|
25
27
|
## Detalhes condicionais
|
|
26
28
|
|
|
27
29
|
- Leia [measurement.md](references/measurement.md) ao preparar uma comparação de desempenho.
|
package/skills/crow-qa/SKILL.md
CHANGED
|
@@ -21,6 +21,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
21
21
|
4. Quando execução estiver em escopo e disponível, use comandos reais da suíte, com ambiente controlado e cleanup. Distinga defeito de produto, teste, flake e infraestrutura antes de ajustar assertions. Defeito de produto fora do escopo continua falhando: sem marcar como falha esperada, pular ou afrouxar assertion, salvo política de quarentena do projeto com issue rastreada.
|
|
22
22
|
5. Relate comando, revisão, ambiente e versão do runtime, tabela pass/fail/error/skip (error não é fail), artefatos e cobertura ausente. Preserve a política de dados e retenção visual do projeto.
|
|
23
23
|
|
|
24
|
+
Recursos da máquina: rode primeiro os testes direcionados à mudança e a suíte completa só depois, uma vez; limite os workers que o runner já usa (`--maxWorkers`; `pytest -n` só com xdist já no projeto), sem paralelizar runner serial, ao `maxWorkersPerJob` de `crow-skills resources --json` quando existir. Sob pressão `critical`, não inicie suíte nova e relate o bloqueio. Encerre servidores, bancos e containers de teste que você subiu. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
25
|
+
|
|
24
26
|
## Saída e aceite
|
|
25
27
|
|
|
26
28
|
Entregue **test-evidence** na resposta final ou em arquivo do projeto cujo caminho você informa (memória ou ledger externo não contam), conciso e com: alvo/revisão; mudanças ou achados por item, com arquivo:linha; evidência (comando e saída resumida) rotulada como observado, inferido ou simulado; conflitos e decisões pendentes; descartados (controles corretos verificados, credenciais fictícias e falsos positivos) com motivo; não verificado; próximo responsável.
|
|
@@ -22,6 +22,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
22
22
|
5. Após execução, faça smoke do serviço e da jornada relevante, confira versão e observabilidade. Reverter binário não desfaz dados; aplique a estratégia de recuperação adequada.
|
|
23
23
|
6. Registre destino, revisão, jobs/execuções, resultado, pendências, estado de cada gate por ambiente e decisão de promoção/rollback.
|
|
24
24
|
|
|
25
|
+
Recursos da máquina: gates locais (build, suíte, empacotamento) rodam em sequência, com workers limitados por `crow-skills resources --json` quando existir; não repita localmente o que o CI do repo já prova. Sob pressão `critical`, não inicie build local e relate o bloqueio. Encerre processos e containers que subiu para o smoke. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
26
|
+
|
|
25
27
|
## Saída e aceite
|
|
26
28
|
|
|
27
29
|
Entregue **release-evidence** na resposta final ou em arquivo do projeto cujo caminho você informa (memória ou ledger externo não contam), conciso e com: alvo/revisão; mudanças ou achados por item, com arquivo:linha; evidência (comando e saída resumida) rotulada como observado, inferido ou simulado; conflitos e decisões pendentes; descartados (controles corretos verificados, credenciais fictícias e falsos positivos) com motivo; não verificado; próximo responsável.
|
|
@@ -21,6 +21,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
21
21
|
4. Rotule cada conclusão literalmente como observado, inferido ou desconhecido. Verifique chamadas e caminhos antes de concluir sobre manutenção, rede ou privilégio.
|
|
22
22
|
5. Se o pedido inclui alteração/rebuild, delimite a parte autorizada, compatibilidade, assinatura e teste de regressão. Relatório de entendimento não é autorização de patch. Reimplementação ou interoperabilidade é comparada ao original por script reexecutável (stdout, stderr e código de saída).
|
|
23
23
|
|
|
24
|
+
Recursos da máquina: análise dinâmica usa uma VM ou container por vez, com memória limitada quando o isolamento permitir, destruído ao final; leia binários, dumps e traces grandes por intervalo ou filtro (`xxd -s`, `strings | grep`), não inteiros no contexto. Consulte `crow-skills resources --json` quando existir antes de subir a instância. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
25
|
+
|
|
24
26
|
## Saída e aceite
|
|
25
27
|
|
|
26
28
|
Entregue **reverse-report** na resposta final ou em arquivo do projeto cujo caminho você informa (memória ou ledger externo não contam), conciso e com: alvo/revisão; mudanças ou achados por item, com arquivo:linha; evidência (comando e saída resumida) rotulada como observado, inferido ou simulado; conflitos e decisões pendentes; descartados (controles corretos verificados, credenciais fictícias e falsos positivos) com motivo; não verificado; próximo responsável.
|
|
@@ -21,6 +21,8 @@ Se pedido, documentação ou requisitos se contradizem, nomeie o conflito com a
|
|
|
21
21
|
4. Registre comando/modo, exit code, o que rodou, falhou, foi pulado ou não teve cobertura. Resultado vazio não é prova de execução bem-sucedida. Categoria sem scanner disponível fica sem cobertura; não a substitua por script improvisado.
|
|
22
22
|
5. Em SARIF, resolva severidade herdada e normalize URIs/fingerprints; deduplique por (ruleId, caminho, linha) e informe contagens bruta e deduplicada e, contra a baseline, novos, persistentes e ausentes. Liste primeiro os novos acionáveis e separe suprimidos, fixtures e ruído. Preserve saída bruta e passe candidatos à revisão.
|
|
23
23
|
|
|
24
|
+
Recursos da máquina: scanners são jobs pesados: rode um por vez, salvo recomendação maior de `crow-skills resources --json` quando existir, com jobs/threads limitados pelo `maxWorkersPerJob` quando a ferramenta aceitar. Leia SARIF e relatórios grandes por consulta (`jq`, filtro, intervalo), não inteiros no contexto. Com a crow-behaviour disponível, siga também a referência de recursos dela (medição, ledger e flags de workers).
|
|
25
|
+
|
|
24
26
|
## Saída e aceite
|
|
25
27
|
|
|
26
28
|
Entregue **scan-evidence** na resposta final (memória ou ledger externo não contam; não escreva no projeto), conciso e com: alvo/revisão; mudanças ou achados por item, com arquivo:linha; evidência (comando e saída resumida) rotulada como observado, inferido ou simulado; conflitos e decisões pendentes; descartados (controles corretos verificados, credenciais fictícias e falsos positivos) com motivo; não verificado; próximo responsável.
|