BREAKING CHANGE: New compact entry format
- Header: `## {P|G}: {Title}` (P=Pattern, G=Gotcha)
- Metadata: `@YYYY-MM-DD #tag1 #tag2 | source:confidence[:reinforced]`
- Max 3 inline tags, no separators, no statistics section
Removed verbose fields: Discovered, Source, Confidence, Trigger
Statistics now calculated dynamically by /learn:status
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
342 lines
10 KiB
Markdown
342 lines
10 KiB
Markdown
---
|
||
description: Analizează conversația și propune lecții de salvat (cu filtrare selectivă)
|
||
argument-hint: [auto|patterns|gotchas] - Detectare automată sau categorie specifică
|
||
---
|
||
|
||
# Analiză Conversație pentru Lecții
|
||
|
||
Examinează conversația curentă și identifică insights pentru documentație.
|
||
**Salvează doar lecții cu semnal clar** - nu one-off fixes.
|
||
|
||
## Workflow
|
||
|
||
### Pas 0: Încarcă Configurația Domeniilor
|
||
|
||
Citește `.claude/rules/claude-learn-domains.md` pentru lista domeniilor disponibile.
|
||
Dacă fișierul nu există, creează-l din template cu domeniile implicite:
|
||
- backend, frontend, database, testing, deployment, global
|
||
|
||
### Pas 0.5: Verifică Reinforcement pentru Entries Existente
|
||
|
||
Înainte de a căuta lecții noi, verifică dacă conversația validează entries existente:
|
||
|
||
1. Încarcă toate entries din domeniile relevante (bazat pe fișierele din conversație)
|
||
2. Pentru fiecare entry, verifică dacă:
|
||
- Problema descrisă a fost întâlnită ȘI soluția a funcționat
|
||
- Pattern-ul a fost aplicat cu succes
|
||
- Utilizatorul a menționat/confirmat un gotcha salvat
|
||
|
||
3. Dacă găsește match-uri, actualizează:
|
||
- Incrementează `Reinforced` count
|
||
- Actualizează `Last Reinforced` la data curentă
|
||
|
||
4. Raportează la final (dacă există):
|
||
```
|
||
📈 Entries validate în această sesiune:
|
||
- [backend] "API Error Handling" - reinforced (3→4)
|
||
- [frontend] "Vue Watch Pattern" - reinforced (1→2)
|
||
```
|
||
|
||
### Pas 1: Scanează Conversația
|
||
|
||
Identifică:
|
||
- **Fișiere accesate**: toate path-urile din Read, Edit, Write, Glob, Grep
|
||
- **Tool calls cu erori** → potențiale gotchas
|
||
- **Soluții aplicate** → potențiale patterns
|
||
- **Decizii tehnice** → posibile reguli noi
|
||
- **Mesaje utilizator** → comenzi explicite, corecții, preferințe
|
||
|
||
### Pas 2: Detectează Domeniul
|
||
|
||
#### 2.1 Extrage Path-uri
|
||
Colectează toate path-urile fișierelor din conversație:
|
||
```
|
||
src/api/users.ts
|
||
src/api/middleware/auth.ts
|
||
tests/api/users.test.ts
|
||
```
|
||
|
||
#### 2.2 Match-uiește cu Domeniile
|
||
Pentru fiecare path, verifică contra patterns din config:
|
||
- `src/api/**/*.ts` → backend
|
||
- `tests/**/*.test.ts` → testing
|
||
|
||
#### 2.3 Determină Domeniul Predominant
|
||
Alege domeniul cu cele mai multe match-uri.
|
||
Dacă egalitate → preferă în ordine: backend > frontend > database > testing > deployment > global
|
||
|
||
#### 2.4 Prezintă Utilizatorului
|
||
```
|
||
📁 Domeniu detectat: backend (bazat pe src/api/users.ts, src/api/middleware/auth.ts)
|
||
|
||
Este corect? [y/n/altul]
|
||
```
|
||
|
||
Răspunsuri posibile:
|
||
- **y** → continuă cu domeniul detectat
|
||
- **n** → listează toate domeniile disponibile pentru selecție
|
||
- **altul** sau **nume-nou** → creează domeniu nou (vezi Pas 3)
|
||
|
||
### Pas 3: Creare Domeniu Nou (dacă e cazul)
|
||
|
||
Când utilizatorul introduce un nume de domeniu care nu există:
|
||
|
||
#### 3.1 Propune Patterns Automat
|
||
Bazat pe path-urile din conversație, generalizează:
|
||
```
|
||
scripts/deploy.sh → scripts/**/*.sh
|
||
ansible/roles/web/tasks/main.yml → ansible/**/*.yml
|
||
```
|
||
|
||
Algoritm:
|
||
1. Extrage primele 2 nivele de directoare: `scripts/`, `ansible/`
|
||
2. Extrage extensia: `.sh`, `.yml`
|
||
3. Generează glob: `{dir}**/*{ext}`
|
||
|
||
#### 3.2 Prezintă pentru Confirmare
|
||
```
|
||
📁 Domeniu nou: "devops"
|
||
|
||
Bazat pe fișierele din conversație, propun aceste patterns:
|
||
scripts/**/*.sh
|
||
ansible/**/*.yml
|
||
|
||
Accept? [y/edit/+more]
|
||
```
|
||
|
||
#### 3.3 Salvează Domeniul
|
||
- Adaugă în `.claude/rules/claude-learn-domains.md`
|
||
- Creează `.claude/rules/claude-learn-{domain}.md` cu frontmatter
|
||
|
||
### Pas 3.5: Detectare Semnal de Salvare
|
||
|
||
**CRITIC**: Înainte de a propune lecții, verifică dacă există SEMNAL CLAR că lecția merită salvată.
|
||
|
||
#### Categorii de Semnal (în ordine de prioritate)
|
||
|
||
##### A. Comandă Explicită (Source: explicit, Confidence: high) - SCOR: +100
|
||
|
||
Caută în mesajele utilizatorului fraze de tip "ține minte":
|
||
|
||
**Română:**
|
||
- "ține minte", "memorează", "reține", "să nu uiți", "notează-ți"
|
||
- "salvează asta", "adaugă în memorie"
|
||
|
||
**Engleză:**
|
||
- "remember", "remember this", "don't forget", "keep in mind"
|
||
- "note this", "save this"
|
||
|
||
**Acțiune:** Salvează IMEDIAT cu source=explicit, confidence=high
|
||
|
||
##### B. Preferință Explicită (Source: explicit, Confidence: high) - SCOR: +80
|
||
|
||
Caută pattern-uri de tip regulă permanentă:
|
||
|
||
**Română:**
|
||
- "întotdeauna fă X", "niciodată nu Y", "mereu să fie Z"
|
||
- "de acum înainte", "regula e că", "standard e să"
|
||
|
||
**Engleză:**
|
||
- "always do X", "never do Y", "from now on"
|
||
- "the rule is", "standard is to", "we always"
|
||
|
||
##### C. Corecție Repetată (Source: repeated, Confidence: high) - SCOR: +70
|
||
|
||
Detectează când utilizatorul corectează ACEEAȘI problemă de mai multe ori:
|
||
|
||
**Română:**
|
||
- "nu, fă-o așa", "greșit, e X nu Y", "am mai spus"
|
||
- "din nou", "încă o dată", "iar ai făcut", "te-am corectat"
|
||
|
||
**Engleză:**
|
||
- "no, do it like this", "wrong, it's X not Y", "I said before"
|
||
- "again", "once more", "I already told you"
|
||
|
||
**Condiție:** Găsește 2+ corecții pe același subiect → salvează cu source=repeated
|
||
|
||
##### D. Referință Istorică (Source: inferred, Confidence: medium) - SCOR: +50
|
||
|
||
Când utilizatorul referă discuții anterioare:
|
||
|
||
**Română:**
|
||
- "cum am discutat", "așa cum am făcut data trecută", "nu uita că"
|
||
- "știi deja", "am stabilit că", "după cum știi"
|
||
|
||
**Engleză:**
|
||
- "as we discussed", "like we did before", "don't forget that"
|
||
- "you know", "we agreed", "as you know"
|
||
|
||
**Acțiune:** Salvează CU VERIFICARE - întreabă utilizatorul dacă vrea să salveze
|
||
|
||
##### E. Pattern Dedus din Erori (Source: inferred, Confidence: medium/low) - SCOR: +30
|
||
|
||
Detectare din erori și soluții (comportamentul actual).
|
||
|
||
**Criteriu de Incluziune** (CE să salveze):
|
||
- Eroare care a apărut de mai multe ori în conversație
|
||
- Soluție care rezolvă o clasă de probleme (nu un singur fișier)
|
||
- Configurație care a necesitat research/documentație
|
||
- Workaround pentru bug cunoscut
|
||
|
||
**Criteriu de Excludere** (CE să NU salveze) - SCOR: 0:
|
||
- Fix pentru o greșeală de tipar/typo
|
||
- Eroare de path sau import greșit (one-time fix)
|
||
- Bug specific unui singur fișier fără pattern general
|
||
- Ajustări de valori hardcodate
|
||
- Syntax errors simple
|
||
|
||
#### Calculare Scor de Semnal
|
||
|
||
| Semnal | Puncte |
|
||
|--------|--------|
|
||
| Comandă explicită ("ține minte") | +100 (auto-salvare) |
|
||
| Preferință explicită ("întotdeauna") | +80 |
|
||
| Corecție repetată (2+ ori) | +70 |
|
||
| Referință istorică | +50 |
|
||
| Eroare rezolvată cu pattern general | +30 |
|
||
| Configurație descoperită | +30 |
|
||
| Eroare one-time | +5 |
|
||
| Typo/fix banal | 0 |
|
||
|
||
**Praguri:**
|
||
- **< 30 puncte**: NU se propune (filtrat automat)
|
||
- **30-50 puncte**: Se propune cu ⚠️ "Low confidence"
|
||
- **50-80 puncte**: Se propune normal
|
||
- **80+ puncte**: Marcat ca ⭐ "Recommended"
|
||
|
||
### Pas 4: Generează Propuneri de Lecții (cu Metadata)
|
||
|
||
Pentru fiecare insight identificat cu scor >= 30, generează:
|
||
|
||
#### Patterns (Soluții Repetabile)
|
||
- Abordări care au funcționat bine
|
||
- Configurații utile descoperite
|
||
- Tehnici noi aplicate cu succes
|
||
- Workflow-uri eficiente
|
||
|
||
#### Gotchas (Capcane de Evitat)
|
||
- Erori întâlnite și cum s-au rezolvat
|
||
- Confuzii cauzate de documentație
|
||
- Comportamente neașteptate
|
||
- Anti-patterns descoperite
|
||
|
||
Format extins pentru fiecare insight:
|
||
```
|
||
**[PATTERN/GOTCHA] Titlu Scurt** ⭐ Recommended | ⚠️ Low confidence
|
||
- **Categorie**: patterns | gotchas
|
||
- **Source**: explicit | inferred | repeated
|
||
- **Confidence**: high | medium | low
|
||
- **Scor**: {punctaj}
|
||
- **Semnal detectat**: "{fraza/contextul care a declanșat}"
|
||
- **Descriere**: Ce s-a învățat
|
||
- **Context**: În ce situație e relevant
|
||
- **Exemplu**: Cod sau pași concreți
|
||
- **Tags**: [tag1, tag2, tag3]
|
||
```
|
||
|
||
### Pas 5: Prezintă Utilizatorului (Extins)
|
||
|
||
```
|
||
📚 Am identificat {N} lecții din această conversație:
|
||
|
||
⭐ RECOMANDATE (semnal puternic):
|
||
|
||
1. [PATTERN] {Titlu} (explicit: "întotdeauna fă X")
|
||
{Descriere scurtă}
|
||
|
||
2. [GOTCHA] {Titlu} (repeated: corectat de 3 ori)
|
||
{Descriere scurtă}
|
||
|
||
⚠️ POSIBILE (semnal slab):
|
||
|
||
3. [PATTERN] {Titlu} (inferred: eroare rezolvată)
|
||
{Descriere scurtă}
|
||
|
||
❌ EXCLUSE (one-time fixes, nu se salvează):
|
||
- Fix typo în auth.ts
|
||
- Import path corectat în utils.ts
|
||
|
||
📁 Domeniu: {domain}
|
||
|
||
Care dintre acestea vrei să le salvez?
|
||
- [1, 2] - Selectează specific (implicit: doar recomandate)
|
||
- [1, 2, 3] - Include și cele cu semnal slab
|
||
- [all] - Toate (inclusiv cele slabe)
|
||
- [none] - Niciuna
|
||
- [edit N] - Modifică propunerea N
|
||
```
|
||
|
||
### Pas 6: Salvează în Fișierul Domeniului (Format Minimalist v3.0)
|
||
|
||
Salvează în `.claude/rules/claude-learn-{domain}.md`
|
||
|
||
Dacă fișierul nu există, creează-l din template cu comentariu HTML pentru paths.
|
||
|
||
#### Format Pattern (minimalist):
|
||
```markdown
|
||
## P: {Titlu max 60 char}
|
||
@{YYYY-MM-DD} #{tag1} #{tag2} | {source}:{confidence}
|
||
{Descriere 1-2 propoziții}
|
||
\```{language}
|
||
{cod opțional}
|
||
\```
|
||
```
|
||
|
||
Exemple metadata:
|
||
- `@2026-01-06 #git #workflow | explicit:high` (nou, fără reinforced)
|
||
- `@2026-01-05 #vue #reactivity | inferred:med:3` (cu 3 reinforcements)
|
||
|
||
#### Format Gotcha (minimalist):
|
||
```markdown
|
||
## G: {Titlu max 60 char}
|
||
@{YYYY-MM-DD} #{tag1} #{tag2} | {source}:{confidence}
|
||
**P**: {problema scurtă}
|
||
**S**: {soluția scurtă}
|
||
```
|
||
|
||
**Reguli format:**
|
||
- Titlu: max 60 caractere, imperativ
|
||
- Tags: max 3, inline cu `#`
|
||
- Confidence: `high`, `med`, `low`
|
||
- Reinforced: afișat DOAR dacă > 0, format `:N` la final
|
||
- Fără separatori `---` între entries
|
||
- Fără secțiune Statistics (calculat dinamic de `/learn:status`)
|
||
|
||
### Pas 7: Confirmă
|
||
|
||
```
|
||
✅ Salvat în claude-learn-{domain}.md:
|
||
- {N} patterns adăugate
|
||
- {M} gotchas adăugate
|
||
📈 Entries reinforced: {X}
|
||
```
|
||
|
||
**Notă:** Statisticile se calculează dinamic cu `/learn:status`.
|
||
|
||
---
|
||
|
||
## Argument: $ARGUMENTS
|
||
|
||
Dacă argumentul este:
|
||
- `auto` sau gol → detectează toate categoriile
|
||
- `patterns` → focus doar pe patterns
|
||
- `gotchas` → focus doar pe gotchas
|
||
|
||
---
|
||
|
||
## Compatibilitate Înapoi
|
||
|
||
### Format v2.x (verbose)
|
||
Entries în format vechi (cu `### Titlu`, `**Discovered**:`, `**Source**:`, etc.) sunt citite normal.
|
||
La prima editare, sunt convertite automat la formatul minimalist v3.0.
|
||
|
||
### Parsing Entries v3.0
|
||
Regex pentru parsing:
|
||
```
|
||
^## (P|G): (.+)$ → type, title
|
||
^@(\d{4}-\d{2}-\d{2}) (.+) \| (.+)$ → date, tags, meta
|
||
```
|
||
|
||
Tags: extrage toate `#(\w+)` din linia metadata
|
||
Meta: `{source}:{confidence}[:{reinforced}]`
|