Regola d'uso: dai a Claude Code UN task alla volta (copia/incolla il blocco), verifica il criterio di accettazione, fai commit, poi passa al successivo. Non incollare più task insieme. Se un task fallisce il criterio di accettazione, fermati e correggi prima di proseguire.
Prompt:
Leggi ARCHITECTURE.md. Crea la struttura repo descritta nella sezione 3: la solution
IdeSolution.slncon i progettiIde.App(Avalonia, template applicazione vuota),VbControls.Abstractions(class library),VbControls(class library, riferisce Abstractions), e un progettotemplates/BlazorPwaTemplatecreato condotnet new blazorwasm -o templates/BlazorPwaTemplate --pwa. Aggiungi unglobal.jsonche fissa la versione .NET SDK. Verifica chedotnet buildsull'intera solution passi. Non implementare ancora nessuna logica.
Criterio di accettazione: dotnet build passa su tutta la solution; struttura cartelle conforme alla sezione 3 di ARCHITECTURE.md.
Prompt:
Nel progetto Ide.App, aggiungi una WebView embedded (valuta WebView.Avalonia o CefNet, scegli motivando la scelta) e verifica che riesca a caricare una pagina locale semplice (anche solo un file HTML statico) sia in ambiente Linux che Windows. Documenta in ARCHITECTURE.md sotto "Stack tecnologico" quale libreria hai scelto e eventuali dipendenze di sistema necessarie (es. pacchetti WebKitGTK su Linux).
Criterio di accettazione: finestra Avalonia che mostra una pagina HTML dentro la WebView, testata su almeno una piattaforma, con dipendenze documentate.
Prompt:
Nel progetto templates/BlazorPwaTemplate, aggiungi manualmente un componente Blazor con un bottone. Avvia
dotnet watchsu quel progetto e verifica che la WebView creata nel Task 0.2 riesca a caricarehttp://localhost:PORTe mostrare il bottone reale, cliccabile.
Criterio di accettazione: il bottone Blazor reale è visibile e funzionante dentro la WebView dell'IDE.
Prompt:
Leggi ARCHITECTURE.md sezione 2 punto 2. In VbControls.Abstractions implementa
IVisualComponent(Id, LayoutBox, StyleModel, Properties),ComponentBehavior<T>(classe astratta con OnInitAsync, OnClickAsync), e l'attributo[VisualProperty(string Category)]da usare su proprietà pubbliche. Aggiungi test unitari minimi che verificano che l'attributo sia leggibile via reflection.
Criterio di accettazione: dotnet test passa; le classi compilano e sono usabili da un progetto Blazor separato.
Prompt:
In VbControls, crea
VbButton.razor+VbButton.razor.csche implementaIVisualComponent, esponeTexteBackgroundColorcon[VisualProperty], e inoltra il click aBehavior.OnClickAsync()se un Behavior è assegnato. Crea un piccolo progetto di test in /samples che lo usa manualmente (senza designer) per verificare che funzioni a runtime.
Criterio di accettazione: il sample compila, gira, il bottone risponde al click invocando il Behavior.
Prompt:
[dettaglio da scrivere insieme quando arrivi qui — dipende dagli esiti di Fase 0 e 1]
Prompt:
[da definire]
Prompt:
[da definire]
Da dettagliare a valle della Fase 2, quando le decisioni prese in Fase 0-1 (in particolare la libreria WebView e il meccanismo di JS interop) sono consolidate. Non anticipare questi task: le scelte fatte prima influenzano troppo la forma di questi moduli.
- Ogni volta che completi un task, fai commit separato con messaggio che riferisce il numero del task (es.
Task 0.1: setup solution). - Se Claude Code propone una deviazione dai vincoli di ARCHITECTURE.md, chiedigli esplicitamente di motivarla prima di accettarla, e valuta se aggiornare il documento invece di lasciare un'incoerenza silenziosa.
- Aggiorna questo file mano a mano: quando completi una fase, scrivi in dettaglio i task della fase successiva (come mostrato per la Fase 2), invece di scriverli tutti in anticipo — le decisioni tecniche a monte cambiano cosa ha senso a valle.