Files
agent-wiki-ui/CLAUDE.md
T
davideandClaude Sonnet 5.5 84fefda219 Documentazione: strategia di test e regola "nuova funzione = nuovi test"
Aggiunge ADR-0003 (xUnit, Avalonia.Headless, coverlet, FakeClaude come
doppio di claude, struttura src/tests) e docs/TESTING.md con la regola, le
soglie di copertura e la matrice requisito-test. Ogni criterio di
accettazione dell'MVP è collegato alle righe della matrice. La roadmap ha
la Fase 6 e CLAUDE.md rende obbligatori i test nello stesso commit.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-15 11:22:08 +02:00

5.0 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Progetto

agent-wiki-ui (già LlmRun; il nome ha un'unica sorgente, vedi docs/README.md): eseguibile C# (.NET 10, Windows e Linux) che invoca Claude Code (claude -p) da terminale. Senza argomenti apre una GUI di chat Avalonia, con argomenti funziona da CLI.

Workflow doc-first (obbligatorio)

  • Specifica e criteri di accettazione: docs/MVP.md. Fasi e stato: docs/ROADMAP.md. Indice dei doc e regole (SSOT, ADR): docs/README.md; una decisione architetturale si scrive solo nel suo ADR, gli altri doc la richiamano con un link. Uso: README.md.
  • Test obbligatori (docs/TESTING.md, ADR-0003): ogni nuova funzione, correzione o cambio di comportamento va coperta da test nello stesso commit; prima si aggiunge la riga (con ID) alla matrice in TESTING.md, poi i test, poi il codice. Un bug si corregge partendo da un test che fallisce.
  • Ad ogni richiesta di modifica: aggiornare prima i doc interessati (MVP.md, ROADMAP.md con le spunte, README.md se cambia l'uso; un nuovo ADR in docs/adr/ per ogni scelta architetturale), poi il codice, poi questo file se cambiano comandi, design o vincoli. Nessuna modifica deve lasciare i doc disallineati.

Comandi

  • Build: dotnet build (agent-wiki-ui.csproj, net10.0, Avalonia)
  • GUI: dotnet run; CLI: dotnet run -- "prompt"
  • Publish single-file (uno per sistema): dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true e -r linux-x64
  • Test: non esistono ancora (pianificati, Fase 6: dotnet test; il piano è in docs/TESTING.md). Per verificare la GUI senza schermo si può usare Avalonia.Headless con CaptureRenderedFrame() in un progetto di prova fuori dal repo.

Architettura

Decisioni e motivazioni negli ADR (docs/adr/); qui solo la mappa del codice.

  • Program.cs: top-level statements. Con argomenti è la CLI (Claude.RunInherited); senza avvia Avalonia (App).
  • Core/Claude.cs: unico punto di avvio di claude (cartella dell'exe, stdin chiuso, ArgumentList, --session-id/--resume, --model/--effort omessi se vuoti). Contiene anche l'elenco modelli Catalog.Models, da aggiornare quando escono nuovi modelli.
  • Core/ChatStore.cs: cronologia, un JSON per chat in <LocalApplicationData>/<nome-app>/chats/<guid>.json (nome file = id di sessione, validato come Guid prima dell'uso).
  • Core/AppInfo.cs: nome dell'app, letto dall'AssemblyName del csproj (unica sorgente).
  • Gui/MainViewModel.cs: stato e logica della chat (invio, apertura/eliminazione, salvataggio subito all'invio e di nuovo alla risposta, riapertura dell'ultima chat all'avvio).
  • Gui/MainWindow.axaml (+ .cs): layout XAML con binding compilati. Gui/App.axaml: token di colore come risorse di tema chiaro/scuro e stili; specifiche in docs/MVP.md → "Design (UI/UX)". Cambiando l'aspetto aggiornare quella sezione.
  • Gui/MarkdownView.cs: renderer markdown proprio (albero Markdig → controlli Avalonia, DisableHtml).
  • Dipendenze NuGet: Avalonia (+ Desktop, Themes.Fluent), Markdig.

Vincoli non ovvi

  • La working directory di claude deve essere la cartella dell'exe: usare AppContext.BaseDirectory, mai Environment.CurrentDirectory né Assembly.Location (vuoto in single-file).
  • Lo stdin di claude va redirezionato e chiuso subito, altrimenti aspetta 3s.
  • claude è un eseguibile nativo (~/.local/bin), avviabile direttamente. Se fosse claude.cmd (Windows) serve cmd.exe /c.
  • Il nome dell'app non va scritto a mano nel codice: usare AppInfo.Name. Cambiare nome cambia la cartella dati (vedi checklist in docs/README.md; ChatStore migra le cartelle dei nomi precedenti).
  • Avalonia 12: la clipboard si usa con using Avalonia.Input.Platform; (SetTextAsync è un'estensione); TextBox.Watermark è obsoleto, usare PlaceholderText.
  • Nel renderer markdown i colori si risolvono al momento del rendering (TryFindResource con ActualThemeVariant) e la vista si ricostruisce al cambio di tema.
  • I link nel markdown si aprono con hit-test sul testo (TextLayout.HitTestPoint) solo se http(s) e se non c'è una selezione in corso.
  • Il publish single-file richiede IncludeNativeLibrariesForSelfExtract (nel csproj): Skia e HarfBuzz sono librerie native.

Skill del repo

.claude/settings.json abilita il plugin ui-ux-pro-max (marketplace nextlevelbuilder/ui-ux-pro-max-skill). Usarlo per le modifiche alla GUI WinForms (layout, usabilità, accessibilità).

Commit

Messaggi di commit in italiano: titolo breve all'indicativo o in forma nominale, eventuale corpo che spiega il perché. Mantenere la riga finale Co-Authored-By prevista dall'ambiente. Fare commit solo su richiesta.