fix(agenda): resolve wallet::signagree linked documents by data.coopname, not receiver
Typecheck / desktop (pull_request) Failing after 9m39s
Typecheck / controller (pull_request) Has been cancelled

findLinkedAgreementDocument искал wallet::signagree по фильтру receiver=coopname,
но wallet::signagree не делает require_recipient(coopname) (в отличие от
Soviet::make_complete_document) — explorer индексирует это действие только с
receiver='wallet'. Фильтр receiver=coopname всегда давал 0 строк, поэтому
buildLinkedAggregate молча возвращал null, а программные оферты (capital:
Благорост/Генератор, program_id>0, подписываются через wallet::signagree, не
soviet::sndagreement) пропадали из links повестки совета — платформенные
соглашения (wallet/signature/privacy/user, идут через sndagreement) отображались,
а оферта ЦПП — нет, хотя её hash был на месте в meta.links и сам документ был
в реестре.

Воспроизведено и проверено на живом кандидате voskhod: 5 хэшей в meta.links,
но до фикса только 4 резолвились в документ-агрегаты. Скоуп по кооперативу
берём из payload действия (data.coopname), а не из индекса receiver.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
coopops
2026-07-19 13:36:58 +00:00
parent b1b1775277
commit 1c605dd2a5
@@ -321,11 +321,17 @@ export class DocumentPackageV1Aggregator {
const sovietDocument = sovietAgreement?.results?.[0]?.data?.document;
if (sovietDocument) return sovietDocument;
// wallet::signagree не делает require_recipient(coopname) (в отличие от
// Soviet::make_complete_document), поэтому explorer индексирует его только
// с receiver='wallet' — фильтр по receiver=coopname здесь всегда возвращал
// 0 строк, и программные оферты (capital: Благорост/Генератор, program_id>0)
// молча пропадали из links повестки. Скоуп по кооперативу берём из
// data.coopname — единственного надёжного поля в самом payload действия.
const walletAgreement = await getActions(`${process.env.SIMPLE_EXPLORER_API}/get-actions`, {
filter: JSON.stringify({
account: WalletContract.contractName.production,
name: WalletContract.Actions.SignAgreement.actionName,
receiver: process.env.COOPNAME,
'data.coopname': process.env.COOPNAME,
'data.document.doc_hash': docHashFilter,
}),
page: 1,