@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 CHANGED
@@ -3,6 +3,36 @@
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.5.0] - 2026-11-07
7
+
8
+ ### Added
9
+
10
+ - A branch pass (collector 1.6.0): every branch of every non-archived
11
+ repository, the pull requests it was the head of, and the repository's
12
+ "automatically delete head branches" setting, in the `branch` and
13
+ `repo_branches` tables. A merged branch whose tip moved after the merge is
14
+ `merged_moved`, not `merged`: those commits cannot be restored from the pull
15
+ request page. About 1 GraphQL point per repository.
16
+ - `hk branches [repo]`: branches by state.
17
+ - `hk watch [repo ...]` and the `watch` config key: open pull requests, open
18
+ alerts and branches for a short list of repositories.
19
+
20
+ ### Fixed
21
+
22
+ - `CI_PAGES_NOT_ENABLED` no longer fires on a private repository whose deploy
23
+ job is gated to public repositories (`if: !github.event.repository.private`,
24
+ or a job it needs is). That job is skipped, so Pages being off refuses
25
+ nothing. A gate joined with `||`, or one it cannot read, still counts.
26
+ - Scoped npm package names are encoded properly when the collector looks them up
27
+ on the registry (`encodeURIComponent`, not a single slash swap).
28
+ - The landing page and handbook dependencies were updated to clear known
29
+ advisories (`postcss-selector-parser`, `sharp`, `source-map-js`,
30
+ `http-cache-semantics`, `smol-toml`).
31
+
32
+ ### Security
33
+
34
+ - Lockfile refresh for the MCP server's dependencies: @hono/node-server 2.1.6 and hono 4.13.17 (GHSA-rmxm-3fg6-px4f, GHSA-5r4p-p66f-jhc7), body-parser 2.4.0 (GHSA-27r3-jxmh-p828, high), fast-uri 3.1.9 (GHSA-w74x-v6f9-j3xg, GHSA-xhq7-xmqj-769h, GHSA-wjr9-j795-jxcr, GHSA-333x-w4r6-6crp), qs 6.17.1 (GHSA-6pq8-jhm2-2vcw). Installs from npm resolve within the same ranges.
35
+
6
36
  ## [1.4.0] - 2026-10-01
7
37
 
8
38
  ### Added
package/README.es.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.md">English</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>
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,7 +21,10 @@
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
- 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
+ Una sola ejecución recopila el estado de CI de cada repositorio, los problemas abiertos y las solicitudes de extracción,
25
+ lanzamientos, etiquetas de versión, archivos de flujo de trabajo, protección de ramas, alertas de seguridad,
26
+ archivos de bloqueo y la facturación de Actions en SQLite, y luego realiza una auditoría de todo esto en función de las
27
+ reglas establecidas.
25
28
 
26
29
  Responde, para toda la organización a la vez:
27
30
 
@@ -29,20 +32,27 @@ Responde, para toda la organización a la vez:
29
32
  - ¿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
33
  - ¿Cuáles son los despliegues que los propios ajustes del repositorio rechazan?
31
34
  - ¿Dónde han divergido `package.json`, las etiquetas de Git y el registro de npm?
32
- - ¿Cuáles son los flujos de trabajo que infringen las reglas de coste de Actions, cuánto costaron y qué trabajos los utilizaron?
33
- - ¿Qué repositorios contienen avisos que el propio recuento de alertas de GitHub no detecta?
35
+ - ¿Cuáles son los flujos de trabajo que infringen las reglas de costos de Actions, cuánto costaron y qué trabajos los utilizaron?
36
+ - ¿Qué repositorios contienen avisos que el recuento de alertas de GitHub no detecta?
34
37
 
35
38
  Es un instrumento de auditoría, no un corrector. Lee GitHub y no cambia nada.
36
39
 
37
40
  ## Un agente para cada repositorio
38
41
 
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.
42
+ Una organización con docenas de repositorios no tiene un único lugar donde se almacene su
43
+ 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
44
+ organización:
45
+
46
+ 1. **Ejecución.** `hk refresh` toma una instantánea de cada repositorio.
47
+ 2. **Clasificación.** El agente pregunta qué está en rojo, qué está bloqueado y qué ha empeorado,
48
+ y obtiene respuestas que ya distinguen una rama principal defectuosa de un historial obsoleto, y
49
+ una solicitud de extracción bloqueada de una solicitud en conflicto.
50
+ 3. **Planificación de una ola.** Una consulta de `hk_sql` encuentra todos los repositorios con la misma
51
+ estructura, por lo que una corrección se convierte en una solicitud de extracción por repositorio en lugar de una búsqueda.
52
+ 4. **Realización del trabajo.** housekeeping nunca escribe. El agente abre solicitudes de extracción
53
+ con sus propias herramientas, bajo sus propios permisos y con su revisión.
54
+ 5. **Verificación.** Ejecución de nuevo. El hallazgo desaparece o no, y el cambio
55
+ entre dos instantáneas es una consulta.
46
56
 
47
57
  Preguntas a las que un agente responde en una o dos llamadas:
48
58
 
@@ -56,8 +66,8 @@ Preguntas a las que un agente responde en una o dos llamadas:
56
66
  | Herramienta | Lo que responde |
57
67
  |---|---|
58
68
  | `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. |
69
+ | `hk_findings` | Hallazgos por código, gravedad, categoría o repositorio; recuentos por código cuando no se filtran. El hallazgo de una rama principal en rojo indica el trabajo y el paso que fallaron. |
70
+ | `hk_ci` | Repositorios cuya rama predeterminada está en rojo y los flujos de trabajo que fallaron; también fallan las programaciones, las ramas de solicitudes de extracción que fallan y los repositorios sin CI. |
61
71
  | `hk_repo` | Un repositorio completo: hallazgos, flujos de trabajo, solicitudes de extracción y problemas abiertos. |
62
72
  | `hk_backlog` | Solicitudes de extracción o problemas abiertos en toda la organización, del más antiguo al más reciente. |
63
73
  | `hk_health` | Una puntuación de estado por repositorio, del peor al mejor. |
@@ -65,7 +75,8 @@ Preguntas a las que un agente responde en una o dos llamadas:
65
75
  | `hk_sql` | Una única instrucción de solo lectura `SELECT` o `WITH` contra el almacén. |
66
76
  | `hk_schema` | Las tablas y las columnas, para escribir consultas `hk_sql`. |
67
77
 
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.
78
+ Cada respuesta proviene de la instantánea más reciente, abierta en modo de solo lectura. Una llamada que falla
79
+ devuelve un error estructurado, nunca un rastreo de pila.
69
80
 
70
81
  ### Conéctelo
71
82
 
@@ -78,41 +89,58 @@ Cada respuesta proviene de la instantánea más reciente, abierta en modo de sol
78
89
  }
79
90
  ```
80
91
 
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`.
92
+ `HK_HOME` es el directorio desde el que se realiza la ejecución. Desde un clon, utilice
93
+ `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]`. El segundo
94
+ servidor es [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas),
95
+ que responde al mismo agente sobre un repositorio a la vez (consulte a continuación). En
96
+ Windows, inicie un comando instalado globalmente a través de `cmd /c`.
82
97
 
83
98
  ## housekeeping y Atlas
84
99
 
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.
100
+ [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas)
101
+ (`@dogfood-lab/atlas`) asigna un repositorio: sus partes y sus puertas, lo que significa
102
+ cada flujo de trabajo con lo que ejecuta, publica y despliega. El mapa se confirma
103
+ como `atlas/` y se comprueba en CI. housekeeping es la vista de la organización. Los dos
104
+ están diseñados para funcionar juntos.
105
+
106
+ - **Cada mapa, ejecutado.** Una ejecución lee el mapa confirmado de cada repositorio junto con
107
+ todo lo demás, e informa de qué repositorios no tienen ninguno, qué nunca
108
+ ejecutan `atlas check` y cuáles tienen un motor detrás del que el resto de la
109
+ organización utiliza.
110
+ - **Dónde una ejecución en rojo falló.** Cuando una rama predeterminada está en rojo, el hallazgo indica
111
+ el trabajo y el paso que fallaron y, a través del mapa, el comando que ese paso
112
+ ejecuta, por lo que la reparación comienza en el archivo correcto.
113
+ - **Hechos de despliegue del mapa.** El entorno en el que un trabajo se despliega se toma del
114
+ mapa donde se registra, por lo que ambas herramientas leen un flujo de trabajo de la misma manera.
115
+ - **Advertencias en toda la flota.** Atlas marca un paso del flujo de trabajo que fallará
116
+ antes de ejecutarse, como una herramienta que necesita una versión más reciente del entorno de ejecución que el trabajo
117
+ instala. El informe los enumera para todos los repositorios a la vez.
118
+
119
+ Un agente con ambos servidores pasa de "estos doce repositorios están bloqueados"
120
+ (housekeeping) a "este es el flujo de trabajo, el trabajo y los archivos a los que llegará un cambio" (Atlas), sin abrir cada repositorio manualmente.
93
121
 
94
122
  ## Por qué tiene esta forma
95
123
 
96
124
  | Capa | Opción | Razón |
97
125
  |---|---|---|
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. |
126
+ | Transporte | la CLI `gh` | Ya tiene su token. La herramienta nunca almacena ni solicita una credencial. |
127
+ | Recopilación | GitHub GraphQL, por páginas | Una consulta devuelve metadatos, problemas abiertos, solicitudes de extracción abiertas, lanzamientos y árboles de archivos para una página de repositorios. Una página que sigue tardando se divide a la mitad y se vuelve a solicitar desde el mismo cursor. |
128
+ | Ejecuciones de Actions | REST | GraphQL no tiene ninguna superficie de Actions. |
129
+ | Costo de Actions | API de facturación más duraciones por trabajo. | La factura indica el repositorio; solo los trabajos indican el flujo de trabajo. Los puntos finales de GitHub's `/timing` devuelven ceros, por lo que la suma por trabajo se reconstruye y luego se concilia con la factura. |
130
+ | Tarifas de ejecución | Leídas de la factura | Una tarifa facturada puede diferir del precio de lista, y una constante en la fuente distorsionaría todos los números. |
131
+ | Almacenamiento | SQLite a través del `node:sqlite` integrado | No hay un paso de compilación nativo. |
132
+ | Fuente de la verdad | `data/snapshots/*.json` | Bruta, comparable y solo para anexar. La base de datos se deriva: `npm run rebuild` la reconstruye sin conexión. |
133
+ | 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. |
106
134
 
107
135
  Las instantáneas son inmutables y aditivas, por lo que la desviación entre dos fechas es un `JOIN`.
108
136
 
109
137
  ## Requisitos
110
138
 
111
139
  - Node.js 22.5 o posterior.
112
- - La [CLI de GitHub](https://cli.github.com/), con la sesión iniciada (`gh auth status`) como una
140
+ - La CLI [GitHub](https://cli.github.com/), con inicio de sesión (`gh auth status`) como una
113
141
  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.
142
+ se necesitan los permisos correspondientes; un análisis sin ellos registra "no medido" y
143
+ continúa. Nunca registra un permiso faltante como un resultado válido.
116
144
  - Windows o Linux. Se desarrolla en Windows y sus pruebas se ejecutan en Linux en
117
145
  CI. macOS debería funcionar y no se ha probado.
118
146
 
@@ -125,9 +153,9 @@ hk refresh your-org # collect, load, analyze, write repor
125
153
  ```
126
154
 
127
155
  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.
156
+ directorio (consulte Configuración); luego, `hk refresh` no necesita ningún argumento.
129
157
 
130
- O ejecútelo desde un clon, que mantiene sus datos en el clon:
158
+ O ejecútelo desde una copia, que mantiene sus datos en la copia:
131
159
 
132
160
  ```bash
133
161
  git clone https://github.com/mcp-tool-shop-org/housekeeping.git
@@ -147,6 +175,8 @@ hk findings # findings grouped by severity and code
147
175
  hk health # per-repository health score, worst first
148
176
  hk repo <name> # one repository in full
149
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
150
180
  hk versions # package.json against git tag against npm
151
181
  hk actions # every workflow and its rule flags
152
182
  hk cost # Actions cost, gross and net side by side
@@ -154,7 +184,7 @@ hk sql "SELECT ..." # one read-only statement
154
184
  hk help # every command and flag
155
185
  ```
156
186
 
157
- En un clon sin `npm link`, cada `hk <command>` es `node src/cli.mjs <command>`.
187
+ En una copia sin `npm link`, cada `hk <command>` es `node src/cli.mjs <command>`.
158
188
 
159
189
  `npm run rebuild` vuelve a derivar la base de datos y el informe a partir de las instantáneas que ya
160
190
  existen en el disco, sin acceso a la red.
@@ -162,11 +192,11 @@ existen en el disco, sin acceso a la red.
162
192
  Un análisis completo realiza unos pocos cientos de llamadas a la API. No ejecute `refresh` en un bucle.
163
193
 
164
194
  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
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).
195
+ error imprime un código y una pista. Códigos de salida: 0 correcto, 1 error de usuario, 2 error de tiempo de ejecución, 3 parcial (el análisis se completó, con lagunas).
166
196
 
167
197
  ## Configuración
168
198
 
169
- `housekeeping.config.json`, en el directorio en el que funciona la herramienta de limpieza (consulte a continuación):
199
+ `housekeeping.config.json`, en el directorio donde funciona la herramienta de limpieza (consulte a continuación):
170
200
 
171
201
  ```json
172
202
  {
@@ -175,73 +205,87 @@ error imprime un código y una pista. Códigos de salida: 0 (correcto), 1 (error
175
205
  }
176
206
  ```
177
207
 
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
208
+ - `org` es la organización que se va a analizar. `hk refresh <org>` lo anula. Si no se especifica ninguno, un análisis se negará a comenzar.
209
+ - `metaRepos` son los repositorios que contienen la configuración predeterminada de la organización, los activos o
210
+ las herramientas, no un producto comercializado. Están exentos de los hallazgos que solo
181
211
  tienen sentido para un producto: falta de archivos README, LICENSE y similares, no tener
182
212
  flujos de trabajo y no tener versiones.
183
213
 
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.
214
+ Un archivo con formato incorrecto es un error, nunca un valor predeterminado silencioso: una clave desconocida, un tipo incorrecto o un JSON dañado detienen la ejecución.
186
215
 
187
- Ejecute desde un clon, la herramienta de limpieza mantiene `data/`, `reports/` y el archivo de configuración
188
- en el clon. Ejecute como un paquete instalado; los mantiene en el directorio desde el que
189
- lo ejecuta, o en `HK_HOME` cuando se establece.
216
+ Ejecute desde una copia, la herramienta de limpieza mantiene `data/`, `reports/` y el archivo de configuración
217
+ en la copia. Ejecute como un paquete instalado, lo mantiene en el directorio desde el que
218
+ lo ejecuta, o en `HK_HOME` cuando esté configurado.
190
219
 
191
220
  Entorno: `HK_HOME` (donde residen los datos, los informes y la configuración),
192
221
  `HK_CONFIG` (ruta de configuración), `HK_DB` (ruta de la base de datos), `HK_LOG`
193
222
  (`silent`, `normal`, `verbose` o `debug`), `HK_COST_REPOS` y
194
- `HK_COST_BUDGET` (límites del costo por tarea), `GH_PATH` (ruta a `gh`).
223
+ `HK_COST_BUDGET` (límites del costo por trabajo), `GH_PATH` (ruta a `gh`).
195
224
 
196
225
  ## Mantenga los datos privados
197
226
 
198
- **Lo que escribe un análisis es confidencial. No incluya `data/` o `reports/` en un
227
+ **Lo que escribe un análisis es confidencial. No confirme `data/` o `reports/` en un
199
228
  repositorio público.**
200
229
 
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.
230
+ Una instantánea registra los nombres y las descripciones de los repositorios privados, cada
231
+ alerta de seguridad abierta con el paquete que menciona, 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
232
+ todos, excepto a sus mantenedores; una instantánea publicada entregaría esa lista.
203
233
 
204
234
  El `.gitignore` de este repositorio excluye `data/`, `reports/` y
205
- `housekeeping.config.json`. Para mantener el historial, que es el objetivo de las instantáneas,
206
- ejecute la herramienta desde un **repositorio privado** de su propiedad y guárdelos allí.
235
+ `housekeeping.config.json`. Para mantener el historial, que es el propósito de las instantáneas,
236
+ ejecute la herramienta desde un repositorio **privado** y confírmelos allí.
207
237
 
208
238
  ## Hallazgos
209
239
 
210
240
  Las reglas se encuentran en `src/analyze.mjs`. Cada una cita la regla escrita que aplica,
211
241
  por lo que un hallazgo se puede discutir en relación con un estándar y no con el gusto. Las reglas
212
- que incluye este repositorio se encuentran en [`rules/`](rules/):
242
+ que este repositorio incluye se encuentran en [`rules/`](rules/):
213
243
 
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.
244
+ - [`rules/github-actions.md`](rules/github-actions.md): filtros de ruta, ejecutores, tamaño de matriz, límite del archivo de flujo de trabajo, concurrencia.
245
+ - [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md): CI debe pasar, las puertas de envío, versiones.
216
246
  - [`rules/repo-first.md`](rules/repo-first.md): la rama predeterminada.
217
- - [`rules/atlas-map.md`](rules/atlas-map.md): un mapa comprometido de cada repositorio, verificado en CI.
247
+ - [`rules/atlas-map.md`](rules/atlas-map.md): un mapa confirmado de cada repositorio, verificado en CI.
218
248
 
219
249
  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.
221
-
222
- Las reglas se encargan de mantener separados los elementos que parecen similares, porque combinarlos
223
- genera ruido:
224
-
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.
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.
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.
232
-
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.
234
-
235
- El [manual](https://mcp-tool-shop-org.github.io/housekeeping/handbook/) enumera todos los hallazgos, comandos, códigos de error y tablas.
250
+ y la regla juntos.
251
+
252
+ Las reglas se aseguran de mantener separados los elementos que parecen similares, porque combinarlos produce ruido:
253
+
254
+ - **Una rama predeterminada roja no es una rama de solicitud de extracción roja.** Una rama de Dependabot que falla es una tarea pendiente; una ejecución de `push` que falla en la rama predeterminada es
255
+ un problema. El evento de la ejecución decide cuál es.
256
+ - **El historial no es un problema.** Un flujo de trabajo que se mueve a solo versiones mantiene
257
+ su último fallo de la rama predeterminada para siempre. Un flujo de trabajo eliminado mantiene sus ejecuciones.
258
+ Ninguno es un defecto activo.
259
+ - **Una comprobación requerida que nada puede emitir no es una comprobación que no se ejecutó aquí.**
260
+ Una indica que se elimine el requisito; la otra indica que se corrija el desencadenador. Las reparaciones
261
+ se contradicen entre sí.
262
+ - **Una solicitud de extracción que el desencadenador omitió no es una solicitud de extracción con conflictos.** GitHub no ejecuta
263
+ 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 desencadenador. Esa requiere una rebase.
264
+ - **Una ejecución fallida no es una ejecución cancelada.** `cancel-in-progress` existe para matar
265
+ las ejecuciones obsoletas, por lo que los minutos cancelados suelen ser la regla de concurrencia en funcionamiento.
266
+ - **El costo bruto no es el costo neto.** GitHub mide los repositorios públicos a precio completo y los descuenta a cero. El bruto es la computación real; el neto es el dinero real.
267
+ Nunca se suman.
268
+ - **No medido no es limpio.** Un repositorio GitHub no está analizando informes
269
+ y muestra cero alertas. Un repositorio al que no llegó el paso de costos no tiene una fila de costos. Ambos
270
+ se informan como desconocidos.
271
+
272
+ La gravedad impulsa una puntuación de estado: crítico 40, alto 15, medio 6, bajo 2, informativo 0,
273
+ restados de 100. La puntuación clasifica la atención, no la calidad.
274
+
275
+ El [manual](https://mcp-tool-shop-org.github.io/housekeeping/handbook/)
276
+ enumera todos los resultados, comandos, códigos de error y tablas.
236
277
 
237
278
  ## Seguridad
238
279
 
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.
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.
280
+ - **Solo lectura.** El recopilador emite GraphQL consultas y solicitudes REST `GET`. Nunca
281
+ fusiona, envía, publica, edita o modifica una configuración.
282
+ - **Sin credenciales.** La autenticación es la que ya tiene `gh`. No se escribe nada
283
+ en el disco al respecto.
284
+ - **Sin telemetría.** Los únicos hosts a los que se contacta son la API GitHub, a través de `gh`,
285
+ y el registro de npm, para buscar versiones y avisos.
242
286
  - **Lo que almacena** es la parte sensible: consulte "Mantenga los datos privados".
243
287
 
244
- Informe una vulnerabilidad según lo descrito en [SECURITY.md](SECURITY.md).
288
+ Informe sobre una vulnerabilidad según se describe en [SECURITY.md](SECURITY.md).
245
289
 
246
290
  ## Pruebas
247
291
 
@@ -249,7 +293,10 @@ Informe una vulnerabilidad según lo descrito en [SECURITY.md](SECURITY.md).
249
293
  npm test
250
294
  ```
251
295
 
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.
296
+ Cada regla se prueba en ambas direcciones: la forma que debe activarse y la
297
+ forma adyacente que no debe activarse. Un verificador independiente vuelve a obtener una muestra de
298
+ resultados de GitHub en tiempo real a través de su propio transporte y omite, de forma evidente, cuando
299
+ no hay base de datos o no hay red.
253
300
 
254
301
  ## Licencia
255
302