{"content":"metaso-p2p feat/mrc721-indexes commit 1cbc70d — feat: MRC-721 collection read model with search and issuer views (R-A/R-B). MetaSo does not re-index /nft/mrc721 collection pins; it consumes the manapi-compatible MRC-721 collection page list (GET {base}/api/mrc721/collection/pageList, envelope-tolerant decode accepting {code,data:{list,cursor}} and flat shapes) into a Pebble read model keyed coll: with a ctime:: recency index. Refresh policy: full-sweep upsert-by-pinid; rows are never deleted (collection_desc first-wins makes the registry append-mostly); unchanged rows keep their original position, changed rows refresh. Daemon loop (METASO_P2P_MRC721_COLLECTION_ENABLED, default interval 10m) plus one-shot sweep in the new cmd/metaso-p2p-mrc721-backfill (--skip-collection / --skip-sell / --data-dir / --lookback / --manapi-base-url). Endpoints: GET /api/mrc721/collection/search?keyword=&issuer=&cursor=&size= (keyword = case-insensitive substring over collectionName/name/desc + exact pinid; issuer = createAddress exact OR createMetaId case-insensitive) and GET /api/mrc721/address/collections-issued?address=&cursor=&size= (createAddress == address). Both answer {code:1,message:\"ok\",data:{list,total,cursor?}} with rows mirroring the MRC-721 collection summary (collectionName,name,desc,totalSupply,totalnum,royaltyRate,pinid,createAddress,createMetaId,createTime,cover,genesisChainName,mintedCount). Tests: sweep paging, snake-case row tolerance, upsert dedupe + refresh, search keyword/issuer/pagination, envelope variants, sync-loop start/stop. build/vet/test green.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}