@mcptoolshop/housekeeping 1.3.0 → 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 +49 -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 +201 -44
- package/src/cli.mjs +2 -2
- package/src/collect.mjs +5 -2
- package/src/config.mjs +13 -4
- package/src/load.mjs +7 -3
- package/src/mcp.mjs +2 -1
- package/src/report.mjs +14 -10
- package/src/schema.sql +9 -1
- package/src/workflow-risks.mjs +125 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,55 @@
|
|
|
3
3
|
All notable changes to this project are recorded here.
|
|
4
4
|
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
5
5
|
|
|
6
|
+
## [1.4.0] - 2026-10-01
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- The README and handbook show how to run one AI agent over a whole organization
|
|
11
|
+
through `hk-mcp`, and how housekeeping and Atlas work together.
|
|
12
|
+
- `homeOrgs` in the config: the organizations whose projects count as your
|
|
13
|
+
own. Unset, it is the swept organization.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- A fork of another organization's project is exempt from `ATLAS_MAP_MISSING`
|
|
18
|
+
and `ATLAS_CHECK_NOT_IN_CI`, as the rule now says: its workflows are the
|
|
19
|
+
upstream's. The collector reads each fork's parent owner (collector 1.5.0);
|
|
20
|
+
a fork whose parent was not read keeps the rule.
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- `ATLAS_ENGINE_BEHIND` measures maps and CI pins against the fleet's own pin
|
|
25
|
+
(the `atlas check` version most repositories pin), not npm's latest. A new
|
|
26
|
+
Atlas release on npm no longer makes every map "behind" before a pin-bump
|
|
27
|
+
wave moves the fleet to it. Snapshots taken before the first wave ended keep
|
|
28
|
+
the npm comparison they were reported with.
|
|
29
|
+
- `CI_REQUIRED_CHECK_GATED` names the repair: a workflow that emits a required
|
|
30
|
+
check takes no paths filter on `pull_request`; `push` stays gated.
|
|
31
|
+
- `PRE_1_0` is retired. It filed every package below 1.0.0 as a defect, but
|
|
32
|
+
1.0.0 is meant to say the product is 1.0, and unfinished work stays 0.x.
|
|
33
|
+
- `WF_SCHEDULED` fires only when a scheduled workflow fails a condition of the
|
|
34
|
+
scheduled-workflow rule: weekly or slower, Linux runners, `timeout-minutes`, a
|
|
35
|
+
`concurrency` block, no push to the branch it checked out, and
|
|
36
|
+
`workflow_dispatch`. It used to fire on every schedule. A workflow that fails
|
|
37
|
+
only on cadence is `low`, since the rule allows a faster schedule with a stated
|
|
38
|
+
reason. New column `workflow.schedule_gaps`; rebuild the database.
|
|
39
|
+
- `CI_REQUIRED_CHECK_GATED` no longer counts a conflicting pull request.
|
|
40
|
+
GitHub runs no `pull_request` workflow on a PR with conflicts, so a
|
|
41
|
+
required check missing from it says nothing about the paths filter, and the
|
|
42
|
+
repair is a rebase (which `PR_CONFLICTED` reports), not a trigger change. A
|
|
43
|
+
conflicted PR that also misses the paths filter is reported once rebased.
|
|
44
|
+
|
|
45
|
+
## [1.3.1] - 2026-09-30
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
|
|
49
|
+
- `CI_FAILING` no longer fires on a default branch whose only non-green checks
|
|
50
|
+
are cancelled runs replaced by a green run of the same check on the same
|
|
51
|
+
commit. GitHub's check rollup counts a cancelled run as a failure, so a
|
|
52
|
+
commit pushed twice read as red forever. `hk ci`, the MCP server and the
|
|
53
|
+
report read the same decision, and the finding now names the failing checks.
|
|
54
|
+
|
|
6
55
|
## [1.3.0] - 2026-09-30
|
|
7
56
|
|
|
8
57
|
The first release on npm, as `@mcptoolshop/housekeeping`.
|
package/README.es.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,31 +21,88 @@
|
|
|
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
|
-
Una sola ejecución recopila el estado de CI de cada repositorio, los problemas abiertos y las solicitudes de
|
|
24
|
+
Una sola ejecución recopila el estado de CI de cada repositorio, los problemas abiertos y las solicitudes de extracción, las versiones, las etiquetas de versión, los archivos de flujo de trabajo, la protección de ramas, las alertas de seguridad, los archivos de bloqueo y la facturación de Actions en SQLite, y luego realiza una auditoría de todo ello en función de las reglas establecidas.
|
|
24
25
|
|
|
25
26
|
Responde, para toda la organización a la vez:
|
|
26
27
|
|
|
27
|
-
- ¿Cuáles son las ramas predeterminadas que
|
|
28
|
-
- ¿Cuáles son las solicitudes de
|
|
29
|
-
- ¿Cuáles son
|
|
28
|
+
- ¿Cuáles son las ramas predeterminadas que están en rojo y se trata de una rama principal defectuosa o de un historial obsoleto?
|
|
29
|
+
- ¿Cuáles son las solicitudes de extracción que nunca se pueden fusionar, porque una comprobación requerida que no emite nada las está bloqueando?
|
|
30
|
+
- ¿Cuáles son los despliegues que los propios ajustes del repositorio rechazan?
|
|
30
31
|
- ¿Dónde han divergido `package.json`, las etiquetas de Git y el registro de npm?
|
|
31
32
|
- ¿Cuáles son los flujos de trabajo que infringen las reglas de coste de Actions, cuánto costaron y qué trabajos los utilizaron?
|
|
32
|
-
- ¿
|
|
33
|
+
- ¿Qué repositorios contienen avisos que el propio recuento de alertas de GitHub no detecta?
|
|
33
34
|
|
|
34
|
-
Es un instrumento de auditoría, no un corrector. Lee GitHub y no
|
|
35
|
+
Es un instrumento de auditoría, no un corrector. Lee GitHub y no cambia nada.
|
|
36
|
+
|
|
37
|
+
## Un agente para cada repositorio
|
|
38
|
+
|
|
39
|
+
Una organización con docenas de repositorios no tiene un único lugar donde se almacene su estado. housekeeping es ese lugar, y su servidor MCP, `hk-mcp`, se lo proporciona a un agente de IA. Con él, un agente puede actuar como coordinador para toda la organización:
|
|
40
|
+
|
|
41
|
+
1. **Ejecución.** `hk refresh` realiza una instantánea de cada repositorio.
|
|
42
|
+
2. **Clasificación.** El agente pregunta qué está en rojo, qué está bloqueado y qué ha empeorado, y obtiene respuestas que ya distinguen una rama principal defectuosa de un historial obsoleto, y una solicitud de extracción bloqueada de una solicitud en conflicto.
|
|
43
|
+
3. **Planificación de una ola.** Una consulta `hk_sql` encuentra todos los repositorios con la misma estructura, por lo que una corrección se convierte en una solicitud de extracción por repositorio en lugar de una búsqueda.
|
|
44
|
+
4. **Realización del trabajo.** housekeeping nunca escribe. El agente abre solicitudes de extracción con sus propias herramientas, bajo sus propios permisos y con su revisión.
|
|
45
|
+
5. **Verificación.** Ejecución de nuevo. El hallazgo desaparece o no, y el cambio entre dos instantáneas es una consulta.
|
|
46
|
+
|
|
47
|
+
Preguntas a las que un agente responde en una o dos llamadas:
|
|
48
|
+
|
|
49
|
+
- ¿Cuáles son las ramas predeterminadas que están en rojo y qué trabajo y paso fallaron?
|
|
50
|
+
- ¿Cuáles son las solicitudes de extracción que nunca se pueden fusionar y es el desencadenador o un conflicto el culpable?
|
|
51
|
+
- ¿Qué repositorios contienen un aviso de producción para el que GitHub no muestra ninguna alerta?
|
|
52
|
+
- ¿Qué flujos de trabajo programados infringen las reglas para las programaciones y cómo?
|
|
53
|
+
- ¿Cuánto costaron Actions y qué trabajo lo utilizó?
|
|
54
|
+
- ¿Qué ha cambiado desde la última ejecución?
|
|
55
|
+
|
|
56
|
+
| Herramienta | Lo que responde |
|
|
57
|
+
|---|---|
|
|
58
|
+
| `hk_summary` | Totales de la ejecución más reciente: repositorios, problemas, solicitudes de extracción, flujos de trabajo, hallazgos. |
|
|
59
|
+
| `hk_findings` | Hallazgos por código, gravedad, categoría o repositorio; recuentos por código cuando no se filtra. El hallazgo de una rama principal en rojo indica el trabajo y el paso que fallaron. |
|
|
60
|
+
| `hk_ci` | Repositorios cuya rama predeterminada está en rojo y los flujos de trabajo que fallaron; también fallan las programaciones, las ramas de solicitud de extracción que fallan y los repositorios sin CI. |
|
|
61
|
+
| `hk_repo` | Un repositorio completo: hallazgos, flujos de trabajo, solicitudes de extracción y problemas abiertos. |
|
|
62
|
+
| `hk_backlog` | Solicitudes de extracción o problemas abiertos en toda la organización, del más antiguo al más reciente. |
|
|
63
|
+
| `hk_health` | Una puntuación de estado por repositorio, del peor al mejor. |
|
|
64
|
+
| `hk_cost` | Gasto de Actions por repositorio, flujo de trabajo o trabajo, bruto y neto por separado. |
|
|
65
|
+
| `hk_sql` | Una única instrucción de solo lectura `SELECT` o `WITH` contra el almacén. |
|
|
66
|
+
| `hk_schema` | Las tablas y las columnas, para escribir consultas `hk_sql`. |
|
|
67
|
+
|
|
68
|
+
Cada respuesta proviene de la instantánea más reciente, abierta en modo de solo lectura. Una llamada que falla devuelve un error estructurado, nunca un rastreo de pila.
|
|
69
|
+
|
|
70
|
+
### Conéctelo
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"mcpServers": {
|
|
75
|
+
"housekeeping": { "command": "hk-mcp", "env": { "HK_HOME": "/path/to/warehouse" } },
|
|
76
|
+
"atlas": { "command": "atlas", "args": ["mcp"] }
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
`HK_HOME` es el directorio desde el que se realiza la ejecución. Desde un clon, utilice `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]`. El segundo servidor es [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas), que responde al mismo agente sobre un repositorio a la vez (véase más abajo). En Windows, inicie un comando instalado globalmente a través de `cmd /c`.
|
|
82
|
+
|
|
83
|
+
## housekeeping y Atlas
|
|
84
|
+
|
|
85
|
+
[Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas) (`@dogfood-lab/atlas`) mapea un repositorio: sus partes y sus puertas, lo que significa cada flujo de trabajo con lo que ejecuta, publica y despliega. El mapa se confirma como `atlas/` y se comprueba en CI. housekeeping es la vista de la organización. Ambos están diseñados para funcionar juntos.
|
|
86
|
+
|
|
87
|
+
- **Cada mapa, ejecutado.** Una ejecución lee el mapa confirmado de cada repositorio junto con todo lo demás, e informa de qué repositorios no tienen ninguno, qué nunca ejecutan `atlas check` y qué contienen un motor detrás del que el resto de la organización utiliza.
|
|
88
|
+
- **Dónde una ejecución en rojo falló.** Cuando una rama predeterminada está en rojo, el hallazgo indica el trabajo y el paso que fallaron y, a través del mapa, el comando que ese paso ejecuta, por lo que la reparación comienza en el archivo correcto.
|
|
89
|
+
- **Datos de despliegue del mapa.** El entorno en el que un trabajo se despliega se toma del mapa donde lo registra, por lo que ambas herramientas leen un flujo de trabajo de la misma manera.
|
|
90
|
+
- **Advertencias en toda la flota.** Atlas marca un paso del flujo de trabajo que fallará antes de ejecutarse, como una herramienta que necesita una versión más reciente del entorno de ejecución que el trabajo instala. El informe los enumera para todos los repositorios a la vez.
|
|
91
|
+
|
|
92
|
+
Un agente con ambos servidores pasa de "estos doce repositorios están bloqueados" (housekeeping) a "este es el flujo de trabajo, el trabajo y los archivos a los que llegará un cambio" (Atlas), sin tener que abrir cada repositorio manualmente.
|
|
35
93
|
|
|
36
94
|
## Por qué tiene esta forma
|
|
37
95
|
|
|
38
96
|
| Capa | Opción | Razón |
|
|
39
97
|
|---|---|---|
|
|
40
|
-
| Transporte |
|
|
41
|
-
| Recopilación | GitHub GraphQL,
|
|
42
|
-
| Ejecuciones de Actions | REST | GraphQL no tiene una
|
|
43
|
-
|
|
|
44
|
-
| Tarifas de los ejecutores |
|
|
45
|
-
| Almacenamiento | SQLite a través del `node:sqlite` integrado | No hay un paso de compilación nativo. |
|
|
46
|
-
| Fuente de la verdad | `data/snapshots/*.json` |
|
|
47
|
-
| Registro de
|
|
98
|
+
| Transporte | La CLI `gh` | Ya tiene su token. La herramienta nunca almacena ni solicita una credencial. |
|
|
99
|
+
| Recopilación | GitHub GraphQL, paginado | Una consulta devuelve metadatos, problemas abiertos, solicitudes de extracción abiertas, versiones y árboles de archivos para una página de repositorios. Una página que sigue dando tiempo de espera se divide por la mitad y se vuelve a solicitar desde el mismo cursor. |
|
|
100
|
+
| Ejecuciones de Actions | REST | GraphQL no tiene una superficie de Actions. |
|
|
101
|
+
| Las acciones tienen un costo. | API de facturación más duraciones por tarea. | La factura indica qué repositorio; solo las tareas indican qué flujo de trabajo. Los puntos finales `/timing` de GitHub devuelven ceros, por lo que la suma por tarea se reconstruye y luego se concilia con la factura. |
|
|
102
|
+
| Tarifas de los ejecutores. | Se lee de la factura. | Una tarifa facturada puede diferir del precio de lista, y una constante en el código fuente distorsionaría todos los números. |
|
|
103
|
+
| Almacenamiento. | SQLite a través del `node:sqlite` integrado. | No hay un paso de compilación nativo. |
|
|
104
|
+
| Fuente de la verdad. | `data/snapshots/*.json` | Datos sin procesar, comparables y solo para anexar. La base de datos se deriva: `npm run rebuild` la reconstruye sin conexión. |
|
|
105
|
+
| Registro de análisis. | `data/sweeps.jsonl` | Una línea por análisis, incluidos los análisis que fallaron y los análisis que no encontraron nada nuevo. |
|
|
48
106
|
|
|
49
107
|
Las instantáneas son inmutables y aditivas, por lo que la desviación entre dos fechas es un `JOIN`.
|
|
50
108
|
|
|
@@ -52,9 +110,9 @@ Las instantáneas son inmutables y aditivas, por lo que la desviación entre dos
|
|
|
52
110
|
|
|
53
111
|
- Node.js 22.5 o posterior.
|
|
54
112
|
- La [CLI de GitHub](https://cli.github.com/), con la sesión iniciada (`gh auth status`) como una
|
|
55
|
-
cuenta que puede leer la organización.
|
|
56
|
-
|
|
57
|
-
|
|
113
|
+
cuenta que puede leer la organización. Para leer la facturación y las alertas de seguridad,
|
|
114
|
+
se necesitan los permisos correspondientes; un análisis sin ellos registrará "no medido" y
|
|
115
|
+
continuará. Nunca registrará un permiso faltante como un resultado válido.
|
|
58
116
|
- Windows o Linux. Se desarrolla en Windows y sus pruebas se ejecutan en Linux en
|
|
59
117
|
CI. macOS debería funcionar y no se ha probado.
|
|
60
118
|
|
|
@@ -66,9 +124,10 @@ mkdir warehouse && cd warehouse # housekeeping keeps its data here
|
|
|
66
124
|
hk refresh your-org # collect, load, analyze, write reports/AUDIT-<date>.md
|
|
67
125
|
```
|
|
68
126
|
|
|
69
|
-
Para
|
|
127
|
+
Para mantener la configuración entre los análisis, coloque un `housekeeping.config.json` en ese
|
|
128
|
+
directorio (consulte Configuración); luego `hk refresh` no necesita ningún argumento.
|
|
70
129
|
|
|
71
|
-
O ejecútelo desde
|
|
130
|
+
O ejecútelo desde un clon, que mantiene sus datos en el clon:
|
|
72
131
|
|
|
73
132
|
```bash
|
|
74
133
|
git clone https://github.com/mcp-tool-shop-org/housekeeping.git
|
|
@@ -79,7 +138,7 @@ cp housekeeping.config.example.json housekeeping.config.json # then set "org"
|
|
|
79
138
|
hk refresh
|
|
80
139
|
```
|
|
81
140
|
|
|
82
|
-
Luego,
|
|
141
|
+
Luego, consulte:
|
|
83
142
|
|
|
84
143
|
```bash
|
|
85
144
|
hk summary # portfolio totals
|
|
@@ -95,15 +154,15 @@ hk sql "SELECT ..." # one read-only statement
|
|
|
95
154
|
hk help # every command and flag
|
|
96
155
|
```
|
|
97
156
|
|
|
98
|
-
En
|
|
157
|
+
En un clon sin `npm link`, cada `hk <command>` es `node src/cli.mjs <command>`.
|
|
99
158
|
|
|
100
159
|
`npm run rebuild` vuelve a derivar la base de datos y el informe a partir de las instantáneas que ya
|
|
101
160
|
existen en el disco, sin acceso a la red.
|
|
102
161
|
|
|
103
|
-
|
|
162
|
+
Un análisis completo realiza unos pocos cientos de llamadas a la API. No ejecute `refresh` en un bucle.
|
|
104
163
|
|
|
105
164
|
Los resultados se envían a la salida estándar; el progreso y los errores se envían a la salida de error estándar. Cada
|
|
106
|
-
error imprime un código y una pista. Códigos de salida: 0 correcto, 1 error de usuario, 2 error
|
|
165
|
+
error imprime un código y una pista. Códigos de salida: 0 (correcto), 1 (error de usuario), 2 (error en tiempo de ejecución), 3 (parcial; el análisis se completó, con omisiones).
|
|
107
166
|
|
|
108
167
|
## Configuración
|
|
109
168
|
|
|
@@ -116,89 +175,73 @@ error imprime un código y una pista. Códigos de salida: 0 correcto, 1 error de
|
|
|
116
175
|
}
|
|
117
176
|
```
|
|
118
177
|
|
|
119
|
-
- `org` es la organización que se va a analizar. `hk refresh <org>` lo anula. Si no se especifica ninguno de los dos,
|
|
120
|
-
- `metaRepos` son los repositorios que contienen los
|
|
121
|
-
|
|
178
|
+
- `org` es la organización que se va a analizar. `hk refresh <org>` lo anula. Si no se especifica ninguno de los dos, un análisis se negará a comenzar.
|
|
179
|
+
- `metaRepos` son los repositorios que contienen los valores predeterminados, los activos o las
|
|
180
|
+
herramientas de la organización, no un producto que se va a distribuir. Están exentos de los hallazgos que solo
|
|
122
181
|
tienen sentido para un producto: falta de archivos README, LICENSE y similares, no tener
|
|
123
182
|
flujos de trabajo y no tener versiones.
|
|
124
183
|
|
|
125
|
-
Un archivo con formato incorrecto es un error, nunca un valor predeterminado silencioso: una clave desconocida, un
|
|
184
|
+
Un archivo con formato incorrecto es un error, nunca un valor predeterminado silencioso: una clave desconocida, un
|
|
185
|
+
tipo incorrecto o un JSON dañado detienen la ejecución.
|
|
126
186
|
|
|
127
|
-
Ejecute desde un clon
|
|
187
|
+
Ejecute desde un clon, la herramienta de limpieza mantiene `data/`, `reports/` y el archivo de configuración
|
|
128
188
|
en el clon. Ejecute como un paquete instalado; los mantiene en el directorio desde el que
|
|
129
189
|
lo ejecuta, o en `HK_HOME` cuando se establece.
|
|
130
190
|
|
|
131
191
|
Entorno: `HK_HOME` (donde residen los datos, los informes y la configuración),
|
|
132
192
|
`HK_CONFIG` (ruta de configuración), `HK_DB` (ruta de la base de datos), `HK_LOG`
|
|
133
193
|
(`silent`, `normal`, `verbose` o `debug`), `HK_COST_REPOS` y
|
|
134
|
-
`HK_COST_BUDGET` (límites del
|
|
194
|
+
`HK_COST_BUDGET` (límites del costo por tarea), `GH_PATH` (ruta a `gh`).
|
|
135
195
|
|
|
136
196
|
## Mantenga los datos privados
|
|
137
197
|
|
|
138
|
-
**Lo que escribe
|
|
198
|
+
**Lo que escribe un análisis es confidencial. No incluya `data/` o `reports/` en un
|
|
139
199
|
repositorio público.**
|
|
140
200
|
|
|
141
|
-
Una instantánea registra los nombres y las descripciones de los repositorios privados,
|
|
142
|
-
|
|
201
|
+
Una instantánea registra los nombres y las descripciones de los repositorios privados, todas
|
|
202
|
+
las alertas de seguridad abiertas con el paquete que nombran, los archivos de flujo de trabajo y la facturación de Actions. GitHub oculta deliberadamente las alertas de seguridad de un repositorio público a todos, excepto a sus mantenedores; una instantánea publicada entregaría esa lista.
|
|
143
203
|
|
|
144
204
|
El `.gitignore` de este repositorio excluye `data/`, `reports/` y
|
|
145
205
|
`housekeeping.config.json`. Para mantener el historial, que es el objetivo de las instantáneas,
|
|
146
|
-
ejecute la herramienta desde un **repositorio privado** de su propiedad y
|
|
147
|
-
|
|
148
|
-
## Servidor MCP
|
|
149
|
-
|
|
150
|
-
`hk-mcp` (o `npm run mcp` en una copia) sirve los datos al programa a través de stdio, por lo que un asistente puede hacer preguntas sin leer una instantánea de varios megabytes:
|
|
151
|
-
|
|
152
|
-
`hk_summary` · `hk_findings` · `hk_ci` · `hk_repo` · `hk_backlog` ·
|
|
153
|
-
`hk_health` · `hk_cost` · `hk_sql` · `hk_schema`
|
|
154
|
-
|
|
155
|
-
```json
|
|
156
|
-
{
|
|
157
|
-
"mcpServers": {
|
|
158
|
-
"housekeeping": { "command": "hk-mcp", "env": { "HK_HOME": "/path/to/warehouse" } }
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
`HK_HOME` es el directorio desde el que se realiza la ejecución. Si utiliza una copia, use `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]` en su lugar.
|
|
164
|
-
|
|
165
|
-
`hk_sql` acepta una sola instrucción `SELECT` o `WITH` y abre la base de datos
|
|
166
|
-
en modo de solo lectura. Una llamada que falla devuelve un error estructurado, nunca un rastreo de pila.
|
|
206
|
+
ejecute la herramienta desde un **repositorio privado** de su propiedad y guárdelos allí.
|
|
167
207
|
|
|
168
208
|
## Hallazgos
|
|
169
209
|
|
|
170
|
-
Las reglas se encuentran en `src/analyze.mjs`. Cada una
|
|
210
|
+
Las reglas se encuentran en `src/analyze.mjs`. Cada una cita la regla escrita que aplica,
|
|
171
211
|
por lo que un hallazgo se puede discutir en relación con un estándar y no con el gusto. Las reglas
|
|
172
212
|
que incluye este repositorio se encuentran en [`rules/`](rules/):
|
|
173
213
|
|
|
174
|
-
- [`rules/github-actions.md`](rules/github-actions.md): filtros de rutas, ejecutores, tamaño de la matriz, límite del archivo de flujo de trabajo, concurrencia.
|
|
175
|
-
- [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md):
|
|
214
|
+
- [`rules/github-actions.md`](rules/github-actions.md): filtros de rutas, ejecutores, tamaño de la matriz, el límite del archivo de flujo de trabajo, concurrencia.
|
|
215
|
+
- [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md): CI debe pasar, las puertas de envío, las versiones.
|
|
176
216
|
- [`rules/repo-first.md`](rules/repo-first.md): la rama predeterminada.
|
|
177
|
-
- [`rules/atlas-map.md`](rules/atlas-map.md): un mapa
|
|
217
|
+
- [`rules/atlas-map.md`](rules/atlas-map.md): un mapa comprometido de cada repositorio, verificado en CI.
|
|
178
218
|
|
|
179
|
-
Son los estándares de una organización. Si los suyos son diferentes, cambie el archivo de reglas
|
|
219
|
+
Son los estándares de una organización. Si los suyos son diferentes, cambie el archivo de reglas
|
|
220
|
+
y la regla al mismo tiempo.
|
|
180
221
|
|
|
181
|
-
Las reglas se
|
|
222
|
+
Las reglas se encargan de mantener separados los elementos que parecen similares, porque combinarlos
|
|
223
|
+
genera ruido:
|
|
182
224
|
|
|
183
|
-
- **Una rama predeterminada roja no es una rama de solicitud de
|
|
184
|
-
- **El historial no es un problema.** Un flujo de trabajo que se
|
|
185
|
-
- **Una comprobación requerida que nada puede emitir no es una comprobación que no se
|
|
225
|
+
- **Una rama predeterminada roja no es una rama de solicitud de extracción roja.** Una rama de Dependabot que falla es un elemento pendiente; una ejecución de `push` fallida en la rama predeterminada es un problema. El evento de la ejecución determina cuál es.
|
|
226
|
+
- **El historial no es un problema.** Un flujo de trabajo que se ha movido a un disparador de solo lanzamiento conserva su última falla en la rama predeterminada para siempre. Un flujo de trabajo eliminado conserva sus ejecuciones. Ninguno de los dos es un defecto activo.
|
|
227
|
+
- **Una comprobación requerida que nada puede emitir no es una comprobación que no se haya ejecutado aquí.** Una indica que se elimine el requisito; la otra indica que se corrija el disparador. Las correcciones se contradicen entre sí.
|
|
228
|
+
- **Una solicitud de extracción que el disparador omitió no es una solicitud en conflicto.** GitHub no ejecuta ningún flujo de trabajo de solicitud de extracción en una solicitud de extracción con conflictos, por lo que su comprobación faltante no dice nada sobre el disparador. Esta última necesita una rebase.
|
|
186
229
|
- **Una ejecución fallida no es una ejecución cancelada.** `cancel-in-progress` existe para eliminar las ejecuciones obsoletas, por lo que los minutos cancelados suelen ser la regla de concurrencia en funcionamiento.
|
|
187
|
-
- **El costo bruto no es el costo neto.** GitHub mide los repositorios públicos a precio completo y
|
|
188
|
-
- **Lo que no se mide no está limpio.** Un repositorio que GitHub no está analizando informa
|
|
230
|
+
- **El costo bruto no es el costo neto.** GitHub mide los repositorios públicos a precio completo y los descuenta a cero. El costo bruto es la capacidad de cómputo real; el costo neto es el dinero real. Nunca se suman.
|
|
231
|
+
- **Lo que no se mide no está limpio.** Un repositorio que GitHub no está analizando informa cero alertas. Un repositorio al que no llegó el paso de costo no tiene fila de costo. Ambos se informan como desconocidos.
|
|
189
232
|
|
|
190
233
|
La gravedad impulsa una puntuación de estado: crítica 40, alta 15, media 6, baja 2, informativa 0, que se deduce de 100. La puntuación clasifica la atención, no la calidad.
|
|
191
234
|
|
|
192
|
-
El [manual](https://mcp-tool-shop-org.github.io/housekeeping/handbook/) enumera
|
|
235
|
+
El [manual](https://mcp-tool-shop-org.github.io/housekeeping/handbook/) enumera todos los hallazgos, comandos, códigos de error y tablas.
|
|
193
236
|
|
|
194
237
|
## Seguridad
|
|
195
238
|
|
|
196
|
-
- **Solo lectura.** El recopilador emite consultas GraphQL y solicitudes REST `GET`. Nunca
|
|
197
|
-
- **Sin credenciales.** La autenticación es lo que `gh` ya tiene.
|
|
239
|
+
- **Solo lectura.** El recopilador emite consultas GraphQL y solicitudes REST `GET`. Nunca fusiona, envía, lanza, publica ni edita una configuración.
|
|
240
|
+
- **Sin credenciales.** La autenticación es lo que `gh` ya tiene. Nada se escribe en el disco al respecto.
|
|
198
241
|
- **Sin telemetría.** Los únicos hosts contactados son la API de GitHub, a través de `gh`, y el registro de npm, para buscar versiones y avisos.
|
|
199
242
|
- **Lo que almacena** es la parte sensible: consulte "Mantenga los datos privados".
|
|
200
243
|
|
|
201
|
-
Informe
|
|
244
|
+
Informe una vulnerabilidad según lo descrito en [SECURITY.md](SECURITY.md).
|
|
202
245
|
|
|
203
246
|
## Pruebas
|
|
204
247
|
|
|
@@ -206,7 +249,7 @@ Informe de una vulnerabilidad según lo descrito en [SECURITY.md](SECURITY.md).
|
|
|
206
249
|
npm test
|
|
207
250
|
```
|
|
208
251
|
|
|
209
|
-
Cada regla se prueba en ambas direcciones: la forma que debe activarse y la forma vecina que no debe activarse. Un verificador independiente vuelve a derivar una muestra de los hallazgos de GitHub en vivo a través de su propio transporte y omite,
|
|
252
|
+
Cada regla se prueba en ambas direcciones: la forma que debe activarse y la forma vecina que no debe activarse. Un verificador independiente vuelve a derivar una muestra de los hallazgos de GitHub en vivo a través de su propio transporte y omite, ruidosamente, cuando no hay base de datos o red.
|
|
210
253
|
|
|
211
254
|
## Licencia
|
|
212
255
|
|