@mcptoolshop/housekeeping 1.3.1 → 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/README.it.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.md">English</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">
@@ -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,39 +21,129 @@
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
- Un singolo ciclo di scansione raccoglie lo stato CI di ogni repository, le issue aperte e le richieste di pull, le release, i tag di versione, i file di workflow, le protezioni dei branch, gli avvisi di sicurezza, i file di blocco e i dati di fatturazione di Actions in SQLite, quindi esegue un controllo completo rispetto alle regole definite.
24
+ Un'unica scansione raccoglie lo stato CI di ogni repository, le issue aperte e le richieste di pull,
25
+ le release, i tag di versione, i file di workflow, la protezione dei branch, gli avvisi di sicurezza,
26
+ i file di lock e la fatturazione di Actions in SQLite, quindi esegue un controllo su tutto questo rispetto alle
27
+ regole definite.
24
28
 
25
29
  Fornisce risposte, per l'intera organizzazione contemporaneamente:
26
30
 
27
31
  - Quali sono i branch predefiniti contrassegnati come problematici e si tratta di una branch principale interrotta o di una cronologia obsoleta?
28
- - Quali richieste di pull non possono essere unite, perché un controllo richiesto che non produce alcun risultato le sta bloccando?
29
- - Quali distribuzioni vengono rifiutate dalle impostazioni del repository stesso?
30
- - Dove sono divergenti `package.json`, i tag Git e il registro npm?
32
+ - Quali richieste di pull non possono mai essere unite, perché un controllo richiesto che non produce alcun risultato le sta bloccando?
33
+ - Quali deployment vengono rifiutati dalle impostazioni del repository?
34
+ - Dove `package.json`, i tag Git e il registro npm si sono discostati?
31
35
  - Quali workflow violano le regole sui costi di Actions, quanto sono costati e quali job hanno consumato tali costi?
32
- - Quali repository contengono avvisi che il sistema di avvisi di GitHub non rileva?
36
+ - Quali repository contengono avvisi che il conteggio degli avvisi di GitHub non rileva?
37
+
38
+ È uno strumento di audit, non uno strumento di correzione. Legge GitHub e non modifica nulla.
39
+
40
+ ## Un agente per ogni repository
41
+
42
+ Un'organizzazione con dozzine di repository non ha un unico punto in cui risiedono i suoi
43
+ dati. housekeeping è questo punto, e il suo server MCP, `hk-mcp`, li fornisce
44
+ a un agente AI. Con esso, un singolo agente può agire come coordinatore per l'intera
45
+ organizzazione:
46
+
47
+ 1. **Scansione.** `hk refresh` acquisisce un'istantanea di ogni repository.
48
+ 2. **Smistamento.** L'agente chiede quali elementi sono problematici, quali sono bloccati e quali sono peggiorati,
49
+ e riceve risposte che già distinguono una branch principale interrotta da una cronologia obsoleta e
50
+ una richiesta di pull bloccata da una in conflitto.
51
+ 3. **Pianificazione di un'ondata.** Una singola query `hk_sql` individua tutti i repository con la stessa
52
+ configurazione, in modo che una correzione diventi una singola richiesta di pull per repository invece di una ricerca.
53
+ 4. **Esecuzione del lavoro.** housekeeping non scrive mai. L'agente apre le richieste di pull
54
+ con i propri strumenti, con le proprie autorizzazioni e con la tua approvazione.
55
+ 5. **Verifica.** Esegui di nuovo la scansione. L'anomalia è stata risolta o meno, e la differenza
56
+ tra due istantanee è una query.
57
+
58
+ Domande a cui un agente risponde in una o due chiamate:
59
+
60
+ - Quali sono i branch predefiniti contrassegnati come problematici e quale job e quale passaggio hanno causato il problema?
61
+ - Quali richieste di pull non possono mai essere unite e la causa è il trigger o un conflitto?
62
+ - Quali repository contengono un avviso di produzione per il quale GitHub non mostra alcun avviso?
63
+ - Quali workflow pianificati violano le regole per le pianificazioni e come?
64
+ - Quanto sono costati Actions e quale job ha consumato tali costi?
65
+ - Cosa è cambiato dall'ultima scansione?
66
+
67
+ | Strumento | A cosa risponde |
68
+ |---|---|
69
+ | `hk_summary` | Totali per la scansione più recente: repository, issue, richieste di pull, workflow, anomalie. |
70
+ | `hk_findings` | Anomalie per codice, gravità, categoria o repository; conteggi per codice quando non filtrati. L'anomalia di una branch principale problematica indica il job e il passaggio che hanno causato il problema. |
71
+ | `hk_ci` | Repository il cui branch predefinito è problematico e i workflow che non sono riusciti; anche le pianificazioni non riuscite, i branch delle richieste di pull non riuscite e i repository senza CI. |
72
+ | `hk_repo` | Un singolo repository nel dettaglio: anomalie, workflow, richieste di pull e issue aperte. |
73
+ | `hk_backlog` | Richieste di pull o issue aperte in tutta l'organizzazione, ordinate dalla più vecchia alla più recente. |
74
+ | `hk_health` | Un punteggio di salute per repository, ordinato dal peggiore al migliore. |
75
+ | `hk_cost` | Spese di Actions per repository, workflow o job, separate tra costi lordi e netti. |
76
+ | `hk_sql` | Una singola istruzione `SELECT` o `WITH` in sola lettura rispetto al data warehouse. |
77
+ | `hk_schema` | Le tabelle e le colonne, per scrivere query `hk_sql`. |
78
+
79
+ Ogni risposta proviene dall'istantanea più recente, aperta in sola lettura. Una chiamata non riuscita
80
+ restituisce un errore strutturato, mai una traccia dello stack.
81
+
82
+ ### Come connetterlo
33
83
 
34
- È uno strumento di audit, non uno strumento di correzione. Legge i dati di GitHub e non apporta alcuna modifica.
35
-
36
- ## Perché è strutturato in questo modo:
84
+ ```json
85
+ {
86
+ "mcpServers": {
87
+ "housekeeping": { "command": "hk-mcp", "env": { "HK_HOME": "/path/to/warehouse" } },
88
+ "atlas": { "command": "atlas", "args": ["mcp"] }
89
+ }
90
+ }
91
+ ```
37
92
 
38
- | Livello | Scelta | Motivazione |
93
+ `HK_HOME` è la directory da cui si esegue la scansione. Da un clone, utilizzare
94
+ `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]`. Il secondo
95
+ server è [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas),
96
+ che risponde allo stesso agente su un singolo repository alla volta (vedi sotto). Su
97
+ Windows, avvia un comando installato a livello globale tramite `cmd /c`.
98
+
99
+ ## housekeeping e Atlas
100
+
101
+ [Atlas](https://github.com/dogfood-lab/testing-os/tree/main/packages/atlas)
102
+ (`@dogfood-lab/atlas`) mappa un singolo repository: le sue parti e le sue porte, ovvero
103
+ ogni workflow con ciò che esegue, pubblica e distribuisce. La mappa viene salvata
104
+ come `atlas/` e controllata in CI. housekeeping è la vista dell'organizzazione. I due
105
+ sono progettati per funzionare insieme.
106
+
107
+ - **Ogni mappa, acquisita.** Una scansione legge la mappa salvata di ciascun repository insieme
108
+ a tutto il resto e segnala quali repository non ne hanno, quali non eseguono mai `atlas check` e quali
109
+ contengono un motore diverso da quello a cui il resto dell'
110
+ organizzazione fa riferimento.
111
+ - **Dove un'esecuzione problematica si è verificata.** Quando un branch predefinito è problematico, l'anomalia indica
112
+ il job e il passaggio che non sono riusciti e, tramite la mappa, il comando che quel passaggio
113
+ esegue, in modo che la correzione inizi nel file corretto.
114
+ - **Fatti sul deployment dalla mappa.** L'ambiente in cui un job esegue il deployment viene preso dalla
115
+ mappa in cui lo registra, in modo che entrambi gli strumenti leggano un workflow nello stesso modo.
116
+ - **Avvisi in tutta la flotta.** Atlas segnala un passaggio del workflow che fallirà
117
+ prima di essere eseguito, come uno strumento che richiede una versione runtime più recente di quella installata dal job.
118
+ Il report elenca questi elementi per tutti i repository contemporaneamente.
119
+
120
+ Un agente con entrambi i server passa da "questi dodici repository sono bloccati"
121
+ (housekeeping) a "questo è il workflow, il job e i file che una modifica raggiungerà" (Atlas), senza aprire ogni repository manualmente.
122
+
123
+ ## Perché ha questa forma
124
+
125
+ | Livello | Scelta | Motivo |
39
126
  |---|---|---|
40
- | Trasporto | L'interfaccia a riga di comando `gh` | Contiene già il token. Lo strumento non memorizza né richiede credenziali. |
41
- | Raccolta | GitHub GraphQL, con paginazione | Una singola query restituisce metadati, issue aperte, richieste di pull aperte, release e alberi di file per una pagina di repository. Una pagina che continua a superare il tempo limite viene dimezzata e la richiesta viene ripetuta dallo stesso cursore. |
42
- | Esecuzioni di Actions | REST | GraphQL non dispone di un'interfaccia per Actions. |
43
- | Costi di Actions | API di fatturazione più durate per singolo job | La fattura indica il repository; solo i job indicano il workflow. Gli endpoint `/timing` di GitHub restituiscono zeri, quindi la somma per singolo job viene ricostruita e quindi riconciliata con la fattura. |
44
- | Tariffe dei runner | lettura dalla fattura | Una tariffa fatturata può differire dal prezzo di listino e una costante nel codice sorgente falsificherebbe tutti i numeri. |
45
- | Archiviazione | SQLite tramite l'implementazione `node:sqlite` integrata | Nessun passaggio di compilazione nativo. |
46
- | Fonte di verità | `data/snapshots/*.json` | Dati grezzi, modificabili e con aggiunte successive. Il database viene derivato: `npm run rebuild` lo ricostruisce offline. |
47
- | Log della scansione | `data/sweeps.jsonl` | Una riga per ogni scansione, comprese le scansioni che hanno avuto esito negativo e le scansioni che non hanno trovato nuovi dati. |
127
+ | Trasporto | la CLI `gh` | Già contiene il tuo token. Lo strumento non memorizza né richiede mai una credenziale. |
128
+ | Raccolta | GitHub GraphQL, a pagine | Una singola query restituisce metadati, issue aperte, richieste di pull aperte, release e alberi di file per una pagina di repository. Una pagina che continua a superare il tempo limite viene dimezzata e richiesta di nuovo dallo stesso cursore. |
129
+ | Esecuzioni di Actions | REST | GraphQL non ha un'interfaccia Actions. |
130
+ | Costi di Actions | API di fatturazione più durate per job | La fattura indica il repository; solo i job indicano quale flusso di lavoro. Gli endpoint GitHub di `/timing` restituiscono zeri, quindi la somma per ogni job viene ricostruita e quindi confrontata con la fattura. |
131
+ | Tariffe per l'esecuzione | lettura dalla fattura | Una tariffa fatturata può differire dal prezzo di listino e una costante nel codice sorgente falsificherebbe ogni numero. |
132
+ | Archiviazione | SQLite tramite il `node:sqlite` integrato | Nessuna fase di compilazione nativa. |
133
+ | Fonte di verità | `data/snapshots/*.json` | Dati grezzi, modificabili e con possibilità di aggiungere solo dati. Il database viene derivato: `npm run rebuild` lo ricostruisce offline. |
134
+ | Registro delle scansioni | `data/sweeps.jsonl` | Una riga per ogni scansione, comprese le scansioni che hanno avuto esito negativo e le scansioni che non hanno trovato nulla di nuovo. |
48
135
 
49
136
  Gli snapshot sono immutabili e additivi, quindi la differenza tra due date è un `JOIN`.
50
137
 
51
138
  ## Requisiti
52
139
 
53
140
  - Node.js 22.5 o successivo.
54
- - L'interfaccia a riga di comando di [GitHub](https://cli.github.com/), con accesso (`gh auth status`) come account in grado di leggere l'organizzazione. La lettura dei dati di fatturazione e degli avvisi di sicurezza richiede i permessi corrispondenti; una scansione senza tali permessi registra "non misurato" e continua. Non registra mai un permesso mancante come risultato valido.
55
- - Windows o Linux. È sviluppato su Windows e i test vengono eseguiti su Linux in CI. macOS dovrebbe funzionare e non è testato.
141
+ - La [CLI GitHub](https://cli.github.com/), con accesso (`gh auth status`) come
142
+ account in grado di leggere l'organizzazione. Per leggere le fatture e gli avvisi di sicurezza
143
+ sono necessari i permessi corrispondenti; in caso contrario, la scansione registra "non misurato" e
144
+ prosegue. Non registra mai un permesso mancante come risultato valido.
145
+ - Windows o Linux. È sviluppato su Windows e i suoi test vengono eseguiti su Linux in
146
+ CI. macOS dovrebbe funzionare, ma non è stato testato.
56
147
 
57
148
  ## Utilizzo
58
149
 
@@ -62,9 +153,10 @@ mkdir warehouse && cd warehouse # housekeeping keeps its data here
62
153
  hk refresh your-org # collect, load, analyze, write reports/AUDIT-<date>.md
63
154
  ```
64
155
 
65
- Per conservare le impostazioni tra le diverse esecuzioni, inserire un file `housekeeping.config.json` in quella directory (vedere Configurazione); quindi `hk refresh` non richiede alcun argomento.
156
+ Per mantenere le impostazioni tra le scansioni, inserire un `housekeeping.config.json` in quella
157
+ directory (vedere Configurazione); quindi `hk refresh` non richiede alcun argomento.
66
158
 
67
- Oppure eseguirlo da una copia, che conserva i suoi dati nella copia:
159
+ Oppure eseguirlo da una copia, che mantiene i suoi dati nella copia:
68
160
 
69
161
  ```bash
70
162
  git clone https://github.com/mcp-tool-shop-org/housekeeping.git
@@ -75,7 +167,7 @@ cp housekeeping.config.example.json housekeeping.config.json # then set "org"
75
167
  hk refresh
76
168
  ```
77
169
 
78
- Quindi, esegui una query:
170
+ Quindi, eseguite una query:
79
171
 
80
172
  ```bash
81
173
  hk summary # portfolio totals
@@ -84,6 +176,8 @@ hk findings # findings grouped by severity and code
84
176
  hk health # per-repository health score, worst first
85
177
  hk repo <name> # one repository in full
86
178
  hk prs # every open pull request by age
179
+ hk branches # branches by state: merged, moved after merge, no PR
180
+ hk watch # open PRs, alerts and branches for a short watch list
87
181
  hk versions # package.json against git tag against npm
88
182
  hk actions # every workflow and its rule flags
89
183
  hk cost # Actions cost, gross and net side by side
@@ -91,13 +185,15 @@ hk sql "SELECT ..." # one read-only statement
91
185
  hk help # every command and flag
92
186
  ```
93
187
 
94
- In una copia senza il file `npm link`, ogni esecuzione di `hk <command>` è `node src/cli.mjs <command>`.
188
+ In una copia senza `npm link`, ogni `hk <command>` è `node src/cli.mjs <command>`.
95
189
 
96
- `npm run rebuild` ricostruisce il database e il report dagli snapshot già presenti sul disco, senza accesso alla rete.
190
+ `npm run rebuild` deriva nuovamente il database e il report dagli snapshot già
191
+ sul disco, senza accesso alla rete.
97
192
 
98
193
  Una scansione completa effettua alcune centinaia di chiamate API. Non eseguire `refresh` in un ciclo.
99
194
 
100
- I risultati vengono inviati all'output standard; i progressi e gli errori vengono inviati all'output di errore standard. Ogni errore stampa un codice e un suggerimento. Codici di uscita: 0 (tutto ok), 1 (errore utente), 2 (errore di runtime), 3 (parziale, la scansione è terminata, ma con delle lacune).
195
+ I risultati vengono inviati all'output standard; i progressi e gli errori vengono inviati all'errore standard. Ogni
196
+ errore stampa un codice e un suggerimento. Codici di uscita: 0 ok, 1 errore utente, 2 errore di runtime, 3 parziale (la scansione è terminata, con delle lacune).
101
197
 
102
198
  ## Configurazione
103
199
 
@@ -110,73 +206,80 @@ I risultati vengono inviati all'output standard; i progressi e gli errori vengon
110
206
  }
111
207
  ```
112
208
 
113
- - `org` è l'organizzazione da sottoporre a scansione. `hk refresh <org>` lo sovrascrive. In assenza di entrambi, la scansione non viene avviata.
114
- - `metaRepos` sono i repository che contengono le impostazioni predefinite dell'organizzazione, le risorse o gli strumenti, e non un prodotto distribuito. Sono esenti dai risultati che hanno senso solo per un prodotto: mancanza di file README, LICENSE e simili, assenza di workflow e assenza di release.
209
+ - `org` è l'organizzazione da scansionare. `hk refresh <org>` lo sovrascrive. In
210
+ caso contrario, la scansione si rifiuta di avviarsi.
211
+ - `metaRepos` sono i repository che contengono le impostazioni predefinite dell'organizzazione, le risorse o
212
+ gli strumenti, non un prodotto distribuito. Sono esenti dai risultati che hanno senso solo per un prodotto: mancanza di file README, LICENSE e simili, assenza di flussi di lavoro e assenza di versioni.
115
213
 
116
214
  Un file non valido è un errore, mai un valore predefinito silenzioso: una chiave sconosciuta, un tipo errato o un JSON non valido interrompono l'esecuzione.
117
215
 
118
- Esegui da una copia clonata, housekeeping mantiene `data/`, `reports/` e il file di configurazione nella copia clonata. Esegui come pacchetto installato, li mantiene nella directory da cui lo esegui o in `HK_HOME` quando è impostato.
216
+ Eseguire da una copia, housekeeping mantiene `data/`, `reports/` e il file di configurazione
217
+ nella copia. Eseguire come pacchetto installato, li mantiene nella directory da cui
218
+ lo si esegue o in `HK_HOME` quando è impostato.
119
219
 
120
- Ambiente: `HK_HOME` (dove risiedono i dati, i report e la configurazione), `HK_CONFIG` (percorso della configurazione), `HK_DB` (percorso del database), `HK_LOG` (`silent`, `normal`, `verbose` o `debug`), `HK_COST_REPOS` e `HK_COST_BUDGET` (limiti per il costo per singolo job), `GH_PATH` (percorso di `gh`).
220
+ Ambiente: `HK_HOME` (dove risiedono i dati, i report e la configurazione),
221
+ `HK_CONFIG` (percorso della configurazione), `HK_DB` (percorso del database), `HK_LOG`
222
+ (`silent`, `normal`, `verbose` o `debug`), `HK_COST_REPOS` e
223
+ `HK_COST_BUDGET` (limiti per il costo per job), `GH_PATH` (percorso di `gh`).
121
224
 
122
- ## Mantieni i dati privati
225
+ ## Mantenere i dati privati
123
226
 
124
- **I dati scritti da una scansione sono sensibili. Non inserire `data/` o `reports/` in un repository pubblico.**
227
+ **Ciò che una scansione scrive è sensibile. Non inserire `data/` o `reports/` in un
228
+ repository pubblico.**
125
229
 
126
- Uno snapshot registra i nomi e le descrizioni dei repository privati, ogni avviso di sicurezza aperto con il pacchetto a cui si riferisce, i file di workflow e i dati di fatturazione di Actions. GitHub nasconde deliberatamente gli avvisi di sicurezza di un repository pubblico a tutti tranne che ai suoi manutentori; uno snapshot pubblicato fornirebbe tale elenco.
230
+ Uno snapshot registra i nomi e le descrizioni dei repository privati, ogni
231
+ avviso di sicurezza aperto con il pacchetto a cui si riferisce, i file del flusso di lavoro e la fatturazione di Actions. GitHub nasconde deliberatamente gli avvisi di sicurezza di un repository pubblico a tutti tranne che ai suoi manutentori; uno snapshot pubblicato fornirebbe tale elenco.
127
232
 
128
- Il `.gitignore` di questo repository esclude `data/`, `reports/` e `housekeeping.config.json`. Per mantenere la cronologia, che è lo scopo degli snapshot, esegui lo strumento da un repository **privato** di tua proprietà e inserisci gli snapshot lì.
129
-
130
- ## Server MCP
131
-
132
- Il file `hk-mcp` (o `npm run mcp` in una copia) gestisce l’accesso al database tramite stdio, quindi un assistente può porre domande senza dover leggere un file di diversi megabyte:
133
-
134
- `hk_summary` · `hk_findings` · `hk_ci` · `hk_repo` · `hk_backlog` · `hk_health` · `hk_cost` · `hk_sql` · `hk_schema`
135
-
136
- ```json
137
- {
138
- "mcpServers": {
139
- "housekeeping": { "command": "hk-mcp", "env": { "HK_HOME": "/path/to/warehouse" } }
140
- }
141
- }
142
- ```
143
-
144
- `HK_HOME` è la directory da cui si avvia l’esecuzione. In caso di copia, utilizzare invece `"command": "node", "args": ["/path/to/housekeeping/src/mcp.mjs"]`.
145
-
146
- `hk_sql` accetta una singola istruzione `SELECT` o `WITH` e apre il database in sola lettura. Una chiamata non riuscita restituisce un errore strutturato, mai una traccia dello stack.
233
+ Il `.gitignore` di questo repository esclude `data/`, `reports/` e
234
+ `housekeeping.config.json`. Per mantenere la cronologia, che è lo scopo degli snapshot,
235
+ eseguire lo strumento da un **repository privato** di proprietà e inserirli lì.
147
236
 
148
237
  ## Risultati
149
238
 
150
- Le regole sono contenute in `src/analyze.mjs`. Ognuna di esse fa riferimento alla regola scritta che applica, in modo che un risultato possa essere contestato rispetto a uno standard e non al gusto personale. Le regole fornite con questo repository sono in [`rules/`](rules/):
151
-
152
- - [`rules/github-actions.md`](rules/github-actions.md): filtri per i percorsi, runner, dimensione della matrice, limite del file di flusso di lavoro, concorrenza.
153
- - [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md): la CI deve essere superata, i controlli di rilascio, le versioni.
154
- - [`rules/repo-first.md`](rules/repo-first.md): il ramo predefinito.
155
- - [`rules/atlas-map.md`](rules/atlas-map.md): una mappa registrata di ciascun repository, verificata nella CI.
156
-
157
- Questi sono gli standard di un'organizzazione. Se i tuoi sono diversi, modifica il file delle regole e la regola stessa.
158
-
159
- Le regole si assicurano di mantenere separate le cose che sembrano simili, perché combinarle genera confusione:
160
-
161
- - **Un ramo predefinito "rosso" non è un ramo di richiesta di pull "rosso".** Un ramo di Dependabot che fallisce rappresenta un elemento in sospeso; un'esecuzione di `push` che fallisce sul ramo predefinito rappresenta un problema. L'evento dell'esecuzione determina quale sia.
162
- - **La cronologia non è un problema.** Un flusso di lavoro spostato in un trigger solo per i rilasci mantiene il suo ultimo errore sul ramo predefinito per sempre. Un flusso di lavoro eliminato mantiene le sue esecuzioni. Nessuno dei due è un difetto attivo.
163
- - **Un controllo obbligatorio che non può emettere nulla non è un controllo che non è stato eseguito qui.** Uno indica di eliminare il requisito; l'altro indica di correggere il trigger. Le correzioni si contraddicono a vicenda.
164
- - **Un'esecuzione fallita non è un'esecuzione annullata.** `cancel-in-progress` esiste per terminare le esecuzioni obsolete, quindi i minuti annullati sono solitamente la regola di concorrenza in funzione.
165
- - **Il costo lordo non è il costo netto.** GitHub calcola i costi dei repository pubblici al prezzo pieno e li riduce a zero. Il costo lordo è la potenza di calcolo reale; il costo netto è il denaro reale. Non vengono mai sommati.
166
- - **Se non viene misurato, non è corretto.** Un repository GitHub che non esegue la scansione segnala zero avvisi. Un repository per il quale il controllo dei costi non è stato raggiunto non ha una riga di costo. Entrambi vengono segnalati come sconosciuti.
167
-
168
- La gravità determina un punteggio di salute: critico 40, alto 15, medio 6, basso 2, informativo 0, dedotto da 100. Il punteggio classifica l'attenzione, non la qualità.
169
-
170
- Il [manuale](https://mcp-tool-shop-org.github.io/housekeeping/handbook/) elenca ogni riscontro, comando, codice di errore e tabella.
239
+ Le regole sono contenute in `src/analyze.mjs`. Ognuna di esse cita la regola scritta che applica,
240
+ quindi un risultato può essere contestato rispetto a uno standard e non al gusto personale. Le regole
241
+ che questo repository distribuisce sono in [`rules/`](rules/):
242
+
243
+ - [`rules/github-actions.md`](rules/github-actions.md): filtri dei percorsi, esecutori, dimensione della matrice, limite del file del flusso di lavoro, concorrenza.
244
+ - [`rules/shipcheck-product-standards.md`](rules/shipcheck-product-standards.md): il CI deve essere superato, i gate di rilascio, le versioni.
245
+ - [`rules/repo-first.md`](rules/repo-first.md): la branch predefinita.
246
+ - [`rules/atlas-map.md`](rules/atlas-map.md): una mappa impegnata di ciascun repository, controllata nel CI.
247
+
248
+ Sono gli standard di un'organizzazione. Se i vostri sono diversi, modificate il file delle regole
249
+ e la regola insieme.
250
+
251
+ Le regole si assicurano di mantenere separate le cose che sembrano simili, perché combinarle produce rumore:
252
+
253
+ - **Una branch predefinita rossa non è una branch di richiesta di pull rossa.** Una branch Dependabot non riuscita è un backlog; un'esecuzione `push` non riuscita sulla branch predefinita è un errore. L'evento dell'esecuzione decide quale.
254
+ - **La cronologia non è un errore.** Un flusso di lavoro spostato in release-only mantiene
255
+ il suo ultimo errore sulla branch predefinita per sempre. Un flusso di lavoro eliminato mantiene le sue esecuzioni.
256
+ Nessuno dei due è un difetto attivo.
257
+ - **Un controllo richiesto che nulla può emettere non è un controllo che non è stato eseguito qui.**
258
+ Uno dice di eliminare il requisito; l'altro dice di correggere il trigger. Le correzioni
259
+ si contraddicono a vicenda.
260
+ - **Una richiesta di pull saltata dal trigger non è una richiesta di pull in conflitto.** GitHub non esegue
261
+ nessun flusso di lavoro di richiesta di pull su una richiesta di pull con conflitti, quindi il suo controllo mancante non dice nulla sul trigger. Quello richiede un rebase.
262
+ - **Un'esecuzione non riuscita non è un'esecuzione annullata.** `cancel-in-progress` esiste per interrompere
263
+ le esecuzioni obsolete, quindi i minuti annullati sono in genere la regola di concorrenza in funzione.
264
+ - **Il costo lordo non è il costo netto.** GitHub misura i repository pubblici a prezzo pieno e li sconta a zero. Il costo lordo è la potenza di calcolo reale; il costo netto è il denaro reale.
265
+ Non vengono mai sommati.
266
+ - **Non misurato non è pulito.** Un repository GitHub che non esegue la scansione dei report
267
+ non segnala alcun avviso. Un repository a cui il passaggio dei costi non è arrivato non ha una riga dei costi. Entrambi
268
+ vengono segnalati come sconosciuti.
269
+
270
+ La gravità determina un punteggio di integrità: critico 40, alto 15, medio 6, basso 2, informativo 0,
271
+ dedotto da 100. Il punteggio classifica l'attenzione, non la qualità.
272
+
273
+ Il [manuale](https://mcp-tool-shop-org.github.io/housekeeping/handbook/) elenca tutti i risultati, i comandi, i codici di errore e le tabelle.
171
274
 
172
275
  ## Sicurezza
173
276
 
174
- - **Solo lettura.** Il raccoglitore invia query GraphQL e richieste REST `GET`. Non esegue mai operazioni di merge, push, rilascio, pubblicazione o modifica di un'impostazione.
175
- - **Nessuna credenziale.** L'autenticazione è quella già presente in `gh`. Nulla viene scritto su disco al riguardo.
176
- - **Nessuna telemetria.** Gli unici host contattati sono l'API di GitHub, tramite `gh`, e il registro npm, per la ricerca di versioni e avvisi.
177
- - **Ciò che memorizza** è la parte sensibile: vedere "Mantenere i dati privati".
277
+ - **Solo lettura.** Il raccoglitore esegue GraphQL query e richieste REST `GET`. Non esegue mai operazioni di unione, invio, rilascio, pubblicazione o modifica delle impostazioni.
278
+ - **Nessuna credenziale.** L'autenticazione utilizza le credenziali già presenti in `gh`. Nessun dato viene scritto su disco al riguardo.
279
+ - **Nessuna telemetria.** Gli unici host contattati sono l'API GitHub, tramite `gh`, e il registro npm, per la verifica della versione e degli avvisi.
280
+ - **Cosa memorizza** è la parte sensibile: vedere "Mantenere i dati privati".
178
281
 
179
- Segnala una vulnerabilità come descritto in [SECURITY.md](SECURITY.md).
282
+ Segnalare una vulnerabilità come descritto in [SECURITY.md](SECURITY.md).
180
283
 
181
284
  ## Test
182
285
 
@@ -184,7 +287,7 @@ Segnala una vulnerabilità come descritto in [SECURITY.md](SECURITY.md).
184
287
  npm test
185
288
  ```
186
289
 
187
- Ogni regola viene testata in entrambe le direzioni: la forma che deve attivarsi e la forma adiacente che non deve attivarsi. Un verificatore separato deriva nuovamente un campione di risultati da GitHub in tempo reale tramite il proprio trasporto e salta, in modo evidente, quando non è presente un database o una rete.
290
+ Ogni regola viene testata in entrambe le direzioni: la configurazione che deve attivarsi e la configurazione adiacente che non deve attivarsi. Un verificatore separato ricava un campione di risultati dai dati GitHub in tempo reale tramite il proprio canale di comunicazione e, in caso di assenza del database o della rete, segnala l'errore in modo evidente.
188
291
 
189
292
  ## Licenza
190
293
 
@@ -192,4 +295,4 @@ MIT. Vedere [LICENSE](LICENSE).
192
295
 
193
296
  ---
194
297
 
195
- Creato da <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
298
+ Realizzato da <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>