Commit Graph

  • bbec23c3fb chore: update ignore rules backup/2026-10-05-feature-sqs Repinoid 2026-10-27 14:15:14 +03:00
  • 32b6cd3bf2 chore: update ignore rules feature/replace-kafka-with-sqs Repinoid 2026-10-27 14:15:14 +03:00
  • f082bd3bf9 chore: update ignore rules localed Repinoid 2026-10-27 14:15:14 +03:00
  • ca6a03d72e chore: update ignore rules master Repinoid 2026-10-27 14:15:14 +03:00
  • 068896c2bc chore: update ignore rules Repinoid 2026-10-27 14:08:52 +03:00
  • 78646cbf24 chore: update ignore rules Repinoid 2026-10-27 14:08:52 +03:00
  • b85c67b75a chore: update ignore rules Repinoid 2026-10-27 14:08:52 +03:00
  • 4c2f2e0e86 chore: update ignore rules Repinoid 2026-10-27 14:08:52 +03:00
  • eeee7a5ea2 docs(history): §11 — фикс валидации namespace, doc/device-integration.md, образ v0.1.14 Repinoid 2026-10-11 20:29:40 +03:00
  • 52a93da95d docs: интеграция устройства — MQTT/ACL, требование ts/seq в payload (дедуп по содержимому), лимиты Repinoid 2026-10-11 20:26:30 +03:00
  • 6b9f397746 fix(api): валидировать {namespace} во всех эндпоинтах (было только в POST) + регрессионные тесты Repinoid 2026-10-11 20:26:30 +03:00
  • 4c24c6351c docs(history): расширенный прогон PASS=49 KNOWN=1 — дедуп по содержимому, валидация namespace только в POST Repinoid 2026-10-11 20:23:32 +03:00
  • fa16b02455 docs(history): проверки развёрнутого IoT — PASS=12 FAIL=0 (auth/ACL/tenant-изоляция/дедуп) Repinoid 2026-10-11 19:49:33 +03:00
  • 8e35f9fe5c docs(history): e2e телеметрия пройдена (API -> wss MQTT -> EMQX -> SQS -> consumer -> tenant PG -> API) Repinoid 2026-10-11 19:45:37 +03:00
  • 351d8e7c34 docs(history): деплой IoT на Nubes ✅ — EMQX + iot-service созданы, /health /ready = 200 Repinoid 2026-10-11 19:40:09 +03:00
  • 58cede5716 docs(history): правка дефолтов SQS_ENDPOINT/MQTT_HOST Repinoid 2026-10-11 19:33:28 +03:00
  • 26621f5d08 fix(config): дефолт SQS_ENDPOINT -> https://sqs.sinefo.ru; MQTT_HOST теперь обязателен (пустой дефолт — EMQX в другом namespace) Repinoid 2026-10-11 19:33:15 +03:00
  • e1804c9b97 fix(deploy): MQTT_HOST = containerk8s.<uid> (сервис платформы не называется resource_name) + разбор падения iot-service (PG: владелец таблиц) Repinoid 2026-10-11 19:21:12 +03:00
  • 5978d80ab2 docs(deploy): требование ровно одного EXPOSE + iot-emqx v0.2.5 в чек-листе Repinoid 2026-10-11 15:01:53 +03:00
  • 582902e47a fix(emqx): образ с одним EXPOSE (scratch) + конфиг без salt_rounds — платформа требует ровно один порт Repinoid 2026-10-11 15:01:31 +03:00
  • 0832d7e0cb feat(deploy): Terraform-стек IoT (nubes_http: EMQX + iot-service) — провайдер nubes-test 3.1.0 Repinoid 2026-10-11 14:20:13 +03:00
  • c06fb3a8e2 docs: PG для IoT готов — user iotservice + db iotdb созданы через Nubes API (test) Repinoid 2026-10-11 14:03:38 +03:00
  • e0a5c77f16 docs: чек-лист деплоя IoT на Nubes (образы Gitea, SQS очередь+DLQ, env) Repinoid 2026-10-11 10:07:22 +03:00
  • 73dc51b7f5 chore: игнорировать *.key (креды PG/секреты) Repinoid 2026-10-11 09:54:19 +03:00
  • 16b9f05a86 build: registry → gitea.services.ngcloud.ru/nail (Makefile/Dockerfile/дока) Repinoid 2026-10-11 09:51:08 +03:00
  • fdb9fa86b8 docs(history): зафиксировать решения по оставленным пунктам (16/12) Repinoid 2026-10-11 09:19:50 +03:00
  • f781de75cf docs(history): внешнее ревью и исправления 2026-10-11 Repinoid 2026-10-11 09:14:12 +03:00
  • e510e93099 iotpg: валидировать namespace (safeNamespaceRe) в getTenantDB на всех путях чтения/записи Repinoid 2026-10-11 08:49:00 +03:00
  • 4c1b9b7b9e IoT: maxReceiveCount ко всем ошибкам consumer, ждать Shutdown до deferred Close, не 500 после успешного create Repinoid 2026-10-11 08:48:29 +03:00
  • 93d47376b1 bridge: MessageID=хэш(дедуп), классификация permanent/transient SQS-ошибок, бесконечный ретрай подписки, валидация ns/deviceID Repinoid 2026-10-11 08:46:22 +03:00
  • 89b5660a8b iotpg: не возвращать ошибку при постоянной (poison) ошибке flush — данные уже обработаны построчно Repinoid 2026-10-11 08:37:17 +03:00
  • 994fc054b1 console: namespace = sub (убрать sless-SHA256) и удалить несуществующий /ensure Repinoid 2026-10-11 08:06:20 +03:00
  • fc26ca1954 docs(HISTORY): хвосты 2026-10-11 закрыты, осталось обновлено Repinoid 2026-10-11 07:55:35 +03:00
  • e83d804501 test(iot): безопасность enqueue↔closeAndWait под race (фикс 🔴3) Repinoid 2026-10-11 07:55:08 +03:00
  • ba14d4a767 fix(iot): консоль — убрать старые домены kube5s/sless Repinoid 2026-10-11 07:53:02 +03:00
  • 3e1d981614 fix(iot): пустое тело сообщения → DLQ (вместо молчаливого подтверждения) Repinoid 2026-10-11 07:51:57 +03:00
  • c3106d6e20 fix(iot): ReceivedAt в RFC3339Nano (порядок телеметрии, non-FIFO) Repinoid 2026-10-11 07:51:38 +03:00
  • 099900580b docs(HISTORY): журнал сессии 2026-10-10 — легаси, ветка master, ревью и фиксы Repinoid 2026-10-10 19:29:06 +03:00
  • 85bcf26220 chore(iot): MaxReconnectInterval 30с + Debug для health-проб и телеметрии (ревью) Repinoid 2026-10-10 19:24:12 +03:00
  • aac36bab39 docs(iot): деплой-дока — пароль отдаётся один раз, в БД bcrypt-хэш Repinoid 2026-10-10 19:23:25 +03:00
  • 7c80c7b7f8 test(iot): юнит-тесты валидации идентификаторов и разбора DSN (P1-11) Repinoid 2026-10-10 19:23:09 +03:00
  • 3a73207abd fix(iot): 409 различает конфликт name vs device_id (ревью) Repinoid 2026-10-10 19:21:47 +03:00
  • 3b7c8a0a63 feat(iot): bcrypt-хэш паролей устройств и бриджа + EMQX на bcrypt (P0-3 ч.1) Repinoid 2026-10-10 19:21:10 +03:00
  • 59bd743c87 feat(iot): PATCH обновляет metadata (Terraform) Repinoid 2026-10-10 19:18:01 +03:00
  • 38e3f65c21 fix(iot): пагинация — tiebreaker ts DESC,id DESC + потолок limit; точный лог (Этап 5) Repinoid 2026-10-10 19:17:25 +03:00
  • f3927fdf11 fix(iot): готовность consumer по SQS + ограничение wg.Wait + идемпотентный Close (Этап 3) Repinoid 2026-10-10 19:16:30 +03:00
  • c725676f85 chore(iot): удаление сообщений пакетами DeleteMessageBatch (Этап 5) Repinoid 2026-10-10 19:15:08 +03:00
  • 4a0372ff05 chore(iot): лимит тела запроса + запрет неизвестных полей + таймауты сервера (Этап 5) Repinoid 2026-10-10 19:14:47 +03:00
  • e429f11e7f chore(iot): убрать мёртвый mqtt_auth.go + constant-time админ-токен (Этап 5) Repinoid 2026-10-10 19:14:16 +03:00
  • faba28f824 fix(iot): replaceDSNDatabase (смешение тенантов) + guard namespace (Этап 4) Repinoid 2026-10-10 19:13:35 +03:00
  • c3492cb0f1 fix(iot): JWT — обязательный exp, 401 вместо 403, guard тест-режима, JSON-ошибки (Этап 4) Repinoid 2026-10-10 19:12:48 +03:00
  • 6ff5576e7d fix(iot): /ready отражает факт подписки MQTT (находка #3) Repinoid 2026-10-10 19:10:44 +03:00
  • d7701f2845 fix(iot): ограничить повторы ядовитого сообщения (находка #2) Repinoid 2026-10-10 19:10:12 +03:00
  • dc56a9c2e2 fix(iot): run() int вместо os.Exit — финальный flush не теряется (находка #1) Repinoid 2026-10-10 19:09:33 +03:00
  • 946600238b fix(iot): ретрай GetQueueUrl на старте + выход ≠0 при сбое подсистемы (🔴5) Repinoid 2026-10-10 19:05:08 +03:00
  • 572988a2a1 fix(iot): слить остаток буфера bridge при shutdown + безопасное закрытие канала (🔴3) Repinoid 2026-10-10 19:02:30 +03:00
  • 5600646db3 fix(iot): ретраи отправки SQS до shutdown + таймаут на попытку (🔴4) Repinoid 2026-10-10 18:59:37 +03:00
  • ab146861d3 fix(iot): не терять битые сообщения при недоступной DLQ (🔴7) Repinoid 2026-10-10 18:58:26 +03:00
  • 6048777a9e fix(iot): не рвать автореконнект при сбое подписки (🔴6) Repinoid 2026-10-10 18:55:34 +03:00
  • 2cca7cb856 fix(iot): семантическая валидация envelope (пустые поля → DLQ) Repinoid 2026-10-10 18:53:59 +03:00
  • e31f88ba6b fix(iot): построчный fallback при постоянной ошибке батча (🔴2) Repinoid 2026-10-10 18:53:34 +03:00
  • 7407de5fd3 fix(iot): сериализовать flush (гонка с фоновым flusher'ом — потеря данных) Repinoid 2026-10-10 18:52:43 +03:00
  • 8335afb617 fix(iot): валидация namespace/name/device_id (запрет _, +, #, /) Repinoid 2026-10-10 18:50:56 +03:00
  • 2aef884d02 fix(iot): telemetry_topic в ответе + нормализация metadata Repinoid 2026-10-10 18:49:40 +03:00
  • e2bb642df2 fix(iot): created_at в RFC3339 + перечитывание после Create Repinoid 2026-10-10 18:48:52 +03:00
  • 76f0230f5d fix(iot): отдавать MQTT-пароль при создании + писать phase в БД Repinoid 2026-10-10 18:48:07 +03:00
  • 4290ecfb0a Merge remote-tracking branch 'origin/master' Repinoid 2026-10-10 18:39:10 +03:00
  • 56fadf6ca3 style(iot-admin): переформатирование HTML (форматтер) Repinoid 2026-10-10 18:38:12 +03:00
  • a510522660 chore(iot): убрать старое (Kafka/K8s) из живого админ-UI и .gitignore Repinoid 2026-10-10 18:15:13 +03:00
  • b205f886b6 chore(iot): удалить легаси-код (оператор/CRD/старый API/standalone bridge) Repinoid 2026-10-10 18:11:05 +03:00
  • ecf6b41131 docs(review): Opus code-review of iot-service (bridge->SQS->consumer) verbatim Repinoid 2026-10-10 18:02:59 +03:00
  • 18e4352a47 chore(P2-14/п.4): удалён legacy cmd/sqs-consumer Repinoid 2026-10-07 07:50:29 +03:00
  • 59ed2d59d0 doc(HISTORY): п.2 сделан; п.4 — открытая развилка (NOT NULL vs nullable+удалить legacy) Repinoid 2026-10-07 07:47:36 +03:00
  • e8873fa24d fix(telemetry): ts = время приёма (ReceivedAt), а не момент INSERT Repinoid 2026-10-07 07:47:10 +03:00
  • f2768568d3 doc(HISTORY): реализация п.1 (retryable/permanent) и п.3 (DLQ) зафиксирована Repinoid 2026-10-07 07:41:22 +03:00
  • 4ee0fc3b61 fix(telemetry): различать retryable/permanent ошибки flush (не залипать на ядовитом батче) Repinoid 2026-10-07 07:41:05 +03:00
  • 4031882cae feat(consumer): битые envelope → DLQ вместо потери Repinoid 2026-10-07 07:40:09 +03:00
  • 2b3838680f doc(HISTORY): архитекторский разбор телеметрии — 5 проблем и решение Repinoid 2026-10-07 07:38:27 +03:00
  • b6c083e80f fix(telemetry): не терять строки при ошибке flush (flushAll + InsertTelemetry) Repinoid 2026-10-07 07:32:00 +03:00
  • 38602b7560 P0-8: идемпотентность телеметрии (dedup по message_id) Repinoid 2026-10-07 07:26:50 +03:00
  • 3036572ccc P1-9: readiness-проба /ready отражает состояние bridge/consumer Repinoid 2026-10-07 07:25:09 +03:00
  • f19ab47c29 HISTORY: журнал сессии 2026-10-07 (IoT P0-1/P0-2, P1-4, P0-3.2, P0-7) Repinoid 2026-10-07 07:23:52 +03:00
  • 3175605931 P0-7: подтверждение из SQS только после успешного flush телеметрии в БД Repinoid 2026-10-07 07:23:25 +03:00
  • a4e786d03b P0-3 (часть 2): не отдавать пароль устройства повторно через GET Repinoid 2026-10-06 19:06:02 +03:00
  • c97b63b190 P1-4: убрать неаутентифицированные /internal/mqtt/auth|acl из роутера Repinoid 2026-10-06 19:05:12 +03:00
  • 4afee5cdf9 P0-1/P0-2: tenant-граница по sub + обязательная подпись JWT Repinoid 2026-10-06 19:04:54 +03:00
  • 2e52f0fa6b chore: игнорировать сборочный бинарник ws-probe Repinoid 2026-10-05 20:09:38 +03:00
  • 110d49effe docs(thinking): IoT↔SQS handoff — сводка находок и порядок работ Repinoid 2026-10-05 20:04:20 +03:00
  • 33077ad326 docs(thinking): readiness assessment, remediation plan, Opus review prompt Repinoid 2026-10-05 15:53:29 +03:00
  • f76383a2ef chore: убрать __pycache__ из трекинга, расширить .gitignore (pyc/бинарники/мусор) “Naeel” 2026-08-17 08:20:44 +04:00
  • da4c3d10d0 docs(thinking): Nubes DevOps report — network issues + fixes “Naeel” 2026-08-16 20:43:03 +04:00
  • ce9e20266c feat(landing): vertical large pipeline diagram; v0.1.13 “Naeel” 2026-08-16 19:16:58 +04:00
  • 30e7da8cf8 feat(landing): hand-drawn pipeline SVG diagram; v0.1.12 “Naeel” 2026-08-16 19:11:17 +04:00
  • 0f71e715be docs(landing): rewrite as clear how-to (4 steps with copy-paste commands); v0.1.9 “Naeel” 2026-08-16 18:51:59 +04:00
  • ce01b6f9f8 feat(api): landing page with Nubes design (logo+favicon), /static; v0.1.8 “Naeel” 2026-08-16 18:46:17 +04:00
  • 68becfd6bc fix: review findings (async SQS dispatcher, backoff, batch insert, shutdown order, pagination, HMAC) + loadtest fixes; v0.1.6 “Naeel” 2026-08-16 18:24:09 +04:00
  • 10716aeace test(loadtests): 10 load scenarios + verifier; docs: Sonnet review findings “Naeel” 2026-08-16 16:59:29 +04:00
  • 649a880182 docs: no-kubectl deployment procedure (tail 4) + HISTORY 28-29 “Naeel” 2026-08-16 16:20:07 +04:00
  • 8b3f3ab5df feat(emqx): PG-auth in EMQX v0.2.4 + EnsureBridgeDevice v0.1.2 (tail 3) “Naeel” 2026-08-16 16:18:49 +04:00
  • 12b43e7999 fix(bridge): resubscribe on every (re)connect; emqx v0.2.1 dashboard off; iot-service v0.1.1 “Naeel” 2026-08-16 15:24:26 +04:00