Files
atm-curs-dl/PROGRESS.md
Claude Agent 0bcec679e7 PROGRESS.md: Q&A terminat, plus doua capcane de orchestrare noi
27 din 27 de sesiuni sumarizate, 28 din 28 transcrise. Raman verificarea
lui 26 si intrarile in INDEX_TEMATIC pentru ultimele patru sesiuni.

Capcanele: un agent poate sta blocat pe o aprobare care nu ajunge
niciodata la orchestrator, iar din afara arata identic cu "lucreaza" —
semnalul e ca fisierul lui nu se mai schimba, deblocarea e Escape in
panoul lui. Si: agentii nu pot trimite pe adresa "main", trebuie sa
raporteze catre "team-lead", altfel raportul ramane pe ecranul lor.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MtSTyTmt6AbCL9j5ajEDm1
2026-09-13 16:31:14 +00:00

410 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Progres — atm-curs-dl (actualizat 2026-09-13, 16:35 UTC)
Pipeline personal de transcriere + sumarizare pentru cursul de trading ATM
(Bogdan Jinga, systeme.io), cont cu acces parțial. Repo: `romfast/atm-curs-dl`
pe Gitea. Pagină publicată (Tailscale, doar în tailnet):
**https://claude-agent.tailf7372d.ts.net/atm/index.html**
---
# CE E DE FĂCUT ACUM (citește asta prima)
## 0. Q&A E TERMINAT — 27 din 27 de sesiuni
Toate cele 28 de lecții Q&A au transcriere, iar toate cele 27 de sesiuni
distincte au sumarizare. (`02_18082026` e duplicatul lui `03_11082026`.)
Coada de transcriere e goală pe ambele mașini și a ieșit singură.
**Ce a mai rămas din Q&A:**
1. **Verificarea lui `26_2025-06-11`** — rulează `verif26` la ora predării.
Dacă sesiunea s-a închis între timp, relansează-l cu promptul din
secțiunea „VERIFICARE CU AGENȚI".
2. **Intrările în `INDEX_TEMATIC.md`** pentru ultimele patru sesiuni:
08.07, 11.06, 28.05 și 27.05.2025. Acoperirea din antetul indexului
trebuie dusă de la 24 la 28. Apoi `render_html.py` și verificarea
link-urilor.
**Verificate față de transcrieri, până acum:** 09.12, 14.10, 23.09, 25.11,
08.09, 04.08, 29.07, 15.07, 08.07, 28.05, 27.05. Rămân neverificate cele
15 sumarizări mai vechi și cele 53 de lecții din module, care au trecut
doar prin auditul mecanic.
**Regulă de conținut stabilită pe 13.09.2026:** o diagramă cu prețuri
construite NU poartă ticker real — titlul e „Exemplu construit (fără
ticker) — <timeframe>". Ticker real doar când desenezi nivelurile reale
din transcriere, și atunci legenda spune explicit ce e al lui și ce e
construit.
**Navigare în pagini, făcută pe 13.09.2026:** breadcrumb sus și
înainte/înapoi jos, generate din `render_html.py`, nu din conținut.
`render_file()` merge în continuare apelat pe un singur fișier — vecinii
vin dintr-un glob pe folder. `short_title()` taie prefixul de modul, ca
să nu se repete în bară și în index.
**Dashboard Echo (moltbot):** are acum o intrare „ATM" în meniu, spre
`https://claude-agent.tailf7372d.ts.net/atm/`. Meniul e într-un singur
loc, constanta `NAV_HTML` din `dashboard/api.py`, injectată la servire.
**Modificarea nu e comisă** în repo-ul echo-core — acolo erau deja
modificări necomise ale altcuiva. Serviciul `echo-taskboard` a fost
repornit, cu acordul userului.
## 1. Sumarizări Q&A — TERMINATE, 27 din 27
**Gata de sumarizat imediat:** niciuna — cele trei rămase (`25`, `26`,
`28`) își așteaptă transcrierea, vezi punctul 2.
`02_18082026` NU se sumarizează — e duplicatul lui `03_11082026`.
Pe 13.09.2026 sumarizate: `09`, `15`, `18`, `11`, `19`, `22`, `23`, `24`,
`27`. `22_04082025` are doar 5 minute de înregistrare — fișierul e scurt
intenționat.
**De verificat când vine `28_27052025`:** e din 27.05.2025, la o zi de
`27_28052025`, și durează cam la fel (~35 min). Rulează
`check_duplicates.py` pe text — audio-ul lui 27 nu mai există local, deci
`audio_fingerprint.py` nu se poate folosi. Sesiunea din 28.05 e despre
overnight pe prop, buy the dip pe M2D, planul de calificare și ATMI.
**Cum se face o sumarizare** — procedura exactă, urmată la toate cele 15:
1. Citește `STYLE.md` integral dacă n-ai făcut-o în sesiunea asta.
2. Citește transcrierea **selectiv**, pe bucăți de ~200 de linii
(`sed -n '1,200p'`), nu integral — sunt 20-35 mii de cuvinte fiecare.
3. Scrie fișierul în `summaries/09_QA/<NN>_<AAAA-LL-ZZ>.md`. Numele vine din
transcriere: `13_28102025.txt` → `13_2025-10-28.md`.
4. **Folosește unealta de scriere (Write), nu heredoc-uri în Bash** — userul
a cerut asta explicit, pentru că heredoc-ul tipărește tot fișierul în
terminalul lui. Pentru corecturi mici (mutat o etichetă, schimbat un preț)
`sed` e în regulă.
5. Pentru diagrame cu candele sau cu entry/SL/TP: **generează-le cu
`svg_candles.py`**, nu le desena de mână. Vezi `gen/patternuri_candele.py`
ca exemplu de folosire.
**Capcană (pățită pe 13.09.2026):** nu e destul să rulezi generatorul —
trebuie să lipești *exact* output-ul lui în `.md`. Am scris o dată SVG-ul
„după" generator, din memorie, și candelele au ieșit sub linia de pivot
deși prețurile spuneau altceva. `audit_diagrams.py` nu prinde asta.
Scrie fișierul cu marcatori `<!--SVG:nume-->` și substituie-i cu un
script din output-ul generatorului.
6. `.venv/bin/python audit_diagrams.py summaries/09_QA/<fisier>.md` →
trebuie să iasă 0 probleme.
7. Randează doar fișierul tău:
`.venv/bin/python -c "from render_html import render_file; from pathlib import Path; render_file(Path('summaries/09_QA/<fisier>.md'))"`
8. **Screenshot pe fiecare SVG și citește-le efectiv** (Read pe .png).
Auditul mecanic nu vede text care stă peste o linie de preț.
`node <scratchpad>/shot.mjs http://localhost:8137/09_QA/<fisier>.html <dir>`
(serverul local rulează pe portul 8137, din `summaries/`; dacă a murit:
`cd summaries && nohup python3 -m http.server 8137 &`)
9. Adaugă intrările în `summaries/09_QA/INDEX_TEMATIC.md`, pe secțiuni.
**Verifică ancorele** — headingurile cu `MP²` dau slug `mp2-...`, nu
`mp-...`, și am ratat asta de două ori.
10. `.venv/bin/python render_html.py` (regenerează tot + index.html), apoi
verifică link-urile interne (scriptul e mai jos), apoi commit + push.
**Verificarea link-urilor interne** (rulează înainte de fiecare commit):
```python
import re, pathlib
bad = []
for f in pathlib.Path("summaries").glob("*/*.html"):
for page, anch in re.findall(r'href="([\w.-]+)\.html#([^"]+)"', f.read_text()):
t = f.parent / f"{page}.html"
if not t.exists() or anch not in set(re.findall(r'id="([^"]+)"', t.read_text())):
bad.append(f"{f.name} -> {page}#{anch}")
print("link-uri rupte:", bad or "niciunul")
```
**Verificare cu agenți — merită, găsește ce auditul nu vede.** Pe 13.09.2026
am pus trei agenți să verifice șase sumarizări față de transcrieri. Au găsit
lucruri pe care `audit_diagrams.py` nu le prinde niciodată:
- etichete de R calculate greșit (2.1R în loc de 2.03R) pe diagrame cu scara
corectă;
- cifre atribuite lui care nu existau în transcriere, sau care erau ale lui
dar cu alt sens (107 era prețul curent, nu vârful);
- stop-uri etichetate cu un procent care nu corespundea nivelului desenat
(78.20 marcat ca −9%, când era −12.6%);
- contradicții între două secțiuni ale aceluiași fișier.
Prompt care a funcționat: dă-i agentului fișierul + transcrierea, cere-i să
verifice pe categorii (cifre, citate, secțiunea de completări, geometria
diagramelor recalculată de mână, contradicții), spune-i explicit că auditul
nu prinde erorile de scară, și cere raport scurt, doar cu probleme + dovezi.
**Atenție la un eșec tăcut:** dacă scriptul care actualizează
`INDEX_TEMATIC.md` crapă (o ghilimea neescapată într-un titlu), verificatorul
de link-uri raportează „niciunul" — pentru că link-urile nici n-au ajuns în
fișier. Confirmă cu `grep -c "<data>" INDEX_TEMATIC.md`.
## 2. Transcrieri în curs — NU le opri
**Local:** `tmux qa_local3`, lucrează la `25_08072025` (2h de audio, pornit
la 08:26 UTC, gata pe la 09:25). Mai are după el: `26_11062025` (~2.9h de
audio, gata pe la 10:50) și `28_27052025` (~35 min, gata pe la 11:10).
Log: `transcribe_qa_local.log`. Viteză măsurată: **0.49x** durata audio.
Un monitor în sesiune raportează când termină fiecare fișier.
**moltbot: a terminat tot.** Ultima lui, `27_28052025`, e adusă și
sumarizată. Nu mai are coadă. Dacă vrei să-l refolosești, pornește cu
`tmux new-session -d -s qa_molt "/root/atm/run.sh"`, nu cu workerul direct.
**Cum aduci transcrierile de pe moltbot:** `./pull_moltbot.sh`
NU folosi `scp` + `find -size -1k -delete` (vezi incidentul de mai jos).
**Când termină amândouă**, mai rămân de transcris: nimic. Toate cele 28 de
lecții Q&A vor avea transcriere.
## 3. După Q&A — ordinea confirmată cu userul
1. **Cele 5-6 lecții 1:1** (modulele 11, 17, 18, 20, 21, 22 — câte o lecție).
Formatul se decide **după** transcriere — nu știm dacă e mentorat personal
(irelevant) sau conținut tehnic. Rulează `extract_audio.py --only "<modul>"`
pentru fiecare.
2. **Analiza Zilnică (147 lecții).** Userul vrea un **sample separat** pe un
fișier, ca să aprobe un template, **înainte** de orice procesare în masă.
Nu porni fără asta.
Rulează `audio_fingerprint.py` pe toate ÎNAINTE de transcriere — acolo un
duplicat costă ore.
---
# STATUS
## Curriculum de bază: 53/53 lecții accesibile — complet
| Modul | Lecții | Status |
|---|---|---|
| Modulul 1 | 10 | ✅ |
| Catalizatori economici | 8 | ✅ |
| Modulul 2 | 16 | ✅ |
| Modulul 3 | 6 (5 video + 1 text) | ✅ |
| Modulul 4 | 4 | ✅ |
| Analiză Fundamentală | 9 | ✅ |
## Q&A: 27 din 27 sumarizate, 28 din 28 transcrise — COMPLET
Sumarizate: 25.08, 11.08, 04.08, 28.07, 28.04, 19.02, 20.01.2026, 09.12,
02.12, 25.11, 18.11, 28.10, 21.10, 14.10, 07.10, 30.09, 23.09, 08.09,
25.08, 18.08, 04.08, 29.07, 15.07, 28.05.2025.
## Blocat de acces (`purchase_required`)
Modul 5 (7), Modul 6 (6), Master ATM 1-4 (15) = **28 de lecții**.
Dacă userul primește acces: `extract_audio.py` → `transcribe.py` → sumarizare.
## Neatins, decis cu userul
Rezultate Clienți Mentorat (3), Live Trading Room (5).
---
# CUM SE LUCREAZĂ (citește `CLAUDE.md` din repo)
Userul a cerut pe 13.09.2026, explicit: **sesiunea principală e doar
orchestrator**. Nu citi tu transcrieri întregi, nu converti tu diagrame în
serie, nu căuta tu prin tot repo-ul — lansează agenți și citește rapoartele.
Regulile complete, inclusiv ce se pune în promptul fiecărui agent, sunt în
`CLAUDE.md`.
**Prag de context: 250k.** Un hook (`.claude/hooks/context_guard.py`) anunță
când s-a depășit. Atunci: salvezi `PROGRESS.md`, comiți, închizi agenții
terminați, predai sesiunea. Aceeași instrucțiune se pune și în promptul
agenților.
# DIAGRAME: standardul nou (cerut de user pe 13.09.2026)
Userul citește diagramele ca să vadă **trendul** și să facă analogie cu un
grafic real din TradingView. Candelele izolate cu spații mari între ele nu
arată ca un grafic. Regula completă e în `STYLE.md`, secțiunea „Cum trebuie
să arate un grafic de preț"; pe scurt:
- serie continuă de **25-45 de bare** (`gap=15-18`, `body_w=9-10`), cu
open-ul fiecărei bare = close-ul precedentei;
- **panou de volum** (`vol_h=70`) când textul vorbește despre volum;
- **medie mobilă** (`mas=[MA(20, ...)]`) când vorbește despre trend/SMA;
- etichete ancorate pe candele cu `marks=[Mark(i, ...)]`, nu `tag` per
candelă; `title="SIMBOL — timeframe"` sus;
- **`assert` în generator** pe fiecare nivel afirmat în text.
Stilul vechi (3-6 candele izolate) rămâne valabil **doar** pentru definiții
de o singură candelă (ce e un doji, ce e un marubozu).
`gen/exemplu_grafic_real.py` e referința de copiat. `svg_candles.py` are
acum `from_closes()` (controlezi structura exact din close-uri), `walk()`,
panou de volum, `MA`, `Mark`, `title` și `Level.label_at`.
**Ce s-a convertit pe 13.09.2026:** ~215 diagrame, tot materialul — 8
fișiere Q&A plus Modulele 1-4, Catalizatori și Analiză Fundamentală.
Neconvertite deliberat, cu motiv tehnic: pivoții în trepte de la MP², TICUS
de la MBP (generatorul n-are panou de indicator cu benzi Bollinger),
diagrama FTNT cu RSI+Stochastic, barele de order flow, locatoarele mici și
schemele conceptuale.
# VERIFICARE CU AGENȚI (merită, găsește ce auditul nu vede)
Pe 13.09.2026 trei agenți au verificat șase sumarizări față de transcrieri
și au găsit 14 probleme reale pe care `audit_diagrams.py` nu le prinde
niciodată: etichete de R calculate greșit pe diagrame cu scara corectă,
cifre atribuite lui care nu existau în transcriere, un stop etichetat −9%
care era de fapt −12.6%, o intrare short descrisă sub un low pe care
desenul îl punea deasupra, și contradicții între două secțiuni ale
aceluiași fișier.
**Prompt care a funcționat:** dă-i agentului fișierul + transcrierea, cere-i
să verifice pe categorii (A cifre atribuite lui, B citate, C secțiunea de
completări, D geometria diagramelor **recalculată de mână**, E contradicții
interne, F referințe), spune-i explicit că auditul nu prinde erorile de
scară, și cere raport scurt: doar probleme, cu dovezi, „ok" pe categoriile
curate.
**Capcane de orchestrare, pățite:**
- **Nu da `git add -A` cât timp agenții lucrează.** Am comis de două ori
munca în zbor a altui agent. Comite doar folderele agenților care au
raportat că au terminat.
- Panourile tmux se termină: peste ~10 agenți concurenți, `Agent` dă „no
space for new pane". Închide-i pe cei care au terminat, cu
`SendMessage {"type": "shutdown_request"}`.
- Un agent poate lansa la rândul lui un sub-agent care scrie în aceleași
fișiere. Verifică ce e în repo, nu ce spune raportul.
- **Un agent poate sta blocat pe o aprobare care nu ajunge la tine.** Pe
13.09.2026 `sum26` a stat două ore în „Waiting for team lead approval",
iar cererea n-a apărut niciodată în sesiunea principală. Din afară arată
identic cu „lucrează": `ListAgents` îl dă viu, iar mesajele trimise cu
`SendMessage` nu-l deblochează. Semnalul real e că fișierul lui nu se mai
schimbă. Diagnostic: `tmux list-panes -a -F "#{pane_id} #{pane_title}"`
apoi `tmux capture-pane -p -t %NN`. Deblocare: `tmux send-keys -t %NN
Escape`. Pune în promptul fiecărui agent „nu cere aprobări, ai mandat
complet pe fișierul tău".
- **Agenții nu pot trimite pe adresa `main`** — le răspunde „main te
adresează pe tine". Scrie-le în prompt să raporteze către `team-lead`.
Altfel raportul rămâne pe ecranul lor și nu îl vezi niciodată.
- **Un agent dintr-o sesiune veche poate fi încă viu.** Pe 13.09.2026 un
agent rămas din sesiunea precedentă (`suma-24`) scria în
`summaries/09_QA/24_2025-07-15.md` în același timp cu cel lansat de mine.
Au ieșit două versiuni diferite ale aceluiași fișier (8 diagrame vs. 4),
iar commit-ul meu a prins fișierul la mijlocul scrierii, cu marcatorii
`<!--SVG:...-->` nesubstituiți — deci fără nicio diagramă. Rulează
`ListAgents` ÎNAINTE să lansezi agenți pe un fișier, și verifică
`grep -c "SVG:"` (trebuie 0) înainte de commit.
# UNELTE (scrise în sesiunea asta — folosește-le)
| Fișier | Ce face |
|---|---|
| `svg_candles.py` | Generează diagrame de candele **din prețuri**, cu o singură scară px/unitate. Din 13.09.2026: serii continue (`from_closes`, `walk`), panou de volum, medii mobile, etichete ancorate. Are `selftest`. |
| `audit_diagrams.py` | Verificare mecanică: text tăiat de viewBox, texte suprapuse, linii goale în `<svg>`, raport preț-vs-pixeli pe diagramele cu 3 niveluri. |
| `check_duplicates.py` | Duplicate pe transcrieri. Are `--selftest`. |
| `audio_fingerprint.py` | Duplicate pe audio, **înainte** de transcriere. Amprentă = RMS pe ferestre de 1s, corelat peste decalaje. Validat: 1.000 pe duplicat, 0.038 pe sesiuni diferite. |
| `pull_moltbot.sh` | Aduce transcrierile de pe moltbot în siguranță (staging + mutare doar peste 1KB). |
| `extract_text_lessons.py` | Lecțiile FĂRĂ video (`extract_audio.py` le sare). |
| `gen/patternuri_candele.py` | Regenerează `01_MODUL_1/05_patternuri_candele.md` întreg. Diagramele de acolo NU se editează de mână. |
| `gen/exemplu_grafic_real.py` | Referința pentru stilul „grafic real": serie continuă + volum + SMA + etichete ancorate, cu assert pe structură. |
**Gărzi adăugate în cod:**
- `render_html.py` — crapă dacă găsește o linie goală într-un `<svg>`
(rupe blocul HTML tăcut și diagrama se randează pe jumătate).
- `transcribe.py` — verifică nr. de cuvinte vs. durata audio înainte ca
apelantul să șteargă audio-ul; și sare peste fișierele dispărute între timp.
---
# INCIDENTE ȘI CAPCANE (nu le repeta)
## Duplicat în curs
**Q&A 18.08.2026 = 11.08.2026**, aceeași înregistrare sub două date.
Verificat: durată identică, transcrieri 86.5% identice, amprentă audio 1.000.
Sumarizată o singură dată, sub 11.08.2026, cu notă în fișier și în index.
Scanat tot modulul Q&A: **un singur duplicat**.
Atenție: 13 și 16 diferă cu 0.288s dar sunt sesiuni **diferite** — verificat
prin transcrierea unor felii de 200s.
## Transcriere pierdută dintr-un `find -delete`
Am rulat `find transcripts/ -size -1k -delete` cât `transcribe.py` scria în
același director. `faster_whisper` scrie bufferat — o transcriere de o oră
stă sub 1KB minute în șir. `find` a șters fișierul de sub proces, Python a
logat „Transcribed" pe un inode dispărut, iar audio-ul a fost șters.
Lecția 11 s-a pierdut complet și a trebuit re-descărcată.
→ Folosește `pull_moltbot.sh`. Garda din `transcribe.py` acoperă restul.
## moltbot moare fără urmă în loguri
Pe 2026-09-12 la 19:55, procesul python ȘI serverul tmux au dispărut, fără
traceback, fără OOM în loguri (containerul nu vede `dmesg`), fără reboot.
Probabil OOM nelogat — 8GB, `medium` int8. Coada s-a oprit 90 de minute.
→ `cpu_threads` scăzut la 4 și `/root/atm/run.sh` relansează workerul de
până la 40 de ori. Pornește cu `tmux new-session -d -s qa_molt "/root/atm/run.sh"`,
NU cu workerul direct.
## Coada locală oprită de un fișier mutat
`transcribe.py` își face lista o singură dată la start. Un fișier mutat la
rebalansare a oprit toată coada 13 ore mai târziu, cu `FileNotFoundError`.
→ Reparat, sare peste fișierele dispărute.
## Tailscale SSH expiră
Accesul la moltbot cere reautentificare periodic. Când apare
`# To authenticate, visit: https://login.tailscale.com/a/...`, dă link-ul
userului. Workerul de pe moltbot rulează independent de accesul SSH.
## A/B pe modele — nu-l repeta
`whisper-small-ro-cv11-int8` (fine-tunat RO, există pe moltbot) e
**inutilizabil**: „MP4 short" → „empe patrat şort", „PDF" → „pe-defect".
Fine-tunat pe Common Voice (vorbire citită), se rupe pe live Zoom cu jargon
englezesc. `medium` generic câștigă și nu e nici mai lent.
---
# CE A CERUT USERUL EXPLICIT
- **Format Q&A**: un fișier per sesiune, structurat pe **subiecte** cu titluri
descriptive (nu pe dată), plus `INDEX_TEMATIC.md` care adună toate
întrebările pe temă. Întrebările administrative se aruncă, cu o linie la
final despre câte.
- **Diagrame doar unde adaugă ceva** — nu pentru răspunsuri de proces sau
psihologie. La intro-uri și workshop-uri NU forța diagrame.
- **Diagramele trebuie să fie proporționale cu textul.** Reclamat explicit pe
`01_MODUL_1/05_patternuri_candele.md`: o țintă de 2R desenată la distanța
de 1R. Auditul a găsit același bug în fiecare modul. De aici `svg_candles.py`
și `audit_diagrams.py`.
- **Fiecare concept are nevoie de**: de ce îl urmărești, ce faci când îl vezi,
trigger DA/NU, exemplu complet cu intrare/SL/țintă. Nu doar „așa arată, așa
se numește".
- **Nu scrie fișiere cu heredoc-uri în Bash** — tipărește tot conținutul în
terminalul lui.
- Sample-ul aprobat, referința canonică pentru Q&A:
`summaries/09_QA/01_2026-08-25.md`.
- **Diagramele de preț trebuie să arate ca un grafic real din TradingView**
— linie continuă de preț și volum, ca să se vadă trendul (cerut pe
13.09.2026). Vezi secțiunea „DIAGRAME: standardul nou".
- **Verificarea se face cu agenți**, ca să nu se umple contextul sesiunii
principale (cerut pe 13.09.2026).
---
# CE S-A REPARAT ÎN AUDITUL COMPLET (2026-09-12)
6 agenți Sonnet, câte un modul fiecare, plus verificare independentă de
mine. `audit_diagrams.py`: **0 probleme în toate fișierele**.
Bug-uri reale găsite, pe lângă cele de layout:
- **Bug de scară în fiecare modul**: 4.80R desenat ca 0.91R (divergențe),
1.48R ca 0.47R (PIB), 2.84R ca 1.05R (Power), 6.5x în loc de 1.68x
(scanere), proiecție la 60px când referința era 75px (Inverted H&S).
- **Aritmetică**: spread scăzut de două ori în money management; „risc 5.90,
sub 1:1" când riscul era 1.90 și raportul 1:2.84; tabel Piotroski cu 3
rânduri DA și total declarat 2/9.
- **Conținut**: o diferență de $814M numită „rotunjire" (4.7% din total) în
contul de profit și pierdere; un bar chart care arăta o valoare negativă ca
bară pozitivă; perechea DA/NU de la ATMI desenată cu adâncimi de 2x
diferență, deși lecția spune că diferența e invizibilă cu ochiul.
- **Goluri completate**: JOLTS n-avea secțiune de tranzacționare, Fed avea
doar minuta (nu ziua deciziei de dobândă), MDSRT n-avea de ce/ce faci/DA-NU,
R-multiple și portfolio heat lipseau complet.
**Lecție de proces:** un agent a raportat că a reparat o diagramă — nu o
reparase. Verifică rapoartele, nu le lua pe cuvânt.
---
# FIȘIERE CHEIE
- `download.py` / `extract_audio.py` — login systeme.io + extragere audio
direct din URL. `--only <modul>` ocolește `CORE_MODULES`; `--lectures N`
limitează.
- `transcribe.py` — faster-whisper, CPU, `medium`, int8.
- `render_html.py` — .md → .html, index grupat pe module cu titlurile H1,
extensia `toc` pentru ancore. Rulează după orice modificare.
- `.env` — credențiale (gitignored).
- `STYLE.md` — regulile de format. **Citește-l primul.**