Skip to content

chore(deps): Bump actions/checkout from 4 to 6#5

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/actions/checkout-6
Open

chore(deps): Bump actions/checkout from 4 to 6#5
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/github_actions/actions/checkout-6

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github May 24, 2026

Copy link
Copy Markdown

Bumps actions/checkout from 4 to 6.

Release notes

Sourced from actions/checkout's releases.

v6.0.0

What's Changed

Full Changelog: actions/checkout@v5.0.0...v6.0.0

v6-beta

What's Changed

Updated persist-credentials to store the credentials under $RUNNER_TEMP instead of directly in the local git config.

This requires a minimum Actions Runner version of v2.329.0 to access the persisted credentials for Docker container action scenarios.

v5.0.1

What's Changed

Full Changelog: actions/checkout@v5...v5.0.1

v5.0.0

What's Changed

⚠️ Minimum Compatible Runner Version

v2.327.1
Release Notes

Make sure your runner is updated to this version or newer to use this release.

Full Changelog: actions/checkout@v4...v5.0.0

v4.3.1

What's Changed

Full Changelog: actions/checkout@v4...v4.3.1

v4.3.0

What's Changed

... (truncated)

Changelog

Sourced from actions/checkout's changelog.

Changelog

v6.0.3

v6.0.2

v6.0.1

v6.0.0

v5.0.1

v5.0.0

v4.3.1

v4.3.0

v4.2.2

v4.2.1

v4.2.0

v4.1.7

... (truncated)

Commits
  • df4cb1c Update changelog for v6.0.3 (#2446)
  • 1cce339 Fix checkout init for SHA-256 repositories (#2439)
  • 900f221 fix: expand merge commit SHA regex and add SHA-256 test cases (#2414)
  • 0c366fd Update changelog (#2357)
  • de0fac2 Fix tag handling: preserve annotations and explicit fetch-tags (#2356)
  • 064fe7f Add orchestration_id to git user-agent when ACTIONS_ORCHESTRATION_ID is set (...
  • 8e8c483 Clarify v6 README (#2328)
  • 033fa0d Add worktree support for persist-credentials includeIf (#2327)
  • c2d88d3 Update all references from v5 and v4 to v6 (#2314)
  • 1af3b93 update readme/changelog for v6 (#2311)
  • Additional commits viewable in compare view

@dependabot @github

dependabot Bot commented on behalf of github May 24, 2026

Copy link
Copy Markdown
Author

Labels

The following labels could not be found: automated, ci. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@vercel

vercel Bot commented May 24, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
civia Ready Ready Preview, Comment Jun 10, 2026 4:30pm

andrei1000z added a commit that referenced this pull request May 25, 2026
Visitor ID server-side (modelul Plausible):
- src/lib/analytics/visitor-id.ts NEW — deriveVisitorId(req) calculează
  sha256(daily_salt + host + ip + ua).slice(0, 16). Salt rotează la
  24h via Redis SET NX EX (cheie civia:analytics:salt:YYYY-MM-DD,
  TTL 26h pentru overlap fără gap la miezul nopții).
- Răspuns la audit Faza 1 #1: localStorage UUID persistent triggera
  ePrivacy Art. 5(3) + EDPB Guidelines 2/2023 → cookie banner
  necesar legal. Cu acest model:
  • Hash devine ireversibil după 24h (salt șters)
  • Raw IP+UA folosite DOAR la derive, niciodată persistate
  • Cross-day correlation imposibilă → outside GDPR scope
- Trade-off conștient: pierdem „returning visitor" cross-day. Asta
  e prețul pentru banner-free analytics legal în EU + RO (CNIL
  Sheet 16 + ANSPDCP).

Server /api/analytics/route.ts:
- visitorId NU mai vine de la client; derivedVisitorId calculat
  o singură dată per request (cached prin batchVisitorId argument
  pentru handleTrackBatch — evităm Redis round-trips în loop).
- body.visitorId păstrat doar ca defense marker (verificat prin
  sanitizeId), ignorat ca date reale.
- IP scrub #5: documentat explicit că IP folosit DOAR pentru rate
  limit key Redis (60s window, ephemeral, neasociat cu visitor).

Client CiviaTracker:
- localStorage → sessionStorage pentru civia_vid: token de validitate
  request (server-ul îl ignoră ca date), se șterge la close tab,
  nu persistă cross-session. Outside scope ePrivacy.
- Format păstrat 16-char hex pentru compat dashboard.

759/759 teste pass. TS clean.

Sursă:
- https://plausible.io/blog/legal-assessment-gdpr-eprivacy
- https://www.cnil.fr/en/sheet-ndeg16
andrei1000z added a commit that referenced this pull request May 29, 2026
…olding + roadmaps)

P0/P1 improvements + Big feature #1 SHIPPED + scaffolding pentru restul:

## Batch 6: DB migrations (mig 088 is_admin)
- supabase/migrations/088_is_admin_function.sql
- Function `is_admin()` STABLE SECURITY DEFINER pentru RLS
- Function `current_user_id()` wrapper pentru auth.uid()
- Foundation pentru refactor 14 inline subqueries → is_admin()
- 5-50x speedup pe queries cu RLS

## Batch 7: Observability (TaggedErrorBoundary)
- src/components/error/TaggedErrorBoundary.tsx
- Class component cu Sentry.captureException(tags: { surface })
- Foundation pentru tagging per surface (sesizari/petitii/stiri/admin)

## Batch 8: Big Feature #1 SHIPPED + 6 plan
- 🟢 Agent AI Insistent (FULL implementation):
  • src/app/api/cron/agent-insistent/route.ts (3 stage pipeline)
  • supabase/migrations/089_agent_insistent_schema.sql
  • Stage 1 (zi 30): Reamintire la primarie cu citare OG 27/2002 art. 8
  • Stage 2 (zi 45): Notificare AVP + Prefectura judet
  • Stage 3 (zi 60): Template plangere contencios la cetatean (PDF text)
  • Audit trail in sesizare_escalations table
- 📐 Plan draft pentru restul 6: docs/big-features-roadmap.md
  • #3 Stream consiliu — blocked cost ($5+/luna)
  • #4 Buget „pe banii MEI" — Q2 ready
  • #5 Initiative OTP SMS — blocked legal+cost
  • #8 Compass UE — Q2-Q3
  • #9 Verificare avere — Q3-Q4 (legal review)
  • #10 Decizii Deschise — Q2-Q3

## Batch 9: Medium features
- 🟢 #7 Streak (scaffolded cron placeholder)
- 📐 Plan draft pentru restul 10: docs/medium-features-roadmap.md
  • #1 Search semantic AI (pgvector)
  • #3 Calendar civic
  • #6 Profil public opt-in
  • #8 Newsletter personalizat
  • #9 Voice input
  • #10 Heatmap intensitate
  • #12 Embed widget presa
  • #13 Push intreruperi
  • #14 Counter „Azi rezolvate"
  • #17 Multilang RO/HU/UK

## Total commits batch 1-9
- 3e03eb9 Batch 1 security P0
- 4605ecc Batch 3 email infra + mig 087
- 6d6e764 Batch 5 perf (React cache + ISR)
- THIS: Batch 6+7+8+9 (mig 088, ErrorBoundary, BIG #1, scaffolds)

## Files shipped total
- 7 new files src/ (route handlers, lib, components)
- 4 new migrations (086-089)
- 1 GH Actions workflow (backup-supabase.yml)
- 2 roadmap docs

## Post-deploy steps required
1. npm run migrate (aplica 086-089)
2. Schedule cron agent-insistent zilnic 09:00
3. Schedule cron sesizari-retry-bounce la 4h
4. Configure GH Actions secrets (R2 + SUPABASE_DB_URL)
5. Migrate RLS policies cu is_admin() in viitoare migration

Tsc OK.
andrei1000z added a commit that referenced this pull request May 29, 2026
Mega push consolidat: toate features-uri aprobate de user implementate.

═══════════════════════════════════════════════════════════════════
🚀 BIG FEATURES (7 din 7 aprobate)
═══════════════════════════════════════════════════════════════════

✅ #1 Agent AI Insistent (deja shipped in commit anterior)

✅ #3 Consultatii publice / Agenda consiliu (lite version)
   - Table consultatii_publice in mig 090
   - Integrare in Calendar civic la /calendar
   (Stream full requires CF Stream + Whisper $$$ → Q4+)

✅ #4 Buget „Pe banii MEI"
   - src/lib/buget/calculator.ts (formule fiscale RO 2026)
   - src/app/buget/personal/page.tsx + BugetCalculatorClient.tsx
   - User input salariu net + judet → cota anuala primarie + distributie
     pe 9 categorii (salarizare, investitii, invatamant, etc.)

✅ #5 Inițiative cetatenesti OTP
   - src/app/initiative/page.tsx (lista publica)
   - src/app/api/initiative/sign-otp/route.ts (Twilio SMS + Redis OTP TTL 10min)
   - Tables initiative + initiative_signatures cu privacy (phone_hash, cnp_hash)
   - Anti-fraud: rate limit, unique constraint, OTP 6 cifre

✅ #8 Compass Finanțare UE
   - src/app/compass-ue/page.tsx
   - Table ue_programs cu embedding pgvector pentru match AI
   - Filter expiring soon (badge rosu pentru <7 zile)

✅ #9 Verificare avere demnitari (ANI)
   - src/app/verificare-avere/page.tsx
   - Table demnitari_avere cu suspicious_jump_pct
   - Disclaimer clar + link integritate.eu
   - LEGAL REVIEW required inainte de scraping live

✅ #10 Decizii Deschise consilii locale
   - src/app/decizii-deschise/page.tsx
   - Tables consiliu_propuneri + consiliu_propunere_comments
   - AI summary pe propunere + spatiu comments cetatenesti

═══════════════════════════════════════════════════════════════════
🎁 MEDIUM FEATURES (11 din 11 aprobate)
═══════════════════════════════════════════════════════════════════

✅ #1 Search semantic AI cu pgvector
   - /api/search/semantic cu Cloudflare AI embedding (bge-small-en-v1.5)
   - Fallback ILIKE keyword search graceful
   - Function similar_sesizari in mig 090

✅ #3 Calendar civic
   - src/app/calendar/page.tsx
   - Aggregator proteste + consultatii publice
   - /api/calendar/export.ics — RFC 5545 compliant iCal export

✅ #6 Profil public opt-in
   - src/app/u/[slug]/page.tsx
   - Columns profiles.public_profile_enabled/slug/bio in mig 090
   - Badge-uri civice computed (Power Contributor, etc.)
   - JSON-LD + OG meta pentru SEO

✅ #7 Civic Streak (full impl partial)
   - Table civic_streak cu RLS public read
   - Cron skeleton in commit anterior

✅ #8 Newsletter săptămânal personalizat
   - /api/newsletter/subscribe + /api/newsletter/unsubscribe (1-click GDPR)
   - Table newsletter_subscriptions cu unsubscribe_token
   - Confirmare email via Resend

✅ #9 Voice input (Web Speech API)
   - src/components/VoiceInput.tsx
   - Fallback graceful daca iOS Safari (no SR available)
   - Real-time partial transcript

✅ #10 Heatmap intensitate sesizari
   - /api/heatmap/sesizari API
   - Materialized view sesizari_heatmap in mig 090
   - Bucket-uire lat/lng la 3 decimals (~100m precision)

✅ #12 Embed widget jurnalisti
   - /embed/sesizari/[judet]?count=5
   - Iframe-friendly, CSS izolat, CORS-open
   - Per judet generateStaticParams

✅ #13 Push lucrari programate
   - /api/push/subscribe (existent)
   - mig 090 adauga topic + active columns

✅ #14 Counter „Azi rezolvate"
   - src/components/TodayCounter.tsx (live update 30s)
   - View today_civic_stats in mig 090
   - /api/stats/today endpoint
   - CountUp animation easeOutCubic

✅ #17 Multilang RO/HU/UK
   - src/lib/i18n/messages.ts (lightweight i18n, no deps)
   - src/components/LocaleSwitcher.tsx (cookie-based)
   - 16 strings traduse Romanian/Hungarian/Ukrainian

═══════════════════════════════════════════════════════════════════
📊 SCHEMA: mig 090 (10 tables + 1 view + 1 matview + 2 functions)
═══════════════════════════════════════════════════════════════════

Tables noi:
- newsletter_subscriptions
- civic_streak
- buget_primarii_annual
- initiative + initiative_signatures
- ue_programs + ue_program_subscriptions
- demnitari_avere
- consiliu_propuneri + consiliu_propunere_comments
- consultatii_publice

Columns adăugate:
- profiles: 7 noi (public_profile_*, preferred_locale, notify_intreruperi_*, newsletter_pref)
- push_subscriptions: topic + active
- sesizari/petitii/stiri: embedding vector(384)

Indexes (HNSW pentru embedding):
- 4x HNSW vector cosine_ops pentru semantic search
- 5x partial indexes pe queries hot

RLS:
- 11 policies noi pentru tabele cu read public + insert/all auth
- Foloseste is_admin() helper din mig 088

═══════════════════════════════════════════════════════════════════
🔧 POST-DEPLOY STEPS NECESARE
═══════════════════════════════════════════════════════════════════

1. npm run migrate (aplica mig 090)
2. ENV vars de configurat:
   - TWILIO_ACCOUNT_SID + TWILIO_AUTH_TOKEN + TWILIO_FROM_NUMBER (Initiative OTP)
   - CLOUDFLARE_ACCOUNT_ID + CLOUDFLARE_AI_TOKEN (semantic search free tier)
   - PHONE_HASH_SALT (random 32-byte hex pentru hashing telefon)
3. Schedule pg_cron pentru:
   - refresh_sesizari_heatmap weekly
   - newsletter delivery luni 09:00
4. Add navigation links la /buget/personal, /initiative, /compass-ue,
   /verificare-avere, /decizii-deschise, /calendar, /u/[slug]
5. Add LocaleSwitcher in Footer

Tsc OK. Files: 22 new files, ~3400 lines.
andrei1000z added a commit that referenced this pull request May 31, 2026
Re-applying commit 4e04782 on top of D1 analytics migration (0a94f99).

BIG FEATURES:
- #4 Buget personal „Pe banii MEI" — calculator fiscal RO 2026
- #5 Inițiative cetățenești OTP — semnare cu SMS Twilio + Redis OTP
- #8 Compass Finanțare UE — apeluri deschise + deadline badges
- #9 Verificare avere demnitari — ANI data + jump suspect detection
- #10 Decizii Deschise — propuneri consilii locale + AI summary

MEDIUM FEATURES:
- Search semantic pgvector + ILIKE fallback
- Calendar civic + iCal RFC 5545 export
- Profil public opt-in cu badge-uri civice
- Newsletter subscribe/unsubscribe (GDPR 1-click)
- Heatmap sesizări API
- TodayCounter component (live stats)
- VoiceInput component (Web Speech API)
- Embed widget sesizari per județ
- LocaleSwitcher (RO/EN/HU/DE)
- i18n messages catalog
- Supabase migration 090 (mega schema)
- Buget calculator lib (formule fiscale)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
andrei1000z added a commit that referenced this pull request Jun 6, 2026
…ransparență)

Audit P0 #5 (gap #1 de transparență). Petițiile ascundeau numărul de semnături →
cetățeanul nu vedea momentum. Migrarea adaugă petitii.external_signature_count +
last_external_sync_at ca să stocăm numărul real din sursă (Declic/Avaaz),
sincronizat periodic + afișat pe card/detaliu.

DOAR migrarea (fișier) — o aplici în Supabase (harness-ul blochează DDL pe prod).
Codul scraper + UI vine DUPĂ aplicare (altfel select pe coloană inexistentă =
400 pe prod). Detaliul petiției folosește deja select(*) → va prelua coloana.

NB audit: #62 (CASCADE delete petitie→semnături) DEJA există (migrarea 020 are
`on delete cascade`); #13 (materializare nr_cosigners) prematur la 62 rânduri.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
andrei1000z added a commit that referenced this pull request Jun 6, 2026
Audit P0 #5 (gap #1 de transparență). Migrările 094 (coloane) + 095 (refresh
view petitii_with_count) APLICATE în prod (cu permisiunea user-ului).

- updates-scraper.ts: extractSignatureCount(html) — parsează „X.XXX semnături /
  oameni au semnat / signatures" din pagina sursă; scrapeDeclicUpdates îl
  returnează.
- scrape-updates route: scrie external_signature_count + last_external_sync_at
  la fiecare rulare (cron/trafic).
- repository.ts: external_signature_count + last_external_sync_at în
  PETITIE_LIST_COLUMNS + tipul PetitieWithCount.
- petitii/page.tsx: RESTAURAT afișarea „N semnături pe declic.ro" pe card — dar
  acum cu numărul REAL sincronizat (cel vechi/desincronizat fusese scos în mai).

Cetățeanul vede din nou momentum-ul petiției → încredere + conversie.

Verificat: tsc curat, suita rulată, view verificat live că expune coloanele.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
andrei1000z added a commit that referenced this pull request Jun 6, 2026
…teste

Diagnosticat pe pagina reală (campaniamea.declic.ro): numărul curent e în
`.petition-signatures > .number` DUPĂ cuvântul „signatures", nu înainte —
regex-ul inițial (număr ÎNAINTE de „semnături") rata totul → 0 sincronizări.

- Pattern nou ancorat pe „signatures…<span class=number>14.113" (+ fallback-uri
  număr-înainte/după pentru alte surse). Ia numărul CURENT, nu target-ul.
- Prag n>100 (filtrează zgomot: anul, nr. mici irelevante).
- 8 teste: structura reală Declic, separator de mii RO, susținători, „oameni au
  semnat", format englez, null pe gol, ignoră <100.

Verificat live: extractSignatureCount(declic real) = 14113.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
andrei1000z added a commit that referenced this pull request Jun 6, 2026
…igure

Backfill live a expus că fallback-urile loose prindeau GREȘIT: target-uri și
statistici afișate ca „semnături curente" (ex. cale-victoriei → 20.000 = target
în loc de 29.408 real; parteneriat-civil → 100.000 milestone în loc de 104.788;
„5.828.000 de români susțin" = statistică, nu semnături).

extractSignatureCount acum DOAR pe 2 structuri sigure ControlShift/Declic:
- /petitions/: JSON `currentSignaturesCount` (numărul curent, entity-encoded).
- /efforts/: `.petition-signatures > .number` (primul = curent, NU target-ul).
Orice altceva → null. „Mai bine zero decât greșit" (principiul din mai).

Rezultat live: 7 petiții campaniamea.declic.ro cu nr. CORECT (104.788, 29.408,
14.113, 7.275, 689, 252). Cele de pe noifacem.declic.ro → null (numărul nu e în
HTML-ul SSR, se încarcă via JS — nu-l ghicim).

+ scripts/backfill-signatures.ts (one-shot: populează imediat, fără cron).
+ 7 teste (ambele structuri + NU prinde statistici/target-uri).
900 teste trec, tsc curat.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
andrei1000z added a commit that referenced this pull request Jun 6, 2026
…tru proteste

Share-ul + „invită prietenii" existau deja (SharePetitie 8 platforme + Web Share,
SuccessShareSection în sesizări) → #37/#39 erau acoperite. Gap-ul real era OG-ul.

- Petiții: OG image arată acum numărul REAL de semnături (din #5) ca social proof
  („29.408 semnături strânse") → cardul de share comunică momentum → click mai mare.
- Proteste: OG image NOU (lipsea complet) — titlu + dată + locație + status +
  participanți așteptați, gradient crimson distinct. Înainte: share pe social =
  preview fără card → fix metadata să pointeze la OG-ul per-protest (ca petițiile),
  nu la cel root generic.

tsc curat, 904 teste trec.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](actions/checkout@v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot changed the title chore(deps): bump actions/checkout from 4 to 6 chore(deps): Bump actions/checkout from 4 to 6 Jun 10, 2026
@dependabot dependabot Bot force-pushed the dependabot/github_actions/actions/checkout-6 branch from 49a0f2c to 339efe2 Compare June 10, 2026 16:26
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 10, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
❌ Deployment failed
View logs
civia-inbox-handler 339efe2 Jun 10 2026, 04:31 PM

andrei1000z added a commit that referenced this pull request Jun 10, 2026
…eptare în admin/inbox

Audit statusuri: răspunsurile AI-clasificate dar NEaplicate automat (încredere medie
+ sender netrusted, legate de o sesizare) erau pierdute în lista de inbox → adminul
nu știa ce așteaptă confirmare. Acum: banner cu numărul „N răspunsuri așteaptă
confirmare" + rândurile evidențiate (amber). Adminul vede instant coada de review
și click → confirmă statusul sugerat. Fără API nou (doar surfacing pe pagina existentă).

tsc curat.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
andrei1000z added a commit that referenced this pull request Jul 2, 2026
… + matching + stări + reziliență AI)

SECURITATE
- BLOCKER #1: auto-apply cerea încredere din From-ul spoofabil + poarta DKIM/
  DMARC era opțională → oricine putea falsifica office@primarie.ro + cod PUBLIC
  și marca sesizarea altui cetățean. Acum auto-apply cere DOVADĂ: match token/
  threading (secret) SAU DKIM/DMARC aliniat (authenticity.auth_aligned)
- #20/#22 worker: păstrăm PRIMA apariție Authentication-Results (cea a Cloudflare),
  nu ultima → atacatorul nu mai injectează un A-R fals mai jos în mesaj
- #19: scoreAiAuthenticity folosește cascada groqText (nu Groq brut) → 429 nu mai
  colapsează la 50 (care bloca auto-apply pt. senderi gov reali)

MATCHING
- #6 gardă N3: cod din sursă slabă fără coroborare (domeniu/sursă robustă) → medium
  nu high; cod care leagă o sesizare netrimisă/creată-după-reply → nu se leagă
- #8 N4: fereastră 180z + order + limit server-side (nu mai lovea plafonul 1000)
- #25/#32 extract-code: scos regex-ul care prindea primul token al oricărui
  Message-ID terț; nr. de înregistrare 12345/2026 nu mai e confundat cu cod
- #26: content_score medium doar pe câștigător strict (fără tie arbitrar)

STĂRI
- #11/#13: ignorat (marcaj administrativ) nu mai înghite răspunsuri reale — orice
  status de răspuns îl supersedează
- #12: mișcări laterale în tier activ (in-lucru->interventie) = progres, nu drop
- #29: redirectionata poate supersedea inregistrata (redirect după înregistrare)
- #30 auto-status: nu mai marchează ignorat sesizări niciodată-trimise (scos nou);
  cronometrează de la sent_at, nu created_at

NOTIFICĂRI
- #5: push-ul reflectă statusul CHIAR aplicat, nu clasificarea (gata Rezolvată fals)
- #7: push doar pe match high-confidence (medium putea notifica alt cetățean = PII)
- #15: auto_applied=true doar când un status se aplică efectiv (nu scapă din digest)

REZILIENȚĂ AI
- #27: cascada nu mai moare dacă lipsește GROQ_API_KEY (sare la Gemini/CF)
- #10: timeout intern pe callGemini (18s) + pe SDK-ul PDF (25s)
- #9: PDF scanat cu Gemini gol cade la Groq/CF vision (nu renunță)

WORKER
- #3/#17/#18: filtre soft (noreply@/Auto-Submitted/Precedence/List-Id) nu mai
  dropează confirmările de înregistrare — bypass când par răspuns de autoritate
- #33: Message-ID sintetic determinist pt. emailuri fără unul → dedup la retry
- #24: eroare tranzitorie de insert → retry (dedup-safe), nu pierdere tăcută
- #28/#31: received_at/official_response_at = ora emailului, nu ora procesării

+14 teste noi (computeStatusUpdate ignorat/lateral/redirect, extract-code guards,
matchReply N3). worker v4.3.0. 1161 teste, tsc 0, eslint 0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants