feat(events): полный SHiP action_trace в ActionEvent (transaction_id, creator_action_ordinal, receipt.auth_sequence, …) #1

Merged
claude merged 5 commits from feat/action-trace-fields into dev 2026-05-26 04:26:34 +00:00

5 Commits

Author SHA1 Message Date
coopops 1c3cf56dd0 ci: монтировать pristine-копию node-config через mktemp + запас по таймауту
CI / Lint (pull_request) Successful in 10m1s
CI / Typecheck (pull_request) Failing after 13m8s
CI / Integration tests (pull_request) Has been skipped
CI / Build (pull_request) Has been skipped
CI / Unit tests (pull_request) Has been skipped
Настоящая причина падения integration — не медленный старт, а краш узла:
'plugin_config_exception: Incorrect plugin configuration'. nodeos генерирует
protocol_features/*.json в смонтированный config-каталог; при монтировании
самого workspace эти untracked root-файлы остаются между прогонами на
персистентном раннере и ломают конфиг. Монтируем свежую копию в mktemp-каталог
— узел стартует на чистом конфиге. Заодно sleep 4 (бюджет ожидания ~8 мин).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 04:25:54 +00:00
coopops 82d3ed2643 ci: сносить остаточный контейнер blockchain перед docker run
CI / Lint (pull_request) Successful in 9m21s
CI / Typecheck (pull_request) Successful in 9m27s
CI / Integration tests (pull_request) Failing after 9m7s
CI / Build (pull_request) Has been skipped
CI / Unit tests (pull_request) Successful in 9m32s
Self-hosted раннер персистентный: упавший integration оставляет контейнер
с фиксированным именем blockchain, следующий docker run падает exit 125
(Conflict, name already in use). docker rm -f перед стартом — фикс
самовосстанавливающийся, чистит остаток от предыдущего прогона.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 17:51:44 +00:00
coopops 1ee77e3427 ci: увеличить бюджет ожидания Chain API до 120 попыток + curl --max-time
CI / Lint (pull_request) Successful in 9m22s
CI / Typecheck (pull_request) Successful in 9m25s
CI / Unit tests (pull_request) Successful in 9m34s
CI / Integration tests (pull_request) Failing after 4m56s
CI / Build (pull_request) Has been skipped
На нагруженном раннере nodeos поднимался >6 мин (cache restore тоже ловил
ETIMEDOUT), а curl без --max-time подвисал на ещё-не-отвечающем порту и съедал
60-попыточный бюджет — integration падал на 'Chain API did not become ready'
при здоровой ноде. Узел не крашился (лог сплошь info), нужен лишь запас времени.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 17:16:40 +00:00
coopops 9e37cb585d feat(events): прокинуть полный SHiP action_trace в ActionEvent — transaction_id, creator_action_ordinal, receipt.auth_sequence, console/elapsed/context_free/account_ram_deltas
CI / Lint (pull_request) Successful in 9m50s
CI / Typecheck (pull_request) Successful in 9m25s
CI / Unit tests (pull_request) Successful in 9m46s
CI / Integration tests (pull_request) Failing after 13m36s
CI / Build (pull_request) Has been skipped
ActionEvent отдавал только подмножество трассировки. Потребители (контроллер ЦК:
ledger2 связывает операцию с родительским apply по transaction_id + action_ordinal/
creator_action_ordinal; blockchain-explorer показывает receipt/ram-deltas/console)
требуют полный паритет с прежним транспортом. Данные уже декодируются wharfkit'ом —
ship-reader их просто не извлекал.

ship-reader: ShipTrace += creatorActionOrdinal/contextFree/elapsed/console/
accountRamDeltas; ActionReceipt += authSequence; извлечение в ShipProtocol из
action_trace (auth_sequence поддержан и как объект, и как кортеж). parser2:
BlockProcessor копирует поля в ActionEvent; типы и тесты обновлены.

ship-reader 0.1.0→0.2.0, parser2 1.0.3→1.1.0. Тесты: ship-reader 51, parser2 205 — зелёные.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 16:29:53 +00:00
coopops 2eab959e58 docs(readme): задокументировать известное ограничение SHiP — схлопывание create+remove внутри блока
При emplace+erase строки в одном блоке chainbase::undo_index::on_remove
уничтожает узел без записи в _removed_values — это by-design оптимизация
для отката блока, но SHiP физически не видит такую транзиентную пару и
парсер её не индексирует. Описаны симптомы, когда возникает на практике,
workaround на стороне приложения (sleep ≥ block_time между транзакциями
или modify вместо erase) и план системного фикса в нашем форке coopos.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 05:51:16 +00:00