Skip to content

Add project specs, agents and devcontainer#18

Open
turibbio wants to merge 3 commits into
mainfrom
specs
Open

Add project specs, agents and devcontainer#18
turibbio wants to merge 3 commits into
mainfrom
specs

Conversation

@turibbio
Copy link
Copy Markdown
Member

@turibbio turibbio commented Feb 25, 2026

Summary

  • Devcontainer: aggiunta configurazione GitHub Codespaces con .NET 8, SQL Server e estensioni VS Code
  • Claude Code agents: aggiunto agent product-owner e comando backlog-builder per generare user story e task
  • GitHub agent: aggiunto backlog-builder.agent.md per GitHub Copilot
  • Backlog: generate 5 user story prioritizzate con acceptance criteria e task breakdown (ricerca/filtri, carrello, autenticazione, checkout, wishlist)

Test plan

5 prioritized user stories with task breakdowns:
- US-001: Ricerca e filtri catalogo
- US-002: Carrello della spesa
- US-003: Autenticazione utente
- US-004: Checkout e gestione ordini
- US-005: Wishlist
Copilot AI review requested due to automatic review settings February 25, 2026 21:43
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request adds comprehensive project specifications and development environment configuration for the ClaudeClothes e-commerce platform. It introduces AI-assisted product management tools via Claude Code and GitHub Copilot agents, sets up a complete GitHub Codespaces devcontainer with .NET 8 and SQL Server, and generates 5 prioritized user stories with detailed task breakdowns covering core e-commerce functionality.

Changes:

  • Added devcontainer configuration for GitHub Codespaces with .NET 8, SQL Server 2022, and VS Code extensions
  • Created product-owner agent and backlog-builder command for automated user story generation
  • Generated 5 user stories (search/filters, cart, authentication, checkout, wishlist) with acceptance criteria and task breakdowns

Reviewed changes

Copilot reviewed 12 out of 12 changed files in this pull request and generated 10 comments.

Show a summary per file
File Description
.devcontainer/devcontainer.json Configures GitHub Codespaces with .NET 8, SQL Server connection, and VS Code extensions
.devcontainer/docker-compose.yml Defines SQL Server 2022 service with health checks for devcontainer
.devcontainer/post-create.sh Automates package restoration and build on codespace creation
.claude/agents/product-owner.md Defines Claude Code agent for creating user stories and tasks
.claude/commands/backlog-builder.md Custom Claude Code command for analyzing project and generating backlog
.github/agents/backlog-builder.agent.md GitHub Copilot agent configuration for backlog generation
specs/prompts.md Example prompts for using the backlog generation tools
specs/backlog/US-001-ricerca-e-filtri-catalogo.md User story for catalog search and filtering with 5 tasks
specs/backlog/US-002-carrello-della-spesa.md User story for shopping cart with 6 tasks
specs/backlog/US-003-autenticazione-utente.md User story for user authentication with 6 tasks
specs/backlog/US-004-checkout-e-gestione-ordini.md User story for checkout and order management with 6 tasks
specs/backlog/US-005-wishlist.md User story for wishlist functionality with 6 tasks

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +10 to +15
- [ ] Given che un capo e' gia' nel carrello, When clicco nuovamente "Aggiungi al carrello", Then la quantita' viene incrementata di 1
- [ ] Given che il carrello contiene prodotti, When accedo alla pagina carrello, Then vedo la lista dei prodotti con nome, taglia, prezzo unitario, quantita' e subtotale
- [ ] Given che il carrello contiene prodotti, When modifico la quantita' di un prodotto, Then il subtotale e il totale si aggiornano in tempo reale
- [ ] Given che il carrello contiene prodotti, When rimuovo un prodotto, Then il prodotto scompare dalla lista e il totale si aggiorna
- [ ] Given che sono su qualsiasi pagina, When guardo la navbar, Then vedo l'icona del carrello con il numero di articoli presenti
- [ ] Given che il carrello e' vuoto, When accedo alla pagina carrello, Then vedo un messaggio "Il tuo carrello e' vuoto" con link al catalogo
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent use of apostrophes in Italian text. The text uses "e'" instead of the proper "è" character, and "quantita'" instead of "quantità". This should be corrected to use proper Italian accented characters for better readability and professionalism.

Copilot uses AI. Check for mistakes.
- [ ] Given che sono nella homepage, When seleziono una categoria dal filtro (es. T-Shirt, Jeans), Then vedo solo i capi di quella categoria
- [ ] Given che sono nella homepage, When imposto un range di prezzo (min/max), Then vedo solo i capi con prezzo compreso nel range
- [ ] Given che sono nella homepage, When seleziono una taglia dal filtro, Then vedo solo i capi disponibili in quella taglia
- [ ] Given che ho applicato uno o piu' filtri, When clicco "Rimuovi filtri", Then vedo nuovamente tutti i capi
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent use of apostrophes in Italian text. The text uses "piu'" instead of the proper "più" character. This should be corrected to use proper Italian accented characters for better readability and professionalism.

Copilot uses AI. Check for mistakes.
Comment on lines +12 to +21
- [ ] Given che clicco su un ordine, When si apre il dettaglio, Then vedo i prodotti ordinati, quantita', prezzi e indirizzo di spedizione
- [ ] Given che non sono autenticato, When clicco "Procedi al checkout", Then vengo reindirizzato alla pagina di login
- [ ] Given che il carrello e' vuoto, When provo ad accedere al checkout, Then vengo reindirizzato al carrello con messaggio "Aggiungi prodotti prima di procedere"

## Notes

- Dipendenza: richiede US-002 (carrello) e US-003 (autenticazione)
- Per l'MVP non implementare il pagamento reale, simulare solo la conferma ordine
- Stati ordine: `Pending`, `Confirmed`, `Shipped`, `Delivered`
- L'indirizzo di spedizione deve includere: via, citta', CAP, provincia
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent use of apostrophes in Italian text. The text uses "e'" instead of the proper "è" character, and "quantita'" instead of "quantità". This should be corrected to use proper Italian accented characters for better readability and professionalism.

Suggested change
- [ ] Given che clicco su un ordine, When si apre il dettaglio, Then vedo i prodotti ordinati, quantita', prezzi e indirizzo di spedizione
- [ ] Given che non sono autenticato, When clicco "Procedi al checkout", Then vengo reindirizzato alla pagina di login
- [ ] Given che il carrello e' vuoto, When provo ad accedere al checkout, Then vengo reindirizzato al carrello con messaggio "Aggiungi prodotti prima di procedere"
## Notes
- Dipendenza: richiede US-002 (carrello) e US-003 (autenticazione)
- Per l'MVP non implementare il pagamento reale, simulare solo la conferma ordine
- Stati ordine: `Pending`, `Confirmed`, `Shipped`, `Delivered`
- L'indirizzo di spedizione deve includere: via, citta', CAP, provincia
- [ ] Given che clicco su un ordine, When si apre il dettaglio, Then vedo i prodotti ordinati, quantità, prezzi e indirizzo di spedizione
- [ ] Given che non sono autenticato, When clicco "Procedi al checkout", Then vengo reindirizzato alla pagina di login
- [ ] Given che il carrello è vuoto, When provo ad accedere al checkout, Then vengo reindirizzato al carrello con messaggio "Aggiungi prodotti prima di procedere"
## Notes
- Dipendenza: richiede US-002 (carrello) e US-003 (autenticazione)
- Per l'MVP non implementare il pagamento reale, simulare solo la conferma ordine
- Stati ordine: `Pending`, `Confirmed`, `Shipped`, `Delivered`
- L'indirizzo di spedizione deve includere: via, città, CAP, provincia

Copilot uses AI. Check for mistakes.

## Notes

- Dipendenza: richiede US-003 (autenticazione)
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency between this file and the corresponding GitHub issue #17. The file uses "Dipendenza:" (singular) while the GitHub issue uses "Dipendenze:" (plural with bold formatting). Consider using consistent terminology and formatting across both sources.

Suggested change
- Dipendenza: richiede US-003 (autenticazione)
- **Dipendenze**: richiede US-003 (autenticazione)

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,10 @@
#!/bin/bash
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The bash script should have execute permissions set. Ensure that the file has the executable bit set (chmod +x .devcontainer/post-create.sh) or it may fail when the devcontainer tries to run it. While git should preserve these permissions if set before committing, it's important to verify this is configured correctly.

Copilot uses AI. Check for mistakes.
### Example Prompts

- `@product-owner Crea una user story per aggiungere il filtro per categoria nel catalogo`
- `@product-owner Scomponi in task la funzionalita' di carrello della spesa`
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent use of apostrophes in Italian text. Uses "funzionalita'" instead of "funzionalità". Should use proper Italian accented characters throughout for consistency and professionalism.

Suggested change
- `@product-owner Scomponi in task la funzionalita' di carrello della spesa`
- `@product-owner Scomponi in task la funzionalità di carrello della spesa`

Copilot uses AI. Check for mistakes.
volumes:
- sqlserver_data:/var/opt/mssql
healthcheck:
test: /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "ClaudeClothes2024!" -C -Q "SELECT 1" || exit 1
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The healthcheck command uses /opt/mssql-tools18/bin/sqlcmd which requires the -C flag to trust the server certificate, but the main docker-compose.yml file uses /opt/mssql-tools/bin/sqlcmd without this flag. This inconsistency could cause the healthcheck to fail depending on the SQL Server version. Consider using the same path and flags in both docker-compose files for consistency.

Suggested change
test: /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "ClaudeClothes2024!" -C -Q "SELECT 1" || exit 1
test: /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "ClaudeClothes2024!" -Q "SELECT 1" || exit 1

Copilot uses AI. Check for mistakes.
Comment on lines +10 to +14
- [ ] Given che un capo e' nella mia wishlist, When clicco nuovamente l'icona cuore, Then il capo viene rimosso dalla wishlist e l'icona torna vuota
- [ ] Given che sono autenticato, When accedo a "La mia Wishlist", Then vedo la lista dei capi salvati con nome, prezzo e link al dettaglio
- [ ] Given che sono nella pagina wishlist, When clicco "Aggiungi al carrello" su un capo, Then il capo viene aggiunto al carrello
- [ ] Given che sono nella pagina wishlist, When clicco "Rimuovi" su un capo, Then il capo viene rimosso dalla lista
- [ ] Given che la wishlist e' vuota, When accedo alla pagina, Then vedo un messaggio "La tua wishlist e' vuota" con link al catalogo
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent use of apostrophes in Italian text. The text uses "e'" instead of the proper "è" character throughout the acceptance criteria. This should be corrected to use proper Italian accented characters for better readability and professionalism.

Suggested change
- [ ] Given che un capo e' nella mia wishlist, When clicco nuovamente l'icona cuore, Then il capo viene rimosso dalla wishlist e l'icona torna vuota
- [ ] Given che sono autenticato, When accedo a "La mia Wishlist", Then vedo la lista dei capi salvati con nome, prezzo e link al dettaglio
- [ ] Given che sono nella pagina wishlist, When clicco "Aggiungi al carrello" su un capo, Then il capo viene aggiunto al carrello
- [ ] Given che sono nella pagina wishlist, When clicco "Rimuovi" su un capo, Then il capo viene rimosso dalla lista
- [ ] Given che la wishlist e' vuota, When accedo alla pagina, Then vedo un messaggio "La tua wishlist e' vuota" con link al catalogo
- [ ] Given che un capo è nella mia wishlist, When clicco nuovamente l'icona cuore, Then il capo viene rimosso dalla wishlist e l'icona torna vuota
- [ ] Given che sono autenticato, When accedo a "La mia Wishlist", Then vedo la lista dei capi salvati con nome, prezzo e link al dettaglio
- [ ] Given che sono nella pagina wishlist, When clicco "Aggiungi al carrello" su un capo, Then il capo viene aggiunto al carrello
- [ ] Given che sono nella pagina wishlist, When clicco "Rimuovi" su un capo, Then il capo viene rimosso dalla lista
- [ ] Given che la wishlist è vuota, When accedo alla pagina, Then vedo un messaggio "La tua wishlist è vuota" con link al catalogo

Copilot uses AI. Check for mistakes.
Comment on lines +14 to +61
- [ ] Given che provo a registrarmi con un'email gia' in uso, When invio il form, Then vedo il messaggio "Email gia' registrata"
- [ ] Given che non sono autenticato, When scrivo una recensione, Then il mio nome viene precompilato come "Anonimo" (backward compatibility)

## Notes

- Usare ASP.NET Core Identity per la gestione utenti
- Password hashing con bcrypt/PBKDF2 (default di Identity)
- Non implementare OAuth/social login in questa story (future enhancement)
- La registrazione non richiede conferma email per MVP
- Mantenere backward compatibility: il sistema recensioni deve funzionare anche senza login

## Story Points: 8

---

## Task Breakdown

### 1. [TASK-012] Aggiungere il modello User e configurare Identity (Layer: Core/Infrastructure)
- Creare modello `ApplicationUser` che estende `IdentityUser` con campo `FullName`
- Configurare ASP.NET Core Identity nel `DbContext`
- Aggiungere migration per le tabelle Identity
- File coinvolti: `src/ClaudeClothes.Core/Models/ApplicationUser.cs` (nuovo), `src/ClaudeClothes.Infrastructure/Data/ClaudeClothesDbContext.cs`, `src/ClaudeClothes.Web/Program.cs`
- Stima: M

### 2. [TASK-013] Implementare il servizio di autenticazione (Layer: Infrastructure)
- Creare `IAuthService` con metodi: `RegisterAsync`, `LoginAsync`, `LogoutAsync`, `GetCurrentUserAsync`
- Implementare `AuthService` usando `UserManager<ApplicationUser>` e `SignInManager<ApplicationUser>`
- File coinvolti: `src/ClaudeClothes.Core/Interfaces/IAuthService.cs` (nuovo), `src/ClaudeClothes.Infrastructure/Services/AuthService.cs` (nuovo)
- Stima: M

### 3. [TASK-014] Creare le pagine di Login e Registrazione (Layer: Web)
- Creare pagina `/login` con form email/password
- Creare pagina `/register` con form nome/email/password/conferma password
- Validazione client-side con DataAnnotations
- Gestione errori e messaggi di feedback
- File coinvolti: `src/ClaudeClothes.Web/Pages/Login.razor` (nuovo), `src/ClaudeClothes.Web/Pages/Register.razor` (nuovo)
- Stima: M

### 4. [TASK-015] Aggiornare la navbar con stato autenticazione (Layer: Web)
- Mostrare "Accedi / Registrati" se non autenticato
- Mostrare nome utente e "Esci" se autenticato
- Usare `AuthenticationStateProvider` di Blazor
- File coinvolti: `src/ClaudeClothes.Web/Shared/NavMenu.razor`, `src/ClaudeClothes.Web/Shared/MainLayout.razor`
- Stima: S

### 5. [TASK-016] Integrare autenticazione con il sistema recensioni (Layer: Web)
- Precompilare il campo "Reviewer" con il nome dell'utente autenticato
- Rendere il campo "Reviewer" readonly se l'utente e' autenticato
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent use of apostrophes in Italian text. The text uses "gia'" instead of the proper "già" character and "e'" instead of "è". This should be corrected to use proper Italian accented characters for better readability and professionalism.

Copilot uses AI. Check for mistakes.
Comment on lines +6 to +71
## Il tuo compito

Sei un Product Owner esperto di piattaforme e-commerce. Devi analizzare il progetto corrente e proporre nuove feature con relative user story e task di implementazione.

## Step 1: Analizza il progetto

Leggi questi file per capire cosa fa il progetto, la sua architettura e le feature esistenti:

- `README.md` - Panoramica del progetto e feature attuali
- `CLAUDE.md` - Architettura, modelli di dominio e struttura della soluzione

Esplora anche il codice sorgente per capire lo stato attuale dell'implementazione:

- I modelli in `src/ClaudeClothes.Core/`
- I servizi in `src/ClaudeClothes.Infrastructure/`
- Le pagine Blazor in `src/ClaudeClothes.Web/`

## Step 2: Identifica le feature mancanti

Basandoti sull'analisi, identifica le feature che un e-commerce di abbigliamento casual dovrebbe avere ma che attualmente mancano. Considera ad esempio:

- Ricerca e filtri (per categoria, prezzo, taglia)
- Carrello della spesa
- Gestione ordini e checkout
- Autenticazione utente
- Wishlist / lista dei desideri
- Gestione inventario

Proponi 3-5 feature prioritizzate, spiegando brevemente il valore di business di ciascuna.

## Step 3: Genera User Story e Task

Per ogni feature proposta, genera:

### User Story (formato standard)

```
### [US-XXX] Titolo

**As a** [persona: Customer / Admin / Developer],
**I want** [obiettivo],
**So that** [valore/beneficio].

#### Acceptance Criteria
- [ ] Given [contesto], When [azione], Then [risultato atteso]

#### Story Points: [stima con scala Fibonacci: 1, 2, 3, 5, 8, 13]
```

### Task Breakdown (per ogni user story)

```
1. **[TASK-XXX] Titolo** (Layer: Core/Infrastructure/Web/Tests)
- Descrizione di cosa fare
- File coinvolti: `path/to/file`
- Stima: [S/M/L]
```

## Linee guida

- Le user story devono rispettare i criteri INVEST
- I task devono essere completabili in 1-2 giorni massimo
- Specifica sempre il layer architetturale (Core, Infrastructure, Web, Tests)
- Includi sempre un task di testing per ogni story
- Considera accessibilita, performance e responsive design
- Le Acceptance Criteria devono essere in formato Given/When/Then
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The agent configurations in .claude/agents/product-owner.md and .claude/commands/backlog-builder.md are nearly identical to .github/agents/backlog-builder.agent.md, leading to duplication. Consider whether both Claude Code and GitHub Copilot agents are needed, or if the configurations should be consolidated. This duplication makes maintenance harder as changes need to be synchronized across multiple files.

Suggested change
## Il tuo compito
Sei un Product Owner esperto di piattaforme e-commerce. Devi analizzare il progetto corrente e proporre nuove feature con relative user story e task di implementazione.
## Step 1: Analizza il progetto
Leggi questi file per capire cosa fa il progetto, la sua architettura e le feature esistenti:
- `README.md` - Panoramica del progetto e feature attuali
- `CLAUDE.md` - Architettura, modelli di dominio e struttura della soluzione
Esplora anche il codice sorgente per capire lo stato attuale dell'implementazione:
- I modelli in `src/ClaudeClothes.Core/`
- I servizi in `src/ClaudeClothes.Infrastructure/`
- Le pagine Blazor in `src/ClaudeClothes.Web/`
## Step 2: Identifica le feature mancanti
Basandoti sull'analisi, identifica le feature che un e-commerce di abbigliamento casual dovrebbe avere ma che attualmente mancano. Considera ad esempio:
- Ricerca e filtri (per categoria, prezzo, taglia)
- Carrello della spesa
- Gestione ordini e checkout
- Autenticazione utente
- Wishlist / lista dei desideri
- Gestione inventario
Proponi 3-5 feature prioritizzate, spiegando brevemente il valore di business di ciascuna.
## Step 3: Genera User Story e Task
Per ogni feature proposta, genera:
### User Story (formato standard)
```
### [US-XXX] Titolo
**As a** [persona: Customer / Admin / Developer],
**I want** [obiettivo],
**So that** [valore/beneficio].
#### Acceptance Criteria
- [ ] Given [contesto], When [azione], Then [risultato atteso]
#### Story Points: [stima con scala Fibonacci: 1, 2, 3, 5, 8, 13]
```
### Task Breakdown (per ogni user story)
```
1. **[TASK-XXX] Titolo** (Layer: Core/Infrastructure/Web/Tests)
- Descrizione di cosa fare
- File coinvolti: `path/to/file`
- Stima: [S/M/L]
```
## Linee guida
- Le user story devono rispettare i criteri INVEST
- I task devono essere completabili in 1-2 giorni massimo
- Specifica sempre il layer architetturale (Core, Infrastructure, Web, Tests)
- Includi sempre un task di testing per ogni story
- Considera accessibilita, performance e responsive design
- Le Acceptance Criteria devono essere in formato Given/When/Then
## Scopo del comando
Questo comando è un alias locale per l'agente di backlog definito in
`.github/agents/backlog-builder.agent.md`. Usa la stessa logica di base,
ma è pensato per essere richiamato da Claude Code all'interno di questo
repository.
## Cosa devi fare
1. Analizza il progetto leggendo almeno:
- `README.md` (panoramica e feature attuali)
- `CLAUDE.md` (architettura, modelli di dominio, struttura della soluzione)
2. Esplora il codice sorgente (Core, Infrastructure, Web) per capire lo stato
dell'implementazione.
3. Proponi 3–5 nuove feature di e-commerce ad alto valore di business, con
priorità esplicita.
4. Per ogni feature, produci:
- una user story chiara e indipendente
- un elenco di task tecnici implementabili in 1–2 giorni ciascuno.
## Formato di output (riassunto)
- **User story**
- Usa il formato: “As a … I want … so that …”.
- Indica sempre i criteri di accettazione in stile Given/When/Then.
- Aggiungi una stima in story point (scala Fibonacci).
- **Task tecnici**
- Elenca i task numerati.
- Per ogni task indica:
- titolo sintetico
- layer coinvolto (Core, Infrastructure, Web, Tests)
- file principali da toccare (se noti)
- stima di effort (S/M/L).
Segui le stesse linee guida concettuali dell’agente GitHub
`backlog-builder`, evitando però di ripetere qui l’intera configurazione:
questo file deve restare un semplice wrapper che richiama quel comportamento.

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants