@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/CHANGELOG.md +39 -0
- package/README.es.md +113 -70
- package/README.fr.md +145 -65
- package/README.hi.md +125 -65
- package/README.it.md +126 -65
- package/README.ja.md +111 -70
- package/README.md +89 -23
- package/README.pt-BR.md +144 -76
- package/README.zh.md +130 -66
- package/housekeeping.config.example.json +2 -1
- package/package.json +1 -1
- package/rules/atlas-map.md +6 -1
- package/rules/github-actions.md +7 -3
- package/src/analyze.mjs +148 -41
- package/src/collect.mjs +5 -2
- package/src/config.mjs +13 -4
- package/src/load.mjs +7 -3
- package/src/report.mjs +13 -9
- package/src/schema.sql +9 -1
- package/src/workflow-risks.mjs +125 -0
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
|
|
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
|
|
31
|
-
- Quais solicitações de pull nunca podem ser mescladas, porque uma verificação obrigatória
|
|
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
|
-
##
|
|
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` |
|
|
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
|
|
45
|
-
| Execuções do Actions | REST |
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
| Armazenamento | SQLite por meio do `node:sqlite` integrado |
|
|
49
|
-
| Fonte da verdade | `data/snapshots/*.json` |
|
|
50
|
-
| Registro
|
|
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
|
|
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/),
|
|
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
|
|
60
|
-
continua.
|
|
61
|
-
- Windows ou Linux.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
104
|
-
armazenados
|
|
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
|
|
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
|
|
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
|
|
123
|
-
nenhum dos dois, uma
|
|
124
|
-
- `metaRepos` são os repositórios que contêm
|
|
125
|
-
ferramentas
|
|
126
|
-
fazem sentido para um produto: 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
151
|
-
execute a ferramenta a partir de um repositório
|
|
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
|
-
|
|
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
|
|
180
|
-
- [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md): o CI deve ser aprovado, os
|
|
181
|
-
- [`rules/repo-first.md`](rules/repo-first.md): o
|
|
182
|
-
- [`rules/atlas-map.md`](rules/atlas-map.md): um mapa
|
|
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
|
|
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
|
|
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
|
|
189
|
-
- **O histórico não é
|
|
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
|
-
- **
|
|
192
|
-
- **
|
|
193
|
-
- **O
|
|
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:
|
|
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
|
|
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
|
|
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
|
|