# Progres — atm-curs-dl (actualizat 2026-09-14, 06:45 UTC — predare, 13 transcrieri nerecoltate) 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. PORNEȘTE DE AICI — Analiza Zilnica e TERMINATA (14.09.2026) **Toate cele 10 documente sunt scrise, verificate de agenti care nu le-au scris, reparate si comise. Niciun agent nu ruleaza. Repo curat, pushat.** | Document | Diagrame | Generator | |---|---|---| | 01 buy doji si strategia MICI | 6 | `gen/az_buy_doji_mici.py` | | 02 MBT-10 | — | `gen/az_mbt10.py` | | 03 locul crimei si pullback | 6 | `gen/az_pullback.py` | | 04 pivoti si proiectii | 11 | `gen/az_pivoti.py` | | 05 volum | 11 | `gen/az_volum.py` | | 06 structura de trend si patternuri | 17 | `gen/az_structura.py` | | 07 context de piata | 11 | `gen/az_context.py` | | 08 executie si risc | 10 + tabel | `gen/az_executie.py` | | 09 earnings si optiuni | 10 | `gen/az_earnings.py` | | 10 sinteza | 3 | `gen/az_sinteza.py` | Commit-uri: `01c2018` 04, `60cd378` 05, `08d2b8e` 06, `dfc4990` 07, `303e9a4` 08, `994ded8` 09, apoi reparatiile `890f944` 07, `646205e` 04, `4383e50` 08+09, `790af51` 05, `b805d66` 06, `3c437ed` harvest+01, si `c2d7c94` sinteza + pagina regenerata (91 de pagini, 0 link-uri rupte). ### CE A RAMAS DE FACUT, in ordine 0. **PRIMA SARCINA: 13 transcrieri AZ nerecoltate.** Gasit la inventar pe 14.09.2026, nu era notat nicaieri inainte. Sunt **24 de transcrieri** in `transcripts/08_ANALIZĂ_ZILNICĂ/`, dar `harvest/` are doar **11 fisiere**. Nerecoltate (au venit din coada de fundal, comise in `ac4898b` chiar inainte de sesiunea din 14.09, si nimeni nu le-a trecut sistematic prin recoltare): | Fisier | Data | |---|---| | `13_14082026.txt` | 14.08.2026 | | `14_13082026.txt` | 13.08.2026 | | `15_11082026.txt` | 11.08.2026 | | `16_06082026.txt` | 06.08.2026 | | `17_05082026.txt` | 05.08.2026 | | `18_04082026.txt` | 04.08.2026 | | `19_03082026.txt` | 03.08.2026 | | `20_31072026.txt` | 31.07.2026 | | `21_30072026.txt` | 30.07.2026 | | `22_29072026.txt` | 29.07.2026 | | `23_28072026.txt` | 28.07.2026 | | `24_27072026.txt` | 27.07.2026 | | `25_24072026.txt` | 24.07.2026 | Recoltate deja, nu le relua: 09-10, 09-04, 09-03, 09-02, 08-25, 08-24, 08-21, 08-20, 08-19, 08-18, 08-17. **De ce merita:** e material deja transcris, pe disc, necitit. Userul a inchis recoltarea la saturatie, dar saturatia a fost **presupusa**, nu verificata pe astea. Un singur agent le trece prin recoltare si spune daca apare vreo regula noua sau doar confirma saturatia. Daca nu apare nimic, ai confirmarea ca decizia a fost buna. **Cum:** un agent, formatul recoltelor existente din `harvest/` ca model (citeste 2-3 inainte), fisierele citite selectiv cu `sed -n` pe bucati, nu integral. Cere-i explicit sa spuna, pentru fiecare zi, **daca aduce ceva nou fata de cele 11 recolte existente sau doar confirma** - asta e raspunsul de care ai nevoie, nu recoltele in sine. Fara commit. **Atentie:** transcrierile astea au fost deja atinse punctual de agentii de reparatii (rep04 a verificat un citat in `22_29072026.txt`, rep06 in `03_04092026.txt`), deci unele citate din documente trimit deja la ele. Daca apare o regula noua, verifica intai daca nu e deja in vreun document sub alta forma. **Daca apar reguli noi:** NU rescrie documentele. Noteaza-le si intreaba userul - cele 10 documente sunt scrise, verificate si comise, iar el a aprobat formatul. O regula noua se adauga tintit, in documentul ei, nu printr-o rescriere. 1. **Arata-i userului documentele.** A cerut accent pe desen; sunt 85 de diagrame, toate generate din preturi cu assert pe niveluri. Pagina: https://claude-agent.tailf7372d.ts.net/atm/08_ANALIZA_ZILNICA/10_sinteza.html (sinteza e intrarea buna - are cele 54 de trimiteri spre restul). 2. **Trei intrebari deschise pentru user**, toate marcate ca neconfirmate in documente: - **PAM / PPAM** - nivel de suport in patru zile diferite, langa pivotul monthly, neidentificat din transcrieri; - **"pivot + 2"** (10.09) - ambiguu: +2% pe zi sau zona pivot-R2; - **"proiectie neutra"** (03.09) - nedefinita in sesiuni. Restul celor 8 intrebari deschise sunt in `10_sinteza.md`, secțiunea de intrebari deschise (intre ele definitia MBT-10 si ce pivot se foloseste pe weekly la strategia MICI). 3. **Datorie tehnica, nici una urgenta:** - **`PChart` e copiata in 6 generatoare.** Bug-ul din `spread()` (SMA care se termina exact pe o linie de pivot facea ca fiecare eticheta de sub ea sa alunece cu o poziție) e reparat DOAR in `gen/az_pivoti.py`. Copiile din az_volum, az_structura, az_context, az_executie, az_earnings, az_sinteza au versiunea veche. Nicio diagrama comisa nu sufera de el (verificat vizual), deci nu l-am propagat - ar fi insemnat 6 fisiere reeditate si re-verificate la final, pentru zero castig functional. Daca scrii un generator nou, copiaza clasa din `az_pivoti.py`. - **`Level(p, text, color, "left")` pune "left" in `dash`, nu in `label_at`**, tacut. Trei agenti au pierdut timp pe asta azi. Merita o garda in `svg_candles.py` care sa crape pe un `dash` necunoscut, in spiritul gardelor din `render_html.py` si `transcribe.py`. **Nu e pusa** - am amanat-o cat lucrau agentii, si dupa aia nu mai avea cine sa o testeze pe un generator viu. - **`svg_candles.py` limiteaza etichetele la 14px sub corpul graficului**, deci o eticheta de bara nu poate sta intre candela si o linie de SL lipita de ea (raportat de rep05 la 05 svg4, si de rep04 la 04 svg7). 5. **Inventar complet, verificat in repo pe 14.09.2026** (ca sa nu-l mai numere nimeni): | | Lectii | Transcrise | Sumarizate | |---|---|---|---| | Curriculum de baza (M1-M4, Catalizatori, Fundamentala) | 53 | 53 | 53 | | Q&A | 28 | 28 | 27 (+1 duplicat, 18.08 = 11.08) | | Analiza Zilnica | 147 in modul | 24 pe disc | 10 documente de strategie | - **123 din cele 147 de lectii AZ nu sunt descarcate** - decizia userului, saturatie. Vezi punctul 0 inainte sa o confirmi ca definitiva. - **34 de lectii blocate** (`purchase_required`): Modul 5 (7), Modul 6 (6), Master ATM 1-4 (15), cele 6 lectii 1:1. Daca userul primeste acces: `extract_audio.py --only ""` → `transcribe.py` → sumarizare. - **8 lectii neatinse deliberat**: Rezultate Clienti Mentorat (3), Live Trading Room (5). - **862 MB de audio** ramas pe disc in `audio/`, daca vrei spatiul inapoi. Verifica intai ca transcrierea exista si nu e trunchiata. - Nicio coada activa, niciun proces de transcriere, nicio transcriere goala sau sub 1KB. 4. **Ce NU s-a facut deliberat:** index tematic pentru Analiza Zilnica. `10_sinteza` cu cele 54 de trimiteri e documentul de intrare, iar `render_html.py` face navigarea si indexul general. Nu dubla. ### CE A FUNCTIONAT, pentru sesiunea urmatoare **Promptul de scriere a unui document** (valul 2 a livrat toate trei documentele dintr-o singura trecere, fara agent de reparatii; valul 1 a cerut cate doi agenti pe document): - da-i **`PChart` din `gen/az_pivoti.py` de la start**, cu "porneste cu ea, nu repara layout-ul la final"; - **`harvest/` se citeste cu `grep -n` pe termenii subiectului**, nu integral - acolo s-a dus jumatate din contextul fiecarui agent din valul 1; - cele trei capcane: argumentul pozitional care ajunge in `dash`, scriptul global de inlocuiri care crapa pe un sir duplicat, si eticheta mutata care nu mai indica bara corecta. **Verificarea cu agenti separati e obligatorie si a fost cea mai profitabila parte a zilei.** Doua rânduri de verificare (verif1 pe 04/05/06, verif2 pe 07/08/09) au gasit **27 de probleme reale** pe care `audit_diagrams.py` nu le prinde niciodata, iar auditul era 0 pe toate sase inainte. Cele mai grave: - **un citat inventat**, in doua documente ("un wedge in compresie cere volum pentru breakout masiv" - el leaga breakout-ul masiv de reintrarea in MBT-10); - **un citat compus cu sensul rasturnat** ("asta nu-mi place" lipit pe o configuratie despre care el spune "asta imi place"); - **o eroare in `harvest/` insusi** (25.08 dadea ca Trigger NU ceva ce el aproba), propagata deja in documentul 01, cel aprobat de user ca model; - **o regula a LUI declarata greșit ca adaugire a autorului** ("volumul conduce pretul" - are o secțiune intreaga in Q&A 11.06.2025, "Asta e strategie de sine statatoare"); - **TP1/TP2 atribuit la Strategia 3, care nu are TP2**, si declarat ca adaugire cand era regula lui din Q&A 11.06.2025; - **o afirmatie care contrazicea sursa citata** ("dupa TP1 stopurile trec la break-even", cand sursa explica de ce a treia poate sta pe stopul initial); - **doua desene care contraziceau textul**: "respins chiar la SMA-200" cand o bara inchidea peste medie, si un exemplu de triple doji cu volum de vanzare in crestere cand regula lui cere acumulare; - **o eticheta de stop scrisa peste linia gap-ului**, deci pe imagine parea ca stopul a fost la alt nivel; - patru parafraze de recolta prezentate ca citate ale lui. **Regula de reparatie care a ieșit din asta:** cand textul si desenul se contrazic, **repara desenul**, nu slabi textul - si pune `assert` pe relatia respectiva, ca sa nu se mai poata contrazice. Asa s-a facut la SMA-200, la triple doji, la potrivirea monthly-weekly din 05 si la hammer-ul din 07. **Doua greseli ale mele, ca orchestrator, de nu repetat:** - am cerut in prompturi `grep -c "SVG:"` = 0 ca verificare. Greșit: marcatorii `…` RAMAN in fisier ca delimitatori, exact ca in modelul 01. Trei agenti au raportat-o ca abatere cand lucrau corect. Verificarea buna e `grep -A1 '` și substituie-i cu un script din output-ul generatorului. 6. `.venv/bin/python audit_diagrams.py summaries/09_QA/.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/.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 /shot.mjs http://localhost:8137/09_QA/.html ` (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 "" 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 6 lecții 1:1 — BLOCATE, verificat pe 13.09.2026.** Modulele `1:1 DANIEL R`, `MG`, `IM`, `LC`, `DR`, `AP` au câte o lecție fiecare, dar API-ul răspunde la toate șase cu 403 `{"reason":"purchase_required"}` (verificat pe cererea directă, nu doar din log). Trec la „Blocat de acces": 28 + 6 = **34 de lecții blocate**. Dacă userul primește acces, se reia cu `extract_audio.py --only ""` 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. **Sample descărcat pe 13.09.2026:** `audio/08_ANALIZĂ_ZILNICĂ/01_10092026.mp3`, 27:57 min, 12.8 MB, păstrat pe disc (`--keep-audio`) pentru fingerprint. Transcrierea a pornit la 16:36 în `tmux az1`, log `transcribe_az_sample.log`, rezultat în `transcripts/08_ANALIZĂ_ZILNICĂ/01_10092026.txt`. **Atenție la ordine:** modulul e listat de la cel mai NOU la cel mai vechi, deci „prima lecție" e din 10.09.2026, nu cea mai veche. `--lectures N` ia primele N, adică cele mai recente. **Capcană:** rulează `transcribe.py` cu `--only 08_ANALIZĂ_ZILNICĂ`. Fără `--only` ia tot ce găsește în `audio/`, inclusiv cele 19 mp3 rămase în `audio/09_Q_and_A*`. Și folosește `.venv/bin/python` — `python3` din sistem n-are `faster_whisper`. --- # 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), cele 6 lecții 1:1 (`1:1 DANIEL R`, `MG`, `IM`, `LC`, `DR`, `AP`) = **34 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:** - **`transcribe.py` creează fișierul .txt gol la start.** Un `git add` pe folderul de transcrieri în timpul cozii comite un stub de 0 bytes (pățit pe 13.09.2026, commit 75d403c cu `04_03092026.txt` gol), iar un agent lansat pe el raportează „nimic de recoltat". Verifică `find transcripts -size 0` înainte de commit și înainte să dai un fișier unui agent. - **`pgrep -f ` într-un wrapper de shell se prinde pe el însuși.** Pe 13.09.2026 un `while pgrep -f audio_fingerprint; do sleep 30; done` lansat prin Bash n-a ieșit niciodată: linia de comandă a shell-ului care rula bucla conține chiar șirul căutat, deci pgrep se găsea pe sine. Coada de transcriere a stat degeaba ~2 ore. Scrie tiparul cu paranteză: `pgrep -f "[a]udio_fingerprint"`, sau așteaptă pe un PID. - **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 `` 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 ``, 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 `` (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. --- # MODULELE DE PE SITE (nume exacte, listate pe 13.09.2026) `--only` compară pe string exact, deci copiază de aici: | # | Nume | Lecții | Stare | |---|---|---|---| | 1 | MODUL 1 | 10 | ✅ | | 2 | CATALIZATORI | 8 | ✅ | | 3 | MODUL 2 | 16 | ✅ | | 4 | MODUL 3 | 6 | ✅ | | 5 | MODUL 4 | 4 | ✅ | | 6 | MODUL 5 | 7 | blocat | | 7 | MODUL 6 | 6 | blocat | | 8 | ANALIZĂ ZILNICĂ | 147 | sample în lucru | | 9 | Q and A | 28 | ✅ complet | | 10 | REZULTATE CLIENȚI MENTORAT | 3 | neatins, decis cu userul | | 11 | 1:1 DANIEL R | 1 | blocat | | 12-15 | MASTER ATM 1-4 | 4+3+5+3 | blocat | | 16 | ANALIZĂ FUNDAMENTALĂ | 9 | ✅ | | 17 | MG | 1 | blocat | | 18 | IM | 1 | blocat | | 19 | LIVE TRADING ROOM | 5 | neatins, decis cu userul | | 20 | LC | 1 | blocat | | 21 | DR | 1 | blocat | | 22 | AP | 1 | blocat | # FIȘIERE CHEIE - `download.py` / `extract_audio.py` — login systeme.io + extragere audio direct din URL. `--only ` 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.**