Tasks completed: 2/2 - Task 1: Costanti dominio, Pydantic schemas, FormatSelector - Task 2: CalendarService, PromptService, 7 prompt .txt in italiano SUMMARY: .planning/phases/01-core-generation-pipeline/01-02-SUMMARY.md
8.3 KiB
8.3 KiB
phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, key-decisions, patterns-established, duration, completed
| phase | plan | subsystem | tags | requires | provides | affects | tech-stack | key-files | key-decisions | patterns-established | duration | completed | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 01-core-generation-pipeline | 02 | domain-logic |
|
|
|
|
|
|
|
|
9min | 2026-03-08 |
Phase 1 Plan 02: Servizi core di dominio — CalendarService, FormatSelector, PromptService, 7 prompt italiani
CalendarService genera 13 slot PN+Schwartz con distribuzione locked, FormatSelector mappa 30 combinazioni tipo x livello, PromptService compila 7 prompt .txt scritti in italiano con sostituzione variabili {{...}}
Performance
- Duration: 9 min
- Started: 2026-03-08T00:51:34Z
- Completed: 2026-03-08T01:00:34Z
- Tasks: 2
- Files modified: 16
Accomplishments
- CalendarService produce esattamente 13 slot con distribuzione PN corretta (4v+2s+2n+3r+1c+1p) e Schwartz corretta (L5=3,L4=3,L3=4,L2=2,L1=1), ordinati per fase funnel, con rotazione nicchie e calcolo date
- CANVA_FIELDS locked come costante con assert a load-time — 33 colonne definitive per CSV Canva Bulk Create
- FormatSelector mappa tutte le 30 combinazioni (6 tipi x 5 livelli) da format_mapping.json con fallback "PAS"
- PromptService carica/compila/lista prompt .txt con sostituzione {{variabile}} e ValueError esplicito per variabili mancanti
- 7 prompt .txt scritti interamente in italiano: system_prompt, topic_generator, pas_valore, listicle_valore, bab_storytelling, aida_promozione, dato_news — tutti con schema output JSON esplicito
- Pydantic schemas completi: CalendarSlot, CalendarRequest, CalendarResponse, SlideContent, GeneratedPost, TopicResult, GenerateRequest, PostResult, GenerateResponse
Task Commits
Ogni task è stato committato atomicamente:
- Task 1: Costanti, schemas, FormatSelector -
209d896(feat) - Task 2: CalendarService, PromptService, prompt .txt -
ef9b947(feat)
Plan metadata: (questo commit) (docs: complete plan)
Files Created/Modified
backend/constants.py— CANVA_FIELDS (33), PERSUASION_DISTRIBUTION, SCHWARTZ_DISTRIBUTION, FORMATI_NARRATIVI, FUNZIONI_CONTENUTO, FASI_CAMPAGNA, NICCHIE_DEFAULT, POST_PER_CICLObackend/schemas/calendar.py— CalendarSlot, CalendarRequest, CalendarResponse con field constraintsbackend/schemas/generate.py— SlideContent, GeneratedPost, TopicResult, GenerateRequest, PostResult, GenerateResponsebackend/data/format_mapping.json— matrice 6 tipi x 5 livelli -> formato narrativobackend/services/format_selector.py— FormatSelector: carica JSON, select_format con fallback, get_mappingbackend/services/calendar_service.py— CalendarService: generate_calendar, ordinamento funnel, rotazione nicchie, calcolo datebackend/services/prompt_service.py— PromptService: list_prompts, load_prompt, compile_prompt, save_prompt, get_required_variablesbackend/data/prompts/system_prompt.txt— esperto content marketing B2B italiano, regole tono, struttura 8 slidebackend/data/prompts/topic_generator.txt— genera topic per slot con guida livelli L1-L5backend/data/prompts/pas_valore.txt— formato PAS per post valore, schema JSON GeneratedPostbackend/data/prompts/listicle_valore.txt— formato Listicle con 6 punti numeratibackend/data/prompts/bab_storytelling.txt— formato BAB: Before→After→Bridge narrativobackend/data/prompts/aida_promozione.txt— formato AIDA per conversione, variabile call_to_actionbackend/data/prompts/dato_news.txt— Dato+Implicazione per news di settore.gitignore— fix: backend/data/ ignorato troppo aggressivamente (Regola 1 - Bug)
Decisions Made
- CANVA_FIELDS usa _image_keyword: Le colonne immagine contengono keyword testuali, non URL. L'integrazione Unsplash arriva in Phase 4. Mantiene il CSV utile anche senza API Unsplash.
- Distribuzione L3 split tra fasi: I 4 slot L3 sono divisi tra "Cattura" (valore) e "Coinvolgi" (riprova_sociale). La logica è che chi conosce la soluzione (L3) ma non ancora il prodotto va nutrito sia con educazione che con prova sociale.
- Nicchie 50/50: Slot pari = generico, slot dispari = verticale in rotazione. Garantisce copertura del pubblico generico senza ignorare le nicchie specifiche.
- PromptService fail esplicito: ValueError per variabili mancanti invece di lasciare {{variabile}} nel testo. Un prompt con variabili non sostituite manderebbe al LLM istruzioni rotte.
Deviations from Plan
Auto-fixed Issues
1. [Regola 1 - Bug] Fix .gitignore: backend/data/ era ignorato troppo aggressivamente
- Trovato durante: Task 1 (staging dei file)
- Problema: Il pattern
data/in .gitignore matchava anchebackend/data/, impedendo di committareformat_mapping.jsone i file prompt .txt che sono file sorgente, non dati runtime - Fix: Cambiato
data/a/data/(solo root) e aggiunto le sottocartelle runtime specifiche (backend/data/outputs/,backend/data/campaigns/,backend/data/config/) - Files modificati:
.gitignore - Verifica:
git check-ignore -v backend/data/format_mapping.json→ non ignorato - Committato in:
209d896(parte del Task 1 commit)
Totale deviazioni: 1 auto-fixed (1 bug) Impatto sul piano: Necessaria per committare file sorgente. Nessuno scope creep.
Issues Encountered
Nessun problema durante l'implementazione — piano eseguito secondo le specifiche.
User Setup Required
Nessuno — nessun servizio esterno richiede configurazione per questi file di dominio puro.
Next Phase Readiness
- CalendarService e PromptService pronti per essere usati da LLMService (Plan 03)
- CANVA_FIELDS locked — CSVBuilder (Plan 04) può iniziare a usarlo
- 7 prompt in italiano pronti — LLMService userà PromptService.compile_prompt() per prepararli
- Tutti i servizi sono puri (zero async, zero HTTP) — testabili indipendentemente
- Nessun blocco: Plan 03 può proseguire
Phase: 01-core-generation-pipeline Completed: 2026-03-08