8f2e6c5c2c
- src/live/revisione.py: materiale (CLAUDE.md, config, crontab, git, monitor_health, stati dei sorveglianti, 7 g di giornale e diari, ~195k caratteri), prompt con dieci regole (sola lettura, fonte per ogni segnalazione, solo numeri del materiale, §3 non si ripropone, idee nuove solo citando la memoria, gate con data e criterio), guardia sui numeri, rapporto firmato (P13), Telegram = Sintesi con taglio dichiarato; modello muto o risposta senza titoli -> rapporto «NON eseguita» + 🚨 (P5). - scripts/live/revisione.py (guardia cli.valida, --secco/--no-telegram/--quiet/--giorno/--modello), scripts/cron_review.sh, crontab `15 6 * * 1`. - primo giro reale: il prompt su argv moriva con `Argument list too long` senza rapporto ne' allerta -> prompt su stdin, ogni eccezione diventa errore dichiarato; `analista.pulisci` toglieva i titoli. Secondo giro: docs/revisioni/2026-09-09.md, stato sospetta (cifre in formato italiano), nessun URGENTE. - scartati con la memoria: autoregolazione dei parametri, generazione automatica di strategie, macro da internet (diario 2026-09-09c, memoria 40). - test: tests/test_revisione.py (18) + 2 in test_cli_flag; suite 1031/1031. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bjj5vPEBoAJrB23P6RjKzs
49 lines
2.5 KiB
Python
49 lines
2.5 KiB
Python
"""Revisione settimanale in SOLA LETTURA: un modello DIVERSO dall'autore rilegge il sistema.
|
|
|
|
uv run python scripts/live/revisione.py # chiama il revisore, scrive docs/revisioni/<data>.md, Telegram
|
|
uv run python scripts/live/revisione.py --secco # solo la taglia del materiale: niente modello, niente file
|
|
uv run python scripts/live/revisione.py --quiet # per il cron (scripts/cron_review.sh, lunedi' 06:15 UTC)
|
|
|
|
Cosa scrive: SOLO il rapporto. Cosa non tocca: config, libro, cron, codice, dati. Le proposte
|
|
restano proposte; decide l'operatore. Dettagli e ragioni in `src/live/revisione.py`.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from datetime import datetime, timezone
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
sys.path.insert(0, str(ROOT))
|
|
|
|
USO = """uso: revisione.py [--giorno AAAA-MM-GG] [--modello NOME] [--secco] [--no-telegram] [--quiet]
|
|
--giorno G data della revisione (default: adesso, UTC)
|
|
--modello M revisore (default: src.live.revisione.MODELLO = claude-fable-5-1 — NON il modello che scrive il codice)
|
|
--secco stampa la taglia del materiale e si ferma: niente modello, niente file, niente Telegram
|
|
--no-telegram scrive il rapporto ma non manda la sintesi
|
|
--quiet stampa solo l'esito
|
|
⚠️ SPENDE una chiamata al modello e MANDA un messaggio Telegram, salvo --secco/--no-telegram.
|
|
Scrive un solo file: docs/revisioni/<data>.md."""
|
|
|
|
|
|
def _arg(flag: str, default=None):
|
|
a = sys.argv[1:]
|
|
return a[a.index(flag) + 1] if flag in a and a.index(flag) + 1 < len(a) else default
|
|
|
|
|
|
if __name__ == "__main__":
|
|
from src.live.cli import valida
|
|
valida("revisione.py", USO, flag=("--secco", "--no-telegram", "--quiet"),
|
|
con_valore=("--giorno", "--modello"))
|
|
from src.live import revisione as R
|
|
g = _arg("--giorno")
|
|
adesso = (datetime.fromisoformat(g).replace(tzinfo=timezone.utc) if g
|
|
else datetime.now(timezone.utc))
|
|
esito = R.scrivi(ROOT, adesso, modello=_arg("--modello", R.MODELLO),
|
|
secco="--secco" in sys.argv, telegram="--no-telegram" not in sys.argv,
|
|
quiet="--quiet" in sys.argv)
|
|
if "--quiet" in sys.argv and not esito.get("secco"):
|
|
print(f"revisione {esito['data']}: {esito.get('stato')}"
|
|
+ (f" — {esito.get('errore')}" if esito.get("errore") else "") + f" {esito.get('file')}")
|
|
raise SystemExit(0 if esito.get("secco") or esito.get("stato") in ("ok", "sospetta") else 1)
|