Commit Graph

  • 5e12c4729b Merge feat/domains-filters: фильтры доменов по шаблону и статусу, сортировка по имени зоны main vasyansk 2026-08-19 19:30:09 +07:00
  • c084c7cf84 Merge feat/custom-records: custom-записи в диффе и очистка исчезнувших зон vasyansk 2026-08-19 19:30:09 +07:00
  • caebc06076 feat(web): filter domains by template and status vasyanskandClaude Opus 5 2026-08-19 19:24:58 +07:00
  • 98be357da8 fix(web): handle empty-body 2xx responses; fix(store): sync DeleteDomainsNotInZones query with generated columns vasyanskandClaude Opus 5 2026-08-19 19:04:13 +07:00
  • 58a57ff4d0 docs: custom records and import-as-sync invariants vasyansk 2026-08-19 18:45:52 +07:00
  • d6d91f8826 feat(web): show created and removed counts after zone import vasyansk 2026-08-19 18:37:56 +07:00
  • 4d05271f10 feat: remove domains whose zones vanished at the provider on import vasyansk 2026-08-19 18:32:10 +07:00
  • e00648baf7 feat(web): customs section with mark and unmark actions vasyansk 2026-08-19 18:22:32 +07:00
  • 404f869d42 feat(web): api client and hooks for custom record marks vasyansk 2026-08-19 18:16:42 +07:00
  • da267b3cef feat(api): endpoints to mark and unmark custom records vasyansk 2026-08-19 18:10:46 +07:00
  • 208e73980d feat(service): apply custom marks to the computed diff vasyansk 2026-08-19 18:02:55 +07:00
  • 618d5c5bb6 feat(store): persist per-domain custom record marks vasyansk 2026-08-19 17:57:06 +07:00
  • e675c17123 feat(diff): mark records deliberately kept outside the template vasyansk 2026-08-19 17:51:19 +07:00
  • 8f57a25af0 docs: implementation plan for custom records and orphan cleanup vasyanskandClaude Opus 5 2026-08-19 17:48:02 +07:00
  • eead9f3f3d docs: spec for custom records and orphan domain cleanup vasyanskandClaude Opus 5 2026-08-19 17:42:53 +07:00
  • ba58921dc7 Merge feat/clone-template: клонирование существующих шаблонов vasyansk 2026-08-19 17:17:39 +07:00
  • dcaf3e65f5 feat(web): clone existing templates vasyanskandClaude Opus 5 2026-08-19 17:17:34 +07:00
  • e538ecd509 Update docker-compose-prod.yml vasyansk 2026-07-05 17:12:50 +07:00
  • 650a8cff85 Create docker-compose-prod.yml vasyansk 2026-07-05 17:07:02 +07:00
  • 567d721311 fix readme vasyansk 2026-07-05 17:01:33 +07:00
  • 5215678fe6 Merge fix/surface-provider-error: реальная ошибка провайдера вместо internal error vasyanskandClaude Opus 4.8 2026-07-05 16:10:37 +07:00
  • 879e9e14b1 fix(api): surface real provider error on apply/check instead of generic internal error vasyanskandClaude Opus 4.8 2026-07-05 15:53:27 +07:00
  • 6f9958af60 Merge feature/selective-apply-order: выборочный Apply + удаления перед обновлениями vasyanskandClaude Opus 4.8 2026-07-05 15:32:54 +07:00
  • e283e5f22a fix: document apply ordering invariant; visible indeterminate checkbox + test vasyanskandClaude Opus 4.8 2026-07-05 15:26:46 +07:00
  • 2f1f5311ad feat(web): per-record apply checkboxes with select-all; prune opt-in vasyanskandClaude Opus 4.8 2026-07-05 15:20:09 +07:00
  • 0b26923586 feat(apply): per-record selection + deletes-before-updates ordering vasyanskandClaude Opus 4.8 2026-07-05 15:10:01 +07:00
  • fc19678727 docs: plan for per-record apply selection + deletes-first order vasyanskandClaude Opus 4.8 2026-07-05 15:03:14 +07:00
  • 0b2b9c6e3e Merge fix/check-status-and-diff-layout: статус при ручной проверке + перенос длинных значений vasyanskandClaude Opus 4.8 2026-07-05 14:48:23 +07:00
  • 27d70a987e fix(store): scope SetDomainStatus by project (IDOR); scheduler reuses DeriveStatus vasyanskandClaude Opus 4.8 2026-07-05 14:40:13 +07:00
  • 784e7bd822 fix(web): wrap long record values in diff and zone view (no horizontal overflow) vasyanskandClaude Opus 4.8 2026-07-05 14:27:33 +07:00
  • 1b367c4bda fix(api): manual check persists last_check_status (was stale unknown) vasyanskandClaude Opus 4.8 2026-07-05 14:22:02 +07:00
  • cc5e562a67 docs: plan for manual-check status + diff value wrapping vasyanskandClaude Opus 4.8 2026-07-05 14:15:02 +07:00
  • aa7e8c705a Merge feature/template-placeholders: плейсхолдер {{domain_name}} в шаблонах vasyanskandClaude Opus 4.8 2026-07-05 14:01:34 +07:00
  • 91f7a02f2c fix(tmpl): parameterize zone name only on DNS-label boundaries vasyanskandClaude Opus 4.8 2026-07-05 13:58:55 +07:00
  • 655ae8ccf8 feat(web): hint about {{domain_name}} placeholder in template editor vasyanskandClaude Opus 4.8 2026-07-05 13:48:24 +07:00
  • df895d8850 feat(tmpl): {{domain_name}} placeholder — materialize on diff/apply, parameterize on snapshot vasyanskandClaude Opus 4.8 2026-07-05 13:41:18 +07:00
  • 135917216c docs: plan for {{domain_name}} template placeholders vasyanskandClaude Opus 4.8 2026-07-05 13:34:00 +07:00
  • 40cec05c9a Merge fix/empty-changeset-null: пустой changeset → [] не null (белый экран после snapshot) vasyanskandClaude Opus 4.8 2026-07-05 13:11:01 +07:00
  • bc2e77ad4e fix: empty changeset must serialize as [] not null (white-screen after snapshot) vasyanskandClaude Opus 4.8 2026-07-05 13:10:08 +07:00
  • 08697e06d7 Merge feature/zone-view-snapshot: просмотр зоны без шаблона + snapshot-шаблон vasyanskandClaude Opus 4.8 2026-07-05 12:58:20 +07:00
  • 9f0938daea fix: reject snapshot when template already attached (409); handle domains-load error; drop orphaned useDeleteDomain vasyanskandClaude Opus 4.8 2026-07-05 12:54:52 +07:00
  • 137113cbe6 fix(web): gate zone-records fetch to no-template case; wait for domains load before branching vasyanskandClaude Opus 4.8 2026-07-05 12:28:07 +07:00
  • c2832348f8 feat(web): view zone without template, snapshot button, no-template status, drop delete vasyanskandClaude Opus 4.8 2026-07-05 12:19:50 +07:00
  • 5662334799 fix(api): distinguish domain-not-found (404) from provider failure (502) on zone endpoints vasyanskandClaude Opus 4.8 2026-07-05 12:14:46 +07:00
  • 9ccb304d2e feat(api): read zone records without template + snapshot-to-template vasyanskandClaude Opus 4.8 2026-07-05 12:00:27 +07:00
  • 1540140542 docs: plan for zone view without template + snapshot vasyanskandClaude Opus 4.8 2026-07-05 11:48:21 +07:00
  • b4e34f5b9b Merge feature/selectel-iam-auth: фикс 401 — project IAM-токен для Cloud DNS v2 vasyanskandClaude Opus 4.8 2026-07-04 21:25:39 +07:00
  • e8e7371f09 fix: drain Identity error body (keep-alive); reject whitespace-only credential fields in form vasyanskandClaude Opus 4.8 2026-07-04 20:36:50 +07:00
  • be408a216c feat(web): Selectel service-user account form (IAM credentials) vasyanskandClaude Opus 4.8 2026-07-04 20:23:34 +07:00
  • 568452846a feat(api): structured provider credentials + trial-auth validation on account create vasyanskandClaude Opus 4.8 2026-07-04 20:12:41 +07:00
  • 32107571d1 feat(selectel): project-scoped IAM auth with token cache; provider Validate vasyanskandClaude Opus 4.8 2026-07-04 20:02:36 +07:00
  • 617b02dbfb docs: plan for Selectel IAM auth (Cloud DNS v2) vasyanskandClaude Opus 4.8 2026-07-04 19:52:42 +07:00
  • 774b480677 Merge feature/tech-debt-docker: техдолг Фаз 1-3 + docker compose vasyanskandClaude Opus 4.8 2026-07-04 16:38:45 +07:00
  • 77ca0200ae build: docker compose (app + postgres) with healthchecks and .env vasyanskandClaude Opus 4.8 2026-07-04 16:27:16 +07:00
  • 675136e488 build: mirror .gitignore dist rules in .dockerignore for hermetic builds vasyanskandClaude Opus 4.8 2026-07-04 16:23:20 +07:00
  • 7d875ea19a build: multi-stage Dockerfile (node build -> go embed -> distroless) vasyanskandClaude Opus 4.8 2026-07-04 16:15:55 +07:00
  • 7256adf637 fix(web): scope Suspense to page body; guard formatConfig against null config vasyanskandClaude Opus 4.8 2026-07-04 16:12:21 +07:00
  • 8c35aed8f2 perf(web): route-level code-splitting; harden channel config rendering vasyanskandClaude Opus 4.8 2026-07-04 16:04:17 +07:00
  • 41844d49a0 test(notify): assert per-channel results on decrypt-fail and unknown-type vasyanskandClaude Opus 4.8 2026-07-04 16:01:14 +07:00
  • f14916396c feat(notify): per-channel delivery results + accurate notification metrics vasyanskandClaude Opus 4.8 2026-07-04 15:56:15 +07:00
  • e9a100ab4a fix(server): drain scheduler on unexpected serve error before exit vasyanskandClaude Opus 4.8 2026-07-04 15:52:40 +07:00
  • a27ddc79e8 feat(server): graceful scheduler shutdown, /healthz, healthcheck mode vasyanskandClaude Opus 4.8 2026-07-04 15:46:56 +07:00
  • c265d36bdb docs: plan for tech-debt cleanup + docker compose vasyanskandClaude Opus 4.8 2026-07-04 15:43:00 +07:00
  • f80d700a83 Merge feature/phase-3: scheduler, notifications (Telegram/Webhook), Prometheus metrics vasyanskandClaude Opus 4.8 2026-07-04 15:16:58 +07:00
  • 504c4c081f fix(phase3): skip templateless domains in scheduler; block CGNAT range in webhook SSRF guard vasyanskandClaude Opus 4.8 2026-07-04 14:58:09 +07:00
  • 34422420ca feat(web): расписание, каналы уведомлений, история проверок, drift-badge vasyansk 2026-07-04 14:40:29 +07:00
  • 45259b9720 feat(web,api): клиент/хуки расписания/каналов/истории + lastCheckStatus в domainResponse vasyanskandClaude Opus 4.8 2026-07-04 14:24:02 +07:00
  • b31f886ae2 feat(server): запуск планировщика, /metrics, graceful shutdown vasyansk 2026-07-04 14:14:00 +07:00
  • 9475af441e fix(scheduler): убрать двойной SaveCheckRun (Checker персистит), SetDrift через CountDriftDomains, resolved после error vasyansk 2026-07-04 14:03:49 +07:00
  • 23e02d6804 feat(scheduler): in-process планировщик проверок + смена статуса + уведомления + метрики vasyansk 2026-07-04 13:53:06 +07:00
  • 070a32717f fix(sec): webhook SSRF-guard через Dialer.Control (закрытие DNS-rebinding TOCTOU) vasyansk 2026-07-04 13:48:22 +07:00
  • 29f448d4b5 fix(sec): санитизация Telegram-ошибок, SSRF-guard Webhook, чистка логов test-канала, go mod tidy, histogram-бакеты vasyansk 2026-07-04 13:40:29 +07:00
  • 5a2903ca1e merge 3 wave: worktree-agent-ab476f3616a493a88 vasyansk 2026-07-04 13:32:02 +07:00
  • d3e83ee81f merge 3 wave: worktree-agent-abf50211e004f196f vasyansk 2026-07-04 13:32:02 +07:00
  • d184b12b29 merge 3 wave: worktree-agent-a23ea3cfa26561e67 vasyansk 2026-07-04 13:32:02 +07:00
  • 7d4bf153d7 feat(api): CRUD расписания/каналов + тест-отправка + история проверок vasyansk 2026-07-04 13:24:50 +07:00
  • e82fb0b13d feat(notify): Telegram/Webhook нотификаторы + Dispatcher по каналам проекта vasyansk 2026-07-04 13:19:21 +07:00
  • 98d8dee413 feat(metrics): Prometheus registry (checks/drift/notifications) + /metrics handler vasyansk 2026-07-04 13:18:58 +07:00
  • 6fd847a909 feat(store): schedules, notification_channels, domain last_check_status + методы vasyansk 2026-07-04 13:10:42 +07:00
  • 1cdb32b747 docs: план реализации Фазы 3 (расписание, уведомления, метрики) vasyanskandClaude Opus 4.8 2026-07-04 13:02:44 +07:00
  • 6125af4bab docs: детализация дизайна Фазы 3 (расписание, уведомления, метрики) vasyanskandClaude Opus 4.8 2026-07-04 12:58:59 +07:00
  • 0c21694ec4 merge: Фаза 2 — авторизация vasyanskandClaude Opus 4.8 2026-07-03 21:40:45 +07:00
  • 901eb51e2a fix(auth): серверная проверка длины пароля, loading-guard и различение ошибок на auth-страницах vasyansk 2026-07-03 21:33:03 +07:00
  • 5a4d560e70 feat(web): Login/Register страницы, protected routes, logout vasyansk 2026-07-03 21:21:29 +07:00
  • 222d6c0453 fix(web): null-guard в мутациях (no active project), AuthContext различает 401 и ошибки сервера vasyanskandClaude Opus 4.8 2026-07-03 21:07:48 +07:00
  • b5d9e8f7ab feat(web): AuthContext + клиент под cookie-сессии, projectId из контекста vasyansk 2026-07-03 21:00:18 +07:00
  • 4533b0ca25 feat(api): RequireAuth+RequireProjectAccess middleware, IDOR-scope check/apply по projectID vasyansk 2026-07-03 20:47:40 +07:00
  • 35ffe73ae3 fix(auth): wiring Auth/Sessions, нормализация email, GetUserByID для /me, 409 на дубль, timing-guard логина vasyansk 2026-07-03 20:29:05 +07:00
  • aa0ef1c6a9 feat(api): auth-хендлеры register/login/logout/me + session cookie vasyansk 2026-07-03 20:11:00 +07:00
  • a584cf5c37 fix(auth): VerifyPassword валидирует параметры/версию, не паникует на битом хэше vasyansk 2026-07-03 19:58:54 +07:00
  • 12b7945efc feat(auth): argon2id пароли + session store (sha256 токена) vasyansk 2026-07-03 19:50:11 +07:00
  • 3bd237d562 feat(store): миграция sessions/password + методы users/sessions/projects vasyanskandClaude Opus 4.8 2026-07-03 19:44:36 +07:00
  • bd82fe5509 docs: план реализации Фазы 2 (авторизация) vasyanskandClaude Opus 4.8 2026-07-03 19:37:27 +07:00
  • fc5d3cdbae docs: детализация дизайна Фазы 2 (авторизация) vasyanskandClaude Opus 4.8 2026-07-03 19:33:12 +07:00
  • 136708bdf0 merge: Фаза 1C — React SPA vasyanskandClaude Opus 4.8 2026-07-03 19:17:45 +07:00
  • 4140847a15 fix(web,server): плейсхолдер dist для воспроизводимой сборки + /api без слэша → API vasyanskandClaude Opus 4.8 2026-07-03 18:24:24 +07:00
  • bba72cc70f feat(web,server): embed статики SPA + fallback, монтирование в cmd/server vasyansk 2026-07-03 18:14:18 +07:00
  • 388bf4aeb6 fix(web): валидация записей шаблона — пустые values не уходят в API, ошибки видимы vasyansk 2026-07-03 18:10:10 +07:00
  • 99e09d35fb feat(web): TemplatesPage + RecordEditor — CRUD шаблонов с редактором записей vasyansk 2026-07-03 18:02:08 +07:00
  • 4e91211a89 feat(web): AccountsPage — CRUD учёток, secret-форма, инструкция Selectel vasyansk 2026-07-03 17:52:59 +07:00