--:--:--
4b

catpit-dev

Sviluppare CATPIT senza romperlo: mappa dell'app, contratto dello store, test, procedura di rilascio. Per Archimede.

← IdentitàProposte Skill Workshopvv1sola lettura
da chi viene · l'abbiamo controllata

da accertare
mai vettata — nessuno l'ha ancora guardata; non vuol dire che sia a posto

dove sta
C:\Users\Ettore\.openclaw\skill-workshop\proposals\catpit-dev-20260802-1d12e7fec7\PROPOSAL.md
C:\Users\Ettore\.openclaw\skill-workshop\proposals\catpit-dev-20260802-1d12e7fec7
PROPOSAL.md
name: "catpit-dev"
description: "Sviluppare CATPIT senza romperlo: mappa dell'app, contratto dello store, test, procedura di rilascio. Per Archimede."
status: proposal
version: "v1"
date: "2026-08-02T15:00:38.422Z"

catpit-dev — lavorare sull'app che tiene i dati di tutti

CATPIT non è un'app qualsiasi: dal 2026-07-01 è il master dei dati strutturati su progetti
e task. Se rompi lo store, rompi la fonte-verità del sistema, non una pagina.

Usa questa skill prima di toccare catpit/, e per ogni rilascio.


1. Dov'è cosa

catpit/                      app Next.js (App Router)
  app/                       pagine: tasks, projects, richieste, crew, office, sessions, docs...
  app/api/                   route server-only: tasks, projects, subtasks, richieste,
                             sessions, skills, artefatti, crew, cron, usage, github
  lib/                       la logica vera (store, richieste, subtasks, csv, locks,
                             vault-schema, security, launch, wake...)
  tests/                     24 file vitest
CATPIT_vault/                lo STORE: i dati veri, fuori dall'app

Porta 3010 = CATPIT (next dev / next start). La 3000 è Metabase (Docker): non usarla
mai per verificare una rotta — risponderebbe qualcos'altro e crederesti di aver verificato.

2. Il contratto dello store (la parte da non violare)

I file del vault e le loro colonne, come le scrive lib/store.ts:

FileColonne / forma
progetti.csvid, sigla, cat_code, nome, tipo, stato, priorita, obiettivo, fonte, archiviato + pass-through codice, categoria, sottogruppo
attivita.csvid, progetto_id, sigla, titolo, stato, priorita, prossima_azione, note, archiviato
task_details.jsonper task: workspace, contesto, prompt_avvio, programmazione, sottotask[]
richieste.jsondomande agli umani e bisogni di Ettore (vedi lib/richieste.ts)

Regole strutturali, tutte già implementate — non aggirarle, non reimplementarle a lato:

  1. Backup `.bak` a ogni scrittura. writeTable copia il file su <file>.bak prima di riscriverlo. Chi scrive fuori da lib/store.ts salta il backup.
  2. Soft-delete, mai `DELETE` vero. La colonna archiviato vale "1" o "". Archiviare un progetto archivia a cascata i suoi task.
  3. Un solo mutex sulle mutazioni CSV (withLock("store:vault-csv", …)): progetti e attività condividono la chiave perché una singola operazione può scrivere entrambi i file.
  4. Gli id li genera lo store (nextId: p##, a##). Non inventarli a mano.
  5. EOL preservato: si rilegge il file per capire se usa CRLF o LF. Non normalizzare.
  6. Schema validato al parse (lib/vault-schema.ts): file assente = vault vuoto legittimo; file presente con colonne mancanti = VaultSchemaError subito, invece di garbage a valle.

Le API di scrittura

POST /api/tasks con {action, id?, data}action: `create | update | detail | archive |
restore. Solo POST: un GET` risponde 405, per leggere si leggono i file.
Stesso schema per /api/projects e /api/subtasks.

Lo stato "Bloccato su Ettore" è gestito dall'API delle richieste, non dall'UI e non a mano:
lo mette sui task citati da una richiesta aperta e lo toglie alla risposta. Non scavalcarlo.

3. Verificare prima di committare

La test suite esiste ed è la rete di sicurezza principale:

cd "C:\Users\Ettore\Claude\Agente Residente openclaw\catpit"
npm test        # vitest run — 24 file, 343 test (stato al 2026-08-02, tutti verdi in ~6s)

Regole:

  • Gira la suite prima e dopo ogni modifica: "prima" ti dice se eri già rotto, "dopo" se hai rotto tu. Una modifica che lascia la suite rossa non si committa.
  • Se tocchi lib/, il test corrispondente esiste quasi sempre (store.test.ts, richieste.test.ts — 33 KB, subtasks.test.ts, security.test.ts, vault-schema.test.ts). Aggiornalo insieme al codice, non "dopo".
  • I test che toccano il vault devono lavorare su file temporanei. Non far girare test contro CATPIT_vault/ vero.
  • I percorsi positivi delle rotte con dipendenza esterna (webhook, copie su disco) restano verificati a mano: è un rischio dichiarato in CATPIT_HARDENING.md, non una svista.

4. Rilascio — la procedura che è già costata un incidente

cd "C:\Users\Ettore\Claude\Agente Residente openclaw\catpit"
npm test                     # 1. verde, altrimenti fermati qui
npm run build                # 2. next build
# 3. RIAVVIA il processo sulla 3010  <-- il passo che si dimentica
# 4. smoke test delle rotte principali
# 5. commit su master

Il passo 3 non è opzionale. Dopo un next build, il processo next start già in esecuzione
serve asset vecchi: la pagina arriva come HTML senza stile e gli asset danno 500. Sembra un
bug di CSS, è un processo da riavviare. Rilancia detached via `cmd`, non con
Start-Process npm (che si porta dietro la shell e muore con la sessione).

Smoke test minimo dopo il riavvio — non fidarti di una sola pagina:

foreach ($p in @("/", "/tasks", "/richieste", "/projects")) {
  (Invoke-WebRequest "http://127.0.0.1:3010$p" -UseBasicParsing).StatusCode
}

Il trunk del repo è `master`, non `main`. Un push su main non arriva dove pensi.

5. Checklist "cosa non rompere"

  • POST /api/richieste — ci scrivono tutti e tre gli agenti dai loop; cambiare i campi significa rompere richieste già in coda. Il contratto di scrittura sta in CATPIT_vault\COME_SI_SCRIVE_UNA_RICHIESTA.md ed è retrocompatibile per scelta: i campi nuovi si aggiungono opzionali, non si rinominano quelli vecchi.
  • /hooks/wake e la rotta di lancio task (app/api/tasks/launch) — è il bottone "Avvia" che sveglia un agente. Va provato davvero, non solo compilato.
  • Lo stato "Bloccato su Ettore" gestito dall'API (§2).
  • Il backup .bak: se una tua modifica scrive nel vault senza passare da lib/store.ts, hai tolto la rete a tutti.

6. Coordinamento

CATPIT è condiviso: quando ci lavori, **la cartella catpit/ è tua e gli altri agenti stanno
fuori** finché non chiudi i task in carico. Simmetricamente: se un altro agente ha task aperti
su catpit/, non entrarci — i conflitti di merge su un'app Next.js costano più del lavoro.
Dichiaralo nella prossima_azione del task, che è dove gli altri guardano.

peso
2855token · Opus 56411 caratteri

Conteggio esatto dall'endpoint Anthropic count_tokens (gratuito, solo rate-limited), envelope del messaggio già sottratto. I caratteri sono un dato locale, servono da riscontro.

modifica

Questa skill è in sola lettura: le proposte si applicano o si rifiutano dal workshop. Per lavorarci sopra si copia la cartella nello workspace di un agente e si modifica lì.

file accessori · 2
  • proposal.json2.0 kB
  • PROPOSAL.md6.3 kB
storico · 0 backup

nessuna modifica fatta da qui: nessun backup

commit sul file

questo workspace non è un repo git

Scrittura consentita solo dentro le cartelle skills\ dei workspace del registro e solo sul file SKILL.md (deroga alla stanza Identità autorizzata da Ettore il 2026-08-10). Ogni salvataggio crea prima un backup datato; nessun file viene mai cancellato.

LIVE
nessun agente al lavoro · ultima attività 10 min fa26 task in corso su 16918 progetti monitoratiHomelab · Censire HD e creare gallerie dei contenutiHomelab · RAG + NotebookLM locale per documenti voluminosiKB · Costruzione KB (template + 3 argomenti pilota)KB · Obsidian: setup e usoVita · Automazione piano pasti (dispensa→ricette→spesa→piano)Vita · Lista ingredienti collegata a ricette + preferite79 sessioni registratenessun agente al lavoro · ultima attività 10 min fa26 task in corso su 16918 progetti monitoratiHomelab · Censire HD e creare gallerie dei contenutiHomelab · RAG + NotebookLM locale per documenti voluminosiKB · Costruzione KB (template + 3 argomenti pilota)KB · Obsidian: setup e usoVita · Automazione piano pasti (dispensa→ricette→spesa→piano)Vita · Lista ingredienti collegata a ricette + preferite79 sessioni registrate