BlocSignal: reactive primitives против «налога» codegen в agent loop

Три режима трения в одном agent loop на Cursor: правка поля → семь слоёв архитектуры → build_runner watch 15–45 секунд; правка поля → холодная сборка около пяти минут; async-тесты без синхронного TDD в «кадре ноль». Schwartz (Google Developer Experts) в разборе продаёт BlocSignal как RISC-ответ; на третьем этапе rollout Cursor стоит рядом с Claude Code и Copilot.
Когда агент упирается в «CISC ceremony»
Правка bool-свойства в UI: событие через трансформер, StreamController, microtask, UseCase, Repository, обратно в state stream. Clean Architecture плюс Stream BLoC (2019–2023) так задуманы. Человек ждёт; агент в IDE копит лишние файлы, ловит flaky async-тесты и простаивает, пока кодогенерация догоняет diff.
Schwartz называет связку CISC ceremony. Цифры его, не бенчмарк редакции: build_runner watch 15–45 секунд после простого изменения; flutter clean и холодная пересборка около пяти минут; codegen в CI 4–8 минут. Плюс merge conflicts в .g.dart / .freezed.dart и порча кэша .dart_tool/build.
BlocSignal, signals v7 и push-pull
BlocSignal: Dart/Flutter-пакеты, границы BLoC плюс push-pull signals на Preact Signals (version 7) из signals (Rody Davis). Монорепозиторий: bloc_signals, bloc_signals_bloc, bloc_signals_riverpod, bloc_signals_otel, bloc_signals_devtools, bloc_signals_lint, bloc_signals_hydrate, bloc_signals_replay, bloc_signals_jaspr. Flutter enterprise mobile/desktop, не универсальный JS-фреймворк.
| Примитив | Роль |
|---|---|
signal |
Синхронная in-frame ячейка состояния |
computed |
Мемоизированная ленивая производная |
effect |
Side-effect с авто-трекингом зависимостей |
CubitSignal / BlocSignal |
Границы unidirectional data flow |
«Code-gen tax» снимают structural equality и copy-on-write через Fast Immutable Collections (fast_immutable_collections, IList/IMap) без generated code. В сводной таблице BlocSignal выше классического BLoC 8/9 и Riverpod v2/v3 по propagation, реактивности, codegen, lifecycle scoping и скорости для агента (Low / Medium / High).
Eager-Dirty / Lazy-Pull (Preact Signals, SolidJS, Angular Signals):
- Push phase: signal изменился, downstream
computed()помечаются stale, без вычислений. - Pull phase: пересчёт только при чтении
.valueактивным виджетом, один раз в топологическом порядке.
Riverpod с eager-push пересчитывает весь downstream сразу, включая off-screen узлы; diamond-glitch и cold reload на autoDispose. «The Pet's Pet»: computed() на контейнере для fan-in/fan-out без RxDart. В agent loop меньше скрытых пересчётов: синхронный граф вместо async-стримов по дереву.
Cursor, skills, мосты и пилот
Phase 3 rollout: Claude Code, Cursor, Copilot, Antigravity для бизнес-логики и unit-тестов на CubitSignal / blocSignalTest. В монорепозитории готовые skills: plugins/bloc-signals/skills/bloc-signals/ и .agents/skills/ (decision matrix, sync testing, widget bindings). Iceberg Pattern и синхронный TDD в frame 0: меньше контекста на diff, меньше файлов за ход агента.
«3x velocity multiplier» Schwartz не подкрепляет методикой. Соло на Cursor: если циклы уходят на codegen и разбор семи слоёв, синхронные примитивы и skills в репозитории могут снять трение; «3x» маркетинг, не замер.
Мосты без «hostage»:
bloc_signals_bloc:toCubit(),BlocBuilderдляflutter_blocbloc_signals_riverpod:toBlocSignal, warm state для RiverpodtoValueListenable()дляAnimatedBuilder/ GoRouter
Пилот на одном экране, четыре фазы (pilot → FIC → AI velocity → DevTools/OTel/lints).
Schwartz заявляет 100,0% line test coverage (CI gate); 16 портированных production apps, >100 000 operations/second, zero memory leaks; 20 static analysis lints и 8 IDE quick-fixes (bloc_signals_lint); OpenTelemetry (bloc_signals_otel), DevTools extension, hydrate, replay, Jaspr web. Независимых бенчмарков BlocSignal против Riverpod/BLoC вне его монорепо нет. Open-source Flutter-экосистема; коммерческий SaaS Schwartz не описывает.
Синхронные примитивы, push-pull и .agents/skills/ стоит проверить на своём модуле, если агент в Cursor тратит ходы на ожидание codegen. Цифры latency и «3x» его оценки, не проверка редакции.
Источники
- Randal L. Schwartz (Google Developer Experts), «The Modern Pitch for BlocSignal: Why Engineering Leads Are Moving to Reactive Primitives» — Dev.to (доступ: 2026-09-10)
- Метаданные поста Dev.to: опубликовано 2026-09-09, 7 реакций, 1 комментарий, время чтения 15 мин