-
e538ecd509
Update docker-compose-prod.yml
main
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
vasyansk
2026-07-05 16:10:37 +07:00
-
-
879e9e14b1
fix(api): surface real provider error on apply/check instead of generic internal error
vasyansk
2026-07-05 15:53:27 +07:00
-
-
6f9958af60
Merge feature/selective-apply-order: выборочный Apply + удаления перед обновлениями
vasyansk
2026-07-05 15:32:54 +07:00
-
-
e283e5f22a
fix: document apply ordering invariant; visible indeterminate checkbox + test
vasyansk
2026-07-05 15:26:46 +07:00
-
2f1f5311ad
feat(web): per-record apply checkboxes with select-all; prune opt-in
vasyansk
2026-07-05 15:20:09 +07:00
-
0b26923586
feat(apply): per-record selection + deletes-before-updates ordering
vasyansk
2026-07-05 15:10:01 +07:00
-
fc19678727
docs: plan for per-record apply selection + deletes-first order
vasyansk
2026-07-05 15:03:14 +07:00
-
-
0b2b9c6e3e
Merge fix/check-status-and-diff-layout: статус при ручной проверке + перенос длинных значений
vasyansk
2026-07-05 14:48:23 +07:00
-
-
27d70a987e
fix(store): scope SetDomainStatus by project (IDOR); scheduler reuses DeriveStatus
vasyansk
2026-07-05 14:40:13 +07:00
-
784e7bd822
fix(web): wrap long record values in diff and zone view (no horizontal overflow)
vasyansk
2026-07-05 14:27:33 +07:00
-
1b367c4bda
fix(api): manual check persists last_check_status (was stale unknown)
vasyansk
2026-07-05 14:22:02 +07:00
-
cc5e562a67
docs: plan for manual-check status + diff value wrapping
vasyansk
2026-07-05 14:15:02 +07:00
-
-
aa7e8c705a
Merge feature/template-placeholders: плейсхолдер {{domain_name}} в шаблонах
vasyansk
2026-07-05 14:01:34 +07:00
-
-
91f7a02f2c
fix(tmpl): parameterize zone name only on DNS-label boundaries
vasyansk
2026-07-05 13:58:55 +07:00
-
655ae8ccf8
feat(web): hint about {{domain_name}} placeholder in template editor
vasyansk
2026-07-05 13:48:24 +07:00
-
df895d8850
feat(tmpl): {{domain_name}} placeholder — materialize on diff/apply, parameterize on snapshot
vasyansk
2026-07-05 13:41:18 +07:00
-
135917216c
docs: plan for {{domain_name}} template placeholders
vasyansk
2026-07-05 13:34:00 +07:00
-
-
40cec05c9a
Merge fix/empty-changeset-null: пустой changeset → [] не null (белый экран после snapshot)
vasyansk
2026-07-05 13:11:01 +07:00
-
-
bc2e77ad4e
fix: empty changeset must serialize as [] not null (white-screen after snapshot)
vasyansk
2026-07-05 13:10:08 +07:00
-
-
08697e06d7
Merge feature/zone-view-snapshot: просмотр зоны без шаблона + snapshot-шаблон
vasyansk
2026-07-05 12:58:20 +07:00
-
-
9f0938daea
fix: reject snapshot when template already attached (409); handle domains-load error; drop orphaned useDeleteDomain
vasyansk
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
vasyansk
2026-07-05 12:28:07 +07:00
-
c2832348f8
feat(web): view zone without template, snapshot button, no-template status, drop delete
vasyansk
2026-07-05 12:19:50 +07:00
-
5662334799
fix(api): distinguish domain-not-found (404) from provider failure (502) on zone endpoints
vasyansk
2026-07-05 12:14:46 +07:00
-
9ccb304d2e
feat(api): read zone records without template + snapshot-to-template
vasyansk
2026-07-05 12:00:27 +07:00
-
1540140542
docs: plan for zone view without template + snapshot
vasyansk
2026-07-05 11:48:21 +07:00
-
-
b4e34f5b9b
Merge feature/selectel-iam-auth: фикс 401 — project IAM-токен для Cloud DNS v2
vasyansk
2026-07-04 21:25:39 +07:00
-
-
e8e7371f09
fix: drain Identity error body (keep-alive); reject whitespace-only credential fields in form
vasyansk
2026-07-04 20:36:50 +07:00
-
be408a216c
feat(web): Selectel service-user account form (IAM credentials)
vasyansk
2026-07-04 20:23:34 +07:00
-
568452846a
feat(api): structured provider credentials + trial-auth validation on account create
vasyansk
2026-07-04 20:12:41 +07:00
-
32107571d1
feat(selectel): project-scoped IAM auth with token cache; provider Validate
vasyansk
2026-07-04 20:02:36 +07:00
-
617b02dbfb
docs: plan for Selectel IAM auth (Cloud DNS v2)
vasyansk
2026-07-04 19:52:42 +07:00
-
-
774b480677
Merge feature/tech-debt-docker: техдолг Фаз 1-3 + docker compose
vasyansk
2026-07-04 16:38:45 +07:00
-
-
77ca0200ae
build: docker compose (app + postgres) with healthchecks and .env
vasyansk
2026-07-04 16:27:16 +07:00
-
675136e488
build: mirror .gitignore dist rules in .dockerignore for hermetic builds
vasyansk
2026-07-04 16:23:20 +07:00
-
7d875ea19a
build: multi-stage Dockerfile (node build -> go embed -> distroless)
vasyansk
2026-07-04 16:15:55 +07:00
-
7256adf637
fix(web): scope Suspense to page body; guard formatConfig against null config
vasyansk
2026-07-04 16:12:21 +07:00
-
8c35aed8f2
perf(web): route-level code-splitting; harden channel config rendering
vasyansk
2026-07-04 16:04:17 +07:00
-
41844d49a0
test(notify): assert per-channel results on decrypt-fail and unknown-type
vasyansk
2026-07-04 16:01:14 +07:00
-
f14916396c
feat(notify): per-channel delivery results + accurate notification metrics
vasyansk
2026-07-04 15:56:15 +07:00
-
e9a100ab4a
fix(server): drain scheduler on unexpected serve error before exit
vasyansk
2026-07-04 15:52:40 +07:00
-
a27ddc79e8
feat(server): graceful scheduler shutdown, /healthz, healthcheck mode
vasyansk
2026-07-04 15:46:56 +07:00
-
c265d36bdb
docs: plan for tech-debt cleanup + docker compose
vasyansk
2026-07-04 15:43:00 +07:00
-
-
f80d700a83
Merge feature/phase-3: scheduler, notifications (Telegram/Webhook), Prometheus metrics
vasyansk
2026-07-04 15:16:58 +07:00
-
-
504c4c081f
fix(phase3): skip templateless domains in scheduler; block CGNAT range in webhook SSRF guard
vasyansk
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
vasyansk
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 (расписание, уведомления, метрики)
vasyansk
2026-07-04 13:02:44 +07:00
-
6125af4bab
docs: детализация дизайна Фазы 3 (расписание, уведомления, метрики)
vasyansk
2026-07-04 12:58:59 +07:00
-
0c21694ec4
merge: Фаза 2 — авторизация
vasyansk
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 и ошибки сервера
vasyansk
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
vasyansk
2026-07-03 19:44:36 +07:00
-
-
bd82fe5509
docs: план реализации Фазы 2 (авторизация)
vasyansk
2026-07-03 19:37:27 +07:00
-
fc5d3cdbae
docs: детализация дизайна Фазы 2 (авторизация)
vasyansk
2026-07-03 19:33:12 +07:00
-
136708bdf0
merge: Фаза 1C — React SPA
vasyansk
2026-07-03 19:17:45 +07:00
-
-
4140847a15
fix(web,server): плейсхолдер dist для воспроизводимой сборки + /api без слэша → API
vasyansk
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
-
ef003230fa
fix(web): DomainsPage показывает ошибки привязки шаблона и удаления
vasyansk
2026-07-03 17:49:48 +07:00
-
0ce15d30a8
feat(web): DomainsPage — список, импорт зон, привязка шаблона
vasyansk
2026-07-03 17:43:49 +07:00
-
1412da9a31
feat(web): DiffView + DomainDiffPage с prune-guard по умолчанию выключенным
vasyansk
2026-07-03 17:32:20 +07:00
-
267ffc4ed9
fix(web): Domain.templateId опционален (Go omitempty), String() на error
vasyansk
2026-07-03 17:19:51 +07:00
-
6f82036e38
feat(web): типизированный API-клиент, типы DTO, TanStack Query хуки
vasyansk
2026-07-03 17:14:11 +07:00
-
41242973e1
feat(web): scaffold Vite+React+TS, Tailwind v4, shadcn, router, тёмная console-тема
vasyansk
2026-07-03 17:06:23 +07:00
-
-
93cbe538e2
docs: план реализации Фазы 1C (React SPA)
vasyansk
2026-07-03 16:44:41 +07:00
-
fe85918407
docs: детализация дизайна Фазы 1C (React SPA)
vasyansk
2026-07-03 16:40:22 +07:00
-
b329855c28
merge: Фаза 1B — persistence + REST API
vasyansk
2026-07-03 15:33:36 +07:00
-
-
ddab6e2162
fix(store,api): идемпотентный import (UNIQUE+ON CONFLICT) + PATCH привязки шаблона к домену
vasyansk
2026-07-03 15:24:08 +07:00
-
2aca92d070
fix(api): tenant-проверка account/template в CreateDomain (HIGH), атомарный import через транзакцию (MEDIUM)
vasyansk
2026-07-03 15:08:16 +07:00
-
ae6a4d7f4c
feat(api): CRUD accounts/templates/domains + import зон (полный цикл), secret не в ответах
vasyansk
2026-07-03 14:53:29 +07:00
-
763919d23f
feat(server): Loader/Recorder на Store, wiring cmd/server (config→migrate→pool→api)
vasyansk
2026-07-03 14:41:09 +07:00
-
05dc586646
fix(api): 400 на битое тело apply, маскирование internal-ошибок, лимит тела
vasyansk
2026-07-03 14:35:43 +07:00
-
fdf90a7c23
feat(api): chi-роутер, check/apply хендлеры, changeset DTO
vasyansk
2026-07-03 14:28:06 +07:00
-
8a2d985197
feat(service): Check/Apply оркестрация с guard на prune
vasyansk
2026-07-03 14:22:59 +07:00
-
635b05361f
refactor(store): sqlc override uuid→google/uuid.UUID (убирает pgtype boilerplate)
vasyansk
2026-07-03 14:20:03 +07:00