@mcptoolshop/housekeeping 1.4.0 → 1.5.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 +30 -0
- package/README.es.md +125 -78
- package/README.fr.md +119 -114
- package/README.hi.md +74 -78
- package/README.it.md +117 -75
- package/README.ja.md +82 -79
- package/README.md +2 -0
- package/README.pt-BR.md +87 -69
- package/README.zh.md +72 -89
- package/housekeeping.config.example.json +2 -1
- package/package.json +1 -1
- package/src/cli.mjs +85 -2
- package/src/collect.mjs +74 -4
- package/src/config.mjs +13 -4
- package/src/load.mjs +55 -3
- package/src/schema.sql +26 -0
- package/src/workflow-risks.mjs +35 -2
package/README.pt-BR.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.md">
|
|
2
|
+
<a href="README.md">English</a> | <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
@@ -21,20 +21,20 @@
|
|
|
21
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>
|
|
22
22
|
</p>
|
|
23
23
|
|
|
24
|
-
Uma única
|
|
25
|
-
lançamentos, tags de versão, arquivos de fluxo de trabalho, proteção de
|
|
24
|
+
Uma única execução coleta o status de CI de cada repositório, problemas abertos e solicitações de pull,
|
|
25
|
+
lançamentos, tags de versão, arquivos de fluxo de trabalho, proteção de ramificação, alertas de segurança,
|
|
26
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
|
|
31
|
-
- Quais solicitações de pull nunca podem ser mescladas, porque uma verificação obrigatória não está sendo executada e
|
|
32
|
-
- Quais implantações
|
|
30
|
+
- Quais são os ramos padrão que estão com problemas e isso indica uma linha 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 está bloqueando-as?
|
|
32
|
+
- Quais implantações são rejeitadas pelas próprias configurações do repositório?
|
|
33
33
|
- Onde `package.json`, as tags Git e o registro npm divergiram?
|
|
34
|
-
- Quais fluxos de trabalho violam as regras de custo do Actions, quanto custaram e quais tarefas
|
|
35
|
-
- Quais repositórios contêm avisos que o
|
|
34
|
+
- Quais fluxos de trabalho violam as regras de custo do Actions, quanto custaram e quais tarefas consumiram esses recursos?
|
|
35
|
+
- Quais repositórios contêm avisos que o número de alertas do GitHub não detecta?
|
|
36
36
|
|
|
37
|
-
É um instrumento de auditoria, não um corretor. Ele lê
|
|
37
|
+
É um instrumento de auditoria, não um corretor. Ele lê GitHub e não altera nada.
|
|
38
38
|
|
|
39
39
|
## Um agente em cada repositório
|
|
40
40
|
|
|
@@ -43,35 +43,35 @@ estado é armazenado. housekeeping é esse local, e seu servidor MCP, `hk-mcp`,
|
|
|
43
43
|
a um agente de IA. Com ele, um único agente pode atuar como o coordenador para toda
|
|
44
44
|
a organização:
|
|
45
45
|
|
|
46
|
-
1. **
|
|
46
|
+
1. **Execução.** `hk refresh` captura um instantâneo de cada repositório.
|
|
47
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
|
|
48
|
+
e obtém respostas que já distinguem uma linha principal com defeito de um histórico desatualizado e
|
|
49
49
|
uma solicitação de pull travada de uma com conflitos.
|
|
50
50
|
3. **Planejar uma onda.** Uma consulta `hk_sql` encontra todos os repositórios com a mesma
|
|
51
51
|
estrutura, para que uma correção se torne uma única solicitação de pull por repositório, em vez de uma busca.
|
|
52
52
|
4. **Realizar o trabalho.** housekeeping nunca grava. O agente abre solicitações de pull
|
|
53
53
|
com suas próprias ferramentas, sob suas próprias permissões e com sua revisão.
|
|
54
|
-
5. **Verificar.**
|
|
54
|
+
5. **Verificar.** Executar novamente. A descoberta desapareceu ou não, e a mudança
|
|
55
55
|
entre dois instantâneos é uma consulta.
|
|
56
56
|
|
|
57
57
|
Perguntas que um agente responde em uma ou duas interações:
|
|
58
58
|
|
|
59
|
-
- Quais
|
|
59
|
+
- Quais são os ramos padrão que estão com problemas e qual tarefa e etapa causaram o problema?
|
|
60
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
|
|
61
|
+
- Quais repositórios contêm um aviso de produção para o qual GitHub não mostra nenhum alerta?
|
|
62
62
|
- Quais fluxos de trabalho agendados violam as regras para agendamentos e como?
|
|
63
|
-
- Quanto o Actions custou e qual tarefa
|
|
64
|
-
- O que mudou desde a última
|
|
63
|
+
- Quanto o Actions custou e qual tarefa consumiu esses recursos?
|
|
64
|
+
- O que mudou desde a última execução?
|
|
65
65
|
|
|
66
66
|
| Ferramenta | O que ela responde |
|
|
67
67
|
|---|---|
|
|
68
|
-
| `hk_summary` | Totais da
|
|
69
|
-
| `hk_findings` | Descobertas por código, gravidade, categoria ou repositório; contagens por código quando não filtrado. A descoberta de uma
|
|
70
|
-
| `hk_ci` | Repositórios
|
|
68
|
+
| `hk_summary` | Totais da execução 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 linha principal com problemas indica a tarefa e a etapa que causaram o problema. |
|
|
70
|
+
| `hk_ci` | Repositórios cujo ramo padrão está com problemas e os fluxos de trabalho que falharam; também, agendamentos com falha, ramos de solicitação de pull com falha e repositórios sem CI. |
|
|
71
71
|
| `hk_repo` | Um repositório completo: descobertas, fluxos de trabalho, solicitações de pull e problemas abertos. |
|
|
72
72
|
| `hk_backlog` | Solicitações de pull ou problemas abertos em toda a organização, da mais antiga para a mais recente. |
|
|
73
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,
|
|
74
|
+
| `hk_cost` | Gastos do Actions por repositório, fluxo de trabalho ou tarefa, separados em valores brutos e líquidos. |
|
|
75
75
|
| `hk_sql` | Uma única instrução `SELECT` ou `WITH` somente leitura contra o armazém. |
|
|
76
76
|
| `hk_schema` | As tabelas e colunas para gravar consultas `hk_sql`. |
|
|
77
77
|
|
|
@@ -89,7 +89,7 @@ retorna um erro estruturado, nunca um rastreamento de pilha.
|
|
|
89
89
|
}
|
|
90
90
|
```
|
|
91
91
|
|
|
92
|
-
`HK_HOME` é o diretório do qual você
|
|
92
|
+
`HK_HOME` é o diretório do qual você executa. De um clone, use
|
|
93
93
|
`"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]`. O segundo
|
|
94
94
|
servidor é [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas),
|
|
95
95
|
que responde ao mesmo agente sobre um repositório por vez (veja abaixo). No
|
|
@@ -103,20 +103,20 @@ cada fluxo de trabalho com o que ele executa, publica e implanta. O mapa é conf
|
|
|
103
103
|
como `atlas/` e verificado no CI. housekeeping é a visão da organização. Os dois
|
|
104
104
|
são construídos para funcionar juntos.
|
|
105
105
|
|
|
106
|
-
- **Cada mapa,
|
|
107
|
-
tudo o mais, e relata quais repositórios não têm um, quais nunca
|
|
106
|
+
- **Cada mapa, executado.** Uma execução lê o mapa confirmado de cada repositório, juntamente
|
|
107
|
+
com tudo o mais, e relata quais repositórios não têm um, quais nunca
|
|
108
108
|
executam `atlas check` e quais contêm um mecanismo diferente do que o restante da
|
|
109
109
|
organização usa.
|
|
110
|
-
- **Onde uma execução com problemas falhou.** Quando
|
|
110
|
+
- **Onde uma execução com problemas falhou.** Quando um ramo padrão está com problemas, a descoberta indica
|
|
111
111
|
a tarefa e a etapa que falharam e, por meio do mapa, o comando que essa etapa
|
|
112
112
|
executa, para que a correção comece no arquivo correto.
|
|
113
113
|
- **Fatos de implantação do mapa.** O ambiente para o qual uma tarefa é implantada é obtido
|
|
114
|
-
do mapa onde ele
|
|
114
|
+
do mapa, onde ele registra um, para que ambas as ferramentas leiam um fluxo de trabalho da mesma forma.
|
|
115
115
|
- **Avisos em toda a frota.** Atlas sinaliza uma etapa do fluxo de trabalho que falhará
|
|
116
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
117
|
instala. O relatório lista esses avisos para cada repositório de uma só vez.
|
|
118
118
|
|
|
119
|
-
Um agente com ambos os servidores passa de "
|
|
119
|
+
Um agente com ambos os servidores passa de "esses doze repositórios estão bloqueados"
|
|
120
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
121
|
|
|
122
122
|
## Por que ele tem essa estrutura
|
|
@@ -126,23 +126,23 @@ Um agente com ambos os servidores passa de "estes doze repositórios estão bloq
|
|
|
126
126
|
| Transporte | a CLI `gh` | Ela já contém seu token. A ferramenta nunca armazena ou solicita uma credencial. |
|
|
127
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
128
|
| Execuções do Actions | REST | GraphQL não tem uma superfície do Actions. |
|
|
129
|
-
|
|
|
130
|
-
|
|
|
131
|
-
| Armazenamento
|
|
132
|
-
| Fonte da verdade
|
|
133
|
-
| Registro de varredura
|
|
129
|
+
| Custo do Actions | API de faturamento mais durações por tarefa | A fatura indica qual repositório; apenas os trabalhos indicam qual fluxo de trabalho. Os pontos finais de GitHub's `/timing` retornam zeros, portanto, a soma por trabalho é reconstruída e, em seguida, reconciliada com a fatura. |
|
|
130
|
+
| Taxas de execução | lidas da fatura | Uma taxa cobrada pode diferir do preço de tabela, e uma constante na fonte distorceria todos os números. |
|
|
131
|
+
| Armazenamento | SQLite através do `node:sqlite` integrado | Sem etapa de construção nativa. |
|
|
132
|
+
| 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. |
|
|
133
|
+
| Registro de varredura | `data/sweeps.jsonl` | Uma linha por varredura, incluindo varreduras que falharam e varreduras que não encontraram nada de novo. |
|
|
134
134
|
|
|
135
135
|
Os instantâneos são imutáveis e aditivos, portanto, a diferença entre duas datas é um `JOIN`.
|
|
136
136
|
|
|
137
137
|
## Requisitos
|
|
138
138
|
|
|
139
139
|
- Node.js 22.5 ou posterior.
|
|
140
|
-
-
|
|
141
|
-
conta que pode ler a organização. A leitura
|
|
140
|
+
- A [CLI GitHub](https://cli.github.com/), conectado (`gh auth status`) como uma
|
|
141
|
+
conta que pode ler a organização. A leitura de faturas e alertas de segurança
|
|
142
142
|
requer o acesso correspondente; uma varredura sem ele registra "não medido" e
|
|
143
143
|
continua. Nunca registra uma permissão ausente como um resultado válido.
|
|
144
144
|
- Windows ou Linux. É desenvolvido no Windows e seus testes são executados no Linux em
|
|
145
|
-
CI.
|
|
145
|
+
CI. macOS deve funcionar e não é testado.
|
|
146
146
|
|
|
147
147
|
## Uso
|
|
148
148
|
|
|
@@ -175,6 +175,8 @@ hk findings # findings grouped by severity and code
|
|
|
175
175
|
hk health # per-repository health score, worst first
|
|
176
176
|
hk repo <name> # one repository in full
|
|
177
177
|
hk prs # every open pull request by age
|
|
178
|
+
hk branches # branches by state: merged, moved after merge, no PR
|
|
179
|
+
hk watch # open PRs, alerts and branches for a short watch list
|
|
178
180
|
hk versions # package.json against git tag against npm
|
|
179
181
|
hk actions # every workflow and its rule flags
|
|
180
182
|
hk cost # Actions cost, gross and net side by side
|
|
@@ -194,7 +196,7 @@ erro imprime um código e uma dica. Códigos de saída: 0 ok, 1 erro do usuário
|
|
|
194
196
|
|
|
195
197
|
## Configuração
|
|
196
198
|
|
|
197
|
-
`housekeeping.config.json`, no diretório em que a ferramenta de
|
|
199
|
+
`housekeeping.config.json`, no diretório em que a ferramenta de limpeza funciona (veja abaixo):
|
|
198
200
|
|
|
199
201
|
```json
|
|
200
202
|
{
|
|
@@ -203,75 +205,88 @@ erro imprime um código e uma dica. Códigos de saída: 0 ok, 1 erro do usuário
|
|
|
203
205
|
}
|
|
204
206
|
```
|
|
205
207
|
|
|
206
|
-
- `org` é a organização a ser
|
|
208
|
+
- `org` é a organização a ser varrida. `hk refresh <org>` o substitui. Sem
|
|
207
209
|
nenhum dos dois, uma varredura se recusará a iniciar.
|
|
208
|
-
- `metaRepos` são
|
|
209
|
-
ferramentas da organização,
|
|
210
|
-
fazem sentido para um produto: ausência de README, LICENSE e
|
|
211
|
-
|
|
210
|
+
- `metaRepos` são repositórios que contêm configurações, ativos ou
|
|
211
|
+
ferramentas padrão da organização, não um produto lançado. Eles estão isentos das descobertas que só
|
|
212
|
+
fazem sentido para um produto: ausência de arquivos README, LICENSE e semelhantes, ausência de
|
|
213
|
+
fluxos de trabalho e ausência de lançamentos.
|
|
212
214
|
|
|
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.
|
|
215
|
+
Um arquivo malformado é um erro, nunca um padrão silencioso: uma chave desconhecida, um tipo incorreto ou um JSON corrompido interrompe a execução.
|
|
215
216
|
|
|
216
|
-
Execute a partir de um clone, a ferramenta de
|
|
217
|
+
Execute a partir de um clone, a ferramenta de limpeza mantém `data/`, `reports/` e o arquivo de configuração
|
|
217
218
|
no clone. Execute como um pacote instalado, ele os mantém no diretório de onde
|
|
218
219
|
você o executa ou em `HK_HOME` quando isso for definido.
|
|
219
220
|
|
|
220
221
|
Ambiente: `HK_HOME` (onde os dados, relatórios e a configuração estão localizados),
|
|
221
222
|
`HK_CONFIG` (caminho da configuração), `HK_DB` (caminho do banco de dados), `HK_LOG`
|
|
222
223
|
(`silent`, `normal`, `verbose` ou `debug`), `HK_COST_REPOS` e
|
|
223
|
-
`HK_COST_BUDGET` (limites
|
|
224
|
+
`HK_COST_BUDGET` (limites da passagem de custo por trabalho), `GH_PATH` (caminho para `gh`).
|
|
224
225
|
|
|
225
226
|
## Mantenha os dados privados
|
|
226
227
|
|
|
227
|
-
**O que uma varredura grava é confidencial. Não
|
|
228
|
+
**O que uma varredura grava é confidencial. Não envie `data/` ou `reports/` para um
|
|
228
229
|
repositório público.**
|
|
229
230
|
|
|
230
|
-
Um instantâneo registra os nomes e as descrições
|
|
231
|
-
alertas de segurança abertos com o pacote que ele nomeia, arquivos de fluxo de trabalho e faturamento do Actions.
|
|
231
|
+
Um instantâneo registra os nomes e as descrições de repositórios privados, todos os
|
|
232
|
+
alertas de segurança abertos com o pacote que ele nomeia, arquivos de fluxo de trabalho e faturamento do Actions. GitHub oculta deliberadamente os alertas de segurança de um repositório público de
|
|
232
233
|
todos, exceto seus mantenedores; um instantâneo publicado entregaria essa lista.
|
|
233
234
|
|
|
234
235
|
O `.gitignore` deste repositório exclui `data/`, `reports/` e
|
|
235
236
|
`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
|
|
237
|
+
execute a ferramenta a partir de um **repositório privado** de sua propriedade e envie-os para lá.
|
|
237
238
|
|
|
238
239
|
## Descobertas
|
|
239
240
|
|
|
240
241
|
As regras estão em `src/analyze.mjs`. Cada uma cita a regra escrita que ela aplica,
|
|
241
|
-
portanto, uma descoberta pode ser contestada em relação a um padrão e não em relação ao gosto
|
|
242
|
+
portanto, uma descoberta pode ser contestada em relação a um padrão e não em relação ao gosto. As regras
|
|
242
243
|
que este repositório envia estão em [`rules/`](rules/):
|
|
243
244
|
|
|
244
245
|
- [`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
|
|
246
|
+
- [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md): o CI deve ser aprovado, os portões de envio, versões.
|
|
246
247
|
- [`rules/repo-first.md`](rules/repo-first.md): o branch padrão.
|
|
247
248
|
- [`rules/atlas-map.md`](rules/atlas-map.md): um mapa comprometido de cada repositório, verificado no CI.
|
|
248
249
|
|
|
249
250
|
São os padrões de uma organização. Se os seus forem diferentes, altere o arquivo de regra
|
|
250
251
|
e a regra juntos.
|
|
251
252
|
|
|
252
|
-
As regras têm o cuidado de manter separados os itens que parecem semelhantes, porque combiná-los
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
- **O histórico não é
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
- **Uma
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
253
|
+
As regras têm o cuidado de manter separados os itens que parecem semelhantes, porque combiná-los produz ruído:
|
|
254
|
+
|
|
255
|
+
- **Um branch padrão vermelho não é um branch de solicitação de pull vermelho.** Um branch Dependabot com falha é um backlog; uma execução `push` com falha no branch padrão é
|
|
256
|
+
uma falha. O evento da execução decide qual é.
|
|
257
|
+
- **O histórico não é uma falha.** Um fluxo de trabalho movido para gatilhos apenas de lançamento mantém
|
|
258
|
+
sua última falha no branch padrão para sempre. Um fluxo de trabalho excluído mantém suas execuções.
|
|
259
|
+
Nenhum deles é um defeito ativo.
|
|
260
|
+
- **Uma verificação obrigatória que nada pode emitir não é uma verificação que não foi executada aqui.**
|
|
261
|
+
Uma diz para remover o requisito; a outra diz para corrigir o gatilho. As correções
|
|
262
|
+
se contradizem.
|
|
263
|
+
- **Uma solicitação de pull que o gatilho ignorou não é uma solicitação de pull com conflitos.** GitHub não executa
|
|
264
|
+
nenhum fluxo de trabalho de solicitação de pull em uma solicitação de pull com conflitos, portanto, sua verificação ausente não diz nada sobre o gatilho. Essa precisa de uma rebase.
|
|
265
|
+
- **Uma execução com falha não é uma execução cancelada.** `cancel-in-progress` existe para matar
|
|
266
|
+
execuções substituídas, portanto, os minutos cancelados geralmente são a regra de concorrência em funcionamento.
|
|
267
|
+
- **O custo bruto não é o custo líquido.** GitHub mede repositórios públicos com o preço total
|
|
268
|
+
e os desconta para zero. O bruto é a computação real; o líquido é o dinheiro real.
|
|
269
|
+
Eles nunca são somados.
|
|
270
|
+
- **Não medido não é limpo.** Um repositório GitHub não está digitalizando relatórios
|
|
271
|
+
zero alertas. Um repositório que a passagem de custo não alcançou não tem linha de custo. Ambos
|
|
272
|
+
são relatados como desconhecidos.
|
|
273
|
+
|
|
274
|
+
A gravidade impulsiona uma pontuação de integridade: crítico 40, alto 15, médio 6, baixo 2, informativo 0,
|
|
275
|
+
deduzido de 100. A pontuação classifica a atenção, não a qualidade.
|
|
276
|
+
|
|
277
|
+
O [manual](https://mcp-tool-shop-org.github.io/housekeeping/handbook/) lista todos os resultados, comandos, códigos de erro e tabelas.
|
|
266
278
|
|
|
267
279
|
## Segurança
|
|
268
280
|
|
|
269
|
-
- **
|
|
270
|
-
|
|
271
|
-
- **Sem
|
|
281
|
+
- **Apenas leitura.** O coletor emite GraphQL consultas e solicitações REST `GET`. Ele nunca
|
|
282
|
+
combina, envia, lança, publica ou edita uma configuração.
|
|
283
|
+
- **Sem credenciais.** A autenticação é o que `gh` já possui. Nada é
|
|
284
|
+
gravado em disco a respeito.
|
|
285
|
+
- **Sem telemetria.** Os únicos servidores contactados são a API GitHub, através de `gh`,
|
|
286
|
+
e o registo npm, para verificar versões e avisos.
|
|
272
287
|
- **O que ele armazena** é a parte sensível: veja "Mantenha os dados privados".
|
|
273
288
|
|
|
274
|
-
|
|
289
|
+
Reporte uma vulnerabilidade conforme descrito em [SECURITY.md](SECURITY.md).
|
|
275
290
|
|
|
276
291
|
## Testes
|
|
277
292
|
|
|
@@ -279,7 +294,10 @@ Relate uma vulnerabilidade conforme descrito em [SECURITY.md](SECURITY.md).
|
|
|
279
294
|
npm test
|
|
280
295
|
```
|
|
281
296
|
|
|
282
|
-
Cada regra é testada em ambas as direções: a forma que deve ser
|
|
297
|
+
Cada regra é testada em ambas as direções: a forma que deve ser ativada e a
|
|
298
|
+
forma vizinha que não deve ser. Um verificador separado deriva novamente uma amostra de
|
|
299
|
+
resultados a partir de GitHub em tempo real, através do seu próprio transporte, e ignora, de forma evidente, quando
|
|
300
|
+
não há banco de dados ou rede.
|
|
283
301
|
|
|
284
302
|
## Licença
|
|
285
303
|
|
package/README.zh.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<a href="README.ja.md">日本語</a> | <a href="README.md"
|
|
2
|
+
<a href="README.md">English</a> | <a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
@@ -21,51 +21,51 @@
|
|
|
21
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>
|
|
22
22
|
</p>
|
|
23
23
|
|
|
24
|
-
一次扫描收集每个仓库的 CI
|
|
24
|
+
一次扫描收集每个仓库的 CI 状态、未解决的问题和拉取请求、发布版本、版本标签、工作流文件、分支保护、安全警报、锁文件和 Actions 账单,并将所有这些信息汇总到 SQLite 中,然后根据编写的规则对其进行审核。
|
|
25
25
|
|
|
26
26
|
它一次性回答整个组织的问题:
|
|
27
27
|
|
|
28
|
-
-
|
|
28
|
+
- 哪些默认分支显示为红色,这是否表示主线出现问题或历史记录已过时?
|
|
29
29
|
- 哪些拉取请求永远无法合并,因为一个必需的检查未发出,从而阻止了它们?
|
|
30
30
|
- 哪些部署被仓库自身的设置拒绝?
|
|
31
31
|
- `package.json`、Git 标签和 npm 注册表之间的差异在哪里?
|
|
32
32
|
- 哪些工作流违反了 Actions 成本规则,它们花费了多少,哪些任务花费了这些成本?
|
|
33
33
|
- 哪些仓库包含 GitHub 自身的警报计数未识别的建议?
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
它是一个审计工具,而不是一个修复工具。它读取 GitHub,但不进行任何更改。
|
|
36
36
|
|
|
37
37
|
## 每个仓库都有一个代理
|
|
38
38
|
|
|
39
39
|
拥有数十个仓库的组织没有一个统一的地方来存储其状态。housekeeping 就是这个地方,它的 MCP 服务器 `hk-mcp` 将数据提供给一个 AI 代理。通过它,一个代理可以充当整个组织的协调器:
|
|
40
40
|
|
|
41
|
-
1. **扫描。** `hk refresh`
|
|
42
|
-
2. **分类。**
|
|
43
|
-
3. **规划一个批次。** 一个 `hk_sql`
|
|
41
|
+
1. **扫描。** `hk refresh` 对每个仓库进行一次快照。
|
|
42
|
+
2. **分类。** 代理询问哪些内容显示为红色、哪些内容被阻止以及哪些内容变得更糟,并获得答案,这些答案可以区分出现问题的主线和过时的历史记录,以及区分停滞的拉取请求和冲突的拉取请求。
|
|
43
|
+
3. **规划一个批次。** 一个 `hk_sql` 查询找到所有具有相同特征的仓库,因此修复可以变成每个仓库的一个拉取请求,而不是进行搜索。
|
|
44
44
|
4. **执行工作。** housekeeping 从不进行写入。代理使用自己的工具,在自己的权限下打开拉取请求,并由您进行审核。
|
|
45
|
-
5. **验证。**
|
|
45
|
+
5. **验证。** 再次扫描。如果发现的问题已解决,或者没有解决,那么两次快照之间的差异就是一个查询。
|
|
46
46
|
|
|
47
47
|
代理在一次或两次调用中回答的问题:
|
|
48
48
|
|
|
49
|
-
-
|
|
49
|
+
- 哪些默认分支显示为红色,以及哪个任务和步骤导致了问题?
|
|
50
50
|
- 哪些拉取请求永远无法合并,是触发器还是冲突导致了问题?
|
|
51
|
-
-
|
|
52
|
-
-
|
|
53
|
-
- Actions
|
|
51
|
+
- 哪些仓库包含一个生产建议,而 GitHub 没有显示任何警报?
|
|
52
|
+
- 哪些计划的工作流违反了计划规则,以及如何违反?
|
|
53
|
+
- Actions 花费了多少,哪个任务花费了这些成本?
|
|
54
54
|
- 自上次扫描以来,发生了哪些变化?
|
|
55
55
|
|
|
56
56
|
| 工具 | 它回答的问题 |
|
|
57
57
|
|---|---|
|
|
58
58
|
| `hk_summary` | 最新扫描的总计:仓库、问题、拉取请求、工作流、发现。 |
|
|
59
|
-
| `hk_findings` |
|
|
59
|
+
| `hk_findings` | 按代码、严重程度、类别或仓库分类的发现;未筛选时,按代码进行计数。红色主线的发现会显示导致问题的任务和步骤。 |
|
|
60
60
|
| `hk_ci` | 默认分支显示为红色的仓库以及失败的工作流;还包括失败的计划、失败的拉取请求分支以及没有 CI 的仓库。 |
|
|
61
61
|
| `hk_repo` | 完整的单个仓库:发现、工作流、未解决的拉取请求和问题。 |
|
|
62
62
|
| `hk_backlog` | 整个组织中未解决的拉取请求或问题,按时间顺序排列。 |
|
|
63
63
|
| `hk_health` | 每个仓库的健康评分,按从好到坏的顺序排列。 |
|
|
64
|
-
| `hk_cost` | Actions
|
|
65
|
-
| `hk_sql` |
|
|
66
|
-
| `hk_schema` |
|
|
64
|
+
| `hk_cost` | 按仓库、工作流或任务分类的 Actions 支出,区分总支出和净支出。 |
|
|
65
|
+
| `hk_sql` | 一个只读 `SELECT` 或 `WITH` 语句,用于查询仓库。 |
|
|
66
|
+
| `hk_schema` | 用于编写 `hk_sql` 查询的表和列。 |
|
|
67
67
|
|
|
68
|
-
|
|
68
|
+
每个答案都来自最新的快照,并且以只读方式打开。如果调用失败,则返回一个结构化的错误,而不是堆栈跟踪。
|
|
69
69
|
|
|
70
70
|
### 连接它
|
|
71
71
|
|
|
@@ -78,43 +78,43 @@
|
|
|
78
78
|
}
|
|
79
79
|
```
|
|
80
80
|
|
|
81
|
-
`HK_HOME`
|
|
81
|
+
`HK_HOME` 是您从中进行扫描的目录。从克隆副本开始,使用 `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]`。第二个服务器是 [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas),它回答关于单个仓库的相同代理的问题(请参见下文)。在 Windows 上,通过 `cmd /c` 启动全局安装的命令。
|
|
82
82
|
|
|
83
83
|
## housekeeping 和 Atlas
|
|
84
84
|
|
|
85
|
-
[Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas)
|
|
85
|
+
[Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas)
|
|
86
|
+
(`@dogfood-lab/atlas`) 将一个仓库(包括其组成部分和入口)映射出来,即
|
|
87
|
+
映射每个工作流程以及它所运行、发布和部署的内容。该映射会被提交
|
|
88
|
+
为 `atlas/`,并在 CI 中进行检查。组织视图即为“家务管理”。两者
|
|
89
|
+
的设计目的是协同工作。
|
|
86
90
|
|
|
87
|
-
- **每个映射,都进行扫描。** 扫描读取每个仓库的已提交映射以及所有其他内容,并报告哪些仓库没有映射,哪些仓库从未运行 `atlas check
|
|
88
|
-
- **红色运行失败的位置。**
|
|
89
|
-
- **从映射中获取部署事实。**
|
|
90
|
-
- **整个组织中的警告。** Atlas
|
|
91
|
+
- **每个映射,都进行扫描。** 扫描读取每个仓库的已提交映射以及所有其他内容,并报告哪些仓库没有映射,哪些仓库从未运行 `atlas check`,以及哪些仓库使用与组织中其他仓库使用的不同的引擎。
|
|
92
|
+
- **红色运行失败的位置。** 当默认分支显示为红色时,该发现会显示失败的任务和步骤,并通过映射显示该步骤运行的命令,因此修复从正确的文件开始。
|
|
93
|
+
- **从映射中获取部署事实。** 工作流部署到的环境是从映射中获取的,映射中记录了该环境,因此这两个工具以相同的方式读取工作流。
|
|
94
|
+
- **整个组织中的警告。** Atlas 标记一个工作流步骤,该步骤将在运行之前失败,例如需要比任务安装的更新运行时环境的工具。该报告一次性列出所有仓库中的这些步骤。
|
|
91
95
|
|
|
92
|
-
|
|
96
|
+
使用这两个服务器的代理可以从“这十二个仓库被阻止” (housekeeping) 变为“这是工作流、任务和更改将影响的文件” (Atlas),而无需手动打开每个仓库。
|
|
93
97
|
|
|
94
98
|
## 为什么它具有这种结构
|
|
95
99
|
|
|
96
100
|
| 层 | 选择 | 原因 |
|
|
97
101
|
|---|---|---|
|
|
98
|
-
| 传输 | `gh` CLI |
|
|
99
|
-
| 收集 | GitHub GraphQL,分页 |
|
|
102
|
+
| 传输 | `gh` CLI | 它已经拥有您的令牌。该工具从不存储或请求任何凭据。 |
|
|
103
|
+
| 收集 | GitHub GraphQL,分页 | 一个查询返回元数据、未解决的问题、未解决的拉取请求、发布版本和文件树,用于一页仓库。如果一页的查询超时,则将其减半并从相同的游标重新查询。 |
|
|
100
104
|
| Actions 运行 | REST | GraphQL 没有 Actions 接口。 |
|
|
101
|
-
|
|
|
102
|
-
| 运行器费率 | 从发票中读取 |
|
|
103
|
-
| 存储 |
|
|
104
|
-
| 事实来源 | `data/snapshots/*.json` |
|
|
105
|
+
| Actions 成本 | 计费 API 加上每个任务的持续时间 | 发票上会显示哪个仓库;只有作业会显示哪个工作流程。GitHub的`/timing`端点返回零,因此会重新计算每个作业的总和,然后与发票进行核对。 |
|
|
106
|
+
| 运行器费率 | 从发票中读取 | 已结算的费率可能与定价表中的价格不同,并且源中的常量会错误地显示每个数字。 |
|
|
107
|
+
| 存储 | 通过内置的`node:sqlite`,使用SQLite | 没有本地构建步骤。 |
|
|
108
|
+
| 事实来源 | `data/snapshots/*.json` | 原始、可比较且仅追加。数据库是派生的:`npm run rebuild`会离线重建它。 |
|
|
105
109
|
| 扫描日志 | `data/sweeps.jsonl` | 每条扫描记录一行,包括失败的扫描和未发现任何新内容的扫描。 |
|
|
106
110
|
|
|
107
|
-
|
|
111
|
+
快照是不可变的且具有累积性,因此两个日期之间的差异是`JOIN`。
|
|
108
112
|
|
|
109
113
|
## 要求
|
|
110
114
|
|
|
111
115
|
- Node.js 22.5 或更高版本。
|
|
112
|
-
- [GitHub CLI](https://cli.github.com/)
|
|
113
|
-
|
|
114
|
-
需要相应的权限;如果没有,扫描会记录“未测量”并
|
|
115
|
-
继续。它绝不会将缺少权限记录为干净的结果。
|
|
116
|
-
- Windows 或 Linux。它在 Windows 上开发,其测试在 Linux 上运行
|
|
117
|
-
CI。macOS 应该可以工作,但未进行测试。
|
|
116
|
+
- [GitHub CLI](https://cli.github.com/),已登录(作为可以读取组织的账户),登录账户为`gh auth status`。读取计费和安全警报需要相应的权限;如果没有这些权限,扫描会记录“未测量”,然后继续。它绝不会将缺少权限记录为干净的结果。
|
|
117
|
+
- Windows 或 Linux。它在 Windows 上开发,其测试在 CI 中在 Linux 上运行。macOS应该可以工作,但未进行测试。
|
|
118
118
|
|
|
119
119
|
## 使用方法
|
|
120
120
|
|
|
@@ -124,8 +124,7 @@ mkdir warehouse && cd warehouse # housekeeping keeps its data here
|
|
|
124
124
|
hk refresh your-org # collect, load, analyze, write reports/AUDIT-<date>.md
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
-
|
|
128
|
-
文件(请参阅“配置”);然后 `hk refresh` 不需要任何参数。
|
|
127
|
+
为了在扫描之间保留设置,请在该目录中放置一个`housekeeping.config.json`(参见“配置”);然后`hk refresh`不需要任何参数。
|
|
129
128
|
|
|
130
129
|
或者从克隆运行,这样它的数据将保存在克隆中:
|
|
131
130
|
|
|
@@ -147,6 +146,8 @@ hk findings # findings grouped by severity and code
|
|
|
147
146
|
hk health # per-repository health score, worst first
|
|
148
147
|
hk repo <name> # one repository in full
|
|
149
148
|
hk prs # every open pull request by age
|
|
149
|
+
hk branches # branches by state: merged, moved after merge, no PR
|
|
150
|
+
hk watch # open PRs, alerts and branches for a short watch list
|
|
150
151
|
hk versions # package.json against git tag against npm
|
|
151
152
|
hk actions # every workflow and its rule flags
|
|
152
153
|
hk cost # Actions cost, gross and net side by side
|
|
@@ -154,20 +155,17 @@ hk sql "SELECT ..." # one read-only statement
|
|
|
154
155
|
hk help # every command and flag
|
|
155
156
|
```
|
|
156
157
|
|
|
157
|
-
|
|
158
|
+
在没有`npm link`的克隆中,每次`hk <command>`都是`node src/cli.mjs <command>`。
|
|
158
159
|
|
|
159
|
-
`npm run rebuild
|
|
160
|
-
存储在磁盘上的快照,无需网络访问。
|
|
160
|
+
`npm run rebuild`会重新从已在磁盘上的快照中派生数据库和报告,无需网络访问。
|
|
161
161
|
|
|
162
|
-
|
|
162
|
+
一次完整的扫描会进行几百次 API 调用。请勿在循环中运行`refresh`。
|
|
163
163
|
|
|
164
|
-
|
|
165
|
-
错误都会打印一个代码和一个提示。退出代码:0 表示正常,1 表示用户错误,2 表示运行时
|
|
166
|
-
错误,3 表示部分(扫描已完成,但存在差距)。
|
|
164
|
+
结果输出到标准输出;进度和错误输出到标准错误。每个错误都会打印一个代码和一个提示。退出代码:0 表示正常,1 表示用户错误,2 表示运行时错误,3 表示部分完成(扫描已完成,但存在差距)。
|
|
167
165
|
|
|
168
166
|
## 配置
|
|
169
167
|
|
|
170
|
-
`housekeeping.config.json`,位于 housekeeping
|
|
168
|
+
`housekeeping.config.json`,位于 housekeeping 运行的目录中(参见下文):
|
|
171
169
|
|
|
172
170
|
```json
|
|
173
171
|
{
|
|
@@ -176,73 +174,58 @@ hk help # every command and flag
|
|
|
176
174
|
}
|
|
177
175
|
```
|
|
178
176
|
|
|
179
|
-
- `org
|
|
180
|
-
|
|
181
|
-
- `metaRepos` 是包含组织默认设置、资源或
|
|
182
|
-
工具的仓库,而不是已发布的最终产品。它们不适用于仅
|
|
183
|
-
对最终产品有意义的发现:缺少 README、LICENSE 和类似文件,没有
|
|
184
|
-
工作流程,以及没有发布。
|
|
177
|
+
- `org`是要扫描的组织。`hk refresh <org>`会覆盖它。如果两者都没有,扫描将拒绝启动。
|
|
178
|
+
- `metaRepos`是包含组织默认设置、资产或工具的仓库,而不是已发布的最终产品。它们不包括仅对最终产品有意义的发现:缺少 README、LICENSE 和类似文件,没有工作流程,没有发布。
|
|
185
179
|
|
|
186
|
-
|
|
187
|
-
类型或损坏的 JSON 会停止运行。
|
|
180
|
+
格式不正确的文件是一个错误,绝不会是无声的默认值:未知的键、错误的类型或损坏的 JSON 会停止运行。
|
|
188
181
|
|
|
189
|
-
|
|
190
|
-
in the clone. Run as an installed package, it keeps them in the directory you
|
|
191
|
-
run it from, or in `HK_HOME` when that is set.
|
|
182
|
+
从克隆运行,housekeeping 会将`data/`、`reports/`和配置文件保存在克隆中。作为已安装的软件包运行,它会将它们保存在您运行它的目录中,或者在设置了`HK_HOME`时保存在那里。
|
|
192
183
|
|
|
193
|
-
环境:`HK_HOME
|
|
194
|
-
`HK_CONFIG`(配置路径)、`HK_DB`(数据库路径)、`HK_LOG`
|
|
195
|
-
(`silent`、`normal`、`verbose` 或 `debug`)、`HK_COST_REPOS` 和
|
|
196
|
-
`HK_COST_BUDGET`(每个作业成本的上限)、`GH_PATH`(`gh` 的路径)。
|
|
184
|
+
环境:`HK_HOME`(数据、报告和配置所在的位置)、`HK_CONFIG`(配置路径)、`HK_DB`(数据库路径)、`HK_LOG`(`silent`、`normal`、`verbose`或`debug`)、`HK_COST_REPOS`和`HK_COST_BUDGET`(每个作业成本限制)、`GH_PATH`(`gh`的路径)。
|
|
197
185
|
|
|
198
186
|
## 保护数据
|
|
199
187
|
|
|
200
|
-
|
|
201
|
-
公共仓库。**
|
|
188
|
+
**扫描写入的内容是敏感信息。请勿将`data/`或`reports/`提交到公共仓库。**
|
|
202
189
|
|
|
203
|
-
|
|
204
|
-
公开的安全警报以及它引用的软件包、工作流程文件和 Actions
|
|
205
|
-
计费。GitHub 会故意将公共仓库的安全警报隐藏起来,只向其维护者显示;发布的快照会将该列表提供给所有人。
|
|
190
|
+
快照会记录私有仓库的名称和描述、每个与该仓库关联的开放安全警报、工作流程文件和 Actions 计费。GitHub会故意将公共仓库的安全警报从所有人(包括其维护者)那里隐藏;发布的快照会将该列表提供给所有人。
|
|
206
191
|
|
|
207
|
-
|
|
208
|
-
`housekeeping.config.json`。为了保留历史记录,这是快照的目的,
|
|
209
|
-
请从您自己的**私有**仓库运行该工具,并将它们提交到那里。
|
|
192
|
+
此仓库的`.gitignore`不包括`data/`、`reports/`和`housekeeping.config.json`。为了保留历史记录(这是快照的目的),请从您自己的**私有**仓库运行该工具,并将它们提交到那里。
|
|
210
193
|
|
|
211
194
|
## 发现
|
|
212
195
|
|
|
213
|
-
|
|
214
|
-
因此可以针对标准而不是针对个人喜好来争论发现。此仓库提供的规则位于 [`rules/`](rules/) 中:
|
|
196
|
+
规则位于`src/analyze.mjs`中。每个规则都引用了它所执行的书面规则,因此可以针对标准而不是针对个人喜好来争论发现结果。此仓库提供的规则位于[`rules/`](rules/)中:
|
|
215
197
|
|
|
216
198
|
- [`rules/github-actions.md`](rules/github-actions.md):路径过滤器、运行器、矩阵大小、工作流程文件限制、并发。
|
|
217
199
|
- [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md):CI 必须通过、发布门控、版本。
|
|
218
200
|
- [`rules/repo-first.md`](rules/repo-first.md):默认分支。
|
|
219
201
|
- [`rules/atlas-map.md`](rules/atlas-map.md):每个仓库的已提交映射,在 CI 中进行检查。
|
|
220
202
|
|
|
221
|
-
|
|
222
|
-
和规则。
|
|
203
|
+
这些是一个组织的标准。如果您的标准不同,请同时更改规则文件和规则。
|
|
223
204
|
|
|
224
205
|
规则会注意区分看起来相似的事物,因为将它们合并会产生噪音:
|
|
225
206
|
|
|
226
|
-
-
|
|
227
|
-
-
|
|
228
|
-
-
|
|
229
|
-
-
|
|
230
|
-
-
|
|
231
|
-
-
|
|
232
|
-
-
|
|
207
|
+
- **红色默认分支与红色拉取请求分支不同。** 失败的 Dependabot 分支是积压;在默认分支上失败的`push`运行是中断。事件决定了哪种情况。
|
|
208
|
+
- **历史记录不是中断。** 移动到仅发布触发器的工作流程会永久保留其上次默认分支的失败。删除的工作流程会保留其运行记录。两者都不是实时缺陷。
|
|
209
|
+
- **无法发出任何内容的必需检查不是未运行的检查。** 一个表示删除该要求;另一个表示修复触发器。这些修复相互矛盾。
|
|
210
|
+
- **触发器跳过的拉取请求不是冲突的请求。** GitHub不会在具有冲突的拉取请求上运行任何拉取请求工作流程,因此其缺失的检查不会说明触发器。后者需要重新提交。
|
|
211
|
+
- **失败的运行不是已取消的运行。** `cancel-in-progress`用于终止过时的运行,因此取消的分钟通常是并发规则在起作用。
|
|
212
|
+
- **总成本不是净成本。** GitHub以全价对公共仓库进行计量,然后将其折扣为零。总成本是实际的计算量;净成本是实际的支出。两者绝不会相加。
|
|
213
|
+
- **未测量不是干净。** 仓库GitHub不会扫描报告零个警报。成本通行证未到达的仓库没有成本行。两者都报告为未知。
|
|
233
214
|
|
|
234
|
-
|
|
215
|
+
严重程度会影响健康评分:严重 40,高 15,中等 6,低 2,信息 0,从 100 中扣除。评分衡量的是需要关注的程度,而不是质量。
|
|
235
216
|
|
|
236
|
-
[手册](https://mcp-tool-shop-org.github.io/housekeeping/handbook/)
|
|
217
|
+
[手册](https://mcp-tool-shop-org.github.io/housekeeping/handbook/)
|
|
218
|
+
列出了所有发现、命令、错误代码和表格。
|
|
237
219
|
|
|
238
220
|
## 安全性
|
|
239
221
|
|
|
240
|
-
- **只读。** 收集器会发出 GraphQL
|
|
241
|
-
|
|
242
|
-
-
|
|
222
|
+
- **只读。** 收集器会发出 GraphQL 个查询和 REST `GET` 请求。它绝不会
|
|
223
|
+
合并、推送、发布、公开或编辑任何设置。
|
|
224
|
+
- **无需凭据。** 身份验证使用 `gh` 中已有的凭据。不会将任何信息写入磁盘。
|
|
225
|
+
- **不收集遥测数据。** 唯一联系的主机是 GitHub API(通过 `gh`)以及 npm 注册表,用于版本和安全建议查询。
|
|
243
226
|
- **它存储的内容** 是敏感部分:请参阅“保护数据”。
|
|
244
227
|
|
|
245
|
-
|
|
228
|
+
请按照 [SECURITY.md](SECURITY.md) 中描述的方式报告漏洞。
|
|
246
229
|
|
|
247
230
|
## 测试
|
|
248
231
|
|
|
@@ -250,9 +233,9 @@ run it from, or in `HK_HOME` when that is set.
|
|
|
250
233
|
npm test
|
|
251
234
|
```
|
|
252
235
|
|
|
253
|
-
|
|
236
|
+
每个规则都会进行双向测试:测试必须触发的模式,以及不应触发的相邻模式。一个独立的验证器会通过其自身的传输方式,从实时 GitHub 中重新推导出样本发现,并在没有数据库或没有网络时发出警告。
|
|
254
237
|
|
|
255
|
-
##
|
|
238
|
+
## 许可
|
|
256
239
|
|
|
257
240
|
MIT。请参阅 [LICENSE](LICENSE)。
|
|
258
241
|
|