Implement Sprint 1: Notebook Management CRUD
- Add NotebookService with full CRUD operations
- Add POST /api/v1/notebooks (create notebook)
- Add GET /api/v1/notebooks (list with pagination)
- Add GET /api/v1/notebooks/{id} (get by ID)
- Add PATCH /api/v1/notebooks/{id} (partial update)
- Add DELETE /api/v1/notebooks/{id} (delete)
- Add Pydantic models for requests/responses
- Add custom exceptions (ValidationError, NotFoundError, NotebookLMError)
- Add comprehensive unit tests (31 tests, 97% coverage)
- Add API integration tests (26 tests)
- Fix router prefix duplication
- Fix JSON serialization in error responses
BREAKING CHANGE: None
7.8 KiB
7.8 KiB
Flusso di Lavoro Obbligatorio - getNotebooklmPower
Regola fondamentale: Safety first, little often, double check
1. Contesto (Prima di ogni task)
OBBLIGATORIO: Prima di implementare qualsiasi funzionalità:
- Leggi il PRD: Leggi sempre
/home/google/Sources/LucaSacchiNet/getNotebooklmPower/prd.mdper capire i requisiti del task corrente - Non implementare mai funzionalità non esplicitamente richieste
- Scope check: Verifica che il task rientri nello scope definito nel PRD
2. TDD (Test-Driven Development)
Ciclo RED → GREEN → REFACTOR:
- RED: Scrivi PRIMA il test fallimentare per la singola funzionalità
- GREEN: Scrivi il codice applicativo minimo necessario per far passare il test
- REFACTOR: Migliora il codice mantenendo i test verdi
- Itera finché la funzionalità non è completa e tutti i test passano
Regole TDD:
- Un test per singolo comportamento
- Testare prima i casi limite (errori, input invalidi)
- Coverage target: ≥90%
- Usa AAA pattern: Arrange → Act → Assert
3. Memoria e Logging
Documentazione obbligatoria:
| Evento | Azione | File |
|---|---|---|
| Bug complesso risolto | Descrivi il bug e la soluzione | /home/google/Sources/LucaSacchiNet/getNotebooklmPower/docs/bug_ledger.md |
| Decisione di design | Documenta il pattern scelto | /home/google/Sources/LucaSacchiNet/getNotebooklmPower/docs/architecture.md |
| Cambio architetturale | Aggiorna le scelte architetturali | /home/google/Sources/LucaSacchiNet/getNotebooklmPower/docs/architecture.md |
| Inizio task | Aggiorna progresso corrente | /home/google/Sources/LucaSacchiNet/getNotebooklmPower/export/progress.md |
| Fine task | Registra completamento | /home/google/Sources/LucaSacchiNet/getNotebooklmPower/export/progress.md |
| Blocco riscontrato | Documenta problema e soluzione | /home/google/Sources/LucaSacchiNet/getNotebooklmPower/export/progress.md |
Formato bug_ledger.md:
## YYYY-MM-DD: [Titolo Bug]
**Sintomo:** [Descrizione sintomo]
**Causa:** [Root cause]
**Soluzione:** [Fix applicato]
**Prevenzione:** [Come evitare in futuro]
4. Git Flow (Commit)
Alla fine di ogni task completato con test verdi:
- Commit atomico: Un commit per singola modifica funzionale
- Conventional Commits obbligatorio:
<type>(<scope>): <description> [optional body] [optional footer] - Tipi ammessi:
feat:- Nuova funzionalitàfix:- Correzione bugdocs:- Documentazionetest:- Testrefactor:- Refactoringchore:- Manutenzione
- Scope: api, webhook, skill, notebook, source, artifact, auth, core
- Documenta il commit: Aggiorna
/home/google/Sources/LucaSacchiNet/getNotebooklmPower/export/githistory.mdcon contesto e spiegazione
Esempi:
feat(api): add notebook creation endpoint
- Implements POST /api/v1/notebooks
- Validates title length (max 100 chars)
- Returns 201 with notebook details
Closes #123
Formato githistory.md:
## 2026-04-05 14:30 - feat(api): add notebook creation endpoint
**Hash:** `a1b2c3d`
**Autore:** @tdd-developer
**Branch:** main
### Contesto
Necessità di creare notebook programmaticamente via API per integrazione con altri agenti.
### Cosa cambia
- Aggiunto endpoint POST /api/v1/notebooks
- Implementata validazione titolo (max 100 chars)
- Aggiunto test coverage 95%
### Perché
Il PRD richiede CRUD operations su notebook. Questo è il primo endpoint implementato.
### Impatto
- [x] Nuova feature
- [ ] Breaking change
- [ ] Modifica API
### File modificati
- src/api/routes/notebooks.py - Nuovo endpoint
- src/services/notebook_service.py - Logica creazione
- tests/unit/test_notebook_service.py - Test unitari
### Note
Closes #42
5. Prompt Management (Gestione Prompt)
Ogni interazione con il team di agenti deve essere documentata come prompt.
5.1 Salvataggio Prompt
Regola: Ogni prompt ricevuto dall'utente deve essere salvato nella cartella prompts/.
Convenzione naming:
prompts/{NUMERO}-{descrizione}.md
- NUMERO: Progressivo crescente (1, 2, 3, ...)
- descrizione: Nome descrittivo in kebab-case
Esempi:
prompts/1-avvio.md- Primo prompt, avvio progettoprompts/2-implementazione-sources.md- Sprint fontiprompts/3-bugfix-webhook-retry.md- Fix bug webhook
5.2 Struttura Prompt
Ogni prompt salvato deve includere:
# {Titolo}
## 📋 Comando per @sprint-lead
{Istruzione principale}
---
## 🎯 Obiettivo
{Descrizione chiara}
---
## 📚 Contesto
{Background e riferimenti}
---
## ✅ Scope
### In Scope
- {Task 1}
### Out of Scope
- {Task escluso}
---
## 🎯 Criteri di Accettazione
- [ ] {Criterio 1}
---
## 🎬 Azioni
1. {Azione 1}
---
*Data: YYYY-MM-DD*
*Priority: P{0-3}*
*Prompt File: prompts/{NUMERO}-{nome}.md*
5.3 Aggiornamento prompts/README.md
Dopo aver salvato un nuovo prompt, aggiornare prompts/README.md:
| File | Descrizione | Data |
|------|-------------|------|
| [1-avvio.md](./1-avvio.md) | Sprint kickoff - Core API | 2026-04-06 |
| [2-xxx.md](./2-xxx.md) | Nuova descrizione | YYYY-MM-DD |
6. Spec-Driven Development (SDD)
Prima di scrivere codice, definisci le specifiche:
6.1 Analisi Profonda
- Fai domande mirate per chiarire dubbi architetturali o di business
- Non procedere con specifiche vaghe
- Verifica vincoli tecnici e dipendenze
6.2 Output Richiesti (cartella /home/google/Sources/LucaSacchiNet/getNotebooklmPower/export/)
Tutto il lavoro di specifica si concretizza in questi file:
| File | Contenuto |
|---|---|
/home/google/Sources/LucaSacchiNet/getNotebooklmPower/export/prd.md |
Product Requirements Document (obiettivi, user stories, requisiti tecnici) |
/home/google/Sources/LucaSacchiNet/getNotebooklmPower/export/architecture.md |
Scelte architetturali, stack tecnologico, diagrammi di flusso |
/home/google/Sources/LucaSacchiNet/getNotebooklmPower/export/kanban.md |
Scomposizione in task minimi e verificabili (regola "little often") |
5.3 Principio "Little Often"
- Scomporre in task il più piccoli possibile
- Ogni task deve essere verificabile in modo indipendente
- Progresso incrementale, mai "big bang"
5.4 Rigore
- Sii diretto, conciso e tecnico
- Se una richiesta è vaga, non inventare: chiedi di precisare
- Nessuna supposizione non verificata
Checklist Prompt Management (per ogni nuovo task)
- Ho determinato il prossimo numero progressivo (controlla
prompts/) - Ho creato il file
prompts/{NUMERO}-{descrizione}.md - Ho incluso comando per @sprint-lead
- Ho definito obiettivo chiaro e success criteria
- Ho specificato scope (in/out)
- Ho elencato criteri di accettazione
- Ho aggiornato
prompts/README.mdcon il nuovo prompt - Ho salvato il prompt prima di iniziare lo sviluppo
Checklist Pre-Implementazione
- Ho letto il PRD in
/home/google/Sources/LucaSacchiNet/getNotebooklmPower/prd.md - Ho letto il prompt corrente in
prompts/{NUMERO}-*.md - Ho compreso lo scope del task
- Ho scritto il test fallimentare (RED)
- Ho implementato il codice minimo (GREEN)
- Ho refactoring mantenendo test verdi
- Ho aggiornato
bug_ledger.mdse necessario - Ho aggiornato
architecture.mdse necessario - Ho creato un commit atomico con conventional commit
Checklist Spec-Driven (per nuove feature)
- Ho analizzato in profondità i requisiti
- Ho chiesto chiarimenti sui punti vaghi
- Ho creato/aggiornato
/home/google/Sources/LucaSacchiNet/getNotebooklmPower/export/prd.md - Ho creato/aggiornato
/home/google/Sources/LucaSacchiNet/getNotebooklmPower/export/architecture.md - Ho creato/aggiornato
/home/google/Sources/LucaSacchiNet/getNotebooklmPower/export/kanban.md - I task sono scomposti secondo "little often"