feat(learn): Minimalist memory format v3.0 - 60% size reduction

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>
This commit is contained in:
Claude Agent
2026-01-07 00:44:48 +00:00
parent 48378aced4
commit 0207af18f6
8 changed files with 201 additions and 460 deletions

View File

@@ -1,7 +1,7 @@
{
"name": "learn",
"description": "Claude Learn: Session analysis for patterns and gotchas with domain-based memory, selective saving, and memory hygiene",
"version": "2.2.0",
"description": "Claude Learn: Minimalist memory format with domain-based storage and signal detection",
"version": "3.0.0",
"author": {
"name": "Romfast Team"
}

View File

@@ -266,64 +266,53 @@ Care dintre acestea vrei să le salvez?
- [edit N] - Modifică propunerea N
```
### Pas 6: Salvează în Fișierul Domeniului (cu Metadata)
### 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 frontmatter corect.
Dacă fișierul nu există, creează-l din template cu comentariu HTML pentru paths.
Format Pattern (extins):
#### Format Pattern (minimalist):
```markdown
### {Titlu}
**Discovered**: {YYYY-MM-DD} (feature: {context})
**Source**: {source} | **Confidence**: {confidence} | **Reinforced**: 0
**Trigger**: "{fraza care a declanșat salvarea}"
**Description**: {descriere}
**Example** (`{file}:{lines}`):
## P: {Titlu max 60 char}
@{YYYY-MM-DD} #{tag1} #{tag2} | {source}:{confidence}
{Descriere 1-2 propoziții}
\```{language}
{code}
{cod opțional}
\```
**Tags**: {tags}
---
```
Format Gotcha (extins):
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
### {Titlu}
**Discovered**: {YYYY-MM-DD} (feature: {context})
**Source**: {source} | **Confidence**: {confidence} | **Reinforced**: 0
**Trigger**: "{fraza care a declanșat salvarea}"
**Problem**: {problema}
**Solution**: {soluția}
**Tags**: {tags}
---
## G: {Titlu max 60 char}
@{YYYY-MM-DD} #{tag1} #{tag2} | {source}:{confidence}
**P**: {problema scurtă}
**S**: {soluția scurtă}
```
### Pas 7: Actualizează Statistici
**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`)
La sfârșitul fișierului domeniului, actualizează:
- Incrementează Total Patterns/Gotchas
- Actualizează Last Session la data curentă
- Incrementează Sessions Recorded
- Actualizează Total Reinforcements (dacă s-au făcut în Pas 0.5)
### Pas 8: Confirmă
### Pas 7: Confirmă
```
✅ Salvat în claude-learn-{domain}.md:
- {N} patterns adăugate
- {M} gotchas adăugate
📈 Entries reinforced: {X}
Statistici {domain}: {P} patterns, {G} gotchas, {R} reinforcements total
```
**Notă:** Statisticile se calculează dinamic cu `/learn:status`.
---
## Argument: $ARGUMENTS
@@ -337,21 +326,16 @@ Dacă argumentul este:
## Compatibilitate Înapoi
### Format Vechi de Memorie
Dacă există fișierul vechi `claude-learn-memory.md` fără frontmatter:
```
⚠️ Detectat format vechi de memorie (claude-learn-memory.md)
### 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.
Vrei să migrez memoria existentă către noul sistem cu domenii? [y/n]
- y → rulează /learn:import pe fișierul vechi
- n → continuă fără migrare
### Parsing Entries v3.0
Regex pentru parsing:
```
^## (P|G): (.+)$ → type, title
^@(\d{4}-\d{2}-\d{2}) (.+) \| (.+)$ → date, tags, meta
```
### Entries Fără Metadata
Entries vechi fără câmpurile noi (Source, Confidence, Reinforced, Trigger) sunt tratate ca:
- Source: inferred
- Confidence: medium
- Reinforced: 0
- Trigger: ""
La prima editare sau reinforcement, metadata va fi adăugată automat.
Tags: extrage toate `#(\w+)` din linia metadata
Meta: `{source}:{confidence}[:{reinforced}]`

View File

@@ -2,234 +2,130 @@
paths: ".claude/rules/claude-learn-*.md"
---
# Claude Learn Memory Format
# Claude Learn Memory Format v3.0
Acest fișier definește formatul pentru fișierele de memorie per domeniu.
Format minimalist pentru fișierele de memorie.
## Arhitectura Fișierelor
```
.claude/rules/
├── claude-learn-domains.md # Configurația domeniilor
├── claude-learn-backend.md # Memorie backend (paths: src/api/**)
├── claude-learn-frontend.md # Memorie frontend (paths: src/components/**)
├── claude-learn-database.md # Memorie database (paths: src/db/**)
├── claude-learn-testing.md # Memorie testing (paths: **/*.test.ts)
├── claude-learn-deployment.md # Memorie deployment (paths: Dockerfile, *.yml)
└── claude-learn-global.md # Memorie globală (fără paths - mereu încărcat)
├── claude-learn-backend.md # Memorie backend
├── claude-learn-frontend.md # Memorie frontend
├── claude-learn-database.md # Memorie database
├── claude-learn-testing.md # Memorie testing
├── claude-learn-deployment.md # Memorie deployment
└── claude-learn-global.md # Memorie globală (mereu încărcat)
```
## Template Fișier Domeniu
```markdown
---
paths: src/api/**/*.ts, src/server/**/*.ts
---
# Claude Learn: {domain}
<!-- paths: src/api/**/*.ts, src/server/**/*.ts -->
# Claude Learn Memory: backend
Patterns și Gotchas pentru domeniul **backend**.
---
## Patterns
### {Titlu Descriptiv}
**Discovered**: {YYYY-MM-DD} (feature: {context-scurt})
**Source**: {source} | **Confidence**: {confidence} | **Reinforced**: 0
**Trigger**: "{fraza care a declanșat salvarea}"
**Description**: {Descriere clară a pattern-ului și când să-l folosești}
**Example** (`{file}:{lines}`):
\```{language}
{cod exemplu}
\```
**Tags**: {tag1}, {tag2}, {tag3}
---
## Gotchas
### {Titlu Descriptiv}
**Discovered**: {YYYY-MM-DD} (feature: {context-scurt})
**Source**: {source} | **Confidence**: {confidence} | **Reinforced**: 0
**Trigger**: "{fraza care a declanșat salvarea}"
**Problem**: {Ce problemă a apărut}
**Solution**: {Cum s-a rezolvat}
**Tags**: {tag1}, {tag2}, {tag3}
---
## Domain Statistics
- **Total Patterns**: 0
- **Total Gotchas**: 0
- **Total Reinforcements**: 0
- **Last Session**: -
- **Sessions Recorded**: 0
- **Last Cleanup**: -
## P: Titlu pattern concis
@2026-01-06 #tag1 #tag2 | explicit:high
Descriere 1-2 propoziții.
```lang
cod opțional
```
## Template Fișier Global
Fișierul `claude-learn-global.md` NU are frontmatter `paths:` și se încarcă întotdeauna:
```markdown
# Claude Learn Memory: global
Patterns și Gotchas universale, aplicabile tuturor domeniilor.
---
## Patterns
...
## Gotchas
...
## Domain Statistics
...
## G: Titlu gotcha concis
@2026-01-06 #tag1 #tag2 | inferred:med
**P**: Problema scurtă
**S**: Soluția scurtă
```
---
## Format Entry
## Câmpuri Metadata (v2.1.0)
### Header
```
## {P|G}: {Titlu max 60 char}
```
- `P` = Pattern (soluție repetabilă)
- `G` = Gotcha (capcană de evitat)
Fiecare entry include acum metadata pentru tracking și curățare.
### Source
Cum a fost capturat entry-ul:
| Valoare | Descriere | Scor Cleanup |
|---------|-----------|--------------|
| `explicit` | Utilizatorul a cerut explicit salvarea ("ține minte", "remember") | +40 |
| `repeated` | Corecție repetată de 2+ ori pe același subiect | +30 |
| `inferred` | Dedus din conversație (eroare rezolvată, pattern detectat) | -10 |
### Confidence
Nivelul de încredere în utilitatea entry-ului:
| Valoare | Descriere | Scor Cleanup |
|---------|-----------|--------------|
| `high` | Semnal puternic (comandă explicită, corecție repetată) | +20 |
| `medium` | Semnal moderat (preferință inferată, referință istorică) | 0 |
| `low` | Semnal slab (one-time fix posibil util) | -20 |
### Reinforced
Numărul de ori când entry-ul a fost folosit sau validat în sesiuni ulterioare.
| Valoare | Interpretare | Scor Cleanup |
|---------|--------------|--------------|
| 0 | Niciodată folosit | -30 (dacă > 30 zile) |
| 1-2 | Folosit ocazional | +20 |
| 3+ | Entry valoros, foarte folosit | +50 |
### Trigger
Fraza originală care a declanșat salvarea. Util pentru:
- Audit: de ce a fost salvat acest entry?
- Cleanup: context pentru decizia de ștergere
- Debugging: verificare sistem de detecție semnal
---
## Format Pattern (Complet)
```markdown
### {Titlu Descriptiv}
**Discovered**: {YYYY-MM-DD} (feature: {context-scurt})
**Source**: {source} | **Confidence**: {confidence} | **Reinforced**: {count}
**Trigger**: "{fraza care a declanșat salvarea}"
**Description**: {Descriere clară a pattern-ului și când să-l folosești}
**Example** (`{file}:{lines}`):
\```{language}
{cod exemplu}
\```
**Tags**: {tag1}, {tag2}, {tag3}
---
### Metadata (o linie)
```
@{YYYY-MM-DD} #{tag1} #{tag2} #{tag3} | {source}:{confidence}[:{reinforced}]
```
## Format Gotcha (Complet)
| Câmp | Valori | Descriere |
|------|--------|-----------|
| date | YYYY-MM-DD | Data salvării |
| tags | max 3, cu # | Categorii pentru căutare |
| source | explicit/inferred/repeated | Cum a fost capturat |
| confidence | high/med/low | Nivelul de încredere |
| reinforced | N (doar dacă >0) | Câte validări |
```markdown
### {Titlu Descriptiv}
**Discovered**: {YYYY-MM-DD} (feature: {context-scurt})
**Source**: {source} | **Confidence**: {confidence} | **Reinforced**: {count}
**Trigger**: "{fraza care a declanșat salvarea}"
**Problem**: {Ce problemă a apărut}
**Solution**: {Cum s-a rezolvat}
Exemple:
- `@2026-01-06 #git #workflow | explicit:high`
- `@2026-01-05 #vue #reactivity | inferred:med:3`
**Tags**: {tag1}, {tag2}, {tag3}
---
### Body Pattern
```
{Descriere concisă 1-2 propoziții}
```{lang}
{cod opțional}
```
```
---
### Body Gotcha
```
**P**: {problema în max 100 char}
**S**: {soluția în max 100 char}
```
## Source Values
| Valoare | Descriere |
|---------|-----------|
| `explicit` | Utilizatorul a cerut explicit ("ține minte") |
| `repeated` | Corecție repetată 2+ ori |
| `inferred` | Dedus din conversație |
## Confidence Values
| Valoare | Descriere |
|---------|-----------|
| `high` | Semnal puternic, comandă explicită |
| `med` | Semnal moderat, preferință inferată |
| `low` | Semnal slab, one-time fix util |
## Convenții
1. **Titluri**: Folosește titluri descriptive, nu generice
- ✅ "Vue Watch Needs Immediate Flag for Initial Load"
- ❌ "Vue Problem"
1. **Titluri**: Imperativ, descriptiv, max 60 char
- ✅ "Commit .claude/rules în Git"
- ❌ "Problema cu Git"
2. **Tags**: Folosește kebab-case, maxim 5 tags per entry
-`vue`, `reactivity`, `watch`, `initialization`
-`Vue.js`, `REACTIVITY`, `this is a tag`
2. **Tags**: Lowercase, max 3
- ✅ `#git #workflow #team`
- ❌ `#Git, #WORKFLOW`
3. **Exemple**: Include întotdeauna cod exemplu când e posibil
3. **Descrieri**: Concise, 1-2 propoziții
- ✅ "Fișierele .claude/ trebuie incluse în Git pentru partajare."
- ❌ Paragrafe lungi
4. **Context**: Folosește feature name scurt pentru context
-`(feature: user-dashboard)`
-`(feature: implementing the new user dashboard with stats and charts)`
4. **Exemple cod**: Doar când adaugă valoare clară
5. **Frontmatter**: Fiecare fișier de domeniu (exceptând global) TREBUIE să aibă frontmatter cu `paths:`
- Paths-urile trebuie să corespundă cu cele din `claude-learn-domains.md`
## Comparație Format
6. **Trigger**: Păstrează fraza originală, fără modificări
-`"ține minte să folosești camelCase"`
-`"utilizatorul a cerut camelCase"`
| Aspect | v2.x | v3.0 |
|--------|------|------|
| Char/pattern | ~600 | ~200 |
| Metadata linii | 3 | 1 |
| Trigger câmp | Da | Nu |
| Statistics | Explicit | Calculat |
| Separatori | `---` | Spațiu |
---
## Parsing Regex
## Backward Compatibility
Entries vechi fără câmpurile noi sunt tratate ca:
- Source: `inferred`
- Confidence: `medium`
- Reinforced: `0`
- Trigger: `""`
La prima editare sau reinforcement, metadata va fi adăugată automat.
---
## Statistici Domeniu
Fiecare fișier de domeniu include statistici la final:
```markdown
## Domain Statistics
- **Total Patterns**: {N}
- **Total Gotchas**: {M}
- **Total Reinforcements**: {R}
- **Last Session**: {YYYY-MM-DD}
- **Sessions Recorded**: {X}
- **Last Cleanup**: {YYYY-MM-DD}
```
^## (P|G): (.+)$ → type, title
^@(\d{4}-\d{2}-\d{2}) (.+) \| (.+)$ → date, tags_meta, source_conf
```
Aceste statistici sunt actualizate automat de:
- `/learn:analyze` - incrementează patterns/gotchas, sessions
- `/learn:cleanup` - decrementează la ștergeri, actualizează Last Cleanup
- Reinforcement tracking - incrementează Total Reinforcements
Extract tags: `#(\w+)` din tags_meta
Extract meta: split pe `:` → [source, confidence, reinforced?]

View File

@@ -1,60 +1,17 @@
---
paths: {DOMAIN_PATTERNS}
---
# Claude Learn: {DOMAIN_NAME}
<!-- paths: {DOMAIN_PATTERNS} -->
# Claude Learn Memory: {DOMAIN_NAME}
Patterns și Gotchas pentru domeniul **{DOMAIN_NAME}**.
---
## Patterns
<!--
Format pentru patterns:
### Titlu Descriptiv
**Discovered**: YYYY-MM-DD (feature: context)
**Source**: explicit | **Confidence**: high | **Reinforced**: 0
**Trigger**: "fraza originală care a declanșat salvarea"
**Description**: Descriere clară a pattern-ului
**Example** (`file:lines`):
```language
cod exemplu
<!-- Format minimalist v3.0
## P: Titlu pattern (max 60 char)
@YYYY-MM-DD #tag1 #tag2 | source:confidence[:reinforced]
Descriere concisă 1-2 propoziții.
```lang
cod opțional
```
**Tags**: tag1, tag2, tag3
---
## G: Titlu gotcha
@YYYY-MM-DD #tag1 #tag2 | source:confidence
**P**: Problema scurtă
**S**: Soluția scurtă
-->
---
## Gotchas
<!--
Format pentru gotchas:
### Titlu Descriptiv
**Discovered**: YYYY-MM-DD (feature: context)
**Source**: explicit | **Confidence**: high | **Reinforced**: 0
**Trigger**: "fraza originală care a declanșat salvarea"
**Problem**: Ce a mers prost
**Solution**: Cum s-a rezolvat
**Tags**: tag1, tag2
---
-->
---
## Domain Statistics
- **Total Patterns**: 0
- **Total Gotchas**: 0
- **Total Reinforcements**: 0
- **Last Session**: -
- **Sessions Recorded**: 0
- **Last Cleanup**: -

View File

@@ -1,77 +1,34 @@
{
"format_version": "3.0",
"pattern": {
"title": "",
"discovered": "",
"feature": "",
"domain": "",
"description": "",
"example": {
"file": "",
"lines": "",
"language": "",
"code": ""
},
"tags": [],
"type": "P",
"title": "max 60 char, imperativ",
"date": "YYYY-MM-DD",
"tags": ["max", "3", "tags"],
"source": "explicit|inferred|repeated",
"confidence": "high|medium|low",
"confidence": "high|med|low",
"reinforced": 0,
"last_reinforced": "",
"trigger": ""
"description": "1-2 propoziții",
"example": "opțional, cod cu ```lang"
},
"gotcha": {
"title": "",
"discovered": "",
"feature": "",
"domain": "",
"problem": "",
"solution": "",
"tags": [],
"type": "G",
"title": "max 60 char",
"date": "YYYY-MM-DD",
"tags": ["max", "3", "tags"],
"source": "explicit|inferred|repeated",
"confidence": "high|medium|low",
"confidence": "high|med|low",
"reinforced": 0,
"last_reinforced": "",
"trigger": ""
},
"statistics": {
"total_patterns": 0,
"total_gotchas": 0,
"total_reinforcements": 0,
"last_session": "",
"sessions_recorded": 0,
"last_cleanup": ""
"problem": "scurt",
"solution": "scurt"
},
"metadata_format": "@{date} #{tag1} #{tag2} | {source}:{confidence}[:{reinforced}]",
"domains": {
"backend": {
"patterns": ["src/api/**/*.ts", "src/server/**/*.ts", "services/**/*"]
},
"frontend": {
"patterns": ["src/components/**/*.tsx", "src/pages/**/*.tsx", "**/*.css"]
},
"database": {
"patterns": ["src/db/**/*.ts", "migrations/**/*.ts", "**/*.sql"]
},
"testing": {
"patterns": ["**/*.test.ts", "**/*.spec.ts", "tests/**/*"]
},
"deployment": {
"patterns": ["Dockerfile", "docker-compose.yml", "**/*.yml", "infra/**/*"]
},
"global": {
"patterns": []
}
},
"_metadata_fields": {
"source": {
"explicit": "Utilizatorul a cerut explicit salvarea (ține minte, remember)",
"inferred": "Dedus din conversație (eroare rezolvată, pattern detectat)",
"repeated": "Corecție repetată de 2+ ori pe același subiect"
},
"confidence": {
"high": "Semnal puternic (comandă explicită, corecție repetată)",
"medium": "Semnal moderat (preferință inferată, referință istorică)",
"low": "Semnal slab (one-time fix posibil util)"
},
"reinforced": "Numărul de ori când entry-ul a fost folosit/validat în sesiuni ulterioare",
"trigger": "Fraza originală care a declanșat salvarea (pentru audit/cleanup)"
"backend": ["src/api/**/*.ts", "src/server/**/*.ts", "services/**/*"],
"frontend": ["src/components/**/*.tsx", "src/pages/**/*.tsx", "**/*.css"],
"database": ["src/db/**/*.ts", "migrations/**/*.ts", "**/*.sql"],
"testing": ["**/*.test.ts", "**/*.spec.ts", "tests/**/*"],
"deployment": ["Dockerfile", "docker-compose.yml", "**/*.yml", "infra/**/*"],
"global": []
}
}