@mcptoolshop/housekeeping 1.3.1 → 1.4.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 CHANGED
@@ -10,7 +10,8 @@
10
10
 
11
11
  <p align="center">
12
12
  An operational-health warehouse for a GitHub organization.<br>
13
- One sweep, one SQLite database, findings you can argue with.
13
+ One sweep, one SQLite database, findings you can argue with,<br>
14
+ and the whole-organization view an AI agent needs to coordinate every repository.
14
15
  </p>
15
16
 
16
17
  <p align="center">
@@ -36,6 +37,90 @@ It answers, for the whole organization at once:
36
37
 
37
38
  It is an audit instrument, not a fixer. It reads GitHub and changes nothing.
38
39
 
40
+ ## An agent over every repository
41
+
42
+ An organization with dozens of repositories has no single place where its
43
+ state lives. housekeeping is that place, and its MCP server, `hk-mcp`, hands
44
+ it to an AI agent. With it, one agent can act as the coordinator for the whole
45
+ organization:
46
+
47
+ 1. **Sweep.** `hk refresh` takes one snapshot of every repository.
48
+ 2. **Triage.** The agent asks what is red, what is blocked and what got worse,
49
+ and gets answers that already tell a broken mainline from stale history, and
50
+ a stuck pull request from a conflicted one.
51
+ 3. **Plan a wave.** One `hk_sql` query finds every repository with the same
52
+ shape, so a fix becomes one pull request per repository instead of a hunt.
53
+ 4. **Do the work.** housekeeping never writes. The agent opens pull requests
54
+ with its own tools, under its own permissions and your review.
55
+ 5. **Verify.** Sweep again. The finding is gone or it is not, and the change
56
+ between two snapshots is a query.
57
+
58
+ Questions an agent answers in a call or two:
59
+
60
+ - Which default branches are red, and which job and step broke?
61
+ - Which pull requests can never merge, and is the trigger or a conflict to blame?
62
+ - Which repositories carry a production advisory that GitHub shows no alert for?
63
+ - Which scheduled workflows break the rules for schedules, and how?
64
+ - What did Actions cost, and which job spent it?
65
+ - What changed since the last sweep?
66
+
67
+ | Tool | What it answers |
68
+ |---|---|
69
+ | `hk_summary` | Totals for the newest sweep: repositories, issues, pull requests, workflows, findings. |
70
+ | `hk_findings` | Findings by code, severity, category or repository; counts by code when unfiltered. A red mainline's finding names the job and step that broke. |
71
+ | `hk_ci` | Repositories whose default branch is red and the workflows that failed; also failing schedules, failing pull-request branches, and repositories with no CI. |
72
+ | `hk_repo` | One repository in full: findings, workflows, open pull requests and issues. |
73
+ | `hk_backlog` | Open pull requests or issues across the organization, oldest first. |
74
+ | `hk_health` | A health score per repository, worst first. |
75
+ | `hk_cost` | Actions spend by repository, workflow or job, gross and net apart. |
76
+ | `hk_sql` | One read-only `SELECT` or `WITH` statement against the warehouse. |
77
+ | `hk_schema` | The tables and columns, for writing `hk_sql` queries. |
78
+
79
+ Every answer comes from the newest snapshot, opened read-only. A failing call
80
+ returns a structured error, never a stack trace.
81
+
82
+ ### Connect it
83
+
84
+ ```json
85
+ {
86
+ "mcpServers": {
87
+ "housekeeping": { "command": "hk-mcp", "env": { "HK_HOME": "/path/to/warehouse" } },
88
+ "atlas": { "command": "atlas", "args": ["mcp"] }
89
+ }
90
+ }
91
+ ```
92
+
93
+ `HK_HOME` is the directory you sweep from. From a clone, use
94
+ `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]`. The second
95
+ server is [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas),
96
+ which answers the same agent about one repository at a time (see below). On
97
+ Windows, start a globally installed command through `cmd /c`.
98
+
99
+ ## housekeeping and Atlas
100
+
101
+ [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas)
102
+ (`@dogfood-lab/atlas`) maps one repository: its parts, and its doors, meaning
103
+ every workflow with what it runs, publishes and deploys. The map is committed
104
+ as `atlas/` and checked in CI. housekeeping is the organization view. The two
105
+ are built to work together.
106
+
107
+ - **Every map, swept.** A sweep reads each repository's committed map along
108
+ with everything else, and reports which repositories have none, which never
109
+ run `atlas check`, and which carry an engine behind the one the rest of the
110
+ organization pins.
111
+ - **Where a red run broke.** When a default branch is red, the finding names
112
+ the job and step that failed and, through the map, the command that step
113
+ runs, so the repair starts in the right file.
114
+ - **Deploy facts from the map.** The environment a job deploys to is taken from
115
+ the map where it records one, so both tools read a workflow the same way.
116
+ - **Warnings across the fleet.** Atlas flags a workflow step that will break
117
+ before it runs, such as a tool that needs a newer runtime than the job
118
+ installs. The report lists these for every repository at once.
119
+
120
+ An agent with both servers moves from "these twelve repositories are blocked"
121
+ (housekeeping) to "this is the workflow, the job and the files a change will
122
+ reach" (Atlas), without opening each repository by hand.
123
+
39
124
  ## Why it is shaped this way
40
125
 
41
126
  | Layer | Choice | Reason |
@@ -154,28 +239,6 @@ This repository's `.gitignore` excludes `data/`, `reports/` and
154
239
  `housekeeping.config.json`. To keep history, which is the point of snapshots,
155
240
  run the tool from a **private** repository of your own and commit them there.
156
241
 
157
- ## MCP server
158
-
159
- `hk-mcp` (or `npm run mcp` in a clone) serves the warehouse over stdio, so an
160
- assistant can ask questions without reading a multi-megabyte snapshot:
161
-
162
- `hk_summary` · `hk_findings` · `hk_ci` · `hk_repo` · `hk_backlog` ·
163
- `hk_health` · `hk_cost` · `hk_sql` · `hk_schema`
164
-
165
- ```json
166
- {
167
- "mcpServers": {
168
- "housekeeping": { "command": "hk-mcp", "env": { "HK_HOME": "/path/to/warehouse" } }
169
- }
170
- }
171
- ```
172
-
173
- `HK_HOME` is the directory you sweep from. From a clone, use
174
- `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]` instead.
175
-
176
- `hk_sql` accepts a single `SELECT` or `WITH` statement and opens the database
177
- read-only. A failing call returns a structured error, never a stack trace.
178
-
179
242
  ## Findings
180
243
 
181
244
  Rules live in `src/analyze.mjs`. Each one cites the written rule it enforces,
@@ -202,6 +265,9 @@ them produces noise:
202
265
  - **A required check nothing can emit is not a check that did not run here.**
203
266
  One says drop the requirement; the other says fix the trigger. The repairs
204
267
  contradict each other.
268
+ - **A pull request the trigger skipped is not a conflicted one.** GitHub runs
269
+ no pull-request workflow on a pull request with conflicts, so its missing
270
+ check says nothing about the trigger. That one needs a rebase.
205
271
  - **A failed run is not a cancelled one.** `cancel-in-progress` exists to kill
206
272
  superseded runs, so cancelled minutes are usually the concurrency rule working.
207
273
  - **Gross cost is not net cost.** GitHub meters public repositories at full
package/README.pt-BR.md CHANGED
@@ -10,7 +10,8 @@
10
10
 
11
11
  <p align="center">
12
12
  An operational-health warehouse for a GitHub organization.<br>
13
- One sweep, one SQLite database, findings you can argue with.
13
+ One sweep, one SQLite database, findings you can argue with,<br>
14
+ and the whole-organization view an AI agent needs to coordinate every repository.
14
15
  </p>
15
16
 
16
17
  <p align="center">
@@ -20,15 +21,14 @@
20
21
  <a href="https://mcp-tool-shop-org.github.io/housekeeping/handbook/"><img src="https://img.shields.io/badge/Handbook-read-blue" alt="Handbook" /></a>
21
22
  </p>
22
23
 
23
- Uma execução coleta o status de CI de todos os repositórios, problemas abertos e solicitações de pull,
24
+ Uma única análise coleta o status de CI de cada repositório, problemas abertos e solicitações de pull,
24
25
  lançamentos, tags de versão, arquivos de fluxo de trabalho, proteção de branch, alertas de segurança,
25
- arquivos de bloqueio e faturamento do Actions em SQLite, e, em seguida, verifica tudo em relação às
26
- regras definidas.
26
+ arquivos de bloqueio e faturamento do Actions em SQLite, e, em seguida, verifica tudo em relação às regras definidas.
27
27
 
28
28
  Ele responde, para toda a organização de uma só vez:
29
29
 
30
- - Quais branches padrão estão marcadas em vermelho e isso indica uma branch principal com problemas ou um histórico desatualizado?
31
- - Quais solicitações de pull nunca podem ser mescladas, porque uma verificação obrigatória que não emite nada está bloqueando-as?
30
+ - Quais branches padrão estão com problemas e isso indica uma branch principal com defeito ou um histórico desatualizado?
31
+ - Quais solicitações de pull nunca podem ser mescladas, porque uma verificação obrigatória não está sendo executada e as está bloqueando?
32
32
  - Quais implantações as configurações do próprio repositório rejeitam?
33
33
  - Onde `package.json`, as tags Git e o registro npm divergiram?
34
34
  - Quais fluxos de trabalho violam as regras de custo do Actions, quanto custaram e quais tarefas gastaram esse valor?
@@ -36,29 +36,112 @@ Ele responde, para toda a organização de uma só vez:
36
36
 
37
37
  É um instrumento de auditoria, não um corretor. Ele lê o GitHub e não altera nada.
38
38
 
39
- ## Por que ele tem essa estrutura:
39
+ ## Um agente em cada repositório
40
+
41
+ Uma organização com dezenas de repositórios não tem um único local onde seu
42
+ estado é armazenado. housekeeping é esse local, e seu servidor MCP, `hk-mcp`, o fornece
43
+ a um agente de IA. Com ele, um único agente pode atuar como o coordenador para toda
44
+ a organização:
45
+
46
+ 1. **Análise.** `hk refresh` coleta um instantâneo de cada repositório.
47
+ 2. **Triagem.** O agente pergunta o que está com problemas, o que está bloqueado e o que piorou,
48
+ e obtém respostas que já distinguem uma branch principal com defeito de um histórico desatualizado, e
49
+ uma solicitação de pull travada de uma com conflitos.
50
+ 3. **Planejar uma onda.** Uma consulta `hk_sql` encontra todos os repositórios com a mesma
51
+ estrutura, para que uma correção se torne uma única solicitação de pull por repositório, em vez de uma busca.
52
+ 4. **Realizar o trabalho.** housekeeping nunca grava. O agente abre solicitações de pull
53
+ com suas próprias ferramentas, sob suas próprias permissões e com sua revisão.
54
+ 5. **Verificar.** Analisar novamente. O problema desapareceu ou não, e a mudança
55
+ entre dois instantâneos é uma consulta.
56
+
57
+ Perguntas que um agente responde em uma ou duas interações:
58
+
59
+ - Quais branches padrão estão com problemas e qual tarefa e etapa causaram o problema?
60
+ - Quais solicitações de pull nunca podem ser mescladas e o gatilho ou um conflito são os culpados?
61
+ - Quais repositórios contêm um aviso de produção para o qual o GitHub não exibe nenhum alerta?
62
+ - Quais fluxos de trabalho agendados violam as regras para agendamentos e como?
63
+ - Quanto o Actions custou e qual tarefa gastou esse valor?
64
+ - O que mudou desde a última análise?
65
+
66
+ | Ferramenta | O que ela responde |
67
+ |---|---|
68
+ | `hk_summary` | Totais da análise mais recente: repositórios, problemas, solicitações de pull, fluxos de trabalho, descobertas. |
69
+ | `hk_findings` | Descobertas por código, gravidade, categoria ou repositório; contagens por código quando não filtrado. A descoberta de uma branch principal com problemas indica a tarefa e a etapa que causaram o problema. |
70
+ | `hk_ci` | Repositórios cuja branch padrão está com problemas e os fluxos de trabalho que falharam; também, agendamentos com falha, branches de solicitação de pull com falha e repositórios sem CI. |
71
+ | `hk_repo` | Um repositório completo: descobertas, fluxos de trabalho, solicitações de pull e problemas abertos. |
72
+ | `hk_backlog` | Solicitações de pull ou problemas abertos em toda a organização, da mais antiga para a mais recente. |
73
+ | `hk_health` | Uma pontuação de saúde por repositório, da pior para a melhor. |
74
+ | `hk_cost` | Gastos do Actions por repositório, fluxo de trabalho ou tarefa, bruto e líquido, separados. |
75
+ | `hk_sql` | Uma única instrução `SELECT` ou `WITH` somente leitura contra o armazém. |
76
+ | `hk_schema` | As tabelas e colunas para gravar consultas `hk_sql`. |
77
+
78
+ Cada resposta vem do instantâneo mais recente, aberto em modo somente leitura. Uma interação com falha
79
+ retorna um erro estruturado, nunca um rastreamento de pilha.
80
+
81
+ ### Conecte-o
82
+
83
+ ```json
84
+ {
85
+ "mcpServers": {
86
+ "housekeeping": { "command": "hk-mcp", "env": { "HK_HOME": "/path/to/warehouse" } },
87
+ "atlas": { "command": "atlas", "args": ["mcp"] }
88
+ }
89
+ }
90
+ ```
91
+
92
+ `HK_HOME` é o diretório do qual você realiza a análise. A partir de um clone, use
93
+ `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]`. O segundo
94
+ servidor é [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas),
95
+ que responde ao mesmo agente sobre um repositório por vez (veja abaixo). No
96
+ Windows, inicie um comando instalado globalmente por meio de `cmd /c`.
97
+
98
+ ## housekeeping e Atlas
99
+
100
+ [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas)
101
+ (`@dogfood-lab/atlas`) mapeia um repositório: suas partes e suas portas, o que significa
102
+ cada fluxo de trabalho com o que ele executa, publica e implanta. O mapa é confirmado
103
+ como `atlas/` e verificado no CI. housekeeping é a visão da organização. Os dois
104
+ são construídos para funcionar juntos.
105
+
106
+ - **Cada mapa, analisado.** Uma análise lê o mapa confirmado de cada repositório, juntamente com
107
+ tudo o mais, e relata quais repositórios não têm um, quais nunca
108
+ executam `atlas check` e quais contêm um mecanismo diferente do que o restante da
109
+ organização usa.
110
+ - **Onde uma execução com problemas falhou.** Quando uma branch padrão está com problemas, a descoberta indica
111
+ a tarefa e a etapa que falharam e, por meio do mapa, o comando que essa etapa
112
+ executa, para que a correção comece no arquivo correto.
113
+ - **Fatos de implantação do mapa.** O ambiente para o qual uma tarefa é implantada é obtido
114
+ do mapa onde ele é registrado, para que ambas as ferramentas leiam um fluxo de trabalho da mesma forma.
115
+ - **Avisos em toda a frota.** Atlas sinaliza uma etapa do fluxo de trabalho que falhará
116
+ antes de ser executada, como uma ferramenta que precisa de uma versão mais recente do tempo de execução do que a tarefa
117
+ instala. O relatório lista esses avisos para cada repositório de uma só vez.
118
+
119
+ Um agente com ambos os servidores passa de "estes doze repositórios estão bloqueados"
120
+ (housekeeping) para "este é o fluxo de trabalho, a tarefa e os arquivos que uma alteração alcançará" (Atlas), sem abrir cada repositório manualmente.
121
+
122
+ ## Por que ele tem essa estrutura
40
123
 
41
124
  | Camada | Escolha | Razão |
42
125
  |---|---|---|
43
- | Transporte | a CLI `gh` | Ele já contém seu token. A ferramenta nunca armazena ou solicita uma credencial. |
44
- | Coleta | GitHub GraphQL, paginado | Uma consulta retorna metadados, problemas abertos, solicitações de pull abertas, lançamentos e árvores de arquivos para uma página de repositórios. Uma página que continua excedendo o tempo limite é dividida ao meio e a solicitação é repetida a partir do mesmo cursor. |
45
- | Execuções do Actions | REST | O GraphQL não tem uma interface para o Actions. |
46
- | Custo do Actions | API de faturamento mais durações por tarefa | A fatura indica qual repositório; apenas as tarefas indicam qual fluxo de trabalho. Os endpoints `/timing` do GitHub retornam zeros, portanto, a soma por tarefa é reconstruída e, em seguida, reconciliada com a fatura. |
47
- | Taxas do Runner | lidas da fatura | Uma taxa faturada pode diferir do preço de tabela, e uma constante na fonte distorceria todos os números. |
48
- | Armazenamento | SQLite por meio do `node:sqlite` integrado | Sem etapa de construção nativa. |
49
- | Fonte da verdade | `data/snapshots/*.json` | Bruta, comparável e apenas para anexar. O banco de dados é derivado: `npm run rebuild` o reconstrói offline. |
50
- | Registro da execução | `data/sweeps.jsonl` | Uma linha por execução, incluindo execuções que falharam e execuções que não encontraram nada de novo. |
126
+ | Transporte | a CLI `gh` | Ela já contém seu token. A ferramenta nunca armazena ou solicita uma credencial. |
127
+ | Coleta | GitHub GraphQL, paginado | Uma consulta retorna metadados, problemas abertos, solicitações de pull abertas, lançamentos e árvores de arquivos para uma página de repositórios. Uma página que continua a atingir o tempo limite é dividida ao meio e solicitada novamente a partir do mesmo cursor. |
128
+ | Execuções do Actions | REST | GraphQL não tem uma superfície do Actions. |
129
+ | As ações têm um custo. | API de faturamento mais duração por tarefa. | A fatura indica qual repositório; apenas as tarefas indicam qual fluxo de trabalho. Os endpoints `/timing` do GitHub retornam zeros, portanto, o total por tarefa é recalculado e, em seguida, conciliado com a fatura. |
130
+ | Tarifas de execução. | Lidas da fatura. | Uma tarifa faturada pode ser diferente do preço de tabela, e uma constante na origem distorceria todos os números. |
131
+ | Armazenamento. | SQLite por meio do `node:sqlite` integrado. | Não há etapa de construção nativa. |
132
+ | Fonte da verdade. | `data/snapshots/*.json` | Bruto, comparável e apenas para anexar. O banco de dados é derivado: `npm run rebuild` o reconstrói offline. |
133
+ | Registro de varredura. | `data/sweeps.jsonl` | Uma linha por varredura, incluindo varreduras que falharam e varreduras que não encontraram nada de novo. |
51
134
 
52
- Os snapshots são imutáveis e aditivos, portanto, a diferença entre duas datas é um `JOIN`.
135
+ Os instantâneos são imutáveis e aditivos, portanto, a diferença entre duas datas é um `JOIN`.
53
136
 
54
137
  ## Requisitos
55
138
 
56
139
  - Node.js 22.5 ou posterior.
57
- - O [GitHub CLI](https://cli.github.com/), conectado (`gh auth status`) como uma
140
+ - O [GitHub CLI](https://cli.github.com/), com sessão iniciada (`gh auth status`) como uma
58
141
  conta que pode ler a organização. A leitura do faturamento e dos alertas de segurança
59
- requer o acesso correspondente; uma execução sem ele registra "não medido" e
60
- continua. Ele nunca registra uma permissão ausente como um resultado válido.
61
- - Windows ou Linux. Ele é desenvolvido no Windows e seus testes são executados no Linux em
142
+ requer o acesso correspondente; uma varredura sem ele registra "não medido" e
143
+ continua. Nunca registra uma permissão ausente como um resultado válido.
144
+ - Windows ou Linux. É desenvolvido no Windows e seus testes são executados no Linux em
62
145
  CI. O macOS deve funcionar e não é testado.
63
146
 
64
147
  ## Uso
@@ -69,9 +152,10 @@ mkdir warehouse && cd warehouse # housekeeping keeps its data here
69
152
  hk refresh your-org # collect, load, analyze, write reports/AUDIT-<date>.md
70
153
  ```
71
154
 
72
- Para manter as configurações entre as execuções, coloque um `housekeeping.config.json` nesse diretório (veja a seção Configuração); então, `hk refresh` não precisa de nenhum argumento.
155
+ Para manter as configurações entre as varreduras, coloque um `housekeeping.config.json` nesse
156
+ diretório (veja Configuração); então, `hk refresh` não precisa de nenhum argumento.
73
157
 
74
- Ou execute-o a partir de uma cópia, que mantém os seus dados na cópia:
158
+ Ou execute-o a partir de um clone, o que mantém seus dados no clone:
75
159
 
76
160
  ```bash
77
161
  git clone https://github.com/mcp-tool-shop-org/housekeeping.git
@@ -98,15 +182,15 @@ hk sql "SELECT ..." # one read-only statement
98
182
  hk help # every command and flag
99
183
  ```
100
184
 
101
- Em uma cópia sem `npm link`, cada `hk <command>` é `node src/cli.mjs <command>`.
185
+ Em um clone sem `npm link`, cada `hk <command>` é `node src/cli.mjs <command>`.
102
186
 
103
- `npm run rebuild` rederiva o banco de dados e o relatório a partir de snapshots já
104
- armazenados no disco, sem acesso à rede.
187
+ `npm run rebuild` rederiva o banco de dados e o relatório a partir de instantâneos já
188
+ armazenados em disco, sem acesso à rede.
105
189
 
106
- Uma execução completa faz algumas centenas de chamadas de API. Não execute `refresh` em um loop.
190
+ Uma varredura completa faz algumas centenas de chamadas de API. Não execute `refresh` em um loop.
107
191
 
108
192
  Os resultados são enviados para a saída padrão; o progresso e os erros são enviados para a saída de erro padrão. Cada
109
- erro imprime um código e uma dica. Códigos de saída: 0 ok, 1 erro do usuário, 2 erro de tempo de execução, 3 parcial (a execução foi concluída, com lacunas).
193
+ erro imprime um código e uma dica. Códigos de saída: 0 ok, 1 erro do usuário, 2 erro de tempo de execução, 3 parcial (a varredura foi concluída, com lacunas).
110
194
 
111
195
  ## Configuração
112
196
 
@@ -119,80 +203,64 @@ erro imprime um código e uma dica. Códigos de saída: 0 ok, 1 erro do usuário
119
203
  }
120
204
  ```
121
205
 
122
- - `org` é a organização a ser executada. `hk refresh <org>` o substitui. Sem
123
- nenhum dos dois, uma execução se recusará a iniciar.
124
- - `metaRepos` são os repositórios que contêm as configurações, ativos ou
125
- ferramentas padrão da organização, e não um produto lançado. Eles são isentos das descobertas que só
126
- fazem sentido para um produto: ausência de arquivos README, LICENSE e semelhantes, ausência de
127
- fluxos de trabalho e ausência de lançamentos.
206
+ - `org` é a organização a ser verificada. `hk refresh <org>` o substitui. Sem
207
+ nenhum dos dois, uma varredura se recusará a iniciar.
208
+ - `metaRepos` são os repositórios que contêm os padrões, ativos ou
209
+ ferramentas da organização, e não um produto lançado. Eles estão isentos das descobertas que só
210
+ fazem sentido para um produto: ausência de README, LICENSE e arquivos semelhantes, ausência
211
+ de fluxos de trabalho e ausência de lançamentos.
128
212
 
129
- Um arquivo malformado é um erro, nunca um padrão silencioso: uma chave desconhecida, um tipo incorreto ou um JSON corrompido interrompe a execução.
213
+ Um arquivo malformado é um erro, nunca um padrão silencioso: uma chave desconhecida, um
214
+ tipo incorreto ou um JSON corrompido interrompem a execução.
130
215
 
131
216
  Execute a partir de um clone, a ferramenta de organização mantém `data/`, `reports/` e o arquivo de configuração
132
217
  no clone. Execute como um pacote instalado, ele os mantém no diretório de onde
133
- você o executa ou em `HK_HOME` quando isso estiver definido.
218
+ você o executa ou em `HK_HOME` quando isso for definido.
134
219
 
135
220
  Ambiente: `HK_HOME` (onde os dados, relatórios e a configuração estão localizados),
136
221
  `HK_CONFIG` (caminho da configuração), `HK_DB` (caminho do banco de dados), `HK_LOG`
137
222
  (`silent`, `normal`, `verbose` ou `debug`), `HK_COST_REPOS` e
138
- `HK_COST_BUDGET` (limites para a passagem do custo por tarefa), `GH_PATH` (caminho para `gh`).
223
+ `HK_COST_BUDGET` (limites para o custo por tarefa), `GH_PATH` (caminho para `gh`).
139
224
 
140
225
  ## Mantenha os dados privados
141
226
 
142
- **O que uma execução grava é confidencial. Não inclua `data/` ou `reports/` em um
227
+ **O que uma varredura grava é confidencial. Não inclua `data/` ou `reports/` em um
143
228
  repositório público.**
144
229
 
145
- Um snapshot registra os nomes e as descrições dos repositórios privados, todos os
230
+ Um instantâneo registra os nomes e as descrições dos repositórios privados, todos os
146
231
  alertas de segurança abertos com o pacote que ele nomeia, arquivos de fluxo de trabalho e faturamento do Actions. O GitHub oculta deliberadamente os alertas de segurança de um repositório público de
147
- todos, exceto seus mantenedores; um snapshot publicado entregaria essa lista.
232
+ todos, exceto seus mantenedores; um instantâneo publicado entregaria essa lista.
148
233
 
149
234
  O `.gitignore` deste repositório exclui `data/`, `reports/` e
150
- `housekeeping.config.json`. Para manter o histórico, que é o objetivo dos snapshots,
151
- execute a ferramenta a partir de um repositório **privado** de sua propriedade e inclua-os lá.
152
-
153
- ## Servidor MCP
154
-
155
- `hk-mcp` (ou `npm run mcp` em uma cópia) serve os dados ao programa através do stdio, para que um assistente possa fazer perguntas sem precisar ler um arquivo de vários megabytes:
156
-
157
- `hk_summary` · `hk_findings` · `hk_ci` · `hk_repo` · `hk_backlog` ·
158
- `hk_health` · `hk_cost` · `hk_sql` · `hk_schema`
159
-
160
- ```json
161
- {
162
- "mcpServers": {
163
- "housekeeping": { "command": "hk-mcp", "env": { "HK_HOME": "/path/to/warehouse" } }
164
- }
165
- }
166
- ```
167
-
168
- `HK_HOME` é o diretório a partir do qual você executa o programa. Em uma cópia, use `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]` em vez disso.
169
-
170
- `hk_sql` aceita uma única instrução `SELECT` ou `WITH` e abre o banco de dados
171
- em modo somente leitura. Uma chamada com falha retorna um erro estruturado, nunca um rastreamento de pilha.
235
+ `housekeeping.config.json`. Para manter o histórico, que é o objetivo dos instantâneos,
236
+ execute a ferramenta a partir de um **repositório privado** e inclua-os lá.
172
237
 
173
238
  ## Descobertas
174
239
 
175
240
  As regras estão em `src/analyze.mjs`. Cada uma cita a regra escrita que ela aplica,
176
- para que uma descoberta possa ser contestada em relação a um padrão e não em relação ao gosto pessoal. As regras
241
+ portanto, uma descoberta pode ser contestada em relação a um padrão e não em relação ao gosto pessoal. As regras
177
242
  que este repositório envia estão em [`rules/`](rules/):
178
243
 
179
- - [`rules/github-actions.md`](rules/github-actions.md): filtros de caminhos, executores, tamanho da matriz, limite do arquivo de fluxo de trabalho, concorrência.
180
- - [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md): o CI deve ser aprovado, os critérios de lançamento, versões.
181
- - [`rules/repo-first.md`](rules/repo-first.md): o ramo padrão.
182
- - [`rules/atlas-map.md`](rules/atlas-map.md): um mapa registrado de cada repositório, verificado no CI.
244
+ - [`rules/github-actions.md`](rules/github-actions.md): filtros de caminho, executores, tamanho da matriz, limite do arquivo de fluxo de trabalho, concorrência.
245
+ - [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md): o CI deve ser aprovado, os portões de lançamento, versões.
246
+ - [`rules/repo-first.md`](rules/repo-first.md): o branch padrão.
247
+ - [`rules/atlas-map.md`](rules/atlas-map.md): um mapa comprometido de cada repositório, verificado no CI.
183
248
 
184
- São os padrões de uma organização. Se os seus forem diferentes, altere o arquivo de regra e a regra em conjunto.
249
+ São os padrões de uma organização. Se os seus forem diferentes, altere o arquivo de regra
250
+ e a regra juntos.
185
251
 
186
- As regras têm o cuidado de manter separados os elementos que parecem semelhantes, porque agrupá-los gera ruído:
252
+ As regras têm o cuidado de manter separados os itens que parecem semelhantes, porque combiná-los
253
+ produz ruído:
187
254
 
188
- - **Um ramo padrão vermelho não é um ramo de solicitação de pull vermelho.** Um ramo do Dependabot com falha é um acúmulo; uma execução `push` com falha no ramo padrão é uma falha. O evento da execução decide qual é.
189
- - **O histórico não é uma falha.** Um fluxo de trabalho movido para gatilhos apenas de lançamento mantém sua última falha no ramo padrão para sempre. Um fluxo de trabalho excluído mantém suas execuções. Nenhum dos dois é um defeito ativo.
255
+ - **Um ramo padrão vermelho não é um ramo de pedido de alteração vermelho.** Um ramo do Dependabot que falhou é um item pendente; uma execução `push` que falhou no ramo padrão é um problema. A execução determina qual é o caso.
256
+ - **O histórico não é um problema.** Um fluxo de trabalho movido para apenas gatilhos de lançamento mantém sua última falha no ramo padrão para sempre. Um fluxo de trabalho excluído mantém suas execuções. Nenhum dos dois é um defeito ativo.
190
257
  - **Uma verificação obrigatória que nada pode emitir não é uma verificação que não foi executada aqui.** Uma diz para remover o requisito; a outra diz para corrigir o gatilho. As correções contradizem-se.
191
- - **Uma execução com falha não é uma execução cancelada.** `cancel-in-progress` existe para encerrar execuções substituídas, portanto, os minutos cancelados geralmente são a regra de concorrência em funcionamento.
192
- - **O custo bruto não é o custo líquido.** O GitHub mede os repositórios públicos com o preço total e os reduz a zero. O bruto é o poder de computação real; o líquido é o dinheiro real. Eles nunca são somados.
193
- - **O que não é medido não é limpo.** Um repositório do GitHub que não está sendo verificado relata zero alertas. Um repositório cujo limite de custo não foi atingido não tem linha de custo. Ambos são relatados como desconhecidos.
258
+ - **Um pedido de alteração que o gatilho ignorou não é um pedido de alteração com conflitos.** O GitHub não executa nenhum fluxo de trabalho de pedido de alteração em um pedido de alteração com conflitos, portanto, sua verificação ausente não diz nada sobre o gatilho. Esse precisa de uma nova base.
259
+ - **Uma execução com falha não é uma execução cancelada.** `cancel-in-progress` existe para interromper execuções substituídas, portanto, os minutos cancelados geralmente são a regra de concorrência em funcionamento.
260
+ - **O custo bruto não é o custo líquido.** O GitHub calcula os custos de repositórios públicos com o preço total e os reduz a zero. O custo bruto é o poder de computação real; o custo líquido é o dinheiro real. Eles nunca são somados.
261
+ - **O que não é medido não é limpo.** Um repositório que o GitHub não está verificando relata zero alertas. Um repositório em que a verificação de custo não foi alcançada não tem linha de custo. Ambos são relatados como desconhecidos.
194
262
 
195
- A gravidade impulsiona uma pontuação de saúde: crítica 40, alta 15, média 6, baixa 2, informativa 0, deduzida de 100. A pontuação classifica a atenção, não a qualidade.
263
+ A gravidade impulsiona uma pontuação de saúde: crítico 40, alto 15, médio 6, baixo 2, informativo 0, deduzido de 100. A pontuação classifica a atenção, não a qualidade.
196
264
 
197
265
  O [manual](https://mcp-tool-shop-org.github.io/housekeeping/handbook/) lista cada descoberta, comando, código de erro e tabela.
198
266
 
@@ -200,7 +268,7 @@ O [manual](https://mcp-tool-shop-org.github.io/housekeeping/handbook/) lista cad
200
268
 
201
269
  - **Somente leitura.** O coletor emite consultas GraphQL e solicitações REST `GET`. Ele nunca mescla, envia, lança, publica ou edita uma configuração.
202
270
  - **Sem credenciais.** A autenticação é o que `gh` já possui. Nada é gravado em disco sobre isso.
203
- - **Sem telemetria.** Os únicos hosts contatados são a API do GitHub, por meio de `gh`, e o registro npm, para pesquisas de versão e avisos.
271
+ - **Sem telemetria.** Os únicos hosts contatados são a API do GitHub, por meio de `gh`, e o registro npm, para pesquisa de versão e avisos.
204
272
  - **O que ele armazena** é a parte sensível: veja "Mantenha os dados privados".
205
273
 
206
274
  Relate uma vulnerabilidade conforme descrito em [SECURITY.md](SECURITY.md).
@@ -211,7 +279,7 @@ Relate uma vulnerabilidade conforme descrito em [SECURITY.md](SECURITY.md).
211
279
  npm test
212
280
  ```
213
281
 
214
- Cada regra é testada em ambas as direções: a forma que deve ser ativada e a forma vizinha que não deve ser. Um verificador separado deriva novamente uma amostra de descobertas do GitHub em tempo real por meio de seu próprio transporte e ignora, em voz alta, quando não há banco de dados ou rede.
282
+ Cada regra é testada em ambas as direções: a forma que deve ser acionada e a forma vizinha que não deve ser. Um verificador separado deriva novamente uma amostra de descobertas do GitHub ativo por meio de seu próprio transporte e ignora, de forma sonora, quando não há banco de dados ou rede.
215
283
 
216
284
  ## Licença
217
285