{"content":"feat: nft-swap pilot package with issuer import gate and identity restore (commit d20f7bb3, branch feat/nft-swap-pilot-avatar)\n\nM0 tooling for the MetaBot Avatar MetaContract-to-MRC-721 swap pilot (PRD v1.2 + 16 prereview corrections as hard requirements):\n\n- issuer-config: owner-ratified constants (album triple genesis 005d69cb.../codeHash e205939a..., issuer 176C9RPW... at BIP44 m/44'/236'/0'/0/0, vault index 1, collection metabot-avatar totalSupply 9560, black hole 1111...oLvT2, fee ceiling 5000 sats/swap).\n- issuer-source lib: parses the owner-ratified notes file IN-PROCESS only (comment-layer groups, punctuation-glued first words, 12/24-word windows, wrapped-line join fallback); never returns or logs the mnemonic; every candidate gated on the ratified issuer address.\n- import-issuer gate: bip39 + 236 address + metaid + same-origin binding signature (verified against the issuer address). REAL-FILE RESULT: line 22 group matches the issuer address exactly; vault = 1Mw6q8iZ2dYXd6vYwdYfd3ybUKNnWKj8ET (m/44'/236'/0'/0/1). Finding: the identity's on-chain chatpubkey was registered from a key outside this mnemonic's standard derivations - chat key rotation planned in M0.\n- restore-issuer: opens the IDBots store (app closed), restores via the host core with the 236 path + expectedGlobalMetaId hard guard + swap-station profile override, writes the pilot config KV. Scratch-store rehearsal green (bot 'Avatar swap station' created, exact address/globalmetaid match); real-store dry-run clean.\n- selftest 6/6 green on public throwaway fixtures; word-level contamination guard over all CLI output.\n\nNext: owner app-closed window -> production restore + collection_desc registration (first action, name first-come-first-served) + chat key rotation pin + announcement pin, then M0 evidence pack.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}