Cum funcționează?În fiecare dimineață, la 8, un Mac citește Senatul.
De la PDF-ul de pe senat.ro până la pagina pe care o citești: ce rulează, unde rulează și ce verifică codul înainte să publicăm ceva. Până azi, 52 de proiecte urmărite, 194 de documente oficiale citite și 247 de articole de presă verificate.
Lanțul de dimineață
Pasul 1: Senatul. Proiectele noi și PDF-urile lor, citite cu MinerU, cu titluri și tabele; Tesseract verifică fiecare pagină și o preia unde lipsește text. 194 de documente citite, 194 cu OCR.
Pasul 2: Analiza. Gemini, Claude și ChatGPT citesc separat fiecare proiect nou. Apoi motivele avizelor negative CES, cu citate verificate.
Pasul 3: Presa. Cele trei modele caută articole; rămân doar linkurile care trec de cod. 247 de articole. Caută pe web.
Pasul 4: Organizațiile. Scrisori, petiții și puncte de vedere, verificate pe documentul original. 13 poziții. Caută pe web.
Pasul 5: Parlamentarii. Contactele oficiale de pe cdep.ro și senat.ro, cu o cerere pe secundă.
Pasul 6: Rapoartele. Greșelile semnalate de cititori, reverificate de cele trei modele față de textul oficial.
Pasul 7: Memoriile. Documentul .docx al proiectelor noi sau corectate. Numele tău îl completezi în browser.
Pasul 8: Publicarea. Fără date valide nu publicăm. Apoi site-ul static, construit și urcat pe Cloudflare.
Pasul 9: Alertele. Ediția zilei pe e-mail, doar după o publicare reușită și doar cu ce e nou.
Pasul 10: GitHub. Datele zilei intră într-un commit, lângă tot istoricul lor.
Fiecare pas merge și separat. Un pas care eșuează nu le oprește pe celelalte, cu o excepție: dacă verificarea datelor pică, nu publicăm nimic în ziua aceea.
Cine citește legile?Trei modele, fiecare separat.
Gemini, Claude și ChatGPT primesc același text și aceeași cerere. Niciunul nu vede ce au răspuns celelalte. Fiecare dă un scor de la 1 la 10, iar scorul comun e media lor.
- Același text
- Fișa de pe senat.ro, forma inițiatorului (până la 14.000 de caractere) și expunerea de motive (până la 10.000).
- Fără unelte
- Primesc textul în cerere și răspund cu JSON. Nu pot naviga, rula comenzi sau scrie fișiere.
- Cel mult 7 minute
- Dacă un model nu răspunde la timp, scorul comun se face din celelalte.
- Scorurile rămân la vedere
- Pe pagina fiecărui proiect vezi scorul fiecărui model și unde nu sunt de acord.
B563/2026 · textul oficial
Forma inițiatorului și expunerea de motive, ca text, plus fișa de pe senat.ro.
- GeminiGoogle DeepMind9,8/10fără unelte, răspuns în JSON
- ClaudeAnthropic9,7/10fără unelte, răspuns în JSON
- ChatGPTOpenAI9,8/10fără unelte, răspuns în JSON
Scorul comun: media celor trei
Risc ridicat9,8Modelele sunt de acord
Un proiect real, cu scorurile de azi. Modelele: Gemini 4 Argon, Claude Opus 5.5, ChatGPT (GPT-6.1 Sol).
Cum alegem presa?Un link ajunge pe site doar dacă trece de cod.
Un model poate inventa o adresă sau un citat. De aceea nu-l credem pe cuvânt: fiecare link trece prin cinci verificări făcute de noi, în cod.
Modelele caută. Gemini, Claude și ChatGPT dau, fiecare, adrese de articole și câte o propoziție copiată din ele. De aici înainte decide codul.
Verificarea 1: Pagina se deschide?
O descărcăm noi, în cel mult 15 secunde, și trebuie să fie o pagină web.
Oprește: linkuri inventate, pagini blocate
Verificarea 2: E o redacție?
Nu site-uri oficiale ca senat.ro, nu rețele sociale, nu motoare de căutare.
Oprește: surse care nu sunt presă
Verificarea 3: Citatul e în pagină?
Propoziția copiată de model trebuie să apară în articol: întreagă sau o bucată de 60 de caractere la rând. Altfel, măcar numărul proiectului.
Oprește: citate parafrazate sau inventate
Verificarea 4: E din perioada proiectului?
Nu mai vechi cu un an decât înregistrarea proiectului la Senat.
Oprește: articole mai vechi cu peste un an
Verificarea 5: E o publicație urmărită?
Publicațiile din lista noastră, de 72 de redacții, apar direct. Celelalte apar doar dacă cei trei cititori spun că articolul e chiar despre proiect.
Oprește: preluări și articole care doar pomenesc proiectul
Pe site. Titlul, publicația și data le luăm din pagina articolului, nu de la model. Până azi au trecut 247 de articole din 96 de publicații.
Ce fel de articol e?
Fiecare articol verificat e citit apoi de trei cititori: două modele de decizie care rulează local, pe Mac, și GPT-6 Luna. Răspund la patru întrebări fixe, cu o probabilitate pentru fiecare variantă. Textul articolului îl curățăm întâi de meniuri și reclame, cu trafilatura.
Clef · Cloudflare
Model de decizie open source (Apache-2.0), cu 27 de miliarde de parametri. Rulează cu MLX, pe 8 biți (mlx-community/clef-8bit).
d1-3B · Liquid AI
Model de decizie open source (LFM Open License v1.0), cu 3 miliarde de parametri. Rulează cu PyTorch, pe GPU-ul Mac-ului (LiquidAI/d1-3B).
GPT-6 Luna · OpenAI
Modelul din spatele Decisions API al OpenAI. Nu rulează local: îl întrebăm prin Codex CLI, fără unelte, ca pe celelalte modele mari.
Pe 46 de articole etichetate de mână, acolo unde cel puțin doi au fost de acord, poziția a fost corectă în 89% din cazuri.
- Ce poziție are față de proiect?
- criticfavorabilneutrumixt
- Ce fel de sursă e?
- presă naționalăpresă localăde specialitatepartid sau politicianpreluareblogONG sau instituție
- Vorbește chiar despre proiect?
- danu
- E comunicatul de presă al unui partid?
- danu
Cât de sigur e?
Eticheta apare doar dacă cel puțin doi din trei aleg aceeași variantă, fiecare cu cel puțin 60% încredere. Altfel, articolul rămâne fără etichetă.
Pozițiile organizațiilor trec prin aceleași porți. Și prin încă trei.
Scrisorile, petițiile și punctele de vedere le căutăm și pe site-urile emitenților, nu doar în presă. Proiectele cu risc ridicat sau aproape de termen le verificăm zilnic, cele cu risc moderat la trei zile, restul o dată pe săptămână.
Până azi: 13 poziții verificate, de la 387 de organizații.
Emitentul e în document
Numele organizației trebuie să apară în textul paginii sau al PDF-ului.
Citatul spune poziția
Cuvintele citatului trebuie să se potrivească cu ce cere: retragere, respingere, modificare sau susținere.
Semnatarii se numără din document
Numărăm lista numerotată, verificăm că numerotarea nu are goluri și o comparăm cu totalul anunțat în text. Persoanele fizice apar doar ca număr.
Ce se întâmplă când greșim?O corectură cere trei confirmări.
Oricine poate semnala o greșeală de pe pagina proiectului. Raportul e tratat ca date, niciodată ca instrucțiuni, iar analiza se schimbă singură doar dacă toate trei modelele îi dau dreptate.
Până azi: 1 analiză corectată așa.
Raportul tău
Îl trimiți de pe pagina proiectului. Turnstile oprește roboții, iar în baza de date nu păstrăm IP-ul tău sau alt identificator.
Filtrul din cod
Un raport care pare să dea ordine modelelor nu ajunge la ele: merge direct la un om.
Trei verificări separate
Gemini, Claude și ChatGPT, fără unelte, compară raportul cu textul oficial. Raportul le ajunge marcat ca text nesigur.
Citatele, verificate
Afirmația contestată trebuie să existe, cuvânt cu cuvânt, în analiza noastră, iar citatul dat de model, în textul oficial.
Corectura
Doar dacă toate trei confirmă. Claude o scrie fără să vadă textul raportului; Gemini și ChatGPT trebuie s-o aprobe amândoi.
Pe pagină, cu data
Corectura apare pe pagina proiectului, cu ziua în care am făcut-o. Orice alt raport ajunge la un om. Rapoartele verificate se șterg după 90 de zile.
Ce au voie modelele?Să citească și să răspundă. Atât.
Paginile web și rapoartele cititorilor pot ascunde instrucțiuni. De aceea modelele rulează închise: primesc textul, răspund cu JSON și nu pot atinge nimic altceva pe calculator.
Prompt
textul oficial, ca date
un dosar gol · un mediu minim · fără chei
- Gemini
- Claude
- ChatGPT
- Fără: Terminal sau comenzi
- Fără: Scriere de fișiere
- Fără: Chei și tokenuri
- Fără: Servere MCP și pluginuri
- Căutare pe web doar la presă și la pozițiile organizațiilor. Tot ce găsesc trece apoi prin porțile din cod.
JSON
doar răspunsul cerut
Codul verifică
Pentru programatori: cum e închis fiecare CLI
- claude:
--tools ""(la căutare doarWebSearch,WebFetch) și--strict-mcp-configfără nicio configurație MCP. - codex:
exec -s read-only, cu shell-ul, browserul, computer use, aplicațiile, pluginurile, hook-urile și serverele MCP oprite;--searchdoar la căutare. - agy: doi agenți proprii din
.agents/agents/:lastraja-offline, fără unelte, șilastraja-web, doar cusearch_web. Fără componentele implicite, fără MCP moștenit, fără terminal și fără fișiere. - Toate rulează în
.cache/ai-sandbox, un dosar gol, cu un mediu minim: PATH, HOME, utilizatorul, limba, dosarul temporar și CODEX_HOME. Nimic din.env. Niciun flag „dangerously”. - Codul, în scripts/lib/ai-cli.mjs
Unde rulează?Pe un Mac, pe Cloudflare și pe GitHub.
Lanțul rulează pe calculatorul întreținătorului. Site-ul e static: pagini gata făcute, servite de Cloudflare. Un singur Worker răspunde la formulare și trimite e-mailurile.
senat.ro
și cdep.ro, sursa
- Proiectele în consultare, cu PDF-urile și cronologia
- Fișele parlamentarilor, o cerere pe secundă
- Mai departe: proiecte, documente, fișe
Mac-ul întreținătorului
Apple Silicon · luni–vineri, 08:00, prin launchd
- Scripturile lanțului, în Node.js
- Gemini, Claude și ChatGPT, prin CLI-urile lor, închise
- OCR: MinerU, verificat cu Tesseract
- Clef și d1-3B, modelele de decizie locale
- Build-ul site-ului static
- Mai departe: datele zilei, cu tot istoricul
- Înapoi: schimbări aprobate de întreținător
GitHub
github.com/eek/destraja.ro, public
- Codul (AGPL-3.0), prompturile și datele (CC BY 4.0)
- Datele fiecărei zile, într-un commit
- Orice schimbare din afară trece pe la întreținător
- Mai departe: site-ul, la fiecare publicare
- Mai departe: ediția alertelor, fără adrese
- Înapoi: rapoartele cititorilor
Cloudflare
destraja.ro
- Site-ul static, din exportul Next.js
- Un Worker pentru /api: rapoarte, abonări, alerte
- D1: rapoartele și abonații
- Turnstile, împotriva roboților
- Email Service, de la alerte@destraja.ro
- Cel mult 5 rapoarte sau abonări pe minut de la o adresă
Adresele de e-mail stau doar aici, în D1. Pe Mac nu ajunge niciuna: scriptul trimite ediția zilei, iar Worker-ul o expediază abonaților.
- Mai departe: pagini și e-mailuri
- Înapoi: rapoarte și abonări
Tu
în browser
- Pagini gata făcute, fără cont
- Memoriul .docx, completat la tine în browser
- Statistici doar dacă accepți
Cu ce e construit?Un site static și un singur Worker.
Unelte obișnuite, la vedere. Versiunile sunt cele din build-ul de azi.
Pe site
- Next.jspaginile, exportate static
- 15.5
- Reactcomponentele
- 19.3
- Tailwind CSSstilurile, cu tema deschisă și cea închisă
- 4.3
- TypeScripttot codul site-ului
- 5.9
- three.jssatul 3D de pe prima pagină
- 0.186
- docxmemoriul, generat în browser
- 9.13
- Source Serif 4 și Public Sansfonturile, cu licență OFL
- Google Analytics 4doar după ce accepți
Pe Cloudflare
- Workerssite-ul static și cele câteva adrese /api
- D1rapoartele cititorilor și abonații
- Turnstileverificarea anti-roboți din formulare
- Email Serviceconfirmările și alertele zilnice
- Wranglermigrațiile bazei și publicarea
- 4.148
Pe Mac
- launchdpornește lanțul luni–vineri la 08:00
- Node.jsscripturile din scripts/
- agy, claude, codexCLI-urile pentru Gemini, Claude și ChatGPT
- pdf-parsestratul de text al PDF-urilor, dacă OCR-ul nu e disponibil
- 1.1
- MinerU (OpenDataLab)textul PDF-urilor, cu titluri și tabele
- ocrmypdf și Tesseractverificarea fiecărei pagini, OCR în română
- MLXrulează local Clef
- PyTorchrulează local d1-3B
- trafilaturatextul curat al articolelor, fără meniuri
- gitistoricul datelor, zi de zi
Pot verifica singur?Da. Totul e public.
Codul, prompturile, răspunsurile modelelor și datele sunt pe GitHub, cu tot istoricul. Codul e sub AGPL-3.0, analizele și datele sub CC BY 4.0. Orice schimbare venită din afară trece prin aprobarea întreținătorului, pentru că acest cod rulează zilnic pe calculatorul lui, cu drept de publicare.