coopops
92811c258f
feat(parser): авто-переподключение к SHiP через ReconnectSupervisor с backoff
...
CI / Lint (pull_request) Successful in 9m51s
CI / Integration tests (pull_request) Successful in 9m46s
CI / Build (pull_request) Successful in 9m25s
CI / Typecheck (pull_request) Successful in 9m27s
CI / Unit tests (pull_request) Successful in 9m33s
ReconnectSupervisor был написан, протестирован и экспортнут, но НИГДЕ не
подключён к циклу чтения. Parser.start() имел голый for-await без try/catch:
падение ноды → ShipConnectionError наверх → темп переподключений целиком
зависел от внешнего супервизора процесса. Мёртвая нода = рестарт без пауз =
долбёжка ноды без ограничителей.
Что сделано:
- Цикл чтения вынесен в runStreamLoop (core/streamLoop.ts) с инъекцией
зависимостей — чтобы покрыть reconnect/resume юнит-тестами на фейках, без
реального Redis и SHiP.
- runStreamLoop оборачивает (пере)подключение в ReconnectSupervisor:
backoff 1→2→5→15→60с, после maxAttempts без прогресса — process.exit(1)
(оркестратор перезапустит штатно).
- Позиция возобновления перечитывается из Redis на КАЖДОМ подключении
(sync-hash пишется после каждого блока) — продолжаем ровно с последнего
записанного блока, без потерь и дублей.
- ReconnectSupervisor.run теперь передаёт fn callback resetBackoff: каждый
обработанный блок сбрасывает счётчик попыток, чтобы долгая стабильная сессия
после редкого разрыва не копила attempt до выхода.
- Штатная остановка (stop закрывает ws) ловится и не вызывает лишний backoff.
- Parser получил структурный логгер (opts.logger) для onAttempt/onGiveUp.
Тесты: +4 runStreamLoop (reconnect+resume, stop без reconnect, give-up на
мёртвой ноде, resetBackoff на прогрессе), +4 ReconnectSupervisor (resetBackoff).
Всего 229 unit. README: секция «Авто-переподключение к SHiP».
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-05 13:00:11 +00:00
coopops
be67debf51
docs(readme): раздел про backpressure-окно со схемой + конфиг в примерах
...
CI / Typecheck (pull_request) Successful in 9m25s
CI / Integration tests (pull_request) Successful in 9m48s
CI / Build (pull_request) Successful in 9m25s
CI / Lint (pull_request) Successful in 9m51s
CI / Unit tests (pull_request) Successful in 9m32s
Описание окна поглощения writer↔consumer (highWater/lowWater гистерезис, пауза
чтения SHiP по XLEN, антидребезг), ASCII-схема качелей backlog, рекомендация
maxmemory+noeviction. Конфиг backpressure добавлен в оба YAML-примера, строка
Backpr. в арх-диаграмму, актуализированы счётчики тестов (221/54).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-04 05:43:48 +00:00
claude
fce498ce45
feat(events): полный SHiP action_trace в ActionEvent (transaction_id, creator_action_ordinal, receipt.auth_sequence, …) ( #1 )
CI / Lint (push) Successful in 9m20s
CI / Typecheck (push) Failing after 11m9s
CI / Unit tests (push) Has been skipped
CI / Integration tests (push) Has been skipped
CI / Build (push) Has been skipped
2026-05-26 04:26:33 +00:00
coopops
0c3c3bc002
[549-27][ @ant ] config: переключить publish обратно на OIDC trusted publishing и синхронизировать URL репозитория coopenomics/parser→coopenomics/parser2 — npm Trusted Publisher теперь настроен на @coopenomics/parser2 через workflow релиза нового имени репо, NPM_TOKEN больше не нужен и sigstore provenance снова включён; bump до 1.0.3 чтобы Lerna опубликовала новую версию и протестировать OIDC-флоу с новой конфигурацией; URL-ы в README/package.json/examples подтянуты под новое имя github-репо parser2
2026-04-23 16:00:32 +00:00
coopops
167c885a70
[549-27][ @ant ] refactor: вернуть имя parser2 обратно (полный реверт 549-20) — существующий @coopenomics/parser@2026.x в mono-ai живёт в продакшене (dicoop/cooparser всё ещё деплоится), параллельный publish @coopenomics/parser@1.0.x из этого репо создавал коллизию ожиданий у потребителей; раздельные имена parser2/parser устраняют путаницу. Папка packages/parser→parser2, пакет @coopenomics/parser→@coopenomics/parser2, docker image dicoop/parser→dicoop/parser2, Redis prefix parser:→parser2: (ce:parser:, abi, sub, sync, subs, reparse), метрики parser_*→parser2_*, bin parser2. Версия bumpnута до 1.0.2 для нового публичного пакета @coopenomics/parser2
2026-04-23 14:43:22 +00:00
coopops
aff8a2451d
[549-23][ @ant ] feat(parser): bump до 1.0.1 и добавить Docker-секцию в root README — проверить npm trusted publishing через GitHub Actions OIDC (на v1.0.0 lerna скипала No unpublished release found), документировать публичный образ dicoop/parser с docker-compose примером Redis+parser и полным parser.config.yaml шаблоном для пользователей
2026-04-22 15:49:38 +00:00
coopops
2f391db4b4
[549-22][ @ant ] config: поменять Docker Hub namespace coopenomics→dicoop — реальный owner Docker Hub организации для этого проекта dicoop (coopenomics там не существует), иначе docker push падал с insufficient_scope; image теперь публикуется как docker.io/dicoop/parser:<version>
2026-04-22 15:44:33 +00:00
coopops
94dbcb8400
[549-22][ @ant ] config: переключить Docker push на Docker Hub и npm publish на trusted publishing (OIDC) — Docker Hub доступнее без префикса реестра чем ghcr (docker pull coopenomics/parser), а OIDC-публикация в npm избавляет от ручного обновления NPM_TOKEN который рано или поздно забудется и сломает релиз; release.yml теперь использует DOCKERHUB_USERNAME/DOCKERHUB_TOKEN для docker login и id-token write permission с NPM_CONFIG_PROVENANCE=true для sigstore-подписанной публикации через настроенный npm Trusted Publisher
2026-04-22 15:36:55 +00:00
coopops
b023f26a8f
[549-21][ @ant ] config: переименовать root npm-scripts version/publish → release:version/release:publish — имена publish и version зарезервированы как npm lifecycle hooks, Lerna в workspace вызывала сама себя через npm publish трактовав root script как lifecycle handler (@coopenomics/parser@1.0.0 успел, ship-reader упал на рекурсии); ship-reader теперь сможет опубликоваться
2026-04-22 11:03:11 +00:00
coopops
b5cf922a7b
[549-21][ @ant ] config: интегрировать Lerna для управления пакетами и регенерировать lockfile — упростить multi-package версионирование и публикацию перед первым релизом в npm; lerna.json с independent versioning + pnpm as npmClient + allowBranch=main, npm-скрипты changed/version/publish/release в root package.json для локального интерактивного bump и dry-run проверок, release.yml переключён на lerna publish from-package --yes (smart skip неизменных версий вместо ручного version-check), попутно регенерирован pnpm-lock.yaml который после rename parser2→parser провалил CI на ERR_PNPM_OUTDATED_LOCKFILE
2026-04-22 10:47:38 +00:00
coopops
3bdd240d8a
[549-20][ @ant ] refactor: переименовать parser2→parser, добавить root README и автопубликацию из main — привести репозиторий к релизной форме под публичным именем @coopenomics/parser до первого npm publish; единое имя папки, Redis key prefix (parser2:→parser:), метрик (parser2_*→parser_*) и комментариев устраняет путаницу в CLI, observability и docs; root README описывает монорепу, архитектурную схему, процесс релиза; ci.yml теперь только на push/PR в main и dev, отдельный release.yml на push в main детектит bump версии, публикует пакеты в npm, тегирует, создаёт GitHub Release через changelogithub и пушит Docker-образ в ghcr
2026-04-22 10:40:35 +00:00