Documentație / Calitate și guvernanță

Gate și Centrul de guvernanță

Un singur gate impune contractul la fiecare commit, push și pipeline, iar Centrul de guvernanță reunește întregul ciclu de viață.

Contractul de calitate spune ce cere echipa. Gate-ul îl impune. Este o singură comandă a motorului, folosită la fel de hook-urile Git, de CI, de comanda yuli-mcp gate și de hook-urile agenților. Rezultatul nu depinde de cine o invocă.

Comanda

agent-engine gate --project <raíz> --stage pre-commit|commit-msg|pre-push|ci \
  [--message-file <archivo>] [--base <revisión>] [--format text|json]

Dacă omiți --project, se folosește folderul curent. Un folder fără Git trece întotdeauna.

Cod de ieșire Semnificație
0 Trece.
1 Blocat: un control a eșuat.
2 Eroare de utilizare.

Ce verifică fiecare etapă

Etapă Ce compară Controale
pre-commit Ce se află în stage Toate cele de mai jos.
commit-msg Mesajul commit-ului Doar atribuirea către IA și excepțiile.
pre-push Față de @{upstream} (sau origin/HEAD) Toate cele de mai jos.
ci Față de ramura țintă a PR-ului sau MR-ului (sau HEAD~1) Toate cele de mai jos.

Controalele

Control Etichetă în Yuli Rezultat
Secrete în liniile adăugate Secrete Blochează. Se raportează tipul și linia, niciodată valoarea.
Trișări în teste Integritatea testelor Blochează dacă profilul blochează trișarea; altfel, avertizează.
Dimensiunea modificării Dimensiunea modificării Blochează cu aplicare strictă; altfel, avertizează.
Fișiere protejate atinse Căi protejate Blochează cu aplicare strictă; altfel, avertizează.
Atribuire către o IA în mesaje Atribuire AI Verifică să nu existe Co-Authored-By al unei IA.
Excepții expirate Excepții Avertizează. Nu blochează niciodată.
Cod existent fără teste Plasă de siguranță Avertizează. Nu blochează niciodată.

Anti-trișare în teste

Un agent presat să termine poate „repara” un test în loc de cod. Yuli detectează asta.

În teste:

  • Aserțiuni eliminate sau teste șterse.
  • Teste sărite: @Disabled, @Ignore, .skip(, xit, #[ignore], skip-uri pytest sau unittest, t.Skip.
  • Aserțiuni triviale, precum assertTrue(true) sau expect(true).toBe(true).
  • Valori așteptate modificate ca testul să treacă.
  • catch care prinde orice în interiorul unui test.

În build și CI:

  • Acoperire minimă redusă.
  • Teste sărite în build.
  • Eșecuri ignorate, precum npm test || true.
  • Script de testare înlocuit cu unul gol.
  • Gate de calitate dezactivat sau sarcină de testare dezactivată.

Plasă de siguranță

Dacă se modifică fișiere de cod existente fără teste de caracterizare sau unitare, gate-ul avertizează: modificarea trebuie să păstreze comportamentul. Nu blochează niciodată commit-ul.

Instalarea hook-urilor Git

În Centrul de guvernanță, fila Porți, apasă Instalează hooks.

  1. Yuli scrie .githooks/pre-commit, .githooks/commit-msg și .githooks/pre-push.
  2. Configurează git config --local core.hooksPath .githooks.

Yuli nu instalează nimic dacă core.hooksPath indică deja spre altă unealtă (de exemplu, husky) sau dacă există un hook pe care nu l-a scris el. Dacă motorul nu este disponibil, hook-ul avertizează și lasă să treacă: nu te lasă niciodată fără posibilitatea de a face commit.

Dezinstalează hooks elimină configurația și șterge doar scripturile Yuli.

În CI

Pipeline-urile generate de Creează CI includ pasul „Porțile contractului”, care rulează agent-engine gate --stage ci. Astfel, CI-ul aplică aceleași reguli ca echipa ta locală.

Centrul de guvernanță

Deschide-l din șina din dreapta (Mai multe unelte → Centrul de guvernanță) sau din paleta de comenzi: Deschide Centrul de guvernanță. Are 10 file.

Filă Ce conține
Contract Criticitate, praguri, căi protejate, excepții, straturi, SLO, politica de licențe, revizor independent, clasificarea datelor, bugete FinOps și istoric.
Porți Rularea gate-ului pentru o etapă, instalarea sau dezinstalarea hook-urilor și cardul CI.
Date sensibile Valori redactate la ieșirea de pe calculator, câmpuri clasificate în cod și secrete în istoricul Git.
Analiză Cerințe (tipare EARS, ambiguitate, atribute ISO 25010, Gherkin) și glosar.
Design Decizii (ADR), Amenințări (STRIDE), API-uri (OpenAPI), C4, SLO și Legacy.
Măsurare Funcții de fitness ale arhitecturii, LCOM4, cuplarea modificărilor, bus factor, registrul datoriei tehnice, twelve-factor și feature flags.
Teste Teste instabile și carantină, mutație, tipuri de teste, condiții de cursă și încărcare.
Lanț de aprovizionare Dependențe și licențe, SBOM, IaC, containere, DAST, proveniență (SLSA, cosign), CODEOWNERS și istoric.
Livrare CI, release, rollback, implementare progresivă, runbook, post-mortem-uri, DORA, SPACE, build-uri și FinOps.
Agenți Context, Revizuire, Telemetrie, Învățare, Benchmark și Injecție.

Documente generate

Document Cale
ADR (decizii de arhitectură) docs/architecture/adr/
Model de amenințări STRIDE docs/architecture/threat-model.md
Diagrame C4 docs/architecture/c4.md
SBOM docs/reports/sbom.cdx.json și docs/reports/sbom.spdx.json
Runbook docs/operations/runbook.md
Post-mortem-uri docs/operations/postmortems/

DORA

Fila Livrare calculează cele patru metrici DORA: frecvența implementărilor, lead time, rata de eșec a modificărilor și MTTR, cu benzile Elită, Ridicată, Medie și Scăzută. Folosește implementările înregistrate sau CI-ul. Yuli nu vede un APM de producție.

Revizuire independentă

Un model din altă familie revizuiește modificarea. Nu folosește niciodată aceeași familie ca modelul care a scris-o. Dacă nu este configurat niciunul, o indică drept indisponibilă. Este obligatorie în profilurile Reglementată și Critică pentru siguranță.

Context pentru toți agenții

În Agenți → Context, secțiunea „Context pentru toți agenții” scrie aceleași reguli pentru fiecare unealtă:

Destinație Fișier
Claude Code (CLAUDE.md) .claude/CLAUDE.md
AGENTS.md (Codex și alții) AGENTS.md
Kiro (.kiro/steering) .kiro/steering/yuli.md
Antigravity .agent/rules/yuli.md
Cursor (.cursor/rules) .cursor/rules/yuli.mdc
GitHub Copilot .github/copilot-instructions.md
Gemini (GEMINI.md) GEMINI.md

Conținutul este plasat într-un bloc gestionat; ce scrii în afara lui este respectat. Implicit, fișierele rămân în afara Git; activează versionarea cu Versionează-le în Git. Fiecare destinație își afișează starea: La zi, Depășit, Nu există sau Editat manual.

Reguli învățate

Când aceeași constatare apare de 3 ori sau mai mult în cel puțin 2 sarcini în decurs de 30 de zile, devine o regulă în .ai/rules/learned.md. O poți respinge în Agenți → Învățare; este propusă din nou doar dacă dovezile pentru ea se dublează.

Limite oneste

  • DAST (OWASP ZAP), scanarea containerelor (Trivy sau Grype) și semnarea (cosign) rulează doar dacă sunt instalate și întotdeauna cu confirmare. Dacă lipsesc, Yuli indică acest lucru și nu simulează rezultatul.
  • Regulile preventive și cele de IaC sunt tipare aplicate pe text. Fiecare constatare vine cu fișierul și linia ei, ca o persoană să o confirme.