Repository navigation
Преглед: отворени issues без PR (групиран снапшот) #168
Description
Снимка към 2026-06-29: 61 от 72 отворени issue-та нямат PR. Останалите 11 вече се работят (#19, #32, #54, #62, #87, #100, #117, #127, #138, #142, #154).
🔴 = high-priority & неразпределено · ⏸️ = чака решение.
Промени от предходната снимка (2026-06-28): затворени/мерджнати са #56, #130, #97 (reconciliation gate-ът влезе чрез #119, а dedupe-ът на филтрите — чрез #123). CI lint-ът вече блокира (#133 merged). Нов issue: #173 (поверителност). #154 вече има отворен PR (#156).
🔴 High-priority, никой не ги движи
#83 · #134 · #122 (асистент) · #98 · #99 (данни) · #88 · #89 · #90 (CI/CD) · #93 · #94 (тестове) · #173 (поверителност)
🤖 AI асистент — #80 follow-ups (8)
Вече линкнати под #83 (launch-gate) / #108 (eval). Базовият #80 е merged.
- AI асистент (#80) — launch-gate чеклист преди provision/изложение #83 — launch-gate чеклист
- AI асистент: eval и red-team harness за поведението на модела #108 — eval & red-team harness
- [Идея]: Denial-of-Wallet чрез run_sql: D1 таксува прочетени редове, не върнати (§7/§9.4 #122 — DoW през
run_sql⏸️ - assistant: run_sql must use a read-only D1 binding before the prod BgGPT key #134 — read-only D1 binding
- assistant: global account-wide budget / circuit-breaker for BgGPT #135 — global circuit-breaker
- assistant: pre-activation hardening follow-ups (2026-06-26 security re-review) #155 — pre-activation hardening
- assistant: golden-report eval for value→label/format mislabeling (§9.9) #136 — value→label eval
- assistant: measure & tune the prose number-gate false-positive rate (§9.9) #137 — prose number-gate FP rate
⚙️ ETL & pipeline (6)
Кронът / integrity / FX клъстер — бел.: reconciliation gate-ът вече е в pipeline-а (#97 merged чрез #119). #154 се разбива на #158 + #163; PR #156 (отворен) пуска gate-а и на крон-пътя. #154 е кандидат за затваряне след #158 + #163.
- etl: the 6-hourly cron refresh runs no integrity gate and no FX (served D1 ungated) #154 — cron без integrity gate + без FX (PR feat(etl): run the reconciliation gate on the cron refresh #156 отворен)
- feat(etl): cron refresh не зарежда FX курсове — договорите в чужда валута получават NULL amount_eur #158 — cron не зарежда FX курсове
- feat(etl): граница на публикуване (staging → assertIntegrity → promote) за cron пътя #163 — staging → assertIntegrity → promote
- fix(etl): scoped rollup staleness при re-attribution — company_totals/authority_totals остават stale извън touched множеството #160 — stale rollups при re-attribution
- feat(etl): reconciliation телеметрия + мейл аларма на автономния refresh (observe, not gate) #139 — reconciliation телеметрия + аларма
- Данни: гаранция за единна стойностна база (rollups ↔ страници) #98 — единна стойностна база (rollups ↔ страници)
- Данни: регресионен golden-dataset за проследими тотали #99 — golden-dataset за проследими тотали
🏷️ Качество на данните & класификация (10)
#27 е чадърът (ЕИК класификация); #20–24 са под него. #19 се работи (PR #151).
- Класификация на възложителите по ЕИК срещу канонични регистри (чадър) #27 — ЕИК класификация (чадър)
- Хигиена на данните: „друго" съдържа държавни предприятия, които не са класифицирани #20 — държавни предприятия в „друго"
- Хигиена на данните: „друго" съдържа лечебни заведения, които трябва да са „болница" #21 — лечебни заведения в „друго"
- Класификация: отделна категория „висше образование" (университети и академии) #22 — категория „висше образование"
- Класификация: „детски градини" заслужават собствена категория #23 — категория „детски градини"
- Хигиена на данните: детските градини са записани непоследователно (самостоятелни срещу разтворени в общината) #24 — детски градини (непоследователност)
- Хигиена на данните: поръчка за 7 € в Община Лясковец (вероятна стойностна грешка) #26 — договор за 7€ (стойностна грешка)
- Рисков флаг: цена-отклонение спрямо съпоставима кохорта (CPV) #41 — CPV-cohort флаг (детекцията е в feat(etl): per-refresh anomaly report — cross-row outliers (#100) #148 като отчет; остава UI флагът)
- Обогатяване на фирмите: служители, % оборот от поръчки, държавна vs частна #42 — обогатяване на фирмите
- Етап „Отчетност": обжалвания, одити и регистър на отстранените изпълнители #40 — слой „отчетност"
📊 Риск & аналитични слоеве (5)
- Откриване на нагласено наддаване (картели): евристики върху графа #128 — откриване на картели (граф)
- Сравнение: реален бюджет ↔ възложени поръчки ↔ реални плащания #37 — бюджет ↔ поръчки ↔ плащания
- Слой изпълнение/резултат: затваряне на „дупката на резултата" #38 — слой изпълнение/резултат
- Етап „Планиране": предстоящи поръчки и разминаване план ↔ реалност #39 — слой планиране
- Обсъждане: слой „Свързани лица" (свързаност между изпълнители) #60 — свързани лица
🚦 CI/CD & infra (9)
- CI/CD: защита на
main+ задължителни status checks (lint да блокира) #88 — branch protection + required checks (lint вече блокира — style: clear repo-wide prettier debt and make CI lint blocking #133 merged) - CI/CD: затягане на Cloudflare deploy credentials + approval gate за production #89 — deploy creds + approval gate
- CI/CD: ефемерни preview среди за всеки PR (изолиран Worker + посят D1) #90 — ефемерни preview среди
- CI/CD: post-deploy smoke/health проверки + автоматичен rollback #91 — post-deploy smoke + rollback (health subset от feat(web): add /health endpoint and post-deploy smoke check #117/feat(web): add /health endpoint and post-deploy smoke check #118)
- Конвенции: ESLint (логически + security линтинг отвъд Prettier) #105 — ESLint
- Конвенции: husky + lint-staged + commitlint за хигиена на комитите #106 — husky / lint-staged / commitlint
- CI/CD: job timeouts + SBOM на release #129 — job timeouts + SBOM
- Добавяне на
SECURITY.mdи активиране на Private Vulnerability Reporting #61 — SECURITY.md + private reporting ⏸️ - Преместване на хранилището в официалната организация на Правителството #58 — преместване в гов. организация ⏸️
🧪 Тестове (4)
- Тестове: измерване и праг на coverage в CI #93 — coverage праг в CI
- Тестове: интеграционни тестове на routes/worker през vitest-pool-workers + miniflare #94 — integration тестове (vitest-pool-workers + miniflare)
- Тестове: Playwright E2E за ключовите потоци + axe a11y smoke #95 — Playwright E2E + axe a11y
- Тестове: load/stress на динамичните endpoint-и + perf бюджети (Lighthouse-CI) #96 — load/stress + perf бюджети
📚 Документация (6)
- Конвенции: разширяване на AGENTS.md/CLAUDE.md с проектните твърди правила #107 — твърди правила в
AGENTS.md - Документация: ADR процес + директория + backfill на ключови решения #101 — ADR процес + директория
- Документация: липсващите
docs/etl-pipeline.mdиdocs/core-scope.md+ речник на данните #102 —etl-pipeline.md/core-scope.md+ речник - Документация: архитектурна диаграма и data-flow #103 — архитектурна диаграма
- Документация: оперативни runbook-ове + SLO/мониторинг #104 — runbooks + SLO
- Docs: wording of the README "Структура на репозиторието" heading #75 — README heading wording
🎨 Web UX & фийчъри (10)
- Мобилен UX: преработка на главната визуализация и списъците за тесни екрани #114 — мобилен UX ⏸️
- Начална страница: проспективна (предстоящи поръчки) вместо класации по размер #33 — проспективна начална страница
- Запазване на филтъра при отваряне на институция от филтриран списък #28 — запазване на филтъра
- Чисти URL-и: латински стойности на филтрите + стабилен адрес на договор #29 — чисти URL-и
- Липсва canonical tag — потенциален SEO проблем при филтрирани URL-и #57 — canonical таг (Чисти URL-и: латински стойности на филтрите + стабилен адрес на договор #29/Липсва canonical tag — потенциален SEO проблем при филтрирани URL-и #57 се застъпват)
- Privacy: .json/.csv expose natural-person ЕИК without the noindex applied to HTML profiles #173 — 🔴 ЕИК на физ. лица в
.json/.csvбез noindex (поверителност) - Качество на търсенето: възложител с дълъг списък имена изпреварва точните съвпадения #25 — ранкинг бъг в търсенето
- Типография: умора от главни букви и тежест на основния текст #115 — типография
- Collection of UX/UI Improvement Suggestions #55 — UX/UI предложения
- Седмичен обзор „Седмицата в пари“ — автоматизиран блог пост за публичните разходи (AI описания, таблици, графики) #167 — седмичен AI „обзор на парите"
💡 Идеи / дискусия (2)
- [Идея]: КАИС връзка #120 — КАИС връзка
- Дискусия: Струва ли си проследяването на интересите на потребителите? #76 — проследяване на интересите
Накратко: най-големите неразпределени клъстери са класификация на данните (10, под #27) и CI/CD (9, предимно high-prio) — добри за batch-разпределяне. 4 чакат решение: #122 · #58 · #61 · #114. Нов high-prio за поглед: #173 (изтичане на ЕИК на физ. лица през машинните endpoint-и).
Авто-генерирана снимка към 2026-06-29; ще остарее с появата на нови PR-и/issue-та.
Activity
lyubomir-bozhinov commentedon Jul 8, 2026
Групиран снапшот на отворените issues без активен PR (към 2026-07-08). Изключени са тези, по които вече има отворен PR: #19 (#151), #62 (#161/#204), #89 (#179), #91 (#118), #93 (#216), #94 (#177/#186), #98/#99 (#220), #117 (#118), #142 (#144), #154 (#156), #165 (#200), #173 (#183/#209), #194/#195/#196 (#203/#215). Затворени наскоро: #87 (merge), #100 (merge
e85e009), #127 (реализиран чрез #116).Сигурност — приоритет, без PR
run_sql(D1 таксува прочетени редове) · needs-decisionБъгове, без PR
Данни/класификация (клъстер #27), без PR
Аналитика/риск, без PR
CI/тестове/инфра (предимно @lyubomir-bozhinov), без PR
main+ задължителни status checks (lint да блокира) #88 branch protection (@Stefan) · CI/CD: ефемерни preview среди за всеки PR (изолиран Worker + посят D1) #90 preview среди (fork deploy layer)UX/дизайн/докс, без PR
Дискусия/needs-decision, без PR
SECURITY.mdи активиране на Private Vulnerability Reporting #61 SECURITY.md + Private Vuln Reporting (лесен) · Дискусия: Струва ли си проследяването на интересите на потребителите? #76 проследяване на интереси · [Идея]: КАИС връзка #120 КАИС връзка · Седмичен обзор „Седмицата в пари“ — автоматизиран блог пост за публичните разходи (AI описания, таблици, графики) #167 седмичен блогТова е point-in-time снапшот — затварям issue-то; ще го подновявам при следващите sweep-ове. Ако предпочиташ да остане отворено като живо табло, кажи и го връщам.