Sari la conținut
megapromotingHai să discutăm

Expertise · Automated content

A pipeline that finds the day's topics on its own, writes the article, translates it into nineteen languages and publishes it — but only after it clears a gate that, when it cannot check, publishes nothing.

The engine is written, complete, and sits in this very site's repository: eight stages, 1,706 lines, a system timer that starts daily at 00:30 UTC. The part that matters is not the generation but the gate: five local checks, ten forbidden phrases, and one further check that looks for client names used without consent, invented figures, and awards we do not hold. If the gate cannot run, nothing is published.

Construit deja„delivered”, pentru că lucrarea există ca fișiere pe care le puteți deschide, nu ca descriere: `scripts/content-engine/` din depozitul megapromoting.com, 17 fișiere, 1.706 linii de TypeScript, unitate systemd cu cronometru, opt etape legate cap la cap și jurnale ale rulărilor. Cu o rezervă pe care o spunem noi, nu o aflați voi: **singura rulare completă din jurnale nu a publicat niciun articol.** Poarta le-a oprit pe toate trei — două pentru că verificarea nu a putut rula deloc, a treia pentru un câmp lipsă din antet. `publish` a rămas gol, IndexNow a primit zero adrese. Rularea a fost locală, pe stația de lucru, și a durat două ore și jumătate, adică peste limita de 60 de minute pusă în unitatea systemd — deci pe server ar fi fost oprită. Nu putem confirma din exterior că motorul rulează azi pe server, și nu o pretindem.

Automatizarea care scrie și publică singură e locul unde se promite cel mai ușor ce nu se poate. Un model scrie o mie de cuvinte convingătoare despre orice, inclusiv despre lucruri care nu s-au întâmplat, și le scrie la fel de fluent. Dacă între model și butonul de publicare nu stă nimic, ai construit o mașină de pus greșeli pe internet, în douăzeci de limbi, în fiecare noapte. Toată lucrarea e în ce stă între.

Fluxul nostru are opt etape. Adună subiecte din surse deschise, le dă o notă de la 0 la 100 pentru cât de potrivite sunt, aruncă tot ce e sub 50, alege primele N cu o regulă de diversitate ca să nu iasă zece articole despre același lucru, scrie articolul în română, îl traduce în nouăsprezece limbi, îl trece prin poartă, și abia apoi publică. Fiecare etapă își scrie costul și rezultatul într-un jurnal, ca o rulare să poată fi reconstituită după.

Poarta are două straturi. Primul e local și nu costă nimic: antetul trebuie să existe și să aibă titlu, descriere și cuvinte-cheie; textul trebuie să treacă de 1.200 de cuvinte; trebuie să aibă cel puțin trei subtitluri, cel puțin trei legături interne și o secțiune de întrebări cu minimum trei perechi; și nu are voie să conțină niciuna dintre cele zece expresii de marketing pe care le-am pus pe listă neagră. Al doilea strat e un model care caută altceva: nume de client fără dovadă de acord, statistici inventate, afirmații greșite despre ce putem face noi, și premii pe care nu le avem — lista celor reale e scrisă în verificare, iar orice altceva se semnalează.

Există aprobare umană în lanț, și o spunem ca argument, nu ca scuză. Articolele care pică verificările dure sunt aruncate, nu publicate. Cele care trec dur, dar primesc semnalări de la verificarea a doua, sunt păstrate marcate, pentru ca un om să se uite. Iar dacă verificarea nu poate rula — pentru că serviciul de modele nu răspunde, de exemplu — articolul e tratat ca picat. Fail-closed, nu fail-open. Asta s-a și întâmplat la singura rulare completă din jurnale, și de aceea nu s-a publicat nimic.

What it covers

The work, piece by piece

Adună subiectele din surse deschise, în paralel, fără să cadă dacă una tace

Opt culegători pornesc deodată: Hacker News, Reddit, Product Hunt, GitHub trending pe trei tăieturi, un set de paisprezece fluxuri RSS și Indie Hackers. Fiecare are propria prindere de eroare, deci o sursă căzută întoarce o listă goală și nu oprește rularea. Rezultatele se unifică, se elimină duplicatele după identificator, apoi se aplică un plafon de opt subiecte per sursă, sortate după viteza de circulație — ca o sursă zgomotoasă să nu inunde etapa următoare.

Notează și aruncă, înainte să cheltuiască pe scris

Fiecare subiect primește o notă de la 0 la 100 pentru cât de potrivit e cu ce facem, plus unghiul propus, industria-țintă și serviciul-țintă. Tot ce e sub 50 se aruncă. Etapa rulează pe un model ieftin, cu patru fire în paralel, tocmai pentru că e etapa care decide pe ce se cheltuie mai departe. Din alegerea finală se scoate încă un strat: prima trecere ia câte un subiect per industrie, ca să nu iasă zece variații pe același fir.

Scrie articolul cu structură impusă, nu liberă

Generatorul primește o structură strictă: 1.500–2.200 de cuvinte în română, antet YAML cu titlu de cel mult 60 de caractere și descriere de 155, un H1 și patru până la șase H2, între trei și cinci legături interne alese dintr-o listă de adrese care există pe site, un citat evidențiat, o secțiune de întrebări compatibilă cu schema FAQPage și un îndemn final. Rulează cu trei fire în paralel, cu buget de cinci minute per articol și plafon de 5.000 de jetoane la ieșire.

Traduce în nouăsprezece limbi, cu un glosar care nu se traduce

Sursa e româna; țintele sunt nouăsprezece, de la engleză, rusă și ucraineană până la arabă, ebraică, hindi, japoneză și chineză simplificată — inclusiv două scrieri de la dreapta la stânga. Regulile sunt explicite în prompt: antetul își păstrează structura, adresele legăturilor interne nu se rescriu și nu se localizează, numerele, unitățile și datele se păstoare, iar termenii de marcă din glosar rămân neatinși. Traducerea merge cu doar două fire în paralel, deliberat — poarta de modele limitează debitul sub sarcină mai mare.

Poarta dură: cinci condiții și zece expresii interzise

Local, fără niciun apel plătit: antetul trebuie să existe și să aibă titlu, descriere și cuvinte-cheie; textul trebuie să depășească 1.200 de cuvinte, numărate după scoaterea blocurilor de cod și a etichetelor; minimum trei subtitluri de nivel doi; minimum trei legături interne către secțiuni care există pe site; o secțiune de întrebări cu cel puțin trei perechi. Plus lista neagră: „game-changing”, „cutting-edge”, „world-class”, „revolutionize”, „synergy” și încă cinci. O singură apariție pică articolul.

Poarta a doua caută exact ce nu poate vedea un contor

Un al doilea model, cu temperatură joasă și răspuns în JSON, primește articolul și caută cinci lucruri: nume de client fără dovadă că a dat acordul, statistici halucinate de tipul unei disponibilități procentuale fără măsurătoare, afirmații inexacte despre ce putem noi face, limbaj de broșură, și afirmații despre unelte terțe care ar lăsa impresia că le deținem, când noi doar le integrăm. Are și lista premiilor pe care le avem cu adevărat — orice premiu în afara listei se semnalează.

Când verificarea nu poate rula, articolul e tratat ca picat

Verificarea a doua are un buget de 90 de secunde, explicit ca să nu blocheze rularea. Dacă expiră sau dacă serviciul de modele nu răspunde, eroarea e prinsă și transformată într-un verdict negativ, nu ignorată. Consecința e importantă și e cea care ne place cel mai mult: un articol nu ajunge public pentru că paznicul a lipsit. S-a întâmplat deja, la singura rulare completă din jurnale — două articole scrise complet nu au fost publicate pentru că verificarea nu s-a putut face.

Publicarea are o singură condiție și trei pași

Publicarea nici nu se apelează dacă zero articole au trecut poarta. Când se apelează: adaugă doar directorul de conținut, se oprește dacă nu are ce comite, face un commit cu data, numărul de articole și numărul de limbi, și încearcă împingerea. Dacă împingerea eșuează, commitul rămâne local și rularea continuă — nu se pierde munca și nu se pretinde că s-a publicat. Notificarea motoarelor de căutare se face doar dacă împingerea a reușit.

Fiecare rulare își lasă socoteala

La final se scrie un raport pe zi: câte subiecte s-au adunat, câte au trecut de notă, câte s-au ales, câte s-au scris, câte traduceri au ieșit, câte au trecut poarta, ce s-a comis și ce s-a împins, ce au răspuns motoarele de căutare, cât a durat, și costul defalcat pe model, cu numărul de apeluri și jetoanele de intrare și ieșire. Raportul e un fișier, nu un panou — se poate citi, arhiva și compara.

What it looks like

The route, step by step.

01

Stabilim ce are voie să scrie și ce nu

Înainte de orice cod: lista subiectelor pe care le acoperim, lista celor pe care nu le atingem, tonul, și lista neagră de expresii. Aici se scrie și lista afirmațiilor pe care motorul nu are voie să le facă despre voi — clienți, cifre, premii, comparații. Livrăm: regulile scrise, în forma în care intră direct în verificare, nu ca document separat care se uită.

02

Pornim doar culegerea și notarea, fără să scriem nimic

Se rulează în mod uscat: se adună subiectele, se notează, se aleg primele, se scrie raportul, și se iese înainte de generare. E ieftin — la o astfel de rulare din jurnalele noastre au fost 24 de apeluri, toate pe modelul mărunt, cu un cost măsurat de aproximativ un cent în total. Se vede exact ce ar fi ales motorul, zi după zi, fără să existe niciun text. Livrăm: rapoartele de rulare uscată și acordul pe ce alege.

03

Scriem și verificăm, dar nu publicăm

Se pornește generarea și poarta, cu publicarea oprită. Aici se calibrează pragurile: dacă toate articolele pică pe lungime, e altceva de reglat decât dacă pică pe legături interne. Aici se vede și ce semnalează verificarea a doua, care e partea cea mai instructivă. Livrăm: articolele generate, verdictele complete cu motivul fiecărei respingeri, și pragurile ajustate.

04

Deschidem publicarea, cu poarta pe loc

Se pornește cronometrul de sistem și publicarea. Ora se alege în afara vârfului, cu o întârziere aleatorie ca rulările să nu se calce; la noi, 00:30 UTC cu până la 30 de minute întârziere, și cu recuperare dacă serverul a fost oprit la ora respectivă. Se pune limita de timp per rulare. Livrăm: unitatea de serviciu și cronometrul, jurnalele, și procedura de oprire.

05

Adăugăm limbile, una câte una

Traducerea e etapa cu cel mai mare consum și cea mai ușor de scăpat de sub control. Se adaugă limbile pe benzi de prioritate, nu toate deodată, și se verifică ce iese în fiecare — mai ales scrierile non-latine, unde regula e ca termenii de marcă să rămână în alfabet latin. Livrăm: glosarul, limbile pornite, și costul măsurat per limbă din jurnalul de rulare.

Opt etape1adunare din optculegători paraleli,fiecare cu prindereproprie de eroare2notare 0–100, aruncăsub 503alegere cudiversitate peindustrie4scriere în română,1.500–2.200 decuvinte5traducere în 19 limbicu glosar neatins6poarta dură, cincicondiții și zeceexpresii interzise7poarta a doua, carecaută clienți, cifreși premii inventate8publicare, doar dacăa trecut măcar unulCând poarta nu poate rula, nu se publică.
Opt etape

Datele

What we touch, where it lives, and how long it stays

The questions anyone with a data protection officer asks — asked here before they do.

Ce intră
Titluri, adrese și fragmente scurte din surse publice — API-uri deschise și fluxuri RSS. Nu se colectează date personale, nu se citesc conturi private și nu se intră după autentificare. Fiecare subiect păstrează sursa, canalul și momentul descoperirii, ca să se poată urmări de unde a plecat un articol.
Unde stau textele
Ca fișiere MDX în depozitul de cod al site-ului, sub `content/daily/{limbă}/{dată}/{slug}.mdx`. Nu într-o bază de date separată. Consecința e că istoricul complet e istoricul git: se vede cine a scris ce, când, și se poate reveni cu o comandă. Fiecare articol are antet propriu, din care pagina publică își compune datele structurate.
Unde stau cheile
Într-un fișier de mediu citit de unitatea systemd la pornire, în afara depozitului de cod. Încărcătorul de mediu nu suprascrie o variabilă deja definită în proces, deci configurația de rulare poate fi înlocuită fără să se atingă fișierul. Apelurile către modele merg prin poarta noastră internă, adresată local pe server.
Jurnalele și cât se păstrează
Un fișier JSON per zi în directorul de jurnale al motorului, plus ieșirea standard și cea de eroare scrise separat în `/var/log`, prin unitatea systemd. Jurnalul zilnic conține verdictele porții per articol, cu motivul exact al respingerii și numărul de cuvinte numărate. Nu conține textul articolelor — acelea sunt în depozit.
Ce nu atinge
Nu atinge conturile voastre de rețele sociale, nu trimite emailuri, nu scrie în CRM. Publicarea înseamnă un commit în depozitul site-ului și o notificare către două motoare de căutare. Dacă vreți publicare pe alte canale, se discută separat, cu aceeași regulă: poartă înainte, nu după.

A case

The night the engine wrote three articles and published none of them

Situația

O rulare completă, cu toate etapele pornite: culegere din surse deschise, notare, alegere, scriere în română, traducere, poartă, publicare. Ținta era mică deliberat, trei articole, ca să se vadă lanțul întreg fără să coste mult.

Ce am construit

Culegerea a adus 24 de subiecte unice după eliminarea duplicatelor și plafonarea per sursă. Notarea a păstrat 18 și a aruncat 6 sub pragul de 50. Regula de diversitate a ales 3, din industrii diferite. Generatorul a scris 3 articole în română. Traducătorul a produs 57 de fișiere. Apoi a intrat poarta.

Ce a ieșit

Niciun articol nu a trecut. Două au picat pentru că verificarea a doua nu s-a putut face deloc — serviciul de modele nu a răspuns în bugetul de 90 de secunde, iar eroarea a fost tratată ca verdict negativ, nu ignorată. Al treilea a picat pe o singură condiție: îi lipsea câmpul de cuvinte-cheie din antet, deși avea 2.478 de cuvinte, adică de două ori pragul minim. Fiindcă niciun articol nu a trecut, publicarea nici nu s-a apelat: commitul a rămas gol, împingerea nu s-a făcut, motoarele de căutare au primit zero adrese. Cele 57 de traduceri au rămas pe disc, nefolosite.

Ce nu spune cazul

Rularea a fost pe stația de lucru, nu pe server — se vede din căile din jurnal — și a durat două ore și jumătate, peste limita de 60 de minute pusă în unitatea systemd. Deci demonstrează două lucruri deodată: că poarta ține, și că lotul zilnic e prea mare pentru limita de timp configurată. Ambele sunt reale și amândouă merită spuse.

Întrebări

What people ask us before they call

Se publică fără ca un om să vadă textul?

Da, dacă alegeți așa — și nu, dacă nu. Motorul poate rula complet automat, iar în modul acesta articolul care trece ambele straturi ale porții ajunge public fără ca cineva să-l fi citit. Dar poarta nu e decorativă: pică articolul pentru lipsa unui câmp de antet, pentru 1.199 de cuvinte în loc de 1.200, sau pentru o singură expresie de pe lista neagră. Iar dacă preferați ca fiecare articol să treacă printr-o pereche de ochi, se oprește publicarea automată și rămâne totul până la etapa de verificare, cu semnalările la vedere. Recomandarea noastră la început e a doua variantă, până când semnalările devin plictisitoare.

Ce se întâmplă când modelul greșește un fapt?

Depinde de ce fel de fapt, și merită spus cinstit că nu toate se prind. Se prind: numele de client pus fără dovadă de acord, statistica inventată de tipul unui procent de disponibilitate fără măsurătoare, afirmația care ar lăsa impresia că deținem o unealtă pe care doar o integrăm, premiul care nu e pe lista celor reale. Nu se prinde: o dată calendaristică greșită dintr-o știre externă, sau o afirmație tehnică despre un produs terț care sună plauzibil. Pentru acelea nu există alt paznic decât un om, și de aceea fiecare articol păstrează în antet sursele din care a plecat — verificarea rămâne posibilă după publicare, iar corectura e un commit.

Cum se oprește fluxul?

Trei feluri, în ordinea vitezei. Oprirea cronometrului de sistem — nu mai pornește nimic mâine. Golirea variabilei care ține cheia de publicare — motorul scrie și verifică, dar notificarea motoarelor de căutare se sare cu un avertisment în jurnal. Și rularea în mod uscat, care se oprește după alegerea subiectelor și nu generează nimic. În plus, o rulare individuală are limită de timp în unitatea de serviciu, cu semnal blând întâi și oprire forțată după.

Motorul rulează acum, pe server?

Nu putem confirma asta din exterior și nu o vom pretinde. Ce putem arăta e codul, unitatea de serviciu, cronometrul, procedura de instalare și jurnalele rulărilor pe care le avem. Singura rulare completă din jurnale a fost pe o stație de lucru, nu pe server — se vede din căile fișierelor — și a durat două ore și jumătate, adică peste limita de 60 de minute din unitatea systemd. Dacă vă interesează starea de azi a instalării noastre, întrebați și verificăm împreună. Preferăm întrebarea asta decât un „da” care se dovedește fals.

Câte articole a publicat până acum?

Din jurnalele pe care le avem: zero. Rularea completă a adunat 24 de subiecte, a păstrat 18 după notare, a ales 3, a scris 3 articole și 57 de traduceri — și poarta le-a oprit pe toate trei. Două pentru că verificarea a doua nu a putut rula deloc, unul pentru un câmp lipsă din antet, deși avea 2.478 de cuvinte, deci trecuse cu mult pragul de lungime. Publicarea nu s-a apelat, motoarele de căutare nu au primit nicio adresă. Am putea să nu vă spunem asta. O spunem pentru că e exact demonstrația de care are nevoie serviciul: poarta chiar oprește.

Nu e „conținut de AI” care strică poziționarea în căutare?

Întrebarea corectă nu e cine a scris, ci dacă textul răspunde la ceva ce cineva chiar caută și dacă e verificabil. De aceea pragurile din poartă sunt puse pe lucruri care se corelează cu utilitatea, nu cu stilul: lungime minimă, structură pe subtitluri, legături interne către pagini care există, secțiune de întrebări. Și de aceea lista neagră conține exact expresiile care semnalează text scris ca să umple spațiu. Ce nu vă promitem e o poziție anume în rezultate — aia depinde de o mulțime de lucruri care nu sunt la noi.

Cât costă o rulare?

Costul se măsoară, nu se estimează: fiecare apel către model își contorizează jetoanele de intrare și ieșire, iar raportul zilnic dă totalul defalcat pe model, cu numărul de apeluri. La rularea uscată din jurnalele noastre: 24 de apeluri pe modelul ieftin. La rularea completă cu trei articole și 57 de traduceri: 32 de apeluri, dintre care 3 pe modelul scump — care au făcut cea mai mare parte din cost. Modelul folosit la fiecare etapă e o variabilă de mediu, deci se poate coborî o etapă pe un model mai ieftin fără să se atingă codul. Cifra în bani depinde de modelele alese și de tarifele lor la momentul rulării.

În ce limbi scrie și ce se întâmplă cu termenii de marcă?

Sursa e româna, țintele sunt nouăsprezece — engleză, rusă, ucraineană, poloneză, germană, italiană, franceză, spaniolă, olandeză, arabă, turcă, ebraică, hindi, japoneză, coreeană, indoneziană, chineză simplificată, portugheză braziliană și cehă. Fiecare limbă are scris în configurație motivul pentru care e acolo. Termenii de marcă și cei tehnici stau într-un glosar și rămân netraduși, inclusiv în arabă, ebraică și scrierile asiatice, unde regula e explicită: se păstrează în alfabet latin. Adresele legăturilor interne nu se localizează niciodată.

Ce nu e gata din ce mi-ați descris?

Trei lucruri, spuse acum ca să nu le descoperiți singuri. Documentația proprie a luat-o înaintea codului pe alocuri — comentariul din capul etapei de notare pomenește un model care nu mai e cel apelat, iar registrul de surse descrie un set de fluxuri RSS mai mare decât cel din listă. A doua: două dintre sursele înscrise în registru sunt marcate active, dar culegătorul lor nu e apelat în funcția care adună tot, deci nu contribuie nimic azi. A treia: rularea completă din jurnale a depășit limita de timp din unitatea de serviciu, ceea ce înseamnă că pe server, cu setările actuale, ar fi fost oprită la jumătate — limita trebuie ridicată sau lotul zilnic micșorat înainte de a porni automat.

Pe ce se sprijină fiecare afirmație de mai sus (26 surse)
  1. Motorul are 17 fișiere și 1.706 linii de TypeScript, în chiar depozitul acestui site:wc -l src/*.ts config/*.ts deploy/* → 1706 total, 06.09.2026
  2. Cronometrul pornește zilnic la 00:30 UTC, cu întârziere aleatorie de până la 30 de minute și recuperare dacă serverul a fost opritcontent-engine.timer:7-10
  3. Unitatea de serviciu limitează o rulare la 60 de minute, cu oprire forțată după încă cinci; jurnalele se scriu separat pentru ieșire și eroricontent-engine.service:22-26
  4. Opt culegători pornesc în paralel, fiecare cu prindere proprie de eroare; duplicatele se elimină după identificator, apoi plafon de 8 subiecte per sursă sortate după vitezăaggregators.ts:241-272
  5. Setul de fluxuri RSS din cod are paisprezece intrăriaggregators.ts:174-189
  6. Notarea aruncă tot ce e sub 50 și rulează cu patru fire în paralelscorer.ts:61-80
  7. Alegerea finală ia întâi câte un subiect per industrie, pentru diversitatescorer.ts:120-136
  8. Comentariul din capul etapei de notare pomenește un model care nu mai e cel apelat — documentația a luat-o înaintea coduluiscorer.ts:2 față de 98
  9. Generatorul impune 1.500–2.200 de cuvinte, titlu de 60 de caractere, descriere de 155, 3–5 legături interne dintr-o listă de adrese existente, citat evidențiat și secțiune de întrebărigenerator.ts:13-80
  10. Generarea: trei fire în paralel, buget de cinci minute per articol, plafon de 5.000 de jetoane la ieșiregenerator.ts:159-162 și 179
  11. Nouăsprezece limbi-țintă plus româna ca sursă, fiecare cu motivul scris în configurație; două scrieri de la dreapta la stângalocales.ts:25-63
  12. Regulile de traducere: antetul își păstrează structura, adresele interne nu se localizează, glosarul de marcă rămâne neatins, iar în scrierile non-latine termenii de marcă rămân în alfabet latintranslator-20.ts:65-83
  13. Traducerea rulează cu doar două fire în paralel, deliberat, pentru că poarta de modele limitează debitul sub sarcină mai maretranslator-20.ts:147
  14. Poarta dură: antet cu titlu, descriere și cuvinte-cheie, minimum 1.200 de cuvinte, minimum 3 subtitluri, minimum 3 legături interne, secțiune de întrebări cu minimum 3 perechiqa-gate.ts:76-93
  15. Zece expresii de marketing interzise; o singură apariție pică articolulqa-gate.ts:32-43 și 90-92
  16. Verificarea a doua caută nume de client fără acord, statistici halucinate, afirmații inexacte despre capacitățile proprii, limbaj de broșură, pretenția de a deține unelte terțe pe care doar le integrăm, și premii din afara listei realeqa-gate.ts:106-119
  17. Verificarea a doua are buget de 90 de secunde; când nu poate rula, eroarea devine verdict negativ, nu e ignoratăqa-gate.ts:102 și 152-162
  18. Publicarea nu se apelează dacă zero articole au trecut poarta; notificarea motoarelor de căutare se face doar dacă împingerea a reușitrun-daily.ts:112-128
  19. Publicarea adaugă doar directorul de conținut, se oprește dacă nu are ce comite, iar dacă împingerea eșuează commitul rămâne local și se raportează ca neîmpinspublisher.ts:34-58
  20. Rularea completă din 18.04.2026: 24 de subiecte adunate, 18 păstrate, 3 alese, 3 scrise, 57 de traduceri, 0 trecute de poartă, commit gol, împingere nefăcută, IndexNow zerodaily-2026-04-18.json:câmpurile aggregated / scoredKept / picked / generated / translated / qaPassed / publish / indexNow
  21. Două articole au picat pentru că verificarea nu a putut rula, al treilea pentru câmpul de cuvinte-cheie lipsă, deși avea 2.478 de cuvintedaily-2026-04-18.json:qaVerdicts[0..2]
  22. Rularea a durat 8.971.663 ms, adică 2 ore și 29 de minute — peste limita de 60 de minute din unitatea systemd; căile din jurnal arată o stație de lucru, nu serveruldaily-2026-04-18.json:elapsedMs și qaVerdicts[].path
  23. Rularea uscată din 18.04.2026: 24 de apeluri pe modelul ieftin, sub trei cenți în totaldaily-2026-04-18-dryrun.json:costs.byModel
  24. Costul se contorizează per apel, cu jetoane de intrare și ieșire, și se defalcă pe model în raportul zilnic; fiecare apel are limită de timp, 120 de secunde implicitlitellm.ts:62-87 și 112-137
  25. Încărcătorul de mediu nu suprascrie o variabilă deja definită în proceslitellm.ts:44
  26. Registrul de surse descrie un set RSS mai mare decât cel implementat, iar unele surse marcate active nu sunt apelate în funcția care adună totsources.ts:56 și 79-89, față de aggregators.ts:256-272

Citările interne arată numele fișierului și linia. Calea completă rămâne în depozitul nostru; o putem parcurge împreună, la cerere.

What would you want to work better?

Tell us about your process. Together we decide what is worth building, what we can connect, and how we check the result.

Hai să discutăm