lovarch-cli 0.2.1__py3-none-any.whl
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.
- lovarch_cli/__init__.py +16 -0
- lovarch_cli/__main__.py +10 -0
- lovarch_cli/ai/__init__.py +21 -0
- lovarch_cli/ai/gateway.py +240 -0
- lovarch_cli/api.py +111 -0
- lovarch_cli/auth/__init__.py +32 -0
- lovarch_cli/auth/keyring_store.py +214 -0
- lovarch_cli/auth/local_server.py +165 -0
- lovarch_cli/auth/pkce.py +57 -0
- lovarch_cli/auth/session.py +189 -0
- lovarch_cli/cli.py +262 -0
- lovarch_cli/clients/__init__.py +33 -0
- lovarch_cli/clients/factory.py +54 -0
- lovarch_cli/clients/local_client.py +432 -0
- lovarch_cli/clients/lovarch_storage.py +174 -0
- lovarch_cli/clients/lovarch_supabase.py +295 -0
- lovarch_cli/clients/persistence.py +166 -0
- lovarch_cli/clients/storage.py +66 -0
- lovarch_cli/commands/__init__.py +10 -0
- lovarch_cli/commands/account.py +172 -0
- lovarch_cli/commands/audit.py +394 -0
- lovarch_cli/commands/config_cmd.py +80 -0
- lovarch_cli/commands/consolidate.py +217 -0
- lovarch_cli/commands/context_cmd.py +73 -0
- lovarch_cli/commands/dev.py +287 -0
- lovarch_cli/commands/do_cmd.py +120 -0
- lovarch_cli/commands/init.py +218 -0
- lovarch_cli/commands/jobs_cmd.py +95 -0
- lovarch_cli/commands/login.py +202 -0
- lovarch_cli/commands/mcp_cmd.py +26 -0
- lovarch_cli/commands/run.py +375 -0
- lovarch_cli/commands/signup.py +185 -0
- lovarch_cli/commands/status.py +243 -0
- lovarch_cli/commands/upgrade.py +108 -0
- lovarch_cli/commands/verifica_cmd.py +174 -0
- lovarch_cli/config.py +101 -0
- lovarch_cli/config_store.py +111 -0
- lovarch_cli/credits/__init__.py +35 -0
- lovarch_cli/credits/base.py +84 -0
- lovarch_cli/credits/factory.py +36 -0
- lovarch_cli/credits/local.py +34 -0
- lovarch_cli/credits/lovarch.py +56 -0
- lovarch_cli/i18n/__init__.py +27 -0
- lovarch_cli/i18n/loader.py +121 -0
- lovarch_cli/i18n/translations/en.json +168 -0
- lovarch_cli/i18n/translations/es.json +168 -0
- lovarch_cli/i18n/translations/it.json +168 -0
- lovarch_cli/i18n/translations/pt.json +168 -0
- lovarch_cli/mcp/__init__.py +9 -0
- lovarch_cli/mcp/server.py +199 -0
- lovarch_cli/mcp/tools.py +372 -0
- lovarch_cli/sample_downloader.py +255 -0
- lovarch_cli/squad/README.md +206 -0
- lovarch_cli/squad/agents/auditor-input.md +353 -0
- lovarch_cli/squad/agents/bim-engineer.md +404 -0
- lovarch_cli/squad/agents/briefing-architect.md +249 -0
- lovarch_cli/squad/agents/cad-engineer.md +278 -0
- lovarch_cli/squad/agents/capitolato-writer.md +256 -0
- lovarch_cli/squad/agents/computo-engineer.md +258 -0
- lovarch_cli/squad/agents/concept-designer.md +399 -0
- lovarch_cli/squad/agents/contratto-architect.md +243 -0
- lovarch_cli/squad/agents/deliverable-builder.md +253 -0
- lovarch_cli/squad/agents/energy-prelim.md +388 -0
- lovarch_cli/squad/agents/pratiche-it.md +251 -0
- lovarch_cli/squad/agents/progetto-chief.md +768 -0
- lovarch_cli/squad/agents/quality-dati.md +409 -0
- lovarch_cli/squad/agents/quality-misure.md +418 -0
- lovarch_cli/squad/agents/quality-normativa.md +417 -0
- lovarch_cli/squad/agents/quality-output.md +436 -0
- lovarch_cli/squad/agents/regolatorio-it.md +278 -0
- lovarch_cli/squad/checklists/handoff-quality-gate.md +232 -0
- lovarch_cli/squad/checklists/quality-dati-checklist.md +134 -0
- lovarch_cli/squad/checklists/quality-misure-checklist.md +139 -0
- lovarch_cli/squad/checklists/quality-normativa-checklist.md +121 -0
- lovarch_cli/squad/checklists/quality-output-checklist.md +116 -0
- lovarch_cli/squad/config.yaml +408 -0
- lovarch_cli/squad/data/CHANGELOG.md +272 -0
- lovarch_cli/squad/data/agents-prd.md +428 -0
- lovarch_cli/squad/data/architettura-progetto-rules.md +328 -0
- lovarch_cli/squad/data/handoff-card-template.md +231 -0
- lovarch_cli/squad/data/mocks/catasto-visura.json +72 -0
- lovarch_cli/squad/data/mocks/firma-envelope.json +43 -0
- lovarch_cli/squad/data/prezzario-lombardia-sample.json +312 -0
- lovarch_cli/squad/scripts/api_clients.py +206 -0
- lovarch_cli/squad/scripts/architect_profile.py +276 -0
- lovarch_cli/squad/scripts/deliverable_generators.py +844 -0
- lovarch_cli/squad/scripts/generate_attico_brera_dwg.py +369 -0
- lovarch_cli/squad/scripts/generate_chianti_dxf.py +368 -0
- lovarch_cli/squad/scripts/generate_chianti_images.py +223 -0
- lovarch_cli/squad/scripts/generate_real_sample_images.py +189 -0
- lovarch_cli/squad/scripts/generate_sample_assets.py +382 -0
- lovarch_cli/squad/scripts/lovarch_client.py +1046 -0
- lovarch_cli/squad/scripts/pipeline_runner.py +2095 -0
- lovarch_cli/squad/scripts/render_dxf_to_png.py +57 -0
- lovarch_cli/squad/scripts/run_palestra_demo.sh +277 -0
- lovarch_cli/squad/scripts/simulate_squad_execution.py +515 -0
- lovarch_cli/squad/scripts/validate-squad.py +383 -0
- lovarch_cli/squad/tasks/audit-input.md +146 -0
- lovarch_cli/squad/tasks/compute-metric.md +105 -0
- lovarch_cli/squad/tasks/consolidate-dossier.md +187 -0
- lovarch_cli/squad/tasks/generate-cad-plan.md +120 -0
- lovarch_cli/squad/tasks/generate-ifc-model.md +108 -0
- lovarch_cli/squad/tasks/write-capitolato.md +100 -0
- lovarch_cli/squad/templates/asseverazione-tecnica.md +126 -0
- lovarch_cli/squad/templates/capitolato-uni-11337.md +235 -0
- lovarch_cli/squad/templates/cila-comune-milano.md +177 -0
- lovarch_cli/squad/templates/contratto-cnappc.md +220 -0
- lovarch_cli/squad/workflows/dal-brief-al-cantiere.yaml +218 -0
- lovarch_cli/squad_loader.py +114 -0
- lovarch_cli/verify/__init__.py +15 -0
- lovarch_cli/verify/contratto.py +110 -0
- lovarch_cli/verify/dossier.py +97 -0
- lovarch_cli/verify/misure.py +83 -0
- lovarch_cli/verify/normativa.py +178 -0
- lovarch_cli/version.py +13 -0
- lovarch_cli/workflows/__init__.py +9 -0
- lovarch_cli/workflows/platform.py +212 -0
- lovarch_cli-0.2.1.dist-info/METADATA +232 -0
- lovarch_cli-0.2.1.dist-info/RECORD +122 -0
- lovarch_cli-0.2.1.dist-info/WHEEL +4 -0
- lovarch_cli-0.2.1.dist-info/entry_points.txt +3 -0
- lovarch_cli-0.2.1.dist-info/licenses/LICENSE +38 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Checklist · @quality-misure
|
|
2
|
+
|
|
3
|
+
> **24 items** · 5 CRITICI + 11 SECONDARI + 8 MINORI · Tolleranza ±1 mm
|
|
4
|
+
|
|
5
|
+
## Soglia PASS
|
|
6
|
+
- 100% CRITICI passano
|
|
7
|
+
- ≥80% SECONDARI passano (almeno 9/11)
|
|
8
|
+
- ≥50% MINORI passano (almeno 4/8)
|
|
9
|
+
|
|
10
|
+
Se anche 1 CRITICO fallisce → **REJECT**.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 🔴 CRITICI (5)
|
|
15
|
+
|
|
16
|
+
### C1 · Somma quote orizzontali = larghezza totale parete
|
|
17
|
+
**Verifica:** Per ogni parete in `pianta-progetto.dxf`, somma delle quote orizzontali = lunghezza totale dichiarata.
|
|
18
|
+
**Tolleranza:** ±1 mm
|
|
19
|
+
**Source di verità:** geometria DXF
|
|
20
|
+
**Fail action:** REJECT → @cad-engineer
|
|
21
|
+
|
|
22
|
+
### C2 · Somma quote verticali = altezza totale parete
|
|
23
|
+
**Verifica:** Per ogni sezione, somma delle quote verticali = altezza totale.
|
|
24
|
+
**Tolleranza:** ±1 mm
|
|
25
|
+
**Fail action:** REJECT → @cad-engineer
|
|
26
|
+
|
|
27
|
+
### C3 · Sup. utile = somma sup. ambienti
|
|
28
|
+
**Verifica:** `superficie_utile_totale` in `schema-quotato.json` = somma di `ambienti[i].superficie_m2`.
|
|
29
|
+
**Tolleranza:** ±0.5%
|
|
30
|
+
**Fail action:** REJECT → @cad-engineer + @bim-engineer
|
|
31
|
+
|
|
32
|
+
### C4 · Sup. lorda = sup. utile + sup. murature
|
|
33
|
+
**Verifica:** `superficie_lorda` = `superficie_utile` + `muratura_m2`.
|
|
34
|
+
**Tolleranza:** ±0.5%
|
|
35
|
+
**Fail action:** REJECT → @cad-engineer
|
|
36
|
+
|
|
37
|
+
### C5 · Volume ambienti = sup × altezza
|
|
38
|
+
**Verifica:** Per ogni ambiente: `volume_m3` = `superficie_m2 × altezza_m`.
|
|
39
|
+
**Tolleranza:** ±0.1 m³
|
|
40
|
+
**Fail action:** REJECT → @bim-engineer
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 🟡 SECONDARI (11) · ≥80% (9/11)
|
|
45
|
+
|
|
46
|
+
### S1 · Spessore pareti UNI 8290
|
|
47
|
+
Pareti devono essere multipli di 8/10/12/15/25 cm.
|
|
48
|
+
|
|
49
|
+
### S2 · Larghezza minima passaggi
|
|
50
|
+
Tutti i passaggi/corridoi ≥ 80 cm (regolamento igienico Milano).
|
|
51
|
+
|
|
52
|
+
### S3 · Altezza minima ambienti residenziali
|
|
53
|
+
Tutti gli ambienti abitabili ≥ 270 cm Milano (RE Milano art. 38).
|
|
54
|
+
**Eccezione:** ambienti accessori (ripostigli) ≥ 240 cm.
|
|
55
|
+
|
|
56
|
+
### S4 · Sup. minima camera singola
|
|
57
|
+
≥ 9 m².
|
|
58
|
+
|
|
59
|
+
### S5 · Sup. minima camera doppia
|
|
60
|
+
≥ 14 m².
|
|
61
|
+
|
|
62
|
+
### S6 · Sup. cucina
|
|
63
|
+
≥ 9 m² (cucina autonoma) **oppure** angolo cottura ≥ 4 m² in living open-space.
|
|
64
|
+
|
|
65
|
+
### S7 · Bagno aerazione
|
|
66
|
+
Almeno 1 finestra **oppure** sistema VMC dichiarato.
|
|
67
|
+
|
|
68
|
+
### S8 · RAI (Rapporto Aero-Illuminante)
|
|
69
|
+
Sup. finestre ≥ 1/8 sup. pavimento per ogni ambiente abitabile (DM 5/7/1975).
|
|
70
|
+
|
|
71
|
+
### S9 · Quote in DXF leggibili
|
|
72
|
+
Text height ≥ 2.5mm in scala plot 1:50.
|
|
73
|
+
|
|
74
|
+
### S10 · Layer DXF segue ISO standard
|
|
75
|
+
Layer presenti: `CAD-A-WALL`, `CAD-A-DIM`, `CAD-A-DOOR`, `CAD-A-WIND`, `CAD-A-TEXT`, `CAD-A-SYMB`.
|
|
76
|
+
|
|
77
|
+
### S11 · Cartiglio CNAPPC compilato
|
|
78
|
+
Tutti i campi: architetto, n. Ordine, cliente, progetto, scala, data, fase, tavola.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 🟢 MINORI (8) · ≥50% (4/8)
|
|
83
|
+
|
|
84
|
+
### M1 · Scala grafica presente
|
|
85
|
+
Indicata 1:50 o 1:100 in tavola.
|
|
86
|
+
|
|
87
|
+
### M2 · Nord magnetico indicato
|
|
88
|
+
Simbolo nord visibile in pianta.
|
|
89
|
+
|
|
90
|
+
### M3 · Nomi ambienti scritti
|
|
91
|
+
Ogni ambiente ha label testuale leggibile.
|
|
92
|
+
|
|
93
|
+
### M4 · Schede ambienti coerenti
|
|
94
|
+
Schede dettaglio ambienti coerenti con planimetria principale.
|
|
95
|
+
|
|
96
|
+
### M5 · Stato attuale vs progetto in 2 layer separati
|
|
97
|
+
Possibilità di toggle visualizzazione stato attuale / progetto.
|
|
98
|
+
|
|
99
|
+
### M6 · Sezioni AA/BB con riferimenti in pianta
|
|
100
|
+
Tracce di sezione in pianta con etichette AA, BB.
|
|
101
|
+
|
|
102
|
+
### M7 · Prospetti con altezze fronte e aperture
|
|
103
|
+
Prospetti includono quote verticali principali.
|
|
104
|
+
|
|
105
|
+
### M8 · Modello IFC volumi coerenti con DXF
|
|
106
|
+
Volumi calcolati da IFC differiscono da DXF di ≤ 2%.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Output JSON format
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"qa_agent": "@quality-misure",
|
|
115
|
+
"execution_id": "uuid",
|
|
116
|
+
"verdict": "PASS" | "REJECT",
|
|
117
|
+
"score": {
|
|
118
|
+
"critical": "5/5",
|
|
119
|
+
"secondary": "9/11",
|
|
120
|
+
"minor": "6/8",
|
|
121
|
+
"total": "20/24"
|
|
122
|
+
},
|
|
123
|
+
"items": [
|
|
124
|
+
{
|
|
125
|
+
"id": "C1",
|
|
126
|
+
"severity": "CRITICO",
|
|
127
|
+
"description": "Somma quote orizzontali = larghezza totale parete",
|
|
128
|
+
"result": true,
|
|
129
|
+
"expected": "245.0 cm",
|
|
130
|
+
"actual": "245.0 cm",
|
|
131
|
+
"tolerance": "±1mm",
|
|
132
|
+
"file": "pianta-progetto.dxf",
|
|
133
|
+
"wall_id": "WALL-N-01"
|
|
134
|
+
}
|
|
135
|
+
],
|
|
136
|
+
"reject_target_agents": ["@cad-engineer"],
|
|
137
|
+
"reject_summary": "Sup. utile differente sup. somma ambienti di 0.5 m². Cota Q12 errata."
|
|
138
|
+
}
|
|
139
|
+
```
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Checklist · @quality-normativa
|
|
2
|
+
|
|
3
|
+
> **18 items** · 6 CRITICI + 7 SECONDARI + 5 MINORI
|
|
4
|
+
|
|
5
|
+
## Soglia PASS
|
|
6
|
+
- 100% CRITICI passano (6/6)
|
|
7
|
+
- ≥80% SECONDARI passano (almeno 6/7)
|
|
8
|
+
- ≥50% MINORI passano (almeno 3/5)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 🔴 CRITICI (6) · 100% obbligatorio
|
|
13
|
+
|
|
14
|
+
### N-C1 · Tipo pratica corretto per intervento
|
|
15
|
+
**Verifica:** `tipo_pratica` in `tipo-pratica.json` corrisponde all'intervento descritto.
|
|
16
|
+
- Ristrutturazione interna senza prospetti né strutturali → **CILA**
|
|
17
|
+
- Modifiche prospetti **o** strutturali leggere → **SCIA**
|
|
18
|
+
- Demolizione + ricostruzione **o** ampliamento volumi → **SCIA alternativa o PdC**
|
|
19
|
+
**Fail action:** REJECT → @regolatorio-it
|
|
20
|
+
|
|
21
|
+
### N-C2 · Articoli DPR 380 citati esistono e si applicano
|
|
22
|
+
**Verifica:** Cross-check con Normattiva XML cached. Articolo cited deve esistere E essere in vigore E applicarsi al caso.
|
|
23
|
+
**Fail action:** REJECT → @regolatorio-it + @capitolato-writer
|
|
24
|
+
|
|
25
|
+
### N-C3 · Aut. paesaggistica considerata se zona vincolata
|
|
26
|
+
**Verifica:** Se Zona A1 PGT Milano OR vincolo paesaggistico/monumentale → autorizzazione paesaggistica DPR 31/2017 deve essere documentata.
|
|
27
|
+
**Fail action:** REJECT → @regolatorio-it + @pratiche-it
|
|
28
|
+
|
|
29
|
+
### N-C4 · CAM Edilizia 2025 voci rispettate ≥80%
|
|
30
|
+
**Verifica:** In `lista-CAM-rispettati.xlsx`, almeno 80% voci CAM applicabili (DM 23/06/2022 + agg. 2024) sono rispettate. Voci minimum:
|
|
31
|
+
- Calcestruzzo ≥15% riciclato
|
|
32
|
+
- Laterizio ≥30% riciclato
|
|
33
|
+
- Demolizione selettiva ≥70% recupero
|
|
34
|
+
- Legno FSC/PEFC certificato
|
|
35
|
+
- Isolanti con DAP/EPD
|
|
36
|
+
**Fail action:** REJECT → @capitolato-writer
|
|
37
|
+
|
|
38
|
+
### N-C5 · NTC 2018 cap 8 corretto
|
|
39
|
+
**Verifica:** Classificazione intervento secondo NTC 2018 cap 8:
|
|
40
|
+
- 8.4.1 Riparazione/locale → solo verifica locale
|
|
41
|
+
- 8.4.2 Miglioramento → valutazione sismica obbligatoria
|
|
42
|
+
- 8.4.3 Adeguamento → calcolo strutturale completo
|
|
43
|
+
|
|
44
|
+
Per ristrutturazione interna senza opere strutturali: 8.4.1 OK.
|
|
45
|
+
**Fail action:** REJECT → @regolatorio-it
|
|
46
|
+
|
|
47
|
+
### N-C6 · CSP/CSE valutato
|
|
48
|
+
**Verifica:** Se ≥2 imprese OR durata >200 g/uomo → CSP/CSE obbligatori (D.Lgs 81/2008).
|
|
49
|
+
Documento deve menzionare: "CSP/CSE necessario" e indicare nome professionista o "da nominare".
|
|
50
|
+
**Fail action:** REJECT → @regolatorio-it + @capitolato-writer
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 🟡 SECONDARI (7) · ≥80%
|
|
55
|
+
|
|
56
|
+
### N-S1 · Onorari ≥ parametri DM 17/06/2016 (L.49/2023)
|
|
57
|
+
Verifica calcolo onorari rispetta parametri ministeriali equo compenso.
|
|
58
|
+
|
|
59
|
+
### N-S2 · Vincoli PRG Milano Zona A1 rispettati
|
|
60
|
+
Se zona A1 NAF: divieto modifica facciata, conservazione tipologica, materiali tradizionali.
|
|
61
|
+
|
|
62
|
+
### N-S3 · UNI 11337 LOIN 300 verificato in IFC
|
|
63
|
+
Property sets ISO 12006-3 presenti, classificazione UniFormat/Uniclass.
|
|
64
|
+
|
|
65
|
+
### N-S4 · Bonus edilizi 2026 corretti
|
|
66
|
+
- No Superbonus (cessato per privati)
|
|
67
|
+
- Bonus Ristrutturazione 36% prima casa, 30% seconda
|
|
68
|
+
- Ecobonus 50% prima, 36% seconda
|
|
69
|
+
- Sismabonus 50%/36%
|
|
70
|
+
|
|
71
|
+
### N-S5 · IVA edilizia 10% ristrutturazione
|
|
72
|
+
Documenti finanziari includono IVA al 10% (non 22%) per opere di ristrutturazione DPR 633/72.
|
|
73
|
+
|
|
74
|
+
### N-S6 · Privacy GDPR clausole presenti
|
|
75
|
+
Informativa privacy include: titolare, finalità, base giuridica, conservazione, diritti, DPO se applicabile.
|
|
76
|
+
|
|
77
|
+
### N-S7 · Antiriciclaggio D.Lgs 231/2007 menzione obbligatoria
|
|
78
|
+
Contratto include clausola antiriciclaggio (D.Lgs 231/2007).
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 🟢 MINORI (5) · ≥50%
|
|
83
|
+
|
|
84
|
+
### N-M1 · Polizza RC professionale citata
|
|
85
|
+
Contratto menziona polizza RC architetto.
|
|
86
|
+
|
|
87
|
+
### N-M2 · Foro competente
|
|
88
|
+
Foro identificato (es. Foro di Milano).
|
|
89
|
+
|
|
90
|
+
### N-M3 · Mediazione obbligatoria
|
|
91
|
+
D.Lgs 28/2010: clausola mediazione preventiva obbligatoria.
|
|
92
|
+
|
|
93
|
+
### N-M4 · Citazioni con link Normattiva
|
|
94
|
+
Articoli cited hanno link/URL a Normattiva.it dove possibile.
|
|
95
|
+
|
|
96
|
+
### N-M5 · Banner aggiornamento
|
|
97
|
+
Documenti regolatori hanno banner "Ultimo aggiornamento DD/MM/2026".
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Output JSON
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"qa_agent": "@quality-normativa",
|
|
106
|
+
"verdict": "PASS" | "REJECT",
|
|
107
|
+
"score": { "critical": "6/6", "secondary": "6/7", "minor": "4/5" },
|
|
108
|
+
"items": [
|
|
109
|
+
{
|
|
110
|
+
"id": "N-C2",
|
|
111
|
+
"severity": "CRITICO",
|
|
112
|
+
"result": false,
|
|
113
|
+
"issue": "DPR 380 art. 88 cited but article does not exist",
|
|
114
|
+
"verified_against": "Normattiva XML 2026-06-01",
|
|
115
|
+
"file": "analisi-regolamentare.pdf",
|
|
116
|
+
"page": 3
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"reject_target_agents": ["@regolatorio-it"]
|
|
120
|
+
}
|
|
121
|
+
```
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Checklist · @quality-output
|
|
2
|
+
|
|
3
|
+
> **14 items** · 6 CRITICI + 5 SECONDARI + 3 MINORI · Completezza + leggibilità
|
|
4
|
+
|
|
5
|
+
## Soglia PASS
|
|
6
|
+
- 100% CRITICI passano (6/6)
|
|
7
|
+
- ≥80% SECONDARI passano (almeno 4/5)
|
|
8
|
+
- ≥50% MINORI passano (almeno 2/3)
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 🔴 CRITICI (6)
|
|
13
|
+
|
|
14
|
+
### O-C1 · 25+ deliverable presenti
|
|
15
|
+
**Verifica:** Counting di tutti i file nelle cartelle 01- → 08-. Deve essere ≥25.
|
|
16
|
+
**Lista minima attesa:**
|
|
17
|
+
- 01-briefing/ (3 files)
|
|
18
|
+
- 02-concept/ (>15 files: 9 moodboard + 6 render + 4 doc)
|
|
19
|
+
- 03-progetto-definitivo/ (5 files)
|
|
20
|
+
- 04-pratiche-comune/ (4-6 files)
|
|
21
|
+
- 05-impresa/ (5 files + DOSSIER.zip)
|
|
22
|
+
- 06-ingegneri/ (3-5 files)
|
|
23
|
+
- 07-cliente/ (5 files)
|
|
24
|
+
- 08-studio-interno/ (4-5 files)
|
|
25
|
+
**Fail action:** REJECT → @deliverable-builder + agenti specifici mancanti
|
|
26
|
+
|
|
27
|
+
### O-C2 · Ogni PDF apre senza errore
|
|
28
|
+
**Verifica:** Per ogni .pdf, `pypdf.PdfReader(file)` non solleva eccezione e `extract_text()` su prima pagina restituisce contenuto non vuoto.
|
|
29
|
+
**Fail action:** REJECT → agente che ha generato il PDF
|
|
30
|
+
|
|
31
|
+
### O-C3 · DXF aprono in QCAD/AutoCAD
|
|
32
|
+
**Verifica:** `ezdxf.readfile(file)` parsing successful. Documento ha entities.
|
|
33
|
+
**Fail action:** REJECT → @cad-engineer
|
|
34
|
+
|
|
35
|
+
### O-C4 · IFC valido
|
|
36
|
+
**Verifica:** `ifcopenshell.validate(file)` returns no critical errors.
|
|
37
|
+
**Fail action:** REJECT → @bim-engineer
|
|
38
|
+
|
|
39
|
+
### O-C5 · XLSX aprono
|
|
40
|
+
**Verifica:** `openpyxl.load_workbook(file)` succeed. File contiene worksheet con dati.
|
|
41
|
+
**Fail action:** REJECT → @computo-engineer + @capitolato-writer
|
|
42
|
+
|
|
43
|
+
### O-C6 · File uploaded → Lovarch pm_documents
|
|
44
|
+
**Verifica:** Per ogni file in cartella locale, verificar (a) row in `pm_documents` esiste con SHA256 corrispondente, (b) `public_url` accessibile (HTTP 200).
|
|
45
|
+
**Fail action:** REJECT → @progetto-chief (responsabile upload)
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 🟡 SECONDARI (5) · ≥80%
|
|
50
|
+
|
|
51
|
+
### O-S1 · Naming convention
|
|
52
|
+
Pattern `NN-categoria-nome.ext` (es. `01-briefing-strutturato.pdf`).
|
|
53
|
+
|
|
54
|
+
### O-S2 · Dimensione PDF tavole ≤ 50 MB
|
|
55
|
+
Tavole tecniche compresse correttamente.
|
|
56
|
+
|
|
57
|
+
### O-S3 · Render PNG ≥ 4K resolution
|
|
58
|
+
Almeno 3840×2160. Nessun render < 1920×1080 nel deliverable cliente.
|
|
59
|
+
|
|
60
|
+
### O-S4 · Portal URL accessibile
|
|
61
|
+
GET HTTP del portale cliente returns 200 + HTML válido (contains expected metatags).
|
|
62
|
+
|
|
63
|
+
### O-S5 · Presentazione HTML responsive mobile
|
|
64
|
+
Test viewport 375×812 (iPhone): no horizontal scroll, fonts ≥14px, buttons ≥44px.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 🟢 MINORI (3) · ≥50%
|
|
69
|
+
|
|
70
|
+
### O-M1 · README.md indice generato
|
|
71
|
+
File `README.md` in root cartella con tabella di tutti i deliverable + descrizione.
|
|
72
|
+
|
|
73
|
+
### O-M2 · Git commit con tag versione
|
|
74
|
+
Commit creato con tag `squad-v1.0-{timestamp}` o simile.
|
|
75
|
+
|
|
76
|
+
### O-M3 · Manifest.json con SHA256
|
|
77
|
+
File `manifest.json` con `{ "files": [{ "path": "...", "sha256": "...", "size": ... }] }`.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Output JSON
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
{
|
|
85
|
+
"qa_agent": "@quality-output",
|
|
86
|
+
"verdict": "PASS" | "REJECT",
|
|
87
|
+
"score": { "critical": "6/6", "secondary": "5/5", "minor": "3/3" },
|
|
88
|
+
"items": [
|
|
89
|
+
{
|
|
90
|
+
"id": "O-C1",
|
|
91
|
+
"severity": "CRITICO",
|
|
92
|
+
"description": "25+ deliverable presenti",
|
|
93
|
+
"result": true,
|
|
94
|
+
"actual_count": 27,
|
|
95
|
+
"expected_minimum": 25
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"id": "O-C2",
|
|
99
|
+
"severity": "CRITICO",
|
|
100
|
+
"description": "PDF integrità",
|
|
101
|
+
"result": false,
|
|
102
|
+
"files_checked": 18,
|
|
103
|
+
"files_failed": [
|
|
104
|
+
{ "file": "07-cliente/contratto-servizi.pdf", "error": "extract_text returned empty" }
|
|
105
|
+
],
|
|
106
|
+
"reject_target": "@contratto-architect"
|
|
107
|
+
}
|
|
108
|
+
],
|
|
109
|
+
"summary": {
|
|
110
|
+
"total_files": 27,
|
|
111
|
+
"total_size_mb": 38.4,
|
|
112
|
+
"lovarch_synced": true,
|
|
113
|
+
"git_commit": "a3f8b2e"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|