[{"data":1,"prerenderedAt":3546},["ShallowReactive",2],{"navigation":3,"\u002Fservices\u002Fforget":927,"mdc--u5mbys-key":3506,"mdc--ysa2hv-key":3522,"mdc-nxk4bw-key":3534},[4,40,114,446,474,498,596,903],{"title":5,"path":6,"stem":7,"children":8},"Architecture","\u002Farchitecture","architecture",[9,14,28,32,36],{"title":10,"path":6,"stem":11,"access":12,"icon":13},"Overview","architecture\u002Findex","public","i-lucide-network",{"title":10,"path":15,"stem":16,"children":17,"access":12,"icon":19},"\u002Farchitecture\u002Fkernel","architecture\u002F1.kernel\u002Findex",[18,20,24],{"title":10,"path":15,"stem":16,"access":12,"icon":19},"i-lucide-box",{"title":21,"path":22,"stem":23,"access":12},"Enclave","\u002Farchitecture\u002Fkernel\u002Fenclave","architecture\u002F1.kernel\u002Fenclave",{"title":25,"path":26,"stem":27,"access":12},"Forking the enclave","\u002Farchitecture\u002Fkernel\u002Fforking-the-enclave","architecture\u002F1.kernel\u002Fforking-the-enclave",{"title":29,"path":30,"stem":31,"access":12},"Ports","\u002Farchitecture\u002Fports","architecture\u002F2.ports",{"title":33,"path":34,"stem":35,"access":12},"Service layers","\u002Farchitecture\u002Fservice-layers","architecture\u002F3.service-layers",{"title":37,"path":38,"stem":39,"access":12},"Families","\u002Farchitecture\u002Ffamilies","architecture\u002F4.families",{"title":41,"path":42,"stem":43,"children":44},"Core","\u002Fcore","core",[45,47,50,53,56,88,97],{"title":10,"path":42,"stem":46,"access":12,"icon":19},"core\u002Findex",{"title":10,"path":48,"stem":49,"access":12},"\u002Fcore\u002F01-overview","core\u002F01-overview",{"title":10,"path":51,"stem":52,"access":12},"\u002Fcore\u002F05-stores","core\u002F05-stores",{"title":10,"path":54,"stem":55,"access":12},"\u002Fcore\u002F06-permissions-and-keyring","core\u002F06-permissions-and-keyring",{"title":10,"path":57,"stem":58,"children":59,"access":12},"\u002Fcore\u002Fnoydb","core\u002F2.noydb\u002Findex",[60,61,65,68,72,76,80,84],{"title":10,"path":57,"stem":58,"access":12},{"title":62,"path":63,"stem":64,"access":12},"Noydb","\u002Fcore\u002Fnoydb\u002Fmethods","core\u002F2.noydb\u002F1.methods",{"title":21,"path":66,"stem":67,"access":12},"\u002Fcore\u002Fnoydb\u002Fenclave","core\u002F2.noydb\u002F2.enclave",{"title":69,"path":70,"stem":71,"access":12},"Secret & keyring","\u002Fcore\u002Fnoydb\u002Fkeyring","core\u002F2.noydb\u002F3.keyring",{"title":73,"path":74,"stem":75,"access":12},"Authentication","\u002Fcore\u002Fnoydb\u002Fauthentication","core\u002F2.noydb\u002F4.authentication",{"title":77,"path":78,"stem":79,"access":12},"Auth recovery","\u002Fcore\u002Fnoydb\u002Frecovery","core\u002F2.noydb\u002F5.recovery",{"title":81,"path":82,"stem":83,"access":12},"Configuration","\u002Fcore\u002Fnoydb\u002Fconfiguration","core\u002F2.noydb\u002F6.configuration",{"title":85,"path":86,"stem":87,"access":12},"Strategies","\u002Fcore\u002Fnoydb\u002Fstrategies","core\u002F2.noydb\u002F7.strategies",{"title":10,"path":89,"stem":90,"children":91,"access":12},"\u002Fcore\u002Fvault","core\u002F3.vault\u002Findex",[92,93],{"title":10,"path":89,"stem":90,"access":12},{"title":94,"path":95,"stem":96,"access":12},"Vault","\u002Fcore\u002Fvault\u002Fmethods","core\u002F3.vault\u002F1.methods",{"title":10,"path":98,"stem":99,"children":100,"access":12},"\u002Fcore\u002Fcollection","core\u002F4.collection\u002Findex",[101,102,106,110],{"title":10,"path":98,"stem":99,"access":12},{"title":103,"path":104,"stem":105,"access":12},"Collection","\u002Fcore\u002Fcollection\u002Fmethods","core\u002F4.collection\u002F1.methods",{"title":107,"path":108,"stem":109,"access":12},"Querying","\u002Fcore\u002Fcollection\u002Fquerying","core\u002F4.collection\u002F2.querying",{"title":111,"path":112,"stem":113,"access":12},"Schema","\u002Fcore\u002Fcollection\u002Fschema","core\u002F4.collection\u002F3.schema",{"title":37,"path":115,"stem":116,"children":117},"\u002Ffamilies","families",[118,121,168,194,208,212,216,294,340],{"title":10,"path":115,"stem":119,"access":12,"icon":120},"families\u002Findex","i-lucide-plug",{"title":122,"path":123,"stem":124,"children":125,"access":12,"icon":127},"as-Exports","\u002Ffamilies\u002Fas","families\u002Fas\u002Findex",[126,128,132,136,140,144,148,152,156,160,164],{"title":122,"path":123,"stem":124,"access":12,"icon":127},"i-lucide-book-open",{"title":129,"path":130,"stem":131,"access":12},"aws-s3","\u002Ffamilies\u002Fas\u002Faws-s3","families\u002Fas\u002Faws-s3",{"title":133,"path":134,"stem":135,"access":12},"blob","\u002Ffamilies\u002Fas\u002Fblob","families\u002Fas\u002Fblob",{"title":137,"path":138,"stem":139,"access":12},"csv","\u002Ffamilies\u002Fas\u002Fcsv","families\u002Fas\u002Fcsv",{"title":141,"path":142,"stem":143,"access":12},"json","\u002Ffamilies\u002Fas\u002Fjson","families\u002Fas\u002Fjson",{"title":145,"path":146,"stem":147,"access":12},"ndjson","\u002Ffamilies\u002Fas\u002Fndjson","families\u002Fas\u002Fndjson",{"title":149,"path":150,"stem":151,"access":12},"noydb","\u002Ffamilies\u002Fas\u002Fnoydb","families\u002Fas\u002Fnoydb",{"title":153,"path":154,"stem":155,"access":12},"sql","\u002Ffamilies\u002Fas\u002Fsql","families\u002Fas\u002Fsql",{"title":157,"path":158,"stem":159,"access":12},"xlsx","\u002Ffamilies\u002Fas\u002Fxlsx","families\u002Fas\u002Fxlsx",{"title":161,"path":162,"stem":163,"access":12},"xml","\u002Ffamilies\u002Fas\u002Fxml","families\u002Fas\u002Fxml",{"title":165,"path":166,"stem":167,"access":12},"zip","\u002Ffamilies\u002Fas\u002Fzip","families\u002Fas\u002Fzip",{"title":169,"path":170,"stem":171,"children":172,"access":12,"icon":127},"at-Seals","\u002Ffamilies\u002Fat","families\u002Fat\u002Findex",[173,174,178,182,186,190],{"title":169,"path":170,"stem":171,"access":12,"icon":127},{"title":175,"path":176,"stem":177,"access":12},"aws-kms","\u002Ffamilies\u002Fat\u002Faws-kms","families\u002Fat\u002Faws-kms",{"title":179,"path":180,"stem":181,"access":12},"azure-keyvault","\u002Ffamilies\u002Fat\u002Fazure-keyvault","families\u002Fat\u002Fazure-keyvault",{"title":183,"path":184,"stem":185,"access":12},"env","\u002Ffamilies\u002Fat\u002Fenv","families\u002Fat\u002Fenv",{"title":187,"path":188,"stem":189,"access":12},"gcp-kms","\u002Ffamilies\u002Fat\u002Fgcp-kms","families\u002Fat\u002Fgcp-kms",{"title":191,"path":192,"stem":193,"access":12},"macos-keychain","\u002Ffamilies\u002Fat\u002Fmacos-keychain","families\u002Fat\u002Fmacos-keychain",{"title":195,"path":196,"stem":197,"children":198,"access":12,"icon":127},"by-Sessions","\u002Ffamilies\u002Fby","families\u002Fby\u002Findex",[199,200,204],{"title":195,"path":196,"stem":197,"access":12,"icon":127},{"title":201,"path":202,"stem":203,"access":12},"peer","\u002Ffamilies\u002Fby\u002Fpeer","families\u002Fby\u002Fpeer",{"title":205,"path":206,"stem":207,"access":12},"tabs","\u002Ffamilies\u002Fby\u002Ftabs","families\u002Fby\u002Ftabs",{"title":209,"path":210,"stem":211,"access":12},"Classifying a package","\u002Ffamilies\u002Fclassification","families\u002Fclassification",{"title":213,"path":214,"stem":215,"access":12},"Command-line tools","\u002Ffamilies\u002Fcli","families\u002Fcli",{"title":217,"path":218,"stem":219,"children":220,"access":12,"icon":127},"in-Frameworks","\u002Ffamilies\u002Fin","families\u002Fin\u002Findex",[221,222,226,230,234,238,242,246,250,254,258,262,266,270,274,278,282,286,290],{"title":217,"path":218,"stem":219,"access":12,"icon":127},{"title":223,"path":224,"stem":225,"access":12},"ai","\u002Ffamilies\u002Fin\u002Fai","families\u002Fin\u002Fai",{"title":227,"path":228,"stem":229,"access":12},"devtools","\u002Ffamilies\u002Fin\u002Fdevtools","families\u002Fin\u002Fdevtools",{"title":231,"path":232,"stem":233,"access":12},"devtools-tui","\u002Ffamilies\u002Fin\u002Fdevtools-tui","families\u002Fin\u002Fdevtools-tui",{"title":235,"path":236,"stem":237,"access":12},"liff","\u002Ffamilies\u002Fin\u002Fliff","families\u002Fin\u002Fliff",{"title":239,"path":240,"stem":241,"access":12},"nextjs","\u002Ffamilies\u002Fin\u002Fnextjs","families\u002Fin\u002Fnextjs",{"title":243,"path":244,"stem":245,"access":12},"nuxt","\u002Ffamilies\u002Fin\u002Fnuxt","families\u002Fin\u002Fnuxt",{"title":247,"path":248,"stem":249,"access":12},"pinia","\u002Ffamilies\u002Fin\u002Fpinia","families\u002Fin\u002Fpinia",{"title":251,"path":252,"stem":253,"access":12},"pwa","\u002Ffamilies\u002Fin\u002Fpwa","families\u002Fin\u002Fpwa",{"title":255,"path":256,"stem":257,"access":12},"react","\u002Ffamilies\u002Fin\u002Freact","families\u002Fin\u002Freact",{"title":259,"path":260,"stem":261,"access":12},"relay","\u002Ffamilies\u002Fin\u002Frelay","families\u002Fin\u002Frelay",{"title":263,"path":264,"stem":265,"access":12},"rest","\u002Ffamilies\u002Fin\u002Frest","families\u002Fin\u002Frest",{"title":267,"path":268,"stem":269,"access":12},"solid","\u002Ffamilies\u002Fin\u002Fsolid","families\u002Fin\u002Fsolid",{"title":271,"path":272,"stem":273,"access":12},"svelte","\u002Ffamilies\u002Fin\u002Fsvelte","families\u002Fin\u002Fsvelte",{"title":275,"path":276,"stem":277,"access":12},"tanstack-query","\u002Ffamilies\u002Fin\u002Ftanstack-query","families\u002Fin\u002Ftanstack-query",{"title":279,"path":280,"stem":281,"access":12},"tanstack-table","\u002Ffamilies\u002Fin\u002Ftanstack-table","families\u002Fin\u002Ftanstack-table",{"title":283,"path":284,"stem":285,"access":12},"vue","\u002Ffamilies\u002Fin\u002Fvue","families\u002Fin\u002Fvue",{"title":287,"path":288,"stem":289,"access":12},"yjs","\u002Ffamilies\u002Fin\u002Fyjs","families\u002Fin\u002Fyjs",{"title":291,"path":292,"stem":293,"access":12},"zustand","\u002Ffamilies\u002Fin\u002Fzustand","families\u002Fin\u002Fzustand",{"title":295,"path":296,"stem":297,"children":298,"access":12,"icon":127},"on-Auth","\u002Ffamilies\u002Fon","families\u002Fon\u002Findex",[299,300,304,308,312,316,320,324,328,332,336],{"title":295,"path":296,"stem":297,"access":12,"icon":127},{"title":301,"path":302,"stem":303,"access":12},"email-otp","\u002Ffamilies\u002Fon\u002Femail-otp","families\u002Fon\u002Femail-otp",{"title":305,"path":306,"stem":307,"access":12},"magic-link","\u002Ffamilies\u002Fon\u002Fmagic-link","families\u002Fon\u002Fmagic-link",{"title":309,"path":310,"stem":311,"access":12},"oidc","\u002Ffamilies\u002Fon\u002Foidc","families\u002Fon\u002Foidc",{"title":313,"path":314,"stem":315,"access":12},"password","\u002Ffamilies\u002Fon\u002Fpassword","families\u002Fon\u002Fpassword",{"title":317,"path":318,"stem":319,"access":12},"pin","\u002Ffamilies\u002Fon\u002Fpin","families\u002Fon\u002Fpin",{"title":321,"path":322,"stem":323,"access":12},"recovery","\u002Ffamilies\u002Fon\u002Frecovery","families\u002Fon\u002Frecovery",{"title":325,"path":326,"stem":327,"access":12},"shamir","\u002Ffamilies\u002Fon\u002Fshamir","families\u002Fon\u002Fshamir",{"title":329,"path":330,"stem":331,"access":12},"threat","\u002Ffamilies\u002Fon\u002Fthreat","families\u002Fon\u002Fthreat",{"title":333,"path":334,"stem":335,"access":12},"totp","\u002Ffamilies\u002Fon\u002Ftotp","families\u002Fon\u002Ftotp",{"title":337,"path":338,"stem":339,"access":12},"webauthn","\u002Ffamilies\u002Fon\u002Fwebauthn","families\u002Fon\u002Fwebauthn",{"title":341,"path":342,"stem":343,"children":344,"access":12,"icon":127},"to-Stores","\u002Ffamilies\u002Fto","families\u002Fto\u002Findex",[345,346,350,353,357,361,365,370,374,378,382,386,390,394,398,402,406,410,414,417,421,425,429,434,438,442],{"title":341,"path":342,"stem":343,"access":12,"icon":127},{"title":347,"path":348,"stem":349,"access":12},"aws-dynamo","\u002Ffamilies\u002Fto\u002Faws-dynamo","families\u002Fto\u002Faws-dynamo",{"title":129,"path":351,"stem":352,"access":12},"\u002Ffamilies\u002Fto\u002Faws-s3","families\u002Fto\u002Faws-s3",{"title":354,"path":355,"stem":356,"access":12},"browser-fs","\u002Ffamilies\u002Fto\u002Fbrowser-fs","families\u002Fto\u002Fbrowser-fs",{"title":358,"path":359,"stem":360,"access":12},"browser-idb","\u002Ffamilies\u002Fto\u002Fbrowser-idb","families\u002Fto\u002Fbrowser-idb",{"title":362,"path":363,"stem":364,"access":12},"browser-local","\u002Ffamilies\u002Fto\u002Fbrowser-local","families\u002Fto\u002Fbrowser-local",{"title":366,"path":367,"stem":368,"access":12,"icon":369},"Choosing a store","\u002Ffamilies\u002Fto\u002Fchoosing-a-store","families\u002Fto\u002Fchoosing-a-store","i-lucide-split",{"title":371,"path":372,"stem":373,"access":12},"cloudflare-d1","\u002Ffamilies\u002Fto\u002Fcloudflare-d1","families\u002Fto\u002Fcloudflare-d1",{"title":375,"path":376,"stem":377,"access":12},"cloudflare-r2","\u002Ffamilies\u002Fto\u002Fcloudflare-r2","families\u002Fto\u002Fcloudflare-r2",{"title":379,"path":380,"stem":381,"access":12},"drive","\u002Ffamilies\u002Fto\u002Fdrive","families\u002Fto\u002Fdrive",{"title":383,"path":384,"stem":385,"access":12},"file","\u002Ffamilies\u002Fto\u002Ffile","families\u002Fto\u002Ffile",{"title":387,"path":388,"stem":389,"access":12},"icloud","\u002Ffamilies\u002Fto\u002Ficloud","families\u002Fto\u002Ficloud",{"title":391,"path":392,"stem":393,"access":12},"memory","\u002Ffamilies\u002Fto\u002Fmemory","families\u002Fto\u002Fmemory",{"title":395,"path":396,"stem":397,"access":12},"meter","\u002Ffamilies\u002Fto\u002Fmeter","families\u002Fto\u002Fmeter",{"title":399,"path":400,"stem":401,"access":12},"mysql","\u002Ffamilies\u002Fto\u002Fmysql","families\u002Fto\u002Fmysql",{"title":403,"path":404,"stem":405,"access":12},"nfs","\u002Ffamilies\u002Fto\u002Fnfs","families\u002Fto\u002Fnfs",{"title":407,"path":408,"stem":409,"access":12},"postgres","\u002Ffamilies\u002Fto\u002Fpostgres","families\u002Fto\u002Fpostgres",{"title":411,"path":412,"stem":413,"access":12},"probe","\u002Ffamilies\u002Fto\u002Fprobe","families\u002Fto\u002Fprobe",{"title":263,"path":415,"stem":416,"access":12},"\u002Ffamilies\u002Fto\u002Frest","families\u002Fto\u002Frest",{"title":418,"path":419,"stem":420,"access":12},"smb","\u002Ffamilies\u002Fto\u002Fsmb","families\u002Fto\u002Fsmb",{"title":422,"path":423,"stem":424,"access":12},"sqlite","\u002Ffamilies\u002Fto\u002Fsqlite","families\u002Fto\u002Fsqlite",{"title":426,"path":427,"stem":428,"access":12},"ssh","\u002Ffamilies\u002Fto\u002Fssh","families\u002Fto\u002Fssh",{"title":430,"path":431,"stem":432,"access":12,"icon":433},"Store-locator descriptors","\u002Ffamilies\u002Fto\u002Fstore-locator","families\u002Fto\u002Fstore-locator","i-lucide-map-pin",{"title":435,"path":436,"stem":437,"access":12},"supabase","\u002Ffamilies\u002Fto\u002Fsupabase","families\u002Fto\u002Fsupabase",{"title":439,"path":440,"stem":441,"access":12},"turso","\u002Ffamilies\u002Fto\u002Fturso","families\u002Fto\u002Fturso",{"title":443,"path":444,"stem":445,"access":12},"webdav","\u002Ffamilies\u002Fto\u002Fwebdav","families\u002Fto\u002Fwebdav",{"title":447,"path":448,"stem":449,"children":450},"Faq","\u002Ffaq","faq",[451,454,458,462,466,470],{"title":10,"path":448,"stem":452,"access":12,"icon":453},"faq\u002Findex","i-lucide-circle-help",{"title":455,"path":456,"stem":457,"access":12},"Where can noy-db run?","\u002Ffaq\u002Fwhere-can-noy-db-run","faq\u002F1.where-can-noy-db-run",{"title":459,"path":460,"stem":461,"access":12},"Native mobile & PWA","\u002Ffaq\u002Fmobile-and-pwa","faq\u002F2.mobile-and-pwa",{"title":463,"path":464,"stem":465,"access":12},"Threat model","\u002Ffaq\u002Fthreat-model","faq\u002F3.threat-model",{"title":467,"path":468,"stem":469,"access":12},"Community & ecosystem","\u002Ffaq\u002Fcommunity-and-ecosystem","faq\u002F4.community-and-ecosystem",{"title":471,"path":472,"stem":473,"access":12},"Licensing","\u002Ffaq\u002Flicensing","faq\u002F5.licensing",{"title":475,"path":476,"stem":477,"children":478},"Glossary","\u002Fglossary","glossary",[479,482,486,490,494],{"title":10,"path":476,"stem":480,"access":12,"icon":481},"glossary\u002Findex","i-lucide-book-a",{"title":483,"path":484,"stem":485,"access":12},"Core vocabulary","\u002Fglossary\u002Fcore-vocabulary","glossary\u002Fcore-vocabulary",{"title":487,"path":488,"stem":489,"access":12},"Deletion vocabulary","\u002Fglossary\u002Fdeletion","glossary\u002Fdeletion",{"title":491,"path":492,"stem":493,"access":12},"Satellite collection vocabulary","\u002Fglossary\u002Fsatellite-collections","glossary\u002Fsatellite-collections",{"title":495,"path":496,"stem":497,"access":12},"Schema migration vocabulary","\u002Fglossary\u002Fschema-migration","glossary\u002Fschema-migration",{"title":499,"path":500,"stem":501,"children":502},"Recipes","\u002Frecipes","recipes",[503,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,567,571,575,580,584,588,592],{"title":10,"path":500,"stem":504,"access":12,"icon":505},"recipes\u002Findex","i-lucide-play",{"title":507,"path":508,"stem":509,"access":12},"Accounting app","\u002Frecipes\u002Faccounting-app","recipes\u002Faccounting-app",{"title":511,"path":512,"stem":513,"access":12},"Analytics app","\u002Frecipes\u002Fanalytics-app","recipes\u002Fanalytics-app",{"title":515,"path":516,"stem":517,"access":12},"Attestation verifier","\u002Frecipes\u002Fattestation-verifier","recipes\u002Fattestation-verifier",{"title":519,"path":520,"stem":521,"access":12},"AWS-KMS attestation","\u002Frecipes\u002Faws-kms-pdf-attestation","recipes\u002Faws-kms-pdf-attestation",{"title":523,"path":524,"stem":525,"access":12},"Browser durability","\u002Frecipes\u002Fbrowser-durability","recipes\u002Fbrowser-durability",{"title":527,"path":528,"stem":529,"access":12},"Production cloud store","\u002Frecipes\u002Fcloud-store","recipes\u002Fcloud-store",{"title":531,"path":532,"stem":533,"access":12},"Compose your own setup","\u002Frecipes\u002Fcompose-your-own","recipes\u002Fcompose-your-own",{"title":535,"path":536,"stem":537,"access":12},"Confidential HR records","\u002Frecipes\u002Fconfidential-hr","recipes\u002Fconfidential-hr",{"title":539,"path":540,"stem":541,"access":12},"Composing an echo secret","\u002Frecipes\u002Fecho-secret-enrollment","recipes\u002Fecho-secret-enrollment",{"title":543,"path":544,"stem":545,"access":12},"Email archive","\u002Frecipes\u002Femail-archive","recipes\u002Femail-archive",{"title":547,"path":548,"stem":549,"access":12},"Email archive — threads & revisions","\u002Frecipes\u002Femail-archive-threads-revisions","recipes\u002Femail-archive-threads-revisions",{"title":551,"path":552,"stem":553,"access":12},"Export & portability","\u002Frecipes\u002Fexport-portability","recipes\u002Fexport-portability",{"title":555,"path":556,"stem":557,"access":12},"Passwordless OIDC (AWS Cognito)","\u002Frecipes\u002Fpasswordless-oidc","recipes\u002Fpasswordless-oidc",{"title":559,"path":560,"stem":561,"access":12},"Personal notebook","\u002Frecipes\u002Fpersonal-notebook","recipes\u002Fpersonal-notebook",{"title":563,"path":564,"stem":565,"access":12,"icon":566},"Playgrounds","\u002Frecipes\u002Fplaygrounds","recipes\u002Fplaygrounds","i-lucide-gamepad-2",{"title":568,"path":569,"stem":570,"access":12},"React invoice app","\u002Frecipes\u002Freact-invoices","recipes\u002Freact-invoices",{"title":572,"path":573,"stem":574,"access":12},"Collaborative app","\u002Frecipes\u002Frealtime-crdt-app","recipes\u002Frealtime-crdt-app",{"title":576,"path":577,"stem":578,"access":12,"icon":579},"Run the showcases","\u002Frecipes\u002Frun-the-showcases","recipes\u002Frun-the-showcases","i-lucide-flask-conical",{"title":581,"path":582,"stem":583,"access":12},"Search & RAG","\u002Frecipes\u002Fsearch-rag","recipes\u002Fsearch-rag",{"title":585,"path":586,"stem":587,"access":12},"Team vault topology","\u002Frecipes\u002Fteam-vault-topology","recipes\u002Fteam-vault-topology",{"title":589,"path":590,"stem":591,"access":12},"Unlock ceremonies","\u002Frecipes\u002Funlock-ceremonies","recipes\u002Funlock-ceremonies",{"title":593,"path":594,"stem":595,"access":12},"User preferences","\u002Frecipes\u002Fuser-preferences","recipes\u002Fuser-preferences",{"title":597,"path":598,"stem":599,"children":600},"Services","\u002Fservices","services",[601,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,710,714,718,722,726,730,734,738,742,746,750,755,759,763,767,771,775,779,783,787,791,795,799,803,807,811,815,819,823,827,831,835,839,843,847,851,855,859,863,867,871,875,879,883,887,891,895,899],{"title":10,"path":598,"stem":602,"access":12,"icon":603},"services\u002Findex","i-lucide-layers",{"title":605,"path":606,"stem":607,"access":12},"archive","\u002Fservices\u002Farchive","services\u002Farchive",{"title":609,"path":610,"stem":611,"access":12},"attestation","\u002Fservices\u002Fattestation","services\u002Fattestation",{"title":613,"path":614,"stem":615,"access":12},"auth-introspection","\u002Fservices\u002Fauth-introspection","services\u002Fauth-introspection",{"title":617,"path":618,"stem":619,"access":12},"auth-landscape","\u002Fservices\u002Fauth-landscape","services\u002Fauth-landscape",{"title":621,"path":622,"stem":623,"access":12},"blobs","\u002Fservices\u002Fblobs","services\u002Fblobs",{"title":625,"path":626,"stem":627,"access":12},"broker","\u002Fservices\u002Fbroker","services\u002Fbroker",{"title":629,"path":630,"stem":631,"access":12},"bundle","\u002Fservices\u002Fbundle","services\u002Fbundle",{"title":633,"path":634,"stem":635,"access":12},"classified","\u002Fservices\u002Fclassified","services\u002Fclassified",{"title":637,"path":638,"stem":639,"access":12},"computed","\u002Fservices\u002Fcomputed","services\u002Fcomputed",{"title":641,"path":642,"stem":643,"access":12},"consent","\u002Fservices\u002Fconsent","services\u002Fconsent",{"title":645,"path":646,"stem":647,"access":12},"cover","\u002Fservices\u002Fcover","services\u002Fcover",{"title":649,"path":650,"stem":651,"access":12},"coverage","\u002Fservices\u002Fcoverage","services\u002Fcoverage",{"title":653,"path":654,"stem":655,"access":12},"crdt","\u002Fservices\u002Fcrdt","services\u002Fcrdt",{"title":657,"path":658,"stem":659,"access":12},"cross-join","\u002Fservices\u002Fcross-join","services\u002Fcross-join",{"title":661,"path":662,"stem":663,"access":12},"custody","\u002Fservices\u002Fcustody","services\u002Fcustody",{"title":665,"path":666,"stem":667,"access":12},"derivations","\u002Fservices\u002Fderivations","services\u002Fderivations",{"title":669,"path":670,"stem":671,"access":12},"directory","\u002Fservices\u002Fdirectory","services\u002Fdirectory",{"title":673,"path":674,"stem":675,"access":12},"search — AI","\u002Fservices\u002Fembeddings","services\u002Fembeddings",{"title":677,"path":678,"stem":679,"access":12},"Field metadata","\u002Fservices\u002Ffield-metadata","services\u002Ffield-metadata",{"title":681,"path":682,"stem":683,"access":12},"Foreign refs","\u002Fservices\u002Fforeign-refs","services\u002Fforeign-refs",{"title":685,"path":686,"stem":687,"access":12},"forget","\u002Fservices\u002Fforget","services\u002Fforget",{"title":689,"path":690,"stem":691,"access":12},"governance","\u002Fservices\u002Fgovernance","services\u002Fgovernance",{"title":693,"path":694,"stem":695,"access":12},"guards","\u002Fservices\u002Fguards","services\u002Fguards",{"title":697,"path":698,"stem":699,"access":12},"history","\u002Fservices\u002Fhistory","services\u002Fhistory",{"title":701,"path":702,"stem":703,"access":12},"i18n","\u002Fservices\u002Fi18n","services\u002Fi18n",{"title":705,"path":706,"stem":707,"children":708,"access":12},"indexing","\u002Fservices\u002Findexing","services\u002Findexing",[709],{"title":705,"path":706,"stem":707,"access":12},{"title":711,"path":712,"stem":713,"access":12},"introspection","\u002Fservices\u002Fintrospection","services\u002Fintrospection",{"title":715,"path":716,"stem":717,"access":12},"joins","\u002Fservices\u002Fjoins","services\u002Fjoins",{"title":719,"path":720,"stem":721,"access":12},"lazy","\u002Fservices\u002Flazy","services\u002Flazy",{"title":723,"path":724,"stem":725,"access":12},"links","\u002Fservices\u002Flinks","services\u002Flinks",{"title":727,"path":728,"stem":729,"access":12},"live","\u002Fservices\u002Flive","services\u002Flive",{"title":731,"path":732,"stem":733,"access":12},"lookup","\u002Fservices\u002Flookup","services\u002Flookup",{"title":735,"path":736,"stem":737,"access":12},"manifest","\u002Fservices\u002Fmanifest","services\u002Fmanifest",{"title":739,"path":740,"stem":741,"access":12},"materialized-views","\u002Fservices\u002Fmaterialized-views","services\u002Fmaterialized-views",{"title":743,"path":744,"stem":745,"access":12},"Metadata ladder","\u002Fservices\u002Fmetadata-ladder","services\u002Fmetadata-ladder",{"title":747,"path":748,"stem":749,"access":12},"Metadata riders","\u002Fservices\u002Fmetadata-riders","services\u002Fmetadata-riders",{"title":751,"path":752,"stem":753,"access":12,"badge":754},"metrics","\u002Fservices\u002Fmetrics","services\u002Fmetrics","Planned",{"title":756,"path":757,"stem":758,"access":12,"badge":754},"migrations","\u002Fservices\u002Fmigrations","services\u002Fmigrations",{"title":760,"path":761,"stem":762,"access":12},"money","\u002Fservices\u002Fmoney","services\u002Fmoney",{"title":764,"path":765,"stem":766,"access":12},"numbering","\u002Fservices\u002Fnumbering","services\u002Fnumbering",{"title":768,"path":769,"stem":770,"access":12},"overlay-views","\u002Fservices\u002Foverlay-views","services\u002Foverlay-views",{"title":772,"path":773,"stem":774,"access":12,"badge":754},"partitioning","\u002Fservices\u002Fpartitioning","services\u002Fpartitioning",{"title":776,"path":777,"stem":778,"access":12},"periods","\u002Fservices\u002Fperiods","services\u002Fperiods",{"title":780,"path":781,"stem":782,"access":12},"persisted-schemas","\u002Fservices\u002Fpersisted-schemas","services\u002Fpersisted-schemas",{"title":784,"path":785,"stem":786,"access":12},"plaintext-bypass","\u002Fservices\u002Fplaintext-bypass","services\u002Fplaintext-bypass",{"title":788,"path":789,"stem":790,"access":12},"pod-redirect","\u002Fservices\u002Fpod-redirect","services\u002Fpod-redirect",{"title":792,"path":793,"stem":794,"access":12},"pod-signature","\u002Fservices\u002Fpod-signature","services\u002Fpod-signature",{"title":796,"path":797,"stem":798,"access":12},"policy","\u002Fservices\u002Fpolicy","services\u002Fpolicy",{"title":800,"path":801,"stem":802,"access":12},"portability","\u002Fservices\u002Fportability","services\u002Fportability",{"title":804,"path":805,"stem":806,"access":12},"reduce","\u002Fservices\u002Freduce","services\u002Freduce",{"title":808,"path":809,"stem":810,"access":12},"routing","\u002Fservices\u002Frouting","services\u002Frouting",{"title":812,"path":813,"stem":814,"access":12},"satellites","\u002Fservices\u002Fsatellites","services\u002Fsatellites",{"title":816,"path":817,"stem":818,"access":12},"schema-identifiers","\u002Fservices\u002Fschema-identifiers","services\u002Fschema-identifiers",{"title":820,"path":821,"stem":822,"access":12},"schema-update","\u002Fservices\u002Fschema-update","services\u002Fschema-update",{"title":824,"path":825,"stem":826,"access":12},"sealed-record","\u002Fservices\u002Fsealed-record","services\u002Fsealed-record",{"title":828,"path":829,"stem":830,"access":12},"sealing provider id","\u002Fservices\u002Fsealing-pid-stability","services\u002Fsealing-pid-stability",{"title":832,"path":833,"stem":834,"access":12},"search — full-text","\u002Fservices\u002Fsearch","services\u002Fsearch",{"title":836,"path":837,"stem":838,"access":12},"sequence","\u002Fservices\u002Fsequence","services\u002Fsequence",{"title":840,"path":841,"stem":842,"access":12},"session","\u002Fservices\u002Fsession","services\u002Fsession",{"title":844,"path":845,"stem":846,"access":12},"session-tiers","\u002Fservices\u002Fsession-tiers","services\u002Fsession-tiers",{"title":848,"path":849,"stem":850,"access":12},"shadow","\u002Fservices\u002Fshadow","services\u002Fshadow",{"title":852,"path":853,"stem":854,"access":12},"share-link","\u002Fservices\u002Fshare-link","services\u002Fshare-link",{"title":856,"path":857,"stem":858,"access":12},"snapshots","\u002Fservices\u002Fsnapshots","services\u002Fsnapshots",{"title":860,"path":861,"stem":862,"access":12},"store capabilities","\u002Fservices\u002Fstorage-capability-matrix","services\u002Fstorage-capability-matrix",{"title":864,"path":865,"stem":866,"access":12},"sync","\u002Fservices\u002Fsync","services\u002Fsync",{"title":868,"path":869,"stem":870,"access":12},"team","\u002Fservices\u002Fteam","services\u002Fteam",{"title":872,"path":873,"stem":874,"access":12},"tiers","\u002Fservices\u002Ftiers","services\u002Ftiers",{"title":876,"path":877,"stem":878,"access":12},"transactions","\u002Fservices\u002Ftransactions","services\u002Ftransactions",{"title":880,"path":881,"stem":882,"access":12},"partitions","\u002Fservices\u002Ftransferable-partitions","services\u002Ftransferable-partitions",{"title":884,"path":885,"stem":886,"access":12},"user-envelope","\u002Fservices\u002Fuser-envelope","services\u002Fuser-envelope",{"title":888,"path":889,"stem":890,"access":12,"badge":754},"validation","\u002Fservices\u002Fvalidation","services\u002Fvalidation",{"title":892,"path":893,"stem":894,"access":12},"vault-head","\u002Fservices\u002Fvault-head","services\u002Fvault-head",{"title":896,"path":897,"stem":898,"access":12},"via","\u002Fservices\u002Fvia","services\u002Fvia",{"title":900,"path":901,"stem":902,"access":12},"withdrawal","\u002Fservices\u002Fwithdrawal","services\u002Fwithdrawal",{"title":904,"path":905,"stem":906,"children":907},"Start","\u002Fstart","start",[908,911,915,919,923],{"title":10,"path":905,"stem":909,"access":12,"icon":910},"start\u002Findex","i-lucide-flag",{"title":912,"path":913,"stem":914,"access":12},"Install","\u002Fstart\u002Finstall","start\u002F1.install",{"title":916,"path":917,"stem":918,"access":12},"Your first vault","\u002Fstart\u002Ffirst-vault","start\u002F2.first-vault",{"title":920,"path":921,"stem":922,"access":12},"Your first service","\u002Fstart\u002Ffirst-service","start\u002F3.first-service",{"title":924,"path":925,"stem":926,"access":12},"See the ciphertext","\u002Fstart\u002Fsee-the-ciphertext","start\u002F4.see-the-ciphertext",{"id":928,"title":685,"access":12,"apiToc":929,"body":930,"category":3497,"description":3498,"extension":3499,"meta":3500,"navigation":3497,"nest":3501,"path":686,"seo":3502,"sinceVersion":3497,"status":3503,"stem":687,"subtitle":3497,"tier":3504,"tocExternal":3497,"__hash__":3505},"docs\u002Fservices\u002Fforget.md",false,{"type":931,"value":932,"toc":3477},"minimark",[933,936,940,945,963,978,982,1019,1023,1040,1340,1353,1357,1362,1372,1613,2087,2090,2121,2135,2139,2142,2271,2278,2294,2303,2362,2383,2519,2539,2543,2554,2585,2589,2595,2624,2633,2638,2716,2721,2749,2763,2777,2781,3217,3222,3246,3252,3256,3307,3311,3390,3394,3473],[934,935,685],"h1",{"id":685},[937,938],"service-meta",{":rows":939},"[{\"label\":\"Subpath\",\"value\":\"`@noy-db\u002Fhub\u002Fforget`\"},{\"label\":\"Factory\",\"value\":\"`withForget()`\"},{\"label\":\"Layer\",\"value\":\"`with-audit`\"}]",[941,942,944],"h2",{"id":943},"what-it-does","What it does",[946,947,948,949,953,954,957,958,962],"p",{},"Privacy laws such as the GDPR give a person the right to have their data erased on request.\nThe forget service implements that as ",[950,951,952],"strong",{},"crypto-shredding",": instead of hunting down and\ndeleting every copy of a record (impossible once backups exist), each record body is\nencrypted under its own per-record content-encryption key (a ",[950,955,956],{},"CEK",") — see\n",[959,960,961],"a",{"href":66},"Core 02 — Enclave"," — and \"erasing\" a record means destroying that\nkey's ciphertext so the ciphertext body can never be decrypted again, anywhere it was\ncopied.",[946,964,965,966,970,971,974,975,977],{},"You declare which field identifies the data subject on each collection you want covered\n(",[967,968,969],"code",{},"{ invoices: 'buyerId' }","). From then on, noy-db maintains an encrypted index mapping each\nsubject to every record that names them. Calling ",[967,972,973],{},"vault.forget(subjectId)"," looks that index\nup and, for every matching record, rewrites the live envelope and all of its history to an\nempty tombstone — so the body becomes permanently unreadable while the collection's key and\nevery other record stay intact — then appends one entry to the change ledger (see\n",[959,976,697],{"href":698},") proving the erasure happened without retaining the subject's\ndata.",[941,979,981],{"id":980},"prerequisites","Prerequisites",[983,984,985,1002,1012],"ul",{},[986,987,988,993,994,997,998,1001],"li",{},[950,989,990],{},[967,991,992],{},"historyStrategy: withHistory()"," — ",[967,995,996],{},"forget()"," writes its erasure proof into the change ledger, so history must be enabled alongside ",[967,999,1000],{},"withForget()",".",[986,1003,1004,1011],{},[950,1005,1006,1007,1010],{},"A ",[967,1008,1009],{},"subjects"," declaration in the factory"," — mapping each covered collection to its subject field.",[986,1013,1014,1018],{},[1015,1016,1017],"em",{},"Coverage note:"," a collection's classified\u002Fblob fields count as covered only if declared in the same session's config (detailed under the coverage rules below).",[941,1020,1022],{"id":1021},"opt-in","Opt in",[946,1024,1025,1026,1029,1030,1033,1034,1036,1037,1039],{},"Pass ",[967,1027,1028],{},"forgetStrategy: withForget({ subjects: {...} })"," to ",[967,1031,1032],{},"createNoydb",". ",[967,1035,996],{},"\nalso needs the change ledger for its erasure proof, so ",[967,1038,992],{}," must\nbe configured too:",[1041,1042,1047],"pre",{"className":1043,"code":1044,"language":1045,"meta":1046,"style":1046},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createNoydb } from '@noy-db\u002Fhub'\nimport { withForget } from '@noy-db\u002Fhub\u002Fforget'\nimport { withHistory } from '@noy-db\u002Fhub\u002Fhistory'\nimport { toMemory } from '@noy-db\u002Fto-memory'\n\nconst db = await createNoydb({\n  store: toMemory(),                          \u002F\u002F any NoydbStore works\n  user: 'alice',\n  secret: 'correct horse battery staple',\n  historyStrategy: withHistory(),            \u002F\u002F required — forget() writes its proof here\n  forgetStrategy: withForget({ subjects: { invoices: 'buyerId' } }),\n})\n\nconst vault = await db.openVault('acme')\n","ts","",[967,1048,1049,1082,1103,1124,1145,1152,1177,1199,1218,1235,1252,1295,1304,1309],{"__ignoreMap":1046},[1050,1051,1054,1058,1062,1066,1069,1072,1075,1079],"span",{"class":1052,"line":1053},"line",1,[1050,1055,1057],{"class":1056},"s7zQu","import",[1050,1059,1061],{"class":1060},"sMK4o"," {",[1050,1063,1065],{"class":1064},"sTEyZ"," createNoydb",[1050,1067,1068],{"class":1060}," }",[1050,1070,1071],{"class":1056}," from",[1050,1073,1074],{"class":1060}," '",[1050,1076,1078],{"class":1077},"sfazB","@noy-db\u002Fhub",[1050,1080,1081],{"class":1060},"'\n",[1050,1083,1085,1087,1089,1092,1094,1096,1098,1101],{"class":1052,"line":1084},2,[1050,1086,1057],{"class":1056},[1050,1088,1061],{"class":1060},[1050,1090,1091],{"class":1064}," withForget",[1050,1093,1068],{"class":1060},[1050,1095,1071],{"class":1056},[1050,1097,1074],{"class":1060},[1050,1099,1100],{"class":1077},"@noy-db\u002Fhub\u002Fforget",[1050,1102,1081],{"class":1060},[1050,1104,1106,1108,1110,1113,1115,1117,1119,1122],{"class":1052,"line":1105},3,[1050,1107,1057],{"class":1056},[1050,1109,1061],{"class":1060},[1050,1111,1112],{"class":1064}," withHistory",[1050,1114,1068],{"class":1060},[1050,1116,1071],{"class":1056},[1050,1118,1074],{"class":1060},[1050,1120,1121],{"class":1077},"@noy-db\u002Fhub\u002Fhistory",[1050,1123,1081],{"class":1060},[1050,1125,1127,1129,1131,1134,1136,1138,1140,1143],{"class":1052,"line":1126},4,[1050,1128,1057],{"class":1056},[1050,1130,1061],{"class":1060},[1050,1132,1133],{"class":1064}," toMemory",[1050,1135,1068],{"class":1060},[1050,1137,1071],{"class":1056},[1050,1139,1074],{"class":1060},[1050,1141,1142],{"class":1077},"@noy-db\u002Fto-memory",[1050,1144,1081],{"class":1060},[1050,1146,1148],{"class":1052,"line":1147},5,[1050,1149,1151],{"emptyLinePlaceholder":1150},true,"\n",[1050,1153,1155,1159,1162,1165,1168,1171,1174],{"class":1052,"line":1154},6,[1050,1156,1158],{"class":1157},"spNyl","const",[1050,1160,1161],{"class":1064}," db ",[1050,1163,1164],{"class":1060},"=",[1050,1166,1167],{"class":1056}," await",[1050,1169,1065],{"class":1170},"s2Zo4",[1050,1172,1173],{"class":1064},"(",[1050,1175,1176],{"class":1060},"{\n",[1050,1178,1180,1184,1187,1189,1192,1195],{"class":1052,"line":1179},7,[1050,1181,1183],{"class":1182},"swJcz","  store",[1050,1185,1186],{"class":1060},":",[1050,1188,1133],{"class":1170},[1050,1190,1191],{"class":1064},"()",[1050,1193,1194],{"class":1060},",",[1050,1196,1198],{"class":1197},"sHwdD","                          \u002F\u002F any NoydbStore works\n",[1050,1200,1202,1205,1207,1209,1212,1215],{"class":1052,"line":1201},8,[1050,1203,1204],{"class":1182},"  user",[1050,1206,1186],{"class":1060},[1050,1208,1074],{"class":1060},[1050,1210,1211],{"class":1077},"alice",[1050,1213,1214],{"class":1060},"'",[1050,1216,1217],{"class":1060},",\n",[1050,1219,1221,1224,1226,1228,1231,1233],{"class":1052,"line":1220},9,[1050,1222,1223],{"class":1182},"  secret",[1050,1225,1186],{"class":1060},[1050,1227,1074],{"class":1060},[1050,1229,1230],{"class":1077},"correct horse battery staple",[1050,1232,1214],{"class":1060},[1050,1234,1217],{"class":1060},[1050,1236,1238,1241,1243,1245,1247,1249],{"class":1052,"line":1237},10,[1050,1239,1240],{"class":1182},"  historyStrategy",[1050,1242,1186],{"class":1060},[1050,1244,1112],{"class":1170},[1050,1246,1191],{"class":1064},[1050,1248,1194],{"class":1060},[1050,1250,1251],{"class":1197},"            \u002F\u002F required — forget() writes its proof here\n",[1050,1253,1255,1258,1260,1262,1264,1267,1270,1272,1274,1277,1279,1281,1284,1286,1288,1290,1293],{"class":1052,"line":1254},11,[1050,1256,1257],{"class":1182},"  forgetStrategy",[1050,1259,1186],{"class":1060},[1050,1261,1091],{"class":1170},[1050,1263,1173],{"class":1064},[1050,1265,1266],{"class":1060},"{",[1050,1268,1269],{"class":1182}," subjects",[1050,1271,1186],{"class":1060},[1050,1273,1061],{"class":1060},[1050,1275,1276],{"class":1182}," invoices",[1050,1278,1186],{"class":1060},[1050,1280,1074],{"class":1060},[1050,1282,1283],{"class":1077},"buyerId",[1050,1285,1214],{"class":1060},[1050,1287,1068],{"class":1060},[1050,1289,1068],{"class":1060},[1050,1291,1292],{"class":1064},")",[1050,1294,1217],{"class":1060},[1050,1296,1298,1301],{"class":1052,"line":1297},12,[1050,1299,1300],{"class":1060},"}",[1050,1302,1303],{"class":1064},")\n",[1050,1305,1307],{"class":1052,"line":1306},13,[1050,1308,1151],{"emptyLinePlaceholder":1150},[1050,1310,1312,1314,1317,1319,1321,1324,1326,1329,1331,1333,1336,1338],{"class":1052,"line":1311},14,[1050,1313,1158],{"class":1157},[1050,1315,1316],{"class":1064}," vault ",[1050,1318,1164],{"class":1060},[1050,1320,1167],{"class":1056},[1050,1322,1323],{"class":1064}," db",[1050,1325,1001],{"class":1060},[1050,1327,1328],{"class":1170},"openVault",[1050,1330,1173],{"class":1064},[1050,1332,1214],{"class":1060},[1050,1334,1335],{"class":1077},"acme",[1050,1337,1214],{"class":1060},[1050,1339,1303],{"class":1064},[946,1341,1342,1343,1345,1346,1349,1350,1352],{},"Declaring a collection in ",[967,1344,1009],{}," also forces ",[967,1347,1348],{},"perRecordKeys: true"," for it — a shred can\nonly guarantee erasure of a body keyed off its own CEK, so adopting ",[967,1351,685],{}," on a collection\nopts it into per-record keys automatically.",[941,1354,1356],{"id":1355},"usage","Usage",[1358,1359,1361],"h3",{"id":1360},"erase-a-subject","Erase a subject",[946,1363,1364,1365,1368,1369,1371],{},"Every ",[967,1366,1367],{},"put"," on a declared collection updates the encrypted subject index behind the scenes.\n",[967,1370,973],{}," finds and shreds everything indexed under that subject:",[1041,1373,1375],{"className":1043,"code":1374,"language":1045,"meta":1046,"style":1046},"interface Invoice { id: string; buyerId: string; amount: number }\nconst invoices = vault.collection\u003CInvoice>('invoices')\n\nawait invoices.put('inv-1', { id: 'inv-1', buyerId: 'buyer-123', amount: 100 })\nawait invoices.put('inv-1', { id: 'inv-1', buyerId: 'buyer-123', amount: 150 }) \u002F\u002F 2nd version → history\n\nconst result = await vault.forget('buyer-123')\n",[967,1376,1377,1419,1456,1460,1521,1582,1586],{"__ignoreMap":1046},[1050,1378,1379,1382,1386,1388,1391,1393,1396,1399,1402,1404,1406,1408,1411,1413,1416],{"class":1052,"line":1053},[1050,1380,1381],{"class":1157},"interface",[1050,1383,1385],{"class":1384},"sBMFI"," Invoice",[1050,1387,1061],{"class":1060},[1050,1389,1390],{"class":1182}," id",[1050,1392,1186],{"class":1060},[1050,1394,1395],{"class":1384}," string",[1050,1397,1398],{"class":1060},";",[1050,1400,1401],{"class":1182}," buyerId",[1050,1403,1186],{"class":1060},[1050,1405,1395],{"class":1384},[1050,1407,1398],{"class":1060},[1050,1409,1410],{"class":1182}," amount",[1050,1412,1186],{"class":1060},[1050,1414,1415],{"class":1384}," number",[1050,1417,1418],{"class":1060}," }\n",[1050,1420,1421,1423,1426,1428,1431,1433,1436,1439,1442,1445,1447,1449,1452,1454],{"class":1052,"line":1084},[1050,1422,1158],{"class":1157},[1050,1424,1425],{"class":1064}," invoices ",[1050,1427,1164],{"class":1060},[1050,1429,1430],{"class":1064}," vault",[1050,1432,1001],{"class":1060},[1050,1434,1435],{"class":1170},"collection",[1050,1437,1438],{"class":1060},"\u003C",[1050,1440,1441],{"class":1384},"Invoice",[1050,1443,1444],{"class":1060},">",[1050,1446,1173],{"class":1064},[1050,1448,1214],{"class":1060},[1050,1450,1451],{"class":1077},"invoices",[1050,1453,1214],{"class":1060},[1050,1455,1303],{"class":1064},[1050,1457,1458],{"class":1052,"line":1105},[1050,1459,1151],{"emptyLinePlaceholder":1150},[1050,1461,1462,1465,1467,1469,1471,1473,1475,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1505,1507,1509,1511,1513,1517,1519],{"class":1052,"line":1126},[1050,1463,1464],{"class":1056},"await",[1050,1466,1276],{"class":1064},[1050,1468,1001],{"class":1060},[1050,1470,1367],{"class":1170},[1050,1472,1173],{"class":1064},[1050,1474,1214],{"class":1060},[1050,1476,1477],{"class":1077},"inv-1",[1050,1479,1214],{"class":1060},[1050,1481,1194],{"class":1060},[1050,1483,1061],{"class":1060},[1050,1485,1390],{"class":1182},[1050,1487,1186],{"class":1060},[1050,1489,1074],{"class":1060},[1050,1491,1477],{"class":1077},[1050,1493,1214],{"class":1060},[1050,1495,1194],{"class":1060},[1050,1497,1401],{"class":1182},[1050,1499,1186],{"class":1060},[1050,1501,1074],{"class":1060},[1050,1503,1504],{"class":1077},"buyer-123",[1050,1506,1214],{"class":1060},[1050,1508,1194],{"class":1060},[1050,1510,1410],{"class":1182},[1050,1512,1186],{"class":1060},[1050,1514,1516],{"class":1515},"sbssI"," 100",[1050,1518,1068],{"class":1060},[1050,1520,1303],{"class":1064},[1050,1522,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571,1574,1576,1579],{"class":1052,"line":1147},[1050,1524,1464],{"class":1056},[1050,1526,1276],{"class":1064},[1050,1528,1001],{"class":1060},[1050,1530,1367],{"class":1170},[1050,1532,1173],{"class":1064},[1050,1534,1214],{"class":1060},[1050,1536,1477],{"class":1077},[1050,1538,1214],{"class":1060},[1050,1540,1194],{"class":1060},[1050,1542,1061],{"class":1060},[1050,1544,1390],{"class":1182},[1050,1546,1186],{"class":1060},[1050,1548,1074],{"class":1060},[1050,1550,1477],{"class":1077},[1050,1552,1214],{"class":1060},[1050,1554,1194],{"class":1060},[1050,1556,1401],{"class":1182},[1050,1558,1186],{"class":1060},[1050,1560,1074],{"class":1060},[1050,1562,1504],{"class":1077},[1050,1564,1214],{"class":1060},[1050,1566,1194],{"class":1060},[1050,1568,1410],{"class":1182},[1050,1570,1186],{"class":1060},[1050,1572,1573],{"class":1515}," 150",[1050,1575,1068],{"class":1060},[1050,1577,1578],{"class":1064},") ",[1050,1580,1581],{"class":1197},"\u002F\u002F 2nd version → history\n",[1050,1583,1584],{"class":1052,"line":1154},[1050,1585,1151],{"emptyLinePlaceholder":1150},[1050,1587,1588,1590,1593,1595,1597,1599,1601,1603,1605,1607,1609,1611],{"class":1052,"line":1179},[1050,1589,1158],{"class":1157},[1050,1591,1592],{"class":1064}," result ",[1050,1594,1164],{"class":1060},[1050,1596,1167],{"class":1056},[1050,1598,1430],{"class":1064},[1050,1600,1001],{"class":1060},[1050,1602,685],{"class":1170},[1050,1604,1173],{"class":1064},[1050,1606,1214],{"class":1060},[1050,1608,1504],{"class":1077},[1050,1610,1214],{"class":1060},[1050,1612,1303],{"class":1064},[1041,1614,1617],{"className":1615,"code":1616,"language":141,"meta":1046,"style":1046},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"subject\": \"buyer-123\",\n  \"recordsShredded\": 1,\n  \"historyVersionsShredded\": 1,\n  \"collections\": [\"invoices\"],\n  \"unmigratedRecords\": [],\n  \"blobsShredded\": 0,\n  \"blobsRetainedShared\": 0,\n  \"blobResidueCollections\": [],\n  \"indexPostingsPurged\": 0,\n  \"indexResidue\": [],\n  \"sealedFieldsShredded\": 0,\n  \"sealedCekEnvelopesPurged\": 0,\n  \"sealedCekResidue\": [],\n  \"sealedResidue\": [],\n  \"scopedPurgeResidue\": [],\n  \"derivedRecordsErased\": 0,\n  \"derivedAggregatesRecomputed\": 0,\n  \"derivedResidueFrozen\": [],\n  \"derivedResidueUndecodable\": [],\n  \"derivedResidueDeclined\": [],\n  \"lookupReferencesCascaded\": 0,\n  \"lookupReferencesNullified\": 0,\n  \"lookupReferencesResidue\": [],\n  \"ledgerEntry\": { \"op\": \"forget\", \"collection\": \"\", \"id\": \"\", \"version\": 0, \"payloadHash\": \"\u003Csha256 of subject id>\", \"…\": \"…\" }\n}\n",[967,1618,1619,1623,1645,1661,1676,1699,1713,1729,1744,1757,1772,1785,1800,1815,1828,1842,1856,1872,1888,1902,1916,1930,1946,1962,1976,2081],{"__ignoreMap":1046},[1050,1620,1621],{"class":1052,"line":1053},[1050,1622,1176],{"class":1060},[1050,1624,1625,1628,1631,1634,1636,1639,1641,1643],{"class":1052,"line":1084},[1050,1626,1627],{"class":1060},"  \"",[1050,1629,1630],{"class":1157},"subject",[1050,1632,1633],{"class":1060},"\"",[1050,1635,1186],{"class":1060},[1050,1637,1638],{"class":1060}," \"",[1050,1640,1504],{"class":1077},[1050,1642,1633],{"class":1060},[1050,1644,1217],{"class":1060},[1050,1646,1647,1649,1652,1654,1656,1659],{"class":1052,"line":1105},[1050,1648,1627],{"class":1060},[1050,1650,1651],{"class":1157},"recordsShredded",[1050,1653,1633],{"class":1060},[1050,1655,1186],{"class":1060},[1050,1657,1658],{"class":1515}," 1",[1050,1660,1217],{"class":1060},[1050,1662,1663,1665,1668,1670,1672,1674],{"class":1052,"line":1126},[1050,1664,1627],{"class":1060},[1050,1666,1667],{"class":1157},"historyVersionsShredded",[1050,1669,1633],{"class":1060},[1050,1671,1186],{"class":1060},[1050,1673,1658],{"class":1515},[1050,1675,1217],{"class":1060},[1050,1677,1678,1680,1683,1685,1687,1690,1692,1694,1696],{"class":1052,"line":1147},[1050,1679,1627],{"class":1060},[1050,1681,1682],{"class":1157},"collections",[1050,1684,1633],{"class":1060},[1050,1686,1186],{"class":1060},[1050,1688,1689],{"class":1060}," [",[1050,1691,1633],{"class":1060},[1050,1693,1451],{"class":1077},[1050,1695,1633],{"class":1060},[1050,1697,1698],{"class":1060},"],\n",[1050,1700,1701,1703,1706,1708,1710],{"class":1052,"line":1154},[1050,1702,1627],{"class":1060},[1050,1704,1705],{"class":1157},"unmigratedRecords",[1050,1707,1633],{"class":1060},[1050,1709,1186],{"class":1060},[1050,1711,1712],{"class":1060}," [],\n",[1050,1714,1715,1717,1720,1722,1724,1727],{"class":1052,"line":1179},[1050,1716,1627],{"class":1060},[1050,1718,1719],{"class":1157},"blobsShredded",[1050,1721,1633],{"class":1060},[1050,1723,1186],{"class":1060},[1050,1725,1726],{"class":1515}," 0",[1050,1728,1217],{"class":1060},[1050,1730,1731,1733,1736,1738,1740,1742],{"class":1052,"line":1201},[1050,1732,1627],{"class":1060},[1050,1734,1735],{"class":1157},"blobsRetainedShared",[1050,1737,1633],{"class":1060},[1050,1739,1186],{"class":1060},[1050,1741,1726],{"class":1515},[1050,1743,1217],{"class":1060},[1050,1745,1746,1748,1751,1753,1755],{"class":1052,"line":1220},[1050,1747,1627],{"class":1060},[1050,1749,1750],{"class":1157},"blobResidueCollections",[1050,1752,1633],{"class":1060},[1050,1754,1186],{"class":1060},[1050,1756,1712],{"class":1060},[1050,1758,1759,1761,1764,1766,1768,1770],{"class":1052,"line":1237},[1050,1760,1627],{"class":1060},[1050,1762,1763],{"class":1157},"indexPostingsPurged",[1050,1765,1633],{"class":1060},[1050,1767,1186],{"class":1060},[1050,1769,1726],{"class":1515},[1050,1771,1217],{"class":1060},[1050,1773,1774,1776,1779,1781,1783],{"class":1052,"line":1254},[1050,1775,1627],{"class":1060},[1050,1777,1778],{"class":1157},"indexResidue",[1050,1780,1633],{"class":1060},[1050,1782,1186],{"class":1060},[1050,1784,1712],{"class":1060},[1050,1786,1787,1789,1792,1794,1796,1798],{"class":1052,"line":1297},[1050,1788,1627],{"class":1060},[1050,1790,1791],{"class":1157},"sealedFieldsShredded",[1050,1793,1633],{"class":1060},[1050,1795,1186],{"class":1060},[1050,1797,1726],{"class":1515},[1050,1799,1217],{"class":1060},[1050,1801,1802,1804,1807,1809,1811,1813],{"class":1052,"line":1306},[1050,1803,1627],{"class":1060},[1050,1805,1806],{"class":1157},"sealedCekEnvelopesPurged",[1050,1808,1633],{"class":1060},[1050,1810,1186],{"class":1060},[1050,1812,1726],{"class":1515},[1050,1814,1217],{"class":1060},[1050,1816,1817,1819,1822,1824,1826],{"class":1052,"line":1311},[1050,1818,1627],{"class":1060},[1050,1820,1821],{"class":1157},"sealedCekResidue",[1050,1823,1633],{"class":1060},[1050,1825,1186],{"class":1060},[1050,1827,1712],{"class":1060},[1050,1829,1831,1833,1836,1838,1840],{"class":1052,"line":1830},15,[1050,1832,1627],{"class":1060},[1050,1834,1835],{"class":1157},"sealedResidue",[1050,1837,1633],{"class":1060},[1050,1839,1186],{"class":1060},[1050,1841,1712],{"class":1060},[1050,1843,1845,1847,1850,1852,1854],{"class":1052,"line":1844},16,[1050,1846,1627],{"class":1060},[1050,1848,1849],{"class":1157},"scopedPurgeResidue",[1050,1851,1633],{"class":1060},[1050,1853,1186],{"class":1060},[1050,1855,1712],{"class":1060},[1050,1857,1859,1861,1864,1866,1868,1870],{"class":1052,"line":1858},17,[1050,1860,1627],{"class":1060},[1050,1862,1863],{"class":1157},"derivedRecordsErased",[1050,1865,1633],{"class":1060},[1050,1867,1186],{"class":1060},[1050,1869,1726],{"class":1515},[1050,1871,1217],{"class":1060},[1050,1873,1875,1877,1880,1882,1884,1886],{"class":1052,"line":1874},18,[1050,1876,1627],{"class":1060},[1050,1878,1879],{"class":1157},"derivedAggregatesRecomputed",[1050,1881,1633],{"class":1060},[1050,1883,1186],{"class":1060},[1050,1885,1726],{"class":1515},[1050,1887,1217],{"class":1060},[1050,1889,1891,1893,1896,1898,1900],{"class":1052,"line":1890},19,[1050,1892,1627],{"class":1060},[1050,1894,1895],{"class":1157},"derivedResidueFrozen",[1050,1897,1633],{"class":1060},[1050,1899,1186],{"class":1060},[1050,1901,1712],{"class":1060},[1050,1903,1905,1907,1910,1912,1914],{"class":1052,"line":1904},20,[1050,1906,1627],{"class":1060},[1050,1908,1909],{"class":1157},"derivedResidueUndecodable",[1050,1911,1633],{"class":1060},[1050,1913,1186],{"class":1060},[1050,1915,1712],{"class":1060},[1050,1917,1919,1921,1924,1926,1928],{"class":1052,"line":1918},21,[1050,1920,1627],{"class":1060},[1050,1922,1923],{"class":1157},"derivedResidueDeclined",[1050,1925,1633],{"class":1060},[1050,1927,1186],{"class":1060},[1050,1929,1712],{"class":1060},[1050,1931,1933,1935,1938,1940,1942,1944],{"class":1052,"line":1932},22,[1050,1934,1627],{"class":1060},[1050,1936,1937],{"class":1157},"lookupReferencesCascaded",[1050,1939,1633],{"class":1060},[1050,1941,1186],{"class":1060},[1050,1943,1726],{"class":1515},[1050,1945,1217],{"class":1060},[1050,1947,1949,1951,1954,1956,1958,1960],{"class":1052,"line":1948},23,[1050,1950,1627],{"class":1060},[1050,1952,1953],{"class":1157},"lookupReferencesNullified",[1050,1955,1633],{"class":1060},[1050,1957,1186],{"class":1060},[1050,1959,1726],{"class":1515},[1050,1961,1217],{"class":1060},[1050,1963,1965,1967,1970,1972,1974],{"class":1052,"line":1964},24,[1050,1966,1627],{"class":1060},[1050,1968,1969],{"class":1157},"lookupReferencesResidue",[1050,1971,1633],{"class":1060},[1050,1973,1186],{"class":1060},[1050,1975,1712],{"class":1060},[1050,1977,1979,1981,1984,1986,1988,1990,1992,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2018,2020,2022,2025,2027,2029,2031,2033,2035,2038,2040,2042,2044,2046,2048,2051,2053,2055,2057,2060,2062,2064,2066,2069,2071,2073,2075,2077,2079],{"class":1052,"line":1978},25,[1050,1980,1627],{"class":1060},[1050,1982,1983],{"class":1157},"ledgerEntry",[1050,1985,1633],{"class":1060},[1050,1987,1186],{"class":1060},[1050,1989,1061],{"class":1060},[1050,1991,1638],{"class":1060},[1050,1993,1994],{"class":1384},"op",[1050,1996,1633],{"class":1060},[1050,1998,1186],{"class":1060},[1050,2000,1638],{"class":1060},[1050,2002,685],{"class":1077},[1050,2004,1633],{"class":1060},[1050,2006,1194],{"class":1060},[1050,2008,1638],{"class":1060},[1050,2010,1435],{"class":1384},[1050,2012,1633],{"class":1060},[1050,2014,1186],{"class":1060},[1050,2016,2017],{"class":1060}," \"\"",[1050,2019,1194],{"class":1060},[1050,2021,1638],{"class":1060},[1050,2023,2024],{"class":1384},"id",[1050,2026,1633],{"class":1060},[1050,2028,1186],{"class":1060},[1050,2030,2017],{"class":1060},[1050,2032,1194],{"class":1060},[1050,2034,1638],{"class":1060},[1050,2036,2037],{"class":1384},"version",[1050,2039,1633],{"class":1060},[1050,2041,1186],{"class":1060},[1050,2043,1726],{"class":1515},[1050,2045,1194],{"class":1060},[1050,2047,1638],{"class":1060},[1050,2049,2050],{"class":1384},"payloadHash",[1050,2052,1633],{"class":1060},[1050,2054,1186],{"class":1060},[1050,2056,1638],{"class":1060},[1050,2058,2059],{"class":1077},"\u003Csha256 of subject id>",[1050,2061,1633],{"class":1060},[1050,2063,1194],{"class":1060},[1050,2065,1638],{"class":1060},[1050,2067,2068],{"class":1384},"…",[1050,2070,1633],{"class":1060},[1050,2072,1186],{"class":1060},[1050,2074,1638],{"class":1060},[1050,2076,2068],{"class":1077},[1050,2078,1633],{"class":1060},[1050,2080,1418],{"class":1060},[1050,2082,2084],{"class":1052,"line":2083},26,[1050,2085,2086],{"class":1060},"}\n",[946,2088,2089],{},"Once shredded, the record reads back empty rather than throwing:",[1041,2091,2093],{"className":1043,"code":2092,"language":1045,"meta":1046,"style":1046},"await invoices.get('inv-1')\n\u002F\u002F → null\n",[967,2094,2095,2116],{"__ignoreMap":1046},[1050,2096,2097,2099,2101,2103,2106,2108,2110,2112,2114],{"class":1052,"line":1053},[1050,2098,1464],{"class":1056},[1050,2100,1276],{"class":1064},[1050,2102,1001],{"class":1060},[1050,2104,2105],{"class":1170},"get",[1050,2107,1173],{"class":1064},[1050,2109,1214],{"class":1060},[1050,2111,1477],{"class":1077},[1050,2113,1214],{"class":1060},[1050,2115,1303],{"class":1064},[1050,2117,2118],{"class":1052,"line":1084},[1050,2119,2120],{"class":1197},"\u002F\u002F → null\n",[946,2122,2123,2124,2127,2128,2130,2131,2134],{},"A second ",[967,2125,2126],{},"forget('buyer-123')"," call is a no-op: ",[967,2129,1651],{}," comes back ",[967,2132,2133],{},"0"," and nothing\nthrows.",[1358,2136,2138],{"id":2137},"the-erasure-propagates-sync-derived-copies-references","The erasure propagates — sync, derived copies, references",[946,2140,2141],{},"Three fan-outs run beyond the record's own body, history, and side-cars:",[983,2143,2144,2166,2225],{},[986,2145,2146,2149,2150,2153,2154,2157,2158,2161,2162,1001],{},[950,2147,2148],{},"Sync"," (since ",[967,2151,2152],{},"0.3.0-pre.7","). On a synced vault, the tombstones enter the sync\ndirty log, so the shred travels on the next ",[967,2155,2156],{},"push()",". Sync treats a forget tombstone as\n",[950,2159,2160],{},"terminal",": a peer's live edit can never overwrite it, in either direction, and conflict\nresolvers are never consulted against one — see\n",[959,2163,2165],{"href":2164},"\u002Fservices\u002Fsync#erasures-are-terminal","sync → erasures are terminal",[986,2167,2168,2149,2171,2174,2175,2177,2178,2181,2182,2184,2185,2187,2188,2191,2192,2194,2195,2198,2199,2201,2202,2204,2205,2207,2208,2211,2212,2215,2216,2218,2219,2221,2222,1001],{},[950,2169,2170],{},"Derived copies",[967,2172,2173],{},"0.3.0-pre.9","). If the vault uses\n",[959,2176,665],{"href":666},", ",[959,2179,2180],{"href":740},"materialized views",", or\n",[959,2183,637],{"href":638}," fields, ",[967,2186,996],{}," asks the field-feature dependency graph for the\nforgotten record's derived artifacts and fans out: record-grain artifacts (MV rows, derivation\nrows, same-id derived copies) are ",[950,2189,2190],{},"erased"," (",[967,2193,1863],{},"); aggregate-grain rollups\nare ",[950,2196,2197],{},"recomputed"," without the forgotten contribution (",[967,2200,1879],{},") — or, when\nthe rollup's target sits in a period frozen by ",[959,2203,776],{"href":777},", the recompute is\nskipped and audited instead (",[967,2206,1895],{},"), while the subject's own record is still\nfully shredded. A materialized-view output row that resists erasure is surfaced with ",[950,2209,2210],{},"audit\ncandor"," rather than silently skipped, and the reason is split (since ",[967,2213,2214],{},"0.3.0-pre.13",", #785):\n",[967,2217,1909],{}," when the row's ownership stamp couldn't be decoded (ownership\nunconfirmed — e.g. an output elevated above tier 0), versus ",[967,2220,1923],{}," when the row\ndecoded and matched but the tier gate declined its erasure (ownership confirmed, a live copy\ndeliberately retained). Both reasons are entries in the tier map on\n",[959,2223,872],{"href":2224},"\u002Fservices\u002Ftiers#tiers-across-the-system",[986,2226,2227,2149,2230,2232,2233,2235,2236,2239,2240,2243,2244,2246,2247,2250,2251,2254,2255,2258,2259,2262,2263,2265,2266,2191,2268,2270],{},[950,2228,2229],{},"Lookup references",[967,2231,2173],{},"). If the subject's record is a backing row of a\ndeclared ",[959,2234,731],{"href":732}," field, the field's ",[967,2237,2238],{},"onDelete"," semantics apply: ",[967,2241,2242],{},"restrict","\n(the default) refuses the whole ",[967,2245,996],{}," call with ",[967,2248,2249],{},"DictKeyInUseError"," ",[950,2252,2253],{},"before any shred","\nwhile references still exist; ",[967,2256,2257],{},"cascade","\u002F",[967,2260,2261],{},"nullify"," propagate after the shred and are reported on\n",[967,2264,1937],{}," \u002F ",[967,2267,1953],{},[967,2269,1969],{}," names any\npropagation skipped because a reference's compare-key could not be resolved — always empty in\nthe ordinary case, never silent when non-empty).",[1358,2272,2274,2275],{"id":2273},"scope-the-purge-with-scopedpurge","Scope the purge with ",[967,2276,2277],{},"scopedPurge",[946,2279,2280,2281,2284,2285,2287,2288,2290,2291,2293],{},"Two of the fan-outs above scan ",[950,2282,2283],{},"every"," collection by default — declared in ",[967,2286,1009],{}," or not:\nthe sealed-CEK host-delivery envelope purge (",[967,2289,1806],{},") and the blob shred\n(",[967,2292,1719],{},"). That makes an erasure complete even for a sealed value or blob attached to a\ncollection you never declared as a subject — at the cost of a full scan.",[946,2295,2296,2297,2300,2301,1186],{},"Opt into a narrower scan with ",[967,2298,2299],{},"scopedPurge: true",", a sibling of ",[967,2302,1009],{},[1041,2304,2306],{"className":1043,"code":2305,"language":1045,"meta":1046,"style":1046},"forgetStrategy: withForget({\n  subjects: { invoices: 'buyerId' },\n  scopedPurge: true,\n})\n",[967,2307,2308,2321,2343,2356],{"__ignoreMap":1046},[1050,2309,2310,2313,2315,2317,2319],{"class":1052,"line":1053},[1050,2311,2312],{"class":1384},"forgetStrategy",[1050,2314,1186],{"class":1060},[1050,2316,1091],{"class":1170},[1050,2318,1173],{"class":1064},[1050,2320,1176],{"class":1060},[1050,2322,2323,2326,2328,2330,2332,2334,2336,2338,2340],{"class":1052,"line":1084},[1050,2324,2325],{"class":1182},"  subjects",[1050,2327,1186],{"class":1060},[1050,2329,1061],{"class":1060},[1050,2331,1276],{"class":1182},[1050,2333,1186],{"class":1060},[1050,2335,1074],{"class":1060},[1050,2337,1283],{"class":1077},[1050,2339,1214],{"class":1060},[1050,2341,2342],{"class":1060}," },\n",[1050,2344,2345,2348,2350,2354],{"class":1052,"line":1105},[1050,2346,2347],{"class":1182},"  scopedPurge",[1050,2349,1186],{"class":1060},[1050,2351,2353],{"class":2352},"sfNiH"," true",[1050,2355,1217],{"class":1060},[1050,2357,2358,2360],{"class":1052,"line":1126},[1050,2359,1300],{"class":1060},[1050,2361,1303],{"class":1064},[946,2363,2364,2365,2367,2368,2371,2372,2375,2376,2379,2380,1186],{},"Under ",[967,2366,2277],{},", the sealed-CEK purge is limited to collections that declared\n",[967,2369,2370],{},"classifiedFields",", and the blob scan to collections that declared ",[967,2373,2374],{},"blobFields",". A collection that\ndeclared neither is ",[950,2377,2378],{},"skipped, never silently"," — each skip is reported on\n",[967,2381,2382],{},"ForgetResult.scopedPurgeResidue",[1041,2384,2386],{"className":1615,"code":2385,"language":141,"meta":1046,"style":1046},"{\n  \"scopedPurgeResidue\": [\n    { \"reason\": \"skipped-undeclared-sealed-cek\", \"collection\": \"audit_log\", \"count\": 3 },\n    { \"reason\": \"skipped-undeclared-blob-scan\", \"collection\": \"attachments\", \"count\": 12 }\n  ]\n}\n",[967,2387,2388,2392,2405,2459,2510,2515],{"__ignoreMap":1046},[1050,2389,2390],{"class":1052,"line":1053},[1050,2391,1176],{"class":1060},[1050,2393,2394,2396,2398,2400,2402],{"class":1052,"line":1084},[1050,2395,1627],{"class":1060},[1050,2397,1849],{"class":1157},[1050,2399,1633],{"class":1060},[1050,2401,1186],{"class":1060},[1050,2403,2404],{"class":1060}," [\n",[1050,2406,2407,2410,2412,2415,2417,2419,2421,2424,2426,2428,2430,2432,2434,2436,2438,2441,2443,2445,2447,2450,2452,2454,2457],{"class":1052,"line":1105},[1050,2408,2409],{"class":1060},"    {",[1050,2411,1638],{"class":1060},[1050,2413,2414],{"class":1384},"reason",[1050,2416,1633],{"class":1060},[1050,2418,1186],{"class":1060},[1050,2420,1638],{"class":1060},[1050,2422,2423],{"class":1077},"skipped-undeclared-sealed-cek",[1050,2425,1633],{"class":1060},[1050,2427,1194],{"class":1060},[1050,2429,1638],{"class":1060},[1050,2431,1435],{"class":1384},[1050,2433,1633],{"class":1060},[1050,2435,1186],{"class":1060},[1050,2437,1638],{"class":1060},[1050,2439,2440],{"class":1077},"audit_log",[1050,2442,1633],{"class":1060},[1050,2444,1194],{"class":1060},[1050,2446,1638],{"class":1060},[1050,2448,2449],{"class":1384},"count",[1050,2451,1633],{"class":1060},[1050,2453,1186],{"class":1060},[1050,2455,2456],{"class":1515}," 3",[1050,2458,2342],{"class":1060},[1050,2460,2461,2463,2465,2467,2469,2471,2473,2476,2478,2480,2482,2484,2486,2488,2490,2493,2495,2497,2499,2501,2503,2505,2508],{"class":1052,"line":1126},[1050,2462,2409],{"class":1060},[1050,2464,1638],{"class":1060},[1050,2466,2414],{"class":1384},[1050,2468,1633],{"class":1060},[1050,2470,1186],{"class":1060},[1050,2472,1638],{"class":1060},[1050,2474,2475],{"class":1077},"skipped-undeclared-blob-scan",[1050,2477,1633],{"class":1060},[1050,2479,1194],{"class":1060},[1050,2481,1638],{"class":1060},[1050,2483,1435],{"class":1384},[1050,2485,1633],{"class":1060},[1050,2487,1186],{"class":1060},[1050,2489,1638],{"class":1060},[1050,2491,2492],{"class":1077},"attachments",[1050,2494,1633],{"class":1060},[1050,2496,1194],{"class":1060},[1050,2498,1638],{"class":1060},[1050,2500,2449],{"class":1384},[1050,2502,1633],{"class":1060},[1050,2504,1186],{"class":1060},[1050,2506,2507],{"class":1515}," 12",[1050,2509,1418],{"class":1060},[1050,2511,2512],{"class":1052,"line":1147},[1050,2513,2514],{"class":1060},"  ]\n",[1050,2516,2517],{"class":1052,"line":1154},[1050,2518,2086],{"class":1060},[946,2520,2521,2523,2524,2526,2527,2530,2531,2265,2533,2535,2536,2538],{},[967,2522,2449],{}," aggregates the sealed-CEK envelopes left unpurged (or, for a blob scan, the records whose\nblobs went unscanned) for that collection. Leave ",[967,2525,2277],{}," off — the default — for the\nunconditional, always-purged behavior. The declaration signal is ",[950,2528,2529],{},"session-local",": a collection\ncounts as \"declared\" only if its ",[967,2532,2370],{},[967,2534,2374],{}," are declared in the session\nrunning ",[967,2537,996],{},", so run the erasure from a session that has loaded the full schema.",[1358,2540,2542],{"id":2541},"recover-the-subject-index-after-a-lost-write","Recover the subject index after a lost write",[946,2544,2545,2546,2549,2550,2553],{},"The subject index is read-modify-write with no compare-and-swap, so two concurrent writers\nracing on the ",[1015,2547,2548],{},"same"," subject can lose one ref (last write wins). ",[967,2551,2552],{},"vault.rebuildSubjectIndex()","\nrecovers by rescanning every declared collection from the canonical records:",[1041,2555,2557],{"className":1043,"code":2556,"language":1045,"meta":1046,"style":1046},"const reindexed = await vault.rebuildSubjectIndex()\n\u002F\u002F → 2   (2 distinct subjects found across the declared collections)\n",[967,2558,2559,2580],{"__ignoreMap":1046},[1050,2560,2561,2563,2566,2568,2570,2572,2574,2577],{"class":1052,"line":1053},[1050,2562,1158],{"class":1157},[1050,2564,2565],{"class":1064}," reindexed ",[1050,2567,1164],{"class":1060},[1050,2569,1167],{"class":1056},[1050,2571,1430],{"class":1064},[1050,2573,1001],{"class":1060},[1050,2575,2576],{"class":1170},"rebuildSubjectIndex",[1050,2578,2579],{"class":1064},"()\n",[1050,2581,2582],{"class":1052,"line":1084},[1050,2583,2584],{"class":1197},"\u002F\u002F → 2   (2 distinct subjects found across the declared collections)\n",[941,2586,2588],{"id":2587},"api-reference","API reference",[1358,2590,2592],{"id":2591},"withforgetopts",[967,2593,2594],{},"withForget(opts)",[1041,2596,2598],{"className":1043,"code":2597,"language":1045,"meta":1046,"style":1046},"function withForget(opts: SubjectDeclaration): ForgetStrategy\n",[967,2599,2600],{"__ignoreMap":1046},[1050,2601,2602,2605,2607,2609,2613,2615,2618,2621],{"class":1052,"line":1053},[1050,2603,2604],{"class":1157},"function",[1050,2606,1091],{"class":1170},[1050,2608,1173],{"class":1060},[1050,2610,2612],{"class":2611},"sHdIc","opts",[1050,2614,1186],{"class":1060},[1050,2616,2617],{"class":1384}," SubjectDeclaration",[1050,2619,2620],{"class":1060},"):",[1050,2622,2623],{"class":1384}," ForgetStrategy\n",[946,2625,2626,2627,2629,2630,2632],{},"Builds the active forget strategy from a subject declaration. Pass it as ",[967,2628,2312],{}," to\n",[967,2631,1032],{}," — this is the only wiring step.",[946,2634,2635,1186],{},[967,2636,2637],{},"SubjectDeclaration",[2639,2640,2641,2657],"table",{},[2642,2643,2644],"thead",{},[2645,2646,2647,2651,2654],"tr",{},[2648,2649,2650],"th",{},"Field",[2648,2652,2653],{},"Type",[2648,2655,2656],{},"Purpose",[2658,2659,2660,2682],"tbody",{},[2645,2661,2662,2667,2672],{},[2663,2664,2665],"td",{},[967,2666,1009],{},[2663,2668,2669],{},[967,2670,2671],{},"Record\u003Cstring, string>",[2663,2673,2674,2675,2678,2679,2681],{},"Maps a collection name to the record field (dotted path supported, e.g. ",[967,2676,2677],{},"'billing.buyerId'",") that identifies the data subject. Declaring a collection here forces ",[967,2680,1348],{}," for it.",[2645,2683,2684,2688,2697],{},[2663,2685,2686],{},[967,2687,2277],{},[2663,2689,2690,2693,2694,1292],{},[967,2691,2692],{},"boolean"," (optional, default ",[967,2695,2696],{},"false",[2663,2698,2699,2700,2703,2704,2265,2706,2708,2709,2711,2712,1001],{},"When ",[967,2701,2702],{},"true",", limits the sealed-CEK envelope purge and the blob scan to collections that declared ",[967,2705,2370],{},[967,2707,2374],{},"; undeclared collections are skipped and reported on ",[967,2710,2382],{},". Left off, both purges scan every collection unconditionally. See ",[959,2713,2715],{"href":2714},"#scope-the-purge-with-scopedpurge","Scope the purge",[1358,2717,2719],{"id":2718},"vaultforgetsubjectid",[967,2720,973],{},[1041,2722,2724],{"className":1043,"code":2723,"language":1045,"meta":1046,"style":1046},"vault.forget(subjectId: string): Promise\u003CForgetResult>\n",[967,2725,2726],{"__ignoreMap":1046},[1050,2727,2728,2731,2733,2735,2738,2741,2743,2746],{"class":1052,"line":1053},[1050,2729,2730],{"class":1064},"vault",[1050,2732,1001],{"class":1060},[1050,2734,685],{"class":1170},[1050,2736,2737],{"class":1064},"(subjectId: string): ",[1050,2739,2740],{"class":1384},"Promise",[1050,2742,1438],{"class":1060},[1050,2744,2745],{"class":1064},"ForgetResult",[1050,2747,2748],{"class":1060},">\n",[946,2750,2751,2752,2755,2756,2759,2760,2762],{},"Looks up every record referencing ",[967,2753,2754],{},"subjectId"," in the encrypted subject index, tombstones\neach one's live body and full history, purges its index postings \u002F sealed-field \u002F blob\nside-cars, removes it from the subject index, and appends one ",[967,2757,2758],{},"op:'forget'"," entry to the\nledger (",[967,2761,2050],{}," is the SHA-256 of the subject id, so the chain proves the subject\nexisted and was erased without recording the subject itself).",[946,2764,2765,2766,2769,2770,2772,2773,2776],{},"Throws ",[967,2767,2768],{},"ForgetStrategyNotConfiguredError"," if ",[967,2771,2312],{}," was never set (or was left at\nthe default disabled sentinel). Throws if ",[967,2774,2775],{},"historyStrategy"," was not configured — the ledger\nentry is how the erasure is proven.",[946,2778,2779,1186],{},[967,2780,2745],{},[2639,2782,2783,2794],{},[2642,2784,2785],{},[2645,2786,2787,2789,2791],{},[2648,2788,2650],{},[2648,2790,2653],{},[2648,2792,2793],{},"Meaning",[2658,2795,2796,2810,2824,2837,2851,2867,2880,2893,2910,2923,2942,2958,2981,2996,3014,3041,3056,3071,3088,3117,3142,3163,3180,3200],{},[2645,2797,2798,2802,2807],{},[2663,2799,2800],{},[967,2801,1630],{},[2663,2803,2804],{},[967,2805,2806],{},"string",[2663,2808,2809],{},"The subject id passed in, echoed back.",[2645,2811,2812,2816,2821],{},[2663,2813,2814],{},[967,2815,1651],{},[2663,2817,2818],{},[967,2819,2820],{},"number",[2663,2822,2823],{},"Live records rewritten to a tombstone.",[2645,2825,2826,2830,2834],{},[2663,2827,2828],{},[967,2829,1667],{},[2663,2831,2832],{},[967,2833,2820],{},[2663,2835,2836],{},"History envelopes tombstoned across all shredded records.",[2645,2838,2839,2843,2848],{},[2663,2840,2841],{},[967,2842,1682],{},[2663,2844,2845],{},[967,2846,2847],{},"readonly string[]",[2663,2849,2850],{},"Distinct collections that had at least one record shredded.",[2645,2852,2853,2857,2861],{},[2663,2854,2855],{},[967,2856,1705],{},[2663,2858,2859],{},[967,2860,2847],{},[2663,2862,2863,2866],{},[967,2864,2865],{},"collection:id"," pairs shredded while their body was still keyed off the shared collection key (not yet migrated to a per-record CEK) — tombstoned, but pre-shred ciphertext that leaked into a backup before migration may still be decryptable. Migrate the record and re-forget to close the gap.",[2645,2868,2869,2873,2877],{},[2663,2870,2871],{},[967,2872,1719],{},[2663,2874,2875],{},[967,2876,2820],{},[2663,2878,2879],{},"Erasable blob attachments crypto-shredded (their own key destroyed).",[2645,2881,2882,2886,2890],{},[2663,2883,2884],{},[967,2885,1735],{},[2663,2887,2888],{},[967,2889,2820],{},[2663,2891,2892],{},"Erasable blobs kept because another record still references the same content.",[2645,2894,2895,2899,2903],{},[2663,2896,2897],{},[967,2898,1750],{},[2663,2900,2901],{},[967,2902,2847],{},[2663,2904,2905,2906,2909],{},"Collections with blobs that could ",[950,2907,2908],{},"not"," be shredded — legacy blobs with no per-blob key, or a session with the blob service not loaded.",[2645,2911,2912,2916,2920],{},[2663,2913,2914],{},[967,2915,1763],{},[2663,2917,2918],{},[967,2919,2820],{},[2663,2921,2922],{},"Persisted lookup-index side-cars deleted for the shredded records.",[2645,2924,2925,2929,2933],{},[2663,2926,2927],{},[967,2928,1778],{},[2663,2930,2931],{},[967,2932,2847],{},[2663,2934,2935,2938,2939,2941],{},[967,2936,2937],{},"collection:id:field"," entries whose index side-car could ",[950,2940,2908],{}," be deleted — still leaks the indexed value.",[2645,2943,2944,2948,2952],{},[2663,2945,2946],{},[967,2947,1791],{},[2663,2949,2950],{},[967,2951,2820],{},[2663,2953,2954,2955,2957],{},"Sealed-field slots (see ",[959,2956,633],{"href":634},") dropped because they were keyed off the per-record CEK.",[2645,2959,2960,2964,2968],{},[2663,2961,2962],{},[967,2963,1806],{},[2663,2965,2966],{},[967,2967,2820],{},[2663,2969,2970,2973,2974,2977,2978,2980],{},[959,2971,2972],{"href":825},"Sealed-record"," host-delivery envelopes deleted — a record sealed to an ",[967,2975,2976],{},"at-*"," host persists its raw CEK there, and ",[967,2979,996],{}," destroys it too.",[2645,2982,2983,2987,2991],{},[2663,2984,2985],{},[967,2986,1821],{},[2663,2988,2989],{},[967,2990,2847],{},[2663,2992,2993,2995],{},[967,2994,2865],{}," pairs whose sealed-record host-delivery envelope purge failed.",[2645,2997,2998,3002,3006],{},[2663,2999,3000],{},[967,3001,1835],{},[2663,3003,3004],{},[967,3005,2847],{},[2663,3007,3008,3010,3011,3013],{},[967,3009,2937],{}," sealed slots that were keyed off the shared collection key (legacy) and so were ",[950,3012,2908],{}," crypto-shredded by the tombstone.",[2645,3015,3016,3020,3025],{},[2663,3017,3018],{},[967,3019,1849],{},[2663,3021,3022],{},[967,3023,3024],{},"readonly ScopedPurgeResidueNotice[]",[2663,3026,2364,3027,3029,3030,3033,3034,3036,3037,3040],{},[967,3028,2277],{},", one entry per undeclared collection skipped by the sealed-CEK purge or blob scan: ",[967,3031,3032],{},"{ reason: 'skipped-undeclared-sealed-cek' | 'skipped-undeclared-blob-scan', collection, count }",". Empty when ",[967,3035,2277],{}," is off (since ",[967,3038,3039],{},"0.3.0-pre.11",").",[2645,3042,3043,3047,3051],{},[2663,3044,3045],{},[967,3046,1863],{},[2663,3048,3049],{},[967,3050,2820],{},[2663,3052,3053,3054,3040],{},"Record-grain derived artifacts erased — materialized-view rows, derivation rows, same-id derived copies (since ",[967,3055,2173],{},[2645,3057,3058,3062,3066],{},[2663,3059,3060],{},[967,3061,1879],{},[2663,3063,3064],{},[967,3065,2820],{},[2663,3067,3068,3069,3040],{},"Aggregate-grain rollup targets recomputed without the forgotten contribution (since ",[967,3070,2173],{},[2645,3072,3073,3077,3081],{},[2663,3074,3075],{},[967,3076,1895],{},[2663,3078,3079],{},[967,3080,2847],{},[2663,3082,3083,3085,3086,3040],{},[967,3084,2865],{}," derived writes skipped because the target period is frozen — the aggregate temporarily retains the forgotten contribution, audited (since ",[967,3087,2173],{},[2645,3089,3090,3094,3098],{},[2663,3091,3092],{},[967,3093,1909],{},[2663,3095,3096],{},[967,3097,2847],{},[2663,3099,3100,3102,3103,3106,3107,3109,3110,3113,3114,3116],{},[967,3101,2865],{}," materialized-view output rows that survived erasure because their ",[967,3104,3105],{},"_materializedFrom"," ownership stamp could ",[950,3108,2908],{}," be decoded under the collection's default DEK (e.g. elevated above tier 0) — ownership ",[950,3111,3112],{},"unconfirmed",". Surfaced, never silently skipped (since ",[967,3115,2214],{},", #785).",[2645,3118,3119,3123,3127],{},[2663,3120,3121],{},[967,3122,1923],{},[2663,3124,3125],{},[967,3126,2847],{},[2663,3128,3129,3131,3132,3135,3136,3139,3140,3116],{},[967,3130,2865],{}," MV output rows that ",[950,3133,3134],{},"did"," decode and ownership-stamp-match, but whose erasure was declined by the tier-elevation gate — ownership ",[950,3137,3138],{},"confirmed",", a live tier-holder-decryptable copy deliberately retained (since ",[967,3141,2214],{},[2645,3143,3144,3148,3152],{},[2663,3145,3146],{},[967,3147,1937],{},[2663,3149,3150],{},[967,3151,2820],{},[2663,3153,3154,3155,3157,3158,3160,3161,3040],{},"Referencing records tombstoned via a ",[959,3156,731],{"href":732}," field's ",[967,3159,2257],{}," reference semantics (since ",[967,3162,2173],{},[2645,3164,3165,3169,3173],{},[2663,3166,3167],{},[967,3168,1953],{},[2663,3170,3171],{},[967,3172,2820],{},[2663,3174,3175,3176,3160,3178,3040],{},"Referencing fields cleared via a lookup field's ",[967,3177,2261],{},[967,3179,2173],{},[2645,3181,3182,3186,3190],{},[2663,3183,3184],{},[967,3185,1969],{},[2663,3187,3188],{},[967,3189,2847],{},[2663,3191,3192,3193,2258,3195,3197,3198,3040],{},"Lookup reference edges whose ",[967,3194,2257],{},[967,3196,2261],{}," propagation was skipped because the compare-key could not be resolved even from the live pre-shred backing row — reported, never silent (since ",[967,3199,2173],{},[2645,3201,3202,3206,3211],{},[2663,3203,3204],{},[967,3205,1983],{},[2663,3207,3208],{},[967,3209,3210],{},"LedgerEntry",[2663,3212,3213,3214,3216],{},"The single ",[967,3215,2758],{}," entry appended for this erasure.",[1358,3218,3220],{"id":3219},"vaultrebuildsubjectindex",[967,3221,2552],{},[1041,3223,3225],{"className":1043,"code":3224,"language":1045,"meta":1046,"style":1046},"vault.rebuildSubjectIndex(): Promise\u003Cnumber>\n",[967,3226,3227],{"__ignoreMap":1046},[1050,3228,3229,3231,3233,3235,3238,3240,3242,3244],{"class":1052,"line":1053},[1050,3230,2730],{"class":1064},[1050,3232,1001],{"class":1060},[1050,3234,2576],{"class":1170},[1050,3236,3237],{"class":1064},"(): ",[1050,3239,2740],{"class":1384},[1050,3241,1438],{"class":1060},[1050,3243,2820],{"class":1064},[1050,3245,2748],{"class":1060},[946,3247,3248,3249,3251],{},"Drops and rebuilds the encrypted subject index from the canonical records across every\ndeclared collection. Returns the number of distinct subjects re-indexed. Tombstoned\n(already-shredded) records contribute nothing — their body is gone. Throws\n",[967,3250,2768],{}," under the disabled sentinel.",[1358,3253,3255],{"id":3254},"other-exports","Other exports",[983,3257,3258,3282,3291],{},[986,3259,3260,3263,3264,3267,3268,3271,3272,3274,3275,3277,3278,3281],{},[967,3261,3262],{},"NO_FORGET"," — the disabled sentinel (",[967,3265,3266],{},"{ subjects: {} }","). Under it, ",[967,3269,3270],{},"vault.forget()"," and\n",[967,3273,2552],{}," throw ",[967,3276,2768],{},", no write hooks\nregister, and no collection is forced into ",[967,3279,3280],{},"perRecordKeys"," — non-adopters pay nothing.",[986,3283,3284,3287,3288,1001],{},[967,3285,3286],{},"SUBJECT_INDEX_COLLECTION"," — the reserved collection name, ",[967,3289,3290],{},"'_subject_index'",[986,3292,3293,3294,2177,3296,2177,3299,2177,3301,2177,3304,1001],{},"Types: ",[967,3295,2637],{},[967,3297,3298],{},"ForgetStrategy",[967,3300,2745],{},[967,3302,3303],{},"ScopedPurgeResidueNotice",[967,3305,3306],{},"SubjectRef",[941,3308,3310],{"id":3309},"limits-gotchas","Limits & gotchas",[983,3312,3313,3327,3336,3345,3354,3367],{},[986,3314,3315,2250,3321,3323,3324,3326],{},[950,3316,3317,3318,1001],{},"Requires ",[967,3319,3320],{},"withHistory()",[967,3322,996],{}," writes its erasure proof to the ledger; without a\nconfigured ",[967,3325,2775],{}," it throws instead of shredding.",[986,3328,3329,3332,3333,3335],{},[950,3330,3331],{},"Single-writer subject index."," Index maintenance is read-modify-write with no\ncompare-and-swap — it assumes noy-db's normal single-process write model. Two writers\nracing on the same subject can lose a ref; ",[967,3334,2552],{}," recovers it from\nthe canonical records.",[986,3337,3338,3341,3342,3344],{},[950,3339,3340],{},"Legacy (un-migrated) bodies are a completeness gap, not a failure."," A record whose body\nwas never migrated to a per-record CEK is still tombstoned, but its pre-shred ciphertext —\nif it reached a backup before migration — stays decryptable under the collection key. It's\nreported in ",[967,3343,1705],{},", not silently swallowed.",[986,3346,3347,3350,3351,3353],{},[950,3348,3349],{},"Idempotent."," Calling ",[967,3352,996],{}," again for an already-erased subject shreds nothing and\ndoes not throw.",[986,3355,3356,3362,3363,3366],{},[950,3357,3358,3359,1194],{},"A shredded record reads as ",[967,3360,3361],{},"null"," not as a tamper error — ",[967,3364,3365],{},"get()"," on a tombstoned id\nbehaves like the record never existed.",[986,3368,3369,3372,3373,3375,3376,3378,3379,3381,3382,3384,3385,2258,3387,3389],{},[950,3370,3371],{},"A referenced backing row refuses erasure first."," When the subject's record backs a declared\n",[959,3374,731],{"href":732}," field with the default ",[967,3377,2242],{}," semantics, ",[967,3380,996],{}," throws\n",[967,3383,2249],{}," before shredding anything — retire or re-point the referencing records\nfirst, or declare ",[967,3386,2257],{},[967,3388,2261],{}," on the lookup field.",[941,3391,3393],{"id":3392},"see-also","See also",[983,3395,3396,3406,3411,3419,3424,3434,3447,3452,3457,3462],{},[986,3397,3398,3401,3402],{},[959,3399,3400],{"href":598},"Services overview"," · ",[959,3403,3405],{"href":3404},"\u002Forientation","Orientation map",[986,3407,3408,3410],{},[959,3409,961],{"href":66}," — per-record CEKs and the crypto-shred mechanism in full",[986,3412,3413,3415,3416,3418],{},[959,3414,697],{"href":698}," — the change ledger ",[967,3417,996],{}," writes its erasure proof to",[986,3420,3421,3423],{},[959,3422,621],{"href":622}," — blob attachments and how their content keys are shredded",[986,3425,3426,3428,3429,2265,3431,3433],{},[959,3427,633],{"href":634}," — sealed fields and how ",[967,3430,1791],{},[967,3432,1835],{}," are classified",[986,3435,3436,3438,3439,3441,3442,2265,3444,3446],{},[959,3437,824],{"href":825}," — the ",[967,3440,2976],{}," host delivery envelopes ",[967,3443,1806],{},[967,3445,1821],{}," refer to",[986,3448,3449,3451],{},[959,3450,864],{"href":865}," — how the shred propagates to peers, and why a tombstone is terminal",[986,3453,3454,3456],{},[959,3455,731],{"href":732}," — reference semantics that gate or propagate an erasure of a backing row",[986,3458,3459,3461],{},[959,3460,637],{"href":638}," — the dependency graph behind the derived-residue fan-out",[986,3463,3464,3465,1001],{},"Proven by showcase ",[959,3466,3470],{"href":3467,"rel":3468},"https:\u002F\u002Fgithub.com\u002Fnoy-db\u002Fdocs\u002Fblob\u002Fmain\u002Fshowcases\u002Fsrc\u002F130-with-forget.showcase.test.ts",[3469],"nofollow",[967,3471,3472],{},"130-with-forget",[3474,3475,3476],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":1046,"searchDepth":1105,"depth":1105,"links":3478},[3479,3480,3481,3482,3489,3495,3496],{"id":943,"depth":1084,"text":944},{"id":980,"depth":1084,"text":981},{"id":1021,"depth":1084,"text":1022},{"id":1355,"depth":1084,"text":1356,"children":3483},[3484,3485,3486,3488],{"id":1360,"depth":1105,"text":1361},{"id":2137,"depth":1105,"text":2138},{"id":2273,"depth":1105,"text":3487},"Scope the purge with scopedPurge",{"id":2541,"depth":1105,"text":2542},{"id":2587,"depth":1084,"text":2588,"children":3490},[3491,3492,3493,3494],{"id":2591,"depth":1105,"text":2594},{"id":2718,"depth":1105,"text":973},{"id":3219,"depth":1105,"text":2552},{"id":3254,"depth":1105,"text":3255},{"id":3309,"depth":1084,"text":3310},{"id":3392,"depth":1084,"text":3393},null,"GDPR-style right-to-erasure: `vault.forget(subjectId)` crypto-shreds every matching record — live body, history, side-cars — leaving a provable ledger entry.","md",{},"service",{"title":685,"description":3498},"stable","important","35sy89kpvgBoBHWYrVUaCfTCbHNfcixeXQHxiTIPcIM",{"data":3507,"body":3508},{},{"type":3509,"children":3510},"root",[3511],{"type":3512,"tag":946,"props":3513,"children":3514},"element",{},[3515],{"type":3512,"tag":967,"props":3516,"children":3518},{"className":3517},[],[3519],{"type":3520,"value":3521},"text","with-audit",{"data":3523,"body":3524},{},{"type":3509,"children":3525},[3526],{"type":3512,"tag":946,"props":3527,"children":3528},{},[3529],{"type":3512,"tag":967,"props":3530,"children":3532},{"className":3531},[],[3533],{"type":3520,"value":1100},{"data":3535,"body":3536},{},{"type":3509,"children":3537},[3538],{"type":3512,"tag":946,"props":3539,"children":3540},{},[3541],{"type":3512,"tag":967,"props":3542,"children":3544},{"className":3543},[],[3545],{"type":3520,"value":1000},1791896587764]