From 1c605dd2a511364daac279223f1dc90f63d36d9b Mon Sep 17 00:00:00 2001 From: coopops Date: Sun, 19 Jul 2026 13:36:58 +0000 Subject: [PATCH] fix(agenda): resolve wallet::signagree linked documents by data.coopname, not receiver MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../aggregators/document-package-v1.aggregator.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/components/controller/src/domain/document/aggregators/document-package-v1.aggregator.ts b/components/controller/src/domain/document/aggregators/document-package-v1.aggregator.ts index f7cdee4dfae..6683f074477 100644 --- a/components/controller/src/domain/document/aggregators/document-package-v1.aggregator.ts +++ b/components/controller/src/domain/document/aggregators/document-package-v1.aggregator.ts @@ -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,