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>
10 KiB
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:
-
Încarcă toate entries din domeniile relevante (bazat pe fișierele din conversație)
-
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
-
Dacă găsește match-uri, actualizează:
- Incrementează
Reinforcedcount - Actualizează
Last Reinforcedla data curentă
- Incrementează
-
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→ backendtests/**/*.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:
- Extrage primele 2 nivele de directoare:
scripts/,ansible/ - Extrage extensia:
.sh,.yml - 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}.mdcu 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):
## 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):
## 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
:Nla 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:
autosau gol → detectează toate categoriilepatterns→ focus doar pe patternsgotchas→ 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}]