Regole di conformità (guardrail)

Le regole di conformità sono controlli deterministici che validano le modifiche al codice rispetto alle tue decisioni architetturali. Impongono convenzioni di denominazione, vincoli tecnologici, confini tra livelli e pattern di sicurezza — senza alcuna IA coinvolta.
Vai su Hub Agenti nella barra laterale per gestire le tue regole di conformità.
Perché le regole di conformità?
Quando gli agenti di programmazione IA (Claude Code, Cursor, Copilot) generano codice, non conoscono le tue decisioni architetturali. Le regole di conformità codificano queste decisioni come vincoli eseguibili:
- L'agente non può usare MongoDB se il tuo radar tecnologico indica PostgreSQL
- L'agente non può inserire chiamate al database negli handler HTTP se la tua architettura richiede un livello di servizio
- L'agente non può aggiungere
fmt.Printlnse il tuo team usa il logging strutturato
Le regole vengono valutate in modo deterministico — nessun LLM, nessun output probabilistico. Lo stesso codice produce sempre lo stesso risultato.
Tipi di regole
Archyl supporta sette tipi di regole di conformità:
Pattern obbligatorio
Verifica i pattern che devono essere presenti o che non devono esserlo nel tuo codice.
| Caso d'uso | Esempio |
|---|---|
| Vietare il logging di debug | Vietare fmt.Println, console.log, print() |
| Vietare i rischi di sicurezza | Vietare eval(), innerHTML, password hardcoded |
| Richiedere la gestione degli errori | Richiedere set -euo pipefail negli script shell |
| Imporre standard | Vietare SELECT * nelle query SQL |
Configurazione:
- File glob — Controlla solo i file che corrispondono a un pattern (ad es.
*.go,*.{ts,tsx}) - Forbidden patterns — Pattern regex che generano una violazione quando vengono trovati
- Required patterns — Pattern regex che generano una violazione quando mancano
I glob dei file supportano l'espansione delle parentesi graffe: *.{js,jsx,ts,tsx} corrisponde a tutti i file JavaScript e TypeScript.
Convenzione di denominazione
Valida i pattern di denominazione di file, tipi e funzioni.
| Ambito | Esempio |
|---|---|
| File | I file Go devono essere snake_case.go |
| Tipo | I tipi esportati devono essere PascalCase |
| Funzione | Le funzioni dovrebbero iniziare con un verbo (Get, Create, Delete) |
Configurazione:
- Patterns — Elenco di ambito (file/tipo/funzione) + regex + descrizione
Vincolo tecnologico
Limita i linguaggi e le librerie consentiti in un container.
| Caso d'uso | Esempio |
|---|---|
| Blocco del linguaggio | Il backend deve essere solo in Go |
| Divieto di dipendenza | Niente lodash (usa JS nativo) |
| Imposizione della migrazione | Niente moment.js (usa date-fns) |
Configurazione:
- Allowed languages — Elenco separato da virgole (ad es.
go, typescript) - Forbidden imports — Un import per riga
Confine tra livelli
Applica le regole di import tra livelli di Clean Architecture, architettura esagonale o DDD.
| Livello | Può importare da |
|---|---|
| Domain | Nulla (logica di business pura) |
| Service | Solo Domain |
| Adapter | Domain, Service |
| Infrastructure | Solo Domain |
Configurazione:
- Layers — Definisci ogni livello con un nome, un pattern di percorso (glob) e le sorgenti di import consentite
- Clicca sui nomi dei livelli per attivare o disattivare i permessi di import
Conformità ai contratti
Verifica che i file degli handler degli endpoint contengano un'adeguata documentazione del contratto API.
Configurazione:
- Contract type — HTTP (OpenAPI), gRPC, GraphQL o AsyncAPI
- Endpoint file patterns — Glob per i file che contengono definizioni di endpoint
- Strict mode — Se attiva, qualsiasi file corrispondente privo di documentazione del contratto genera una violazione
Regola di dipendenza
Applica i percorsi di import vietati tra confini architetturali.
Configurazione:
- Scope — Livello di container o di componente
- Forbidden pairs — Pattern di percorso di origine e di destinazione che non devono mai dipendere l'uno dall'altro (ad es.
**/service/** -> **/handler/**)
Conformità dei canali di eventi
Verifica che i pattern di produzione e consumo di eventi rispettino le convenzioni di denominazione.
Configurazione:
- Producer patterns — Pattern regex che identificano il codice che produce eventi (ad es.
kafka\.Send) - Consumer patterns — Pattern regex che identificano il codice che consuma eventi
- Topic regex — Pattern a cui devono corrispondere i nomi di topic validi (ad es.
^[a-z]+\.[a-z]+\.[a-z]+$)
Pacchetti di regole
I pacchetti sono raccolte curate di regole che puoi installare con un clic. Invece di aggiungere le regole una per una, installa un pacchetto e ottieni un set di regole completo per il tuo stack.
Clicca su Packs nella barra degli strumenti per sfogliare i pacchetti disponibili.
Pacchetti di architettura
| Pacchetto | Regole | Cosa impone |
|---|---|---|
| Clean Architecture | 5 | Confini tra i livelli domain/service/adapter/infra, isolamento dei moduli |
| Hexagonal Architecture | 4 | Pattern ports & adapters, isolamento del core |
| Domain-Driven Design | 3 | Livelli DDD, separazione command/query di CQRS |
Pacchetti per linguaggio
| Pacchetto | Regole | Cosa copre |
|---|---|---|
| Go Backend | 26 | Wrapping degli errori, sicurezza delle goroutine, propagazione del contesto, naming, niente panic, niente init() |
| React Frontend | 23 | Rigore TypeScript, pattern dei componenti, data fetching, niente manipolazione del DOM |
| Next.js Full-Stack | 20 | Regole React + sicurezza SSR, guard su window, hook per localStorage |
| Python Backend | 16 | Gestione delle eccezioni, pattern async, type hint, niente stato globale |
| Java Backend | 11 | Pattern di DI di Spring, gestione delle eccezioni, niente System.exit |
| Rust Backend | 8 | Niente unwrap/unsafe, tipi di errore appropriati, niente todo!() |
| Kotlin / Android | 5 | Null safety, immutabilità, niente println |
| Vue Frontend | 10 | Niente v-html, rigore TypeScript, niente innerHTML |
| .NET / C# Backend | 5 | Pattern async, gestione delle eccezioni, ILogger |
| Swift / iOS | 3 | Sicurezza degli optional, niente force unwrap |
Pacchetti di dominio
| Pacchetto | Regole | Cosa copre |
|---|---|---|
| Security Essentials | 17 | Segreti hardcoded, injection, crittografia debole, TLS, CORS |
| DevOps & Infrastructure | 24 | Docker, Kubernetes, Terraform, GitHub Actions, script shell |
| API Best Practices | 9 | Codici di stato, sicurezza SQL, documentazione dei contratti, niente URL hardcoded |
| Testing & Reliability | 5 | Niente test saltati, niente .only(), niente sleep, niente TODO |
| Event-Driven Architecture | 3 | Denominazione dei topic Kafka/RabbitMQ, niente topic hardcoded |
Catalogo delle regole
Archyl include un catalogo di 169 regole predefinite per 23 tecnologie. Per esplorarlo, clicca su Sfoglia catalogo nell'Hub Agenti.
Tecnologie coperte
Go, TypeScript, JavaScript, Python, Java, Kotlin, Rust, C#, C/C++, Ruby, PHP, Swift, React, Vue, Angular, Next.js, Docker, Kubernetes, Terraform, SQL, Shell, YAML, GitHub Actions
Categorie
| Categoria | Esempi |
|---|---|
| Architecture & Design | Clean Architecture, Hexagonal, DDD, MVC, CQRS, handler-service-repository |
| Security | Niente segreti hardcoded, niente eval(), niente SQL injection, niente TLS disabilitato, niente wildcard CORS, niente command injection |
| Code Quality | Niente logging di debug, wrapping degli errori, niente catch vuoti, niente bare except, niente tipo any, niente unwrap() |
| Infrastructure & DevOps | Fissare le versioni Docker, limiti di risorse K8s, niente container privilegiati, tag Terraform, build multi-stage |
| Naming Conventions | snake_case, PascalCase, camelCase a seconda del linguaggio |
| Testing & Reliability | Niente test saltati, niente .only(), niente TODO/FIXME, niente sleep nei test |
| Performance | Niente sleep sincroni, sicurezza delle goroutine, niente await nei cicli, niente I/O sincrono in Node.js |
| API & Data | Niente SQL grezzo, codici di stato HTTP corretti, documentazione dei contratti, niente URL hardcoded |
| Event-Driven | Convenzioni di denominazione dei topic Kafka/RabbitMQ, niente nomi di topic hardcoded |
Clicca su una regola qualsiasi del catalogo per aggiungerla — il modulo di configurazione si precompila automaticamente.
Livelli di gravità
Ogni regola ha una gravità che ne determina l'impatto:
| Gravità | Significato | Esempio |
|---|---|---|
| Critica | Da correggere prima del merge | Niente segreti hardcoded, niente eval(), violazioni dei confini tra livelli |
| Alta | Da correggere preferibilmente prima del merge | Niente logging di debug, fissare le versioni Docker, niente panic in Go |
| Media | Da correggere quando possibile | Convenzioni di denominazione, niente tipo any, niente var in JS |
| Bassa | Informativa | Niente TODO/FIXME, niente stili inline in React |
Una verifica di conformità fallisce se vengono trovate violazioni di gravità critica o alta. Le violazioni di gravità media e bassa vengono segnalate, ma non fanno fallire la verifica.
Dashboard di conformità
La scheda Dashboard nell'Hub Agenti offre una panoramica in tempo reale di tutte le verifiche di conformità nei tuoi progetti.
Cosa mostra
- Schede statistiche — Verifiche totali, tasso di superamento (con codice colore), numero di verifiche superate e di verifiche fallite
- Rapporto superato / fallito — Barra visiva che mostra la proporzione a colpo d'occhio
- Banner dell'ultima verifica — Stato della verifica più recente, con un link al report completo
- Elenco delle verifiche recenti — Tutte le verifiche con stato, tipo di trigger, nome del progetto, numero di file, numero di violazioni e tempo trascorso
Filtri
Usa il menu a tendina dei progetti in alto per filtrare le verifiche per progetto, oppure seleziona "Tutti i progetti" per vedere tutto.
Report delle verifiche
Clicca su una verifica qualsiasi per aprirne il report completo:
- Barra di ripartizione per gravità — Visualizzazione proporzionale delle violazioni critiche/alte/medie/basse
- Violazioni raggruppate per file — Sezioni comprimibili con gravità, titolo, descrizione e suggerimento per ogni violazione
- Metadati della verifica — Tipo di trigger, SHA del commit, ora di inizio, durata
Ogni report di verifica ha il proprio URL condivisibile (ad es. /agent/dashboard/:checkId).
Eliminare le verifiche
Usa la selezione multipla per eliminare più verifiche in una volta:
- Seleziona le caselle accanto alle singole verifiche, oppure usa "Seleziona tutto"
- Clicca sul pulsante rosso Delete che compare
- Le verifiche e le relative violazioni vengono rimosse definitivamente
Integrazione CI/CD
Le regole di conformità possono essere eseguite automaticamente a ogni pull request. Consulta Integrazione con GitHub Actions per le istruzioni di configurazione.
Come funziona
- Una PR viene aperta o aggiornata su GitHub
- La GitHub Action di Archyl recupera i file modificati
- I file vengono inviati all'API di Archyl per la valutazione
- I risultati compaiono come commento sulla PR e come controllo di stato del commit
- Il workflow fallisce se vengono trovate violazioni critiche o alte
Commento sulla PR
Quando vengono trovate violazioni, Archyl pubblica un commento dettagliato sulla PR:
- Tabella riepilogativa con il numero di violazioni per gravità
- Violazioni per file con descrizioni e suggerimenti
- Il commento viene aggiornato (non duplicato) a ogni push successivo
Gestione delle regole
Creare regole
- Clicca su Packs per installare un set curato di regole per il tuo stack, oppure
- Clicca su Sfoglia catalogo per esplorare le 169 regole predefinite e aggiungerle, oppure
- Clicca su Regola personalizzata per creare manualmente una nuova regola
Abilitare/disabilitare le regole
Usa l'interruttore accanto a una regola per abilitarla o disabilitarla. Le regole disabilitate non vengono valutate.
Modificare le regole
Clicca sull'icona di modifica (matita) di una regola per modificarne il nome, la descrizione, la gravità o la configurazione.
Eliminare le regole
Clicca sull'icona di eliminazione (cestino), poi conferma. L'operazione non può essere annullata.
Filtrare le regole
- Ricerca — Filtra per nome o descrizione della regola
- Filtro per tipo — Clicca sulle pill dei tipi per mostrare solo le regole di un tipo specifico
Integrazione MCP
Le regole di conformità sono accessibili agli agenti IA tramite il server MCP:
Strumenti MCP disponibili
| Strumento | Descrizione |
|---|---|
run_conformance_check |
Esegue tutte le regole abilitate sui file forniti e restituisce le violazioni |
list_conformance_rules |
Elenca tutte le regole, con filtro opzionale per progetto |
create_conformance_rule |
Crea una nuova regola |
update_conformance_rule |
Aggiorna la configurazione, la gravità o lo stato di attivazione di una regola |
delete_conformance_rule |
Elimina una regola |
get_agent_context |
Restituisce il contesto architetturale completo, inclusi i guardrail attivi |
Eseguire verifiche da un agente
Lo strumento run_conformance_check permette agli agenti IA di validare il codice prima del commit. L'agente invia i file su cui sta lavorando:
{
"projectId": "your-project-uuid",
"changedFiles": [
{ "path": "internal/handler/user.go", "status": "modified" }
],
"fileContents": {
"internal/handler/user.go": "package handler\nimport..."
}
}
La risposta include:
passed— Se la verifica è stata superata (nessuna violazione critica/alta)violations— Elenco delle violazioni con gravità, percorso del file, titolo e suggerimentorulesEvaluated— Quali regole sono state valutatefilesAnalyzed— Quanti file sono stati analizzaticheckId— L'ID della verifica (visibile nella dashboard)
L'agente può usare questo feedback per correggere le violazioni prima che il codice venga committato.
Contesto dell'agente
Lo strumento MCP get_agent_context restituisce tutte le regole di conformità attive come parte del briefing architetturale. Gli agenti IA che chiamano questo strumento prima di iniziare a lavorare sapranno quali guardrail rispettare.
REST API
# Rules
GET /api/v1/conformance/rules # List rules
POST /api/v1/conformance/rules # Create rule
POST /api/v1/conformance/rules/bulk # Create multiple rules (used by packs)
GET /api/v1/conformance/rules/:id # Get rule
PUT /api/v1/conformance/rules/:id # Update rule
DELETE /api/v1/conformance/rules/:id # Delete rule
POST /api/v1/conformance/rules/:id/toggle # Enable/disable
# Checks
POST /api/v1/projects/:id/conformance/check # Trigger check with changed files
GET /api/v1/conformance/checks # List all checks (org-wide, ?projectId= filter)
GET /api/v1/conformance/checks/:id/report # Get check report with violations
POST /api/v1/conformance/checks/delete # Bulk delete checks { ids: [...] }
# Stats
GET /api/v1/conformance/stats # Org-wide statistics
GET /api/v1/projects/:id/conformance/stats # Project statistics
Tutti gli endpoint richiedono l'autenticazione (JWT o chiave API con scope di scrittura per le mutazioni).