feat(learn): Explicit frontmatter + compact output messages
- Add explicit header example with HTML paths comment (Pas 6.1) - Add v2.x → v3.0 migration instructions - Compact all output messages (ultra-compact format) - Remove EXCLUSE section from output - Bump version to 3.2.0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -11,7 +11,7 @@
|
|||||||
"name": "learn",
|
"name": "learn",
|
||||||
"source": "./plugins/learn",
|
"source": "./plugins/learn",
|
||||||
"description": "Minimalist memory format with domain-based storage and signal detection",
|
"description": "Minimalist memory format with domain-based storage and signal detection",
|
||||||
"version": "3.0.0",
|
"version": "3.2.0",
|
||||||
"keywords": ["learn", "memory", "patterns", "gotchas", "domains", "minimalist"]
|
"keywords": ["learn", "memory", "patterns", "gotchas", "domains", "minimalist"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "learn",
|
"name": "learn",
|
||||||
"description": "Claude Learn: Minimalist memory format with domain-based storage and signal detection",
|
"description": "Claude Learn: Minimalist memory format with domain-based storage and signal detection",
|
||||||
"version": "3.0.0",
|
"version": "3.2.0",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Romfast Team"
|
"name": "Romfast Team"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,15 +26,11 @@ Dacă fișierul nu există, creează-l din template cu domeniile implicite:
|
|||||||
- Pattern-ul a fost aplicat cu succes
|
- Pattern-ul a fost aplicat cu succes
|
||||||
- Utilizatorul a menționat/confirmat un gotcha salvat
|
- Utilizatorul a menționat/confirmat un gotcha salvat
|
||||||
|
|
||||||
3. Dacă găsește match-uri, actualizează:
|
3. Dacă găsește match-uri, actualizează `Reinforced` count
|
||||||
- Incrementează `Reinforced` count
|
|
||||||
- Actualizează `Last Reinforced` la data curentă
|
|
||||||
|
|
||||||
4. Raportează la final (dacă există):
|
4. Raportează compact (doar dacă există):
|
||||||
```
|
```
|
||||||
📈 Entries validate în această sesiune:
|
Reinforced: "API Error Handling" (4), "Vue Watch" (2)
|
||||||
- [backend] "API Error Handling" - reinforced (3→4)
|
|
||||||
- [frontend] "Vue Watch Pattern" - reinforced (1→2)
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Pas 1: Scanează Conversația
|
### Pas 1: Scanează Conversația
|
||||||
@@ -65,17 +61,11 @@ Pentru fiecare path, verifică contra patterns din config:
|
|||||||
Alege domeniul cu cele mai multe match-uri.
|
Alege domeniul cu cele mai multe match-uri.
|
||||||
Dacă egalitate → preferă în ordine: backend > frontend > database > testing > deployment > global
|
Dacă egalitate → preferă în ordine: backend > frontend > database > testing > deployment > global
|
||||||
|
|
||||||
#### 2.4 Prezintă Utilizatorului
|
#### 2.4 Confirmă Domeniul
|
||||||
```
|
```
|
||||||
📁 Domeniu detectat: backend (bazat pe src/api/users.ts, src/api/middleware/auth.ts)
|
Domeniu: backend [y/n/alt]
|
||||||
|
|
||||||
Este corect? [y/n/altul]
|
|
||||||
```
|
```
|
||||||
|
- `y` → continuă | `n` → listează domenii | `alt`/`nume-nou` → creează nou
|
||||||
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)
|
### Pas 3: Creare Domeniu Nou (dacă e cazul)
|
||||||
|
|
||||||
@@ -93,15 +83,9 @@ Algoritm:
|
|||||||
2. Extrage extensia: `.sh`, `.yml`
|
2. Extrage extensia: `.sh`, `.yml`
|
||||||
3. Generează glob: `{dir}**/*{ext}`
|
3. Generează glob: `{dir}**/*{ext}`
|
||||||
|
|
||||||
#### 3.2 Prezintă pentru Confirmare
|
#### 3.2 Confirmă Patterns
|
||||||
```
|
```
|
||||||
📁 Domeniu nou: "devops"
|
Domeniu nou: devops | scripts/**/*.sh, ansible/**/*.yml [y/edit]
|
||||||
|
|
||||||
Bazat pe fișierele din conversație, propun aceste patterns:
|
|
||||||
scripts/**/*.sh
|
|
||||||
ansible/**/*.yml
|
|
||||||
|
|
||||||
Accept? [y/edit/+more]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 3.3 Salvează Domeniul
|
#### 3.3 Salvează Domeniul
|
||||||
@@ -204,75 +188,64 @@ Detectare din erori și soluții (comportamentul actual).
|
|||||||
- **50-80 puncte**: Se propune normal
|
- **50-80 puncte**: Se propune normal
|
||||||
- **80+ puncte**: Marcat ca ⭐ "Recommended"
|
- **80+ puncte**: Marcat ca ⭐ "Recommended"
|
||||||
|
|
||||||
### Pas 4: Generează Propuneri de Lecții (cu Metadata)
|
### Pas 4: Generează Propuneri de Lecții
|
||||||
|
|
||||||
Pentru fiecare insight identificat cu scor >= 30, generează:
|
Pentru fiecare insight cu scor >= 30, generează format compact:
|
||||||
|
|
||||||
#### 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
|
[P] Titlu scurt #tag1 #tag2
|
||||||
- **Categorie**: patterns | gotchas
|
[G] Titlu scurt #tag1 #tag2
|
||||||
- **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)
|
Intern, păstrează: source, confidence, scor (pentru filtrare).
|
||||||
|
|
||||||
|
### Pas 5: Prezintă Utilizatorului
|
||||||
|
|
||||||
|
Format ultra-compact (fără secțiunea EXCLUSE):
|
||||||
```
|
```
|
||||||
📚 Am identificat {N} lecții din această conversație:
|
{domain} | {N} lecții
|
||||||
|
1. [P] Titlu #tag1 #tag2
|
||||||
⭐ RECOMANDATE (semnal puternic):
|
2. [G] Titlu #tag1
|
||||||
|
Salvez? [y/1,2/n]
|
||||||
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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Răspunsuri: `y` = toate | `1,2` = selectiv | `n` = skip
|
||||||
|
|
||||||
### Pas 6: Salvează în Fișierul Domeniului (Format Minimalist v3.0)
|
### Pas 6: Salvează în Fișierul Domeniului (Format Minimalist v3.0)
|
||||||
|
|
||||||
Salvează în `.claude/rules/claude-learn-{domain}.md`
|
Salvează în `.claude/rules/claude-learn-{domain}.md`
|
||||||
|
|
||||||
Dacă fișierul nu există, creează-l din template cu comentariu HTML pentru paths.
|
#### 6.1 Header Fișier (OBLIGATORIU)
|
||||||
|
|
||||||
#### Format Pattern (minimalist):
|
**Dacă fișierul NU există**, creează-l cu acest header EXACT:
|
||||||
|
```markdown
|
||||||
|
# Claude Learn: {domain}
|
||||||
|
<!-- paths: {patterns_din_domains.md_separate_cu_virgula} -->
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
**Dacă fișierul EXISTĂ dar NU are frontmatter HTML** (linia 2 nu începe cu `<!--`):
|
||||||
|
1. Păstrează entries-urile existente
|
||||||
|
2. Inserează `<!-- paths: ... -->` pe linia 2 (după titlu)
|
||||||
|
3. Citește patterns din `.claude/rules/claude-learn-domains.md`
|
||||||
|
|
||||||
|
**Exemplu header complet:**
|
||||||
|
```markdown
|
||||||
|
# Claude Learn: backend
|
||||||
|
<!-- paths: backend/**/*.py, backend/modules/**/*, requirements.txt -->
|
||||||
|
|
||||||
|
## P: Prima entry...
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 6.2 Validare Format (înainte de salvare)
|
||||||
|
|
||||||
|
Verifică OBLIGATORIU:
|
||||||
|
- [ ] Linia 1: `# Claude Learn: {domain}`
|
||||||
|
- [ ] Linia 2: `<!-- paths: ... -->` cu patterns din domains.md
|
||||||
|
- [ ] Linia 3: linie goală
|
||||||
|
- [ ] Entries în format `## P:` sau `## G:` (NU `### Titlu`)
|
||||||
|
- [ ] Fără secțiune `## Statistics` (calculat dinamic)
|
||||||
|
|
||||||
|
#### 6.3 Format Pattern (minimalist):
|
||||||
```markdown
|
```markdown
|
||||||
## P: {Titlu max 60 char}
|
## P: {Titlu max 60 char}
|
||||||
@{YYYY-MM-DD} #{tag1} #{tag2} | {source}:{confidence}
|
@{YYYY-MM-DD} #{tag1} #{tag2} | {source}:{confidence}
|
||||||
@@ -305,14 +278,9 @@ Exemple metadata:
|
|||||||
### Pas 7: Confirmă
|
### Pas 7: Confirmă
|
||||||
|
|
||||||
```
|
```
|
||||||
✅ Salvat în claude-learn-{domain}.md:
|
Salvat: +{N}P +{M}G în {domain}.md
|
||||||
- {N} patterns adăugate
|
|
||||||
- {M} gotchas adăugate
|
|
||||||
📈 Entries reinforced: {X}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**Notă:** Statisticile se calculează dinamic cu `/learn:status`.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Argument: $ARGUMENTS
|
## Argument: $ARGUMENTS
|
||||||
@@ -330,6 +298,53 @@ Dacă argumentul este:
|
|||||||
Entries în format vechi (cu `### Titlu`, `**Discovered**:`, `**Source**:`, etc.) sunt citite normal.
|
Entries în format vechi (cu `### Titlu`, `**Discovered**:`, `**Source**:`, etc.) sunt citite normal.
|
||||||
La prima editare, sunt convertite automat la formatul minimalist v3.0.
|
La prima editare, sunt convertite automat la formatul minimalist v3.0.
|
||||||
|
|
||||||
|
### Migrare Automată v2.x → v3.0
|
||||||
|
|
||||||
|
Când întâlnești un fișier în format vechi, convertește-l:
|
||||||
|
|
||||||
|
**Header vechi (de eliminat):**
|
||||||
|
```markdown
|
||||||
|
# Claude Learn: Backend
|
||||||
|
|
||||||
|
**Domain**: backend
|
||||||
|
**Last updated**: 2026-01-06
|
||||||
|
**Sessions recorded**: 1
|
||||||
|
|
||||||
|
Knowledge about...
|
||||||
|
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
**Header nou (de creat):**
|
||||||
|
```markdown
|
||||||
|
# Claude Learn: backend
|
||||||
|
<!-- paths: backend/**/*.py, requirements.txt -->
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
**Entry veche (Pattern):**
|
||||||
|
```markdown
|
||||||
|
### ProfileRegistry cu Hot-Reload
|
||||||
|
**Discovered**: 2026-01-06 (feature: xyz)
|
||||||
|
**Description**: Sistem de înregistrare...
|
||||||
|
**Example**: ...
|
||||||
|
**Tags**: registry, hot-reload
|
||||||
|
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
**Entry nouă:**
|
||||||
|
```markdown
|
||||||
|
## P: ProfileRegistry cu Hot-Reload
|
||||||
|
@2026-01-06 #registry #hot-reload | inferred:med
|
||||||
|
Sistem de înregistrare...
|
||||||
|
```
|
||||||
|
|
||||||
|
**Ce să ștergi:**
|
||||||
|
- Separatori `---` între entries
|
||||||
|
- Secțiune `## Statistics` de la final
|
||||||
|
- Header verbose cu `**Domain**:`, `**Last updated**:`, etc.
|
||||||
|
|
||||||
### Parsing Entries v3.0
|
### Parsing Entries v3.0
|
||||||
Regex pentru parsing:
|
Regex pentru parsing:
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user