Files
atm-curs-dl/PROGRESS.md
2026-09-13 07:39:29 +00:00

13 KiB
Raw Blame History

Progres — atm-curs-dl (actualizat 2026-09-13, 07:45 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)

1. Sumarizări Q&A rămase — 6 din 27

Gata de sumarizat imediat: niciuna. Toate transcrierile existente sunt sumarizate. Următoarele apar pe măsură ce cozile termină (vezi mai jos).

02_18082026 NU se sumarizează — e duplicatul lui 03_11082026 (vezi mai jos). Pe 13.09.2026 sumarizate: 09, 15, 18, 11, 19, 22 (ultimele două aduse de pe moltbot în timpul sesiunii). 22_04082025 are doar 5 minute de înregistrare — fișierul e scurt intenționat.

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):

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 23_29072025. Mai are după el: 24, 25, 26, 28. Log: transcribe_qa_local.log. Viteză măsurată: 0.49x durata audio.

moltbot: tmux qa_molt, sub supervizor (/root/atm/run.sh). A terminat 19_08092025 și 22_04082025; lucrează la 27_28052025 (ultima de pe partea lui). Viteză: 1.01x — de două ori mai lent decât local.

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: 21 din 27 sumarizate, 23 din 28 transcrise

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.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).


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. 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ă.

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.

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.